Dear Aram,
On 08/11/2014 11:12 AM, Aram Ebtekar wrote:
> For now, I'd like to make the simplest reasonable A*-based planner that
> can handle IPC domains, so that I'd be able to easily understand and
> edit the code. I'm not sure if it's feasible to write my own PDDL
> parser, so I thought it best to use an existing one as a blackbox.
> Although the full PDDL language is quite complex, the official page of
> the IPC2014 deterministic sequential satisficing track states that only
> the following core features need be supported: STRIPS, action costs,
> negative preconditions, and conditional effects. I find these easy
> enough to understand; I'd like to know just how to extract them into
> simple data structures accessible from C++ code, if possible. It seems
> to me that Fast Downward does something like this, but I don't
> understand the details.
Fast Downward does not have a direct PDDL to C++ parser. The planner
first runs a translation phase (implemented in python) that reads the
PDDL specification and transforms it from the propositional PDDL to
SAS+, where variables are not only true or false but can have several
values. For example, there can be a variable location-of-package with a
domain {in-truck1, in-truck-2, at-location-1, at-location2}. The
resulting SAS+ task is written to an output file that is then read by
another preprocessing component, which is written in C++. There the task
is read into data structures that could be suitable for you, but it is
not conditional STRIPS but conditional SAS+.
If you want to get an easy start to planning you could also have a look
on Pyperplan. It is a planner that has been written for teaching
purposes so it features a very clean code structure. However, since it
is written in python, it is slower than most competition planners. You
find it at:
https://bitbucket.org/malte/pyperplan
If you want to enter the competition, it takes probably much fewer time
to learn how Fast Downward (or some other existing planner) can be
extended than to implement a competitive planner from scratch. For
example, Fast Downward features a plugin mechanism that makes it very
easy to add new heuristics. For a very simple example, you could have a
look on at file goal_count_heuristic.cc in src/search.
Cheers,
Gabi