Modules and PlannersLink

PlannersLink

Planners by default use the FD parser. A version of each planner exist using FF parser instead. 3 planners where submitted to Satisficing and Agile track in IPC 2014.

They support action costs and Conditional Effects. See Documentation#Parsers_Supported to know how to tell the parser to ignore or account for action costs.

FFLink

FF planner as described in JAIR 2001. Goal agenda is not computed by default.

  • FF-parser
planners/ff-ffparser

Command: ./ff --domain <domain_file> --problem <problem_file> --output <plan_output>

Options::
  --help                Show help message
  --domain arg          Input PDDL domain description
  --problem arg         Input PDDL problem description
  --output arg          Output file for plan

BFS_fLink

Greedy Best First Search Planner that uses f(n) = novelty(n), breaking ties with lm_count(n) and h_rel_plan(n). described in Lipovetzky et al. at ECAI 2012

  • FD-parser
planners/bfs_f

Command: 
./bfs.py <domain_file> <problem_file> <plan_output>

Ignores costs:
./bfs_f_unit_cost.py  <domain_file> <problem_file> <plan_output>

Options specified inside the script
  • FF-parser
planners/bfs_f-ffparser

Command: ./bfs_f --domain <domain_file> --problem <problem_file> --output <plan_output>

Options::
  --help                          Show help message
  --domain arg                    Input PDDL domain description
  --problem arg                   Input PDDL problem description
  --bound arg (=2)                Max width w for novelty (default 2)
  --output arg                    Output file for plan
  --one-ha-per-fluent arg (=0)    Extract only one helpful action per fluent
  --use-original-ff-heur arg (=0) Use original FF heuristic computed by layers

Anytime BFS_fLink

Runs First SIW, then BFS_f with the bound found by SIW, and finally an anytime version using RWA* described in IPC 2014 Booklet

  • FD-parser
planners/at_bfs_f

Command: 
./at_bfs.py <domain_file> <problem_file> <plan_output>

./at_bfs_f-2-no-bfs_f.py <domain_file> <problem_file> <plan_output>

./at_bfs_f-2-no-siw.py <domain_file> <problem_file> <plan_output>

./at_bfs_f-no-siw-no-bfs_f.py <domain_file> <problem_file> <plan_output>

Options specified inside the script
  • FF-parser
planners/at_bfs_f-ffparser

Command: ./at_bfs_f --domain <domain_file> --problem <problem_file> --output <plan_output>

Options::
  --help                       Show help message
  --domain arg                 Input PDDL domain description
  --problem arg                Input PDDL problem description
  --iw-bound arg (=2)          Max width w for SIW (default 2)
  --max-novelty arg (=2)       Max width w for novelty heuristic in BFS(f) 
                               (default 2)
  --output arg                 Output file for plan
  --one-ha-per-fluent arg (=0) Extract only one helpful action per fluent
  --disable-siw arg (=0)       Disable SIW stage
  --disable-bfs-f arg (=0)     Disable BFS(f) stage

Blind & Width-Based Search PlannersLink

IWLink

Iterative Width is a blind search planner that exploits the low width of classical benchmark when goals are atomic. For conjuctive goals look at SIW, SIW+ or DFS+ described in Lipovetzky et al. at ECAI 2012

  • FD-parser
planners/iw

Command: 
./iw.py <domain_file> <problem_file> <plan_output>

Options specified inside the script
  • FF-parser
planners/iw-ffparser

Command: ./iw --domain <domain_file> --problem <problem_file> --output <plan_output>

Options::
  --help                Show help message
  --domain arg          Input PDDL domain description
  --problem arg         Input PDDL problem description
  --bound arg (=1)      Max width w for IW(w)
  --atomic arg (=1)     Runs IW(w) over each atomic goal of the problem (bool)
  --output arg          Output plan file

IW PlusLink

IW+ relaxes IW novelty pruning. described in Lipovetzky et al. at ECAI 2014

  • FD-parser
planners/iw

Command: 
./rp_iw.py <domain_file> <problem_file> <plan_output>

Options specified inside the script
  • FF-parser
planners/iw-ffparser

Command: ./rp_iw --domain <domain_file> --problem <problem_file> --output <plan_output>

Options::
  --help                Show help message
  --domain arg          Input PDDL domain description
  --problem arg         Input PDDL problem description
  --bound arg (=2)      Max width w for IW(w)
  --output arg          Output plan file

SIWLink

Serialized Iterative Width is a blind search planner competitive that exploits the low width of classical benchmark through IW and simple goal serialization described in Lipovetzky et al. at ECAI 2012

  • FD-parser
planners/siw

Command: 
./siw.py <domain_file> <problem_file> <plan_output>

Ignores costs:
./siw_unit_cost.py  <domain_file> <problem_file> <plan_output>

Options specified inside the script
  • FF-parser
planners/siw-ffparser

Command: ./siw --domain <domain_file> --problem <problem_file> --output <plan_output>

Options::
  --help                Show help message
  --domain arg          Input PDDL domain description
  --problem arg         Input PDDL problem description
  --bound arg (=1)      Max width w for IW(w)
  --output arg          Output plan file

SIW PlusLink

SIW+ relaxes IW novelty pruning. Blind Search Planner with high performance, closer to FF over IPC\'11 benchmark described in Lipovetzky et al. at ECAI 2014

  • FD-parser
planners/siw_plus

Command: 
./siw_plus.py <domain_file> <problem_file> <plan_output>

Ignores costs:
./siw_plus_unit_cost.py  <domain_file> <problem_file> <plan_output>

Options specified inside the script
  • FF-parser
planners/siw_plus-ffparser

Command: ./siw_plus --domain <domain_file> --problem <problem_file> --output <plan_output>

Options::
  --help                Show help message
  --domain arg          Input PDDL domain description
  --problem arg         Input PDDL problem description
  --bound arg (=1)      Max width w for IW(w)
  --output arg          Output plan file

DFS PlusLink

DFS+ Extends SIW+ Goal serialization. Blind Search planner with high performance, closer to LAMA\'11 and BFS_f over IPC\'11 benchmark described in Lipovetzky et al. at ECAI 2014

  • FD-parser
planners/dfs_plus

Command: 
./dfs_plus.py <domain_file> <problem_file> <plan_output>

Ignores costs:
./dfs_plus_unit_cost.py  <domain_file> <problem_file> <plan_output>

Options specified inside the script
  • FF-parser
planners/dfs_plus-ffparser

Command: ./dfs_plus --domain <domain_file> --problem <problem_file> --output <plan_output>

Options::
  --help                Show help message
  --domain arg          Input PDDL domain description
  --problem arg         Input PDDL problem description
  --bound arg (=2)      Max width w for IW(w)
  --output arg          Output plan file

Generic BFS with Optional HeuristicsLink

By default BFS is set to GBFS

  • FF-parser
planners/generic-best_first-ffparser

Command: ./bfs --domain <domain_file> --problem <problem_file> --output <plan_output>

Options::
  --help                Show help message
  --domain arg          Input PDDL domain description
  --problem arg         Input PDDL problem description
  --heuristic arg (=1)  1: H_add (default 1)
                        2: H_add_Rp
                        3: H_max_Rp
                        4: H_add_FF_Rp
                        5: H_max_FF_Rp
                        6: H_layered_FF_Rp ( FF_*, as in Journal Paper)
  --anytime arg (=0)    Anytime (default False)
  --output arg          Output file for plan

Search Algorithms ImplementedLink

All Search Algorithms implement Forward Search by accessing

 interfaces/agnostic/fwd_search_prob.hxx

decoupling the search algrotihm from successor generation, applicability function, etc. Intended to easily run this algorithms on backward search.

No use of heuristics.

 include/aptk/brfs.hxx

described in Lipovetzky et al. at ECAI 2012, and Lipovetzky et al. at ECAI 2014

Iterated WidthLink

Breadth-First search with novelty pruning.

 include/aptk/iw.hxx

Iterated Width PlusLink

Breadth-First search with a relaxed novelty pruning.

 include/aptk/rp_iw.hxx

Serialized Iterated WidthLink

Uses iterated width to both solve and serialize the goals. The serialization is a form of Hill-Climbing over the set of goals

 include/aptk/siw.hxx

Serialized Iterated Width PlusLink

Uses iterated width plus to both solve and serialize the goals. The serialization is a form of Hill-Climbing over the set of goals

 include/aptk/siw_plus.hxx

Depth-first Search WidthLink

Uses iterated width to both solve and serialize the goals. DFS in the space of serialization induced by bounded Iterative Width.

 include/aptk/dfs_plus.hxx
 include/aptk/at_gbfs.hxx
 include/aptk/at_bfs.hxx
Any-time Best First Search with two open listsLink
 include/aptk/at_bfs_dq.hxx

The PREFERRED list, for nodes generated by preferred operators, and the OPEN list, for the rest.

Best First Search with three open lists and two heuristic estimatorsLink
include/aptk/at_bfs_dq_mh.hxx

The search frontier is split into three lists:

  • BOTH: holds nodes generated by actions deemed as \'preferred\' by both heuristic

estimators

  • PREFERRED: holds nodes generated by actions deemed as \'preferred\' by the

primary heuristic estimator

  • OPEN: holds nodes generated by actions not deemed as \'preferred\' by the primary

heuristic estimator

Any-time Weighted A*Link

Weight W decaying according to fixed decay parameter. Variants include single queue and multiple queue (either with one or two heuristic estimators).

include/aptk/at_wbfs.hxx
include/aptk/at_wbfs_dq.hxx
include/aptk/at_wbfs_dq_mh.hxx
Any-time Restarting Weighted A*Link

described in Ricther et al. at ICAPS 2010 with weight W decaying according to fixed decay parameter. Variants include single queue and multiple queue (either with one or two heuristic estimators).

include/aptk/at_rwbfs.hxx
include/aptk/at_rwbfs_dq.hxx
include/aptk/at_rwbfs_dq_mh.hxx
The Deadline Aware Search algorithmLink

described in Dionne et al. at SOCS 2011

include/aptk/das.hxx

EHCLink

Enforced Hill Climbing as in JAIR 2001.

include/aptk/ff_ehc.hxx

Heuristics ImplementedLink

Critical PathsLink

h\^1Link

interfaces/agnostic/h_1.hxx

h\^2Link

interfaces/agnostic/h_2.hxx

Delete RelaxationsLink


h_max / h_addLink

Same implementation as h\^1. h_add and h_max differ only through the evaluation function, which can be specified. Dijskstra Based implementation

interfaces/agnostic/h_1.hxx

Relaxed Planning Graph implementation

interfaces/agnostic/layered_h_max.hxx

h\^ffLink

Original FF heuristic computation from JAIR 2001 paper

interfaces/agnostic/ff_rp_heuristic.hxx

Relaxed Planning Graph HeuristicsLink

Computes relaxed plan heuristics backwards from the goal based on best_supporters function. Keyder et al. ECAI 2008 h_1 and h_add natively define best supporters, although other heuristics could be used too.

interfaces/agnostic/rp_heuristic.hxx

h\^CLink

Semi Relaxed Heuristic by introducing special fluents that explicitly represent conjunctions of fluents Keyder et al. ICAPS 2012

interfaces/agnostic/h_C.hxx

Counting heuristicLink

Unachieved GoalsLink

Counts the number of unachieved goals

interfaces/agnostic/h_unsat.hxx

Unachieved LandmarksLink

Counts the number of unachieved landmarks. Landmark graph is built from And/Or Graphs Keyder et al. ECAI 2010

interfaces/agnostic/landmark_count.hxx

NoveltyLink

Counts the size of the smallest tuple made true by a given state for the first time in the search Lipovetzky et al. at ECAI 2012

interfaces/agnostic/novelty.hxx

Novelty PlusLink

Relaxed versioin of Novelty Lipovetzky et al. at ECAI 2014

interfaces/agnostic/novelty.hxx

ReachabilityLink

Naive implementation for testing reachability

interfaces/agnostic/reachability.hxx

Watchlist-based implementation for testing reachability:

interfaces/agnostic/watch_list_succ_gen.hxx

(see the \"is_reachable(const State&)\" method)

Parsers SupportedLink

We currently ported FF-Parser and FD-Parser

FF ParserLink

FF-Parser is based on bison and flex. It\'s compiled as an independent library in

external/libff

and connected to the toolkit in

interfaces/ff-wrapped/ff_to_aptk.hxx
interfaces/ff-wrapped/ff_to_aptk.hxx

creating a STRIPS Problem instance.

Action costs can be ignored by setting the ignore_action_costs = true

void get_problem_description(  std::string pddl_domain_path,
                    std::string pddl_problem_path,
                    STRIPS_Problem& strips_problem,
                    bool ignore_action_costs = false,
                    bool get_detailed_fluent_names = false );

aptk::FF_Parser::get_problem_description(...,true)

FD-parserLink

FD-Parser is written in python. It\'s located in

external/fd

and connected to the toolkit in

planners/python/agnostic/py_strips_prob.hxx
planners/python/agnostic/py_strips_prob.cxx

creating a STRIPS Problem instance.

Action costs can be ignored by setting in your python script

task.ignore_action_costs = True

as it\'s done for example in

/planners/bfs_f/bfs_f_unit_cost.py

Problem Representation (STRIPS Model)Link

STRIPS Problem and useful information like mutexes (if computed)Link

interfaces/agnostic/strips_prob.cxx  
interfaces/agnostic/strips_prob.hxx

STRIPS StatesLink

interfaces/agnostic/strips_state.cxx    
interfaces/agnostic/strips_state.hxx

Actions and FluentsLink

interfaces/agnostic/fluent.cxx  
interfaces/agnostic/fluent.hxx

interfaces/agnostic/action.cxx  
interfaces/agnostic/action.hxx

interfaces/agnostic/cond_eff.cxx    
interfaces/agnostic/cond_eff.hxx

Successor GeneratorLink

interfaces/agnostic/succ_gen.cxx
interfaces/agnostic/succ_gen.hxx

Running ExperimentsLink

Scripts for running experiments, profiling, benchmarking and creating tables with Coverage, IPC Time and Quality Score are available

benchmarks/run.py

# Dependencies/Prerequisites:
#   - valgrind
#   - timeout
#   - dot (graphviz)
#   - krtoolkit

 Usage:
    python run.py profile <executable> <ipc directory> [<domain pddl> <problem pddl>]
    python run.py benchmark <executable> <ipc directory> <results directory> [<domain>]
    python run.py compare <directories with , separated> <ipc directory>
    python run.py clean

Some Benchmark domains can be found at

benchmarks/ipc-2006/
benchmarks/ipc-2011/
benchmarks/ipc-2014/

To use run.py script over new sets of benchmarks instead of specific domains, edit

benchmarks/domains.py

ExamplesLink

FF-Interface ExampleLink

The example for the 'ff parser' interface can be found on

* examples/ff-interface

FD-Interface ExampleLink

The example for the 'fD parser' interface can be found on

* examples/fd-interface

This is a very simple example that shows the basics for interfacing lwaptk with Fast Downward parser. In order to build the example issue the command:

$ ./build.py

and to run the example:

$ ./parser.py <path to pddl domain file> <path to pddl problem file>

if everything is working as it should, you should see FD parsing output on the standard output, as well as a dump of the grounded actions.

Note that this will copy the folder externals/fd to the local directory, so DO NOT add it to the repository. If you need to do customize Fast Downward parsing scripts, just edit build.py to avoid it clobbering your local copy.

Agnostic Interface ExamplesLink

The examples for the 'planner agnostic' interface can be found on

examples/agnostic-examples

and cover the following topics:

Assembling STRIPS problem programaticallyLink

Shows how to define a STRIPS planning problem programatically.

* agnostic-examples/assembling_strips_problems

Successor GeneratorsLink

Discusses and compares different ways of generating successors during search.

* agnostic-examples/successor_generation

Open ListsLink

Discusses and compares different ways of creating open lists for your search algortithm.

* agnostic-examples/fibonacci_open

BFS engine variationsLink

Shows how can one assemble available components to deliver a planner built around a BFS search engine, with multiple queues and secondary heuristics, on a parametrized planning task.

* agnostic-examples/bfs
* agnostic-examples/bfs-double-queue 
* agnostic-examples/bfs-double-queue-secondary-heuristic

BFS + h_max (greedy|delayed|anytime) + FF-parserLink

Shows how to assemble a classic planner: best-first search using h_max with multiple modes: greedy/delayed/anytime, over a task specified in PDDL and parsed by FF-parser

* agnostic-examples/bfs-hmax

WA* variations + landmarksLink

Shows how can one assemble available components to deliver a planner built around a WA* search engine, with multiple queues and secondary heuristics, on a parametrized planning task. Illustrates as well how to use landmark count heurstic.

* agnostic-examples/wa-planner
* agnostic-examples/rwa-planner

Deadline Aware Search engineLink

Shows how can one assemble available components to deliver a planner built around Deadline Aware Search.

* agnostic-examples/das

Breadth-First search + FF-parserLink

Shows how can one assemble available components to deliver a blind search planner.

* agnostic-examples/brfs

h_C compilations + FF-parserLink

Shows how can one use the \Pi_C compilation to compute the h_C heuristic. Keyder et al. ICAPS 2012

* agnostic-examples/h_C_heuristics

Replanner (changing init and goal situation on the fly)Link

Shows how to create a replanner. It illustrates how to change the initial and goal states without having to parse the problem again, solving it with bfs+h_max. In the example we change the initial and goal situations by applying the first action of the current plan to progress the initial state, and last action of the plan to regress the goal.

* agnostic-examples/replanner

Width-Based algorithm + FD parserLink

Shows how SIW is implemented, using novelty function and FD parser

* planners/siw