Differences between revisions 41 and 53 (spanning 12 versions)
Revision 41 as of 2023-07-20 10:41:42
Size: 55157
Editor: XmlRpcBot
Comment:
Revision 53 as of 2024-01-11 22:10:51
Size: 55314
Editor: XmlRpcBot
Comment:
Deletions are marked like this. Additions are marked like this.
Line 21: Line 21:
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
Language features supported:
    * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
    * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates

Supported l
anguage features:
Line 31: Line 33:
Properties:
Properties:
Line 36: Line 40:
Line 37: Line 42:
Line 38: Line 44:
Line 42: Line 49:

* ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
* {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
Language features supported:
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
     * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
   
* {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates

Supported l
anguage features:
Line 54: Line 62:
Properties:
Properties:
Line 59: Line 69:
Line 60: Line 71:
Line 64: Line 76:

* ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
* {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
Language features supported:
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
     * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
   
* {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates

Supported l
anguage features:
Line 76: Line 89:
Properties:
Properties:
Line 81: Line 96:
== Additive CEGAR heuristic ==
See the paper introducing Counterexample-guided Abstraction Refinement (CEGAR) for classical planning:

== Additive Cartesian CEGAR heuristic ==

See the paper introducing counterexample-guided Cartesian abstraction refinement (CEGAR) for classical planning:
Line 85: Line 102:
 [[https://ai.dmi.unibas.ch/papers/seipp-helmert-icaps2013.pdf|Counterexample-guided Cartesian Abstraction Refinement]].<<BR>>
 In ''Proceedings of the 23rd International Conference on Automated Planning and Scheduling (ICAPS 2013)'', pp. 347-351. AAAI Press, 2013.
[[https://ai.dmi.unibas.ch/papers/seipp-helmert-icaps2013.pdf|Counterexample-guided Cartesian Abstraction Refinement]].<<BR>>
In ''Proceedings of the 23rd International Conference on Automated Planning and Scheduling (ICAPS 2013)'', pp. 347-351. AAAI Press, 2013.
Line 91: Line 108:
 [[https://ai.dmi.unibas.ch/papers/seipp-helmert-icaps2014.pdf|Diverse and Additive Cartesian Abstraction Heuristics]].<<BR>>
 In ''Proceedings of the 24th International Conference on Automated Planning and Scheduling (ICAPS 2014)'', pp. 289-297. AAAI Press, 2014.
[[https://ai.dmi.unibas.ch/papers/seipp-helmert-icaps2014.pdf|Diverse and Additive Cartesian Abstraction Heuristics]].<<BR>>
In ''Proceedings of the 24th International Conference on Automated Planning and Scheduling (ICAPS 2014)'', pp. 289-297. AAAI Press, 2014.
Line 97: Line 114:
 [[https://ai.dmi.unibas.ch/papers/seipp-helmert-jair2018.pdf|Counterexample-Guided Cartesian Abstraction Refinement for Classical Planning]].<<BR>>
 ''Journal of Artificial Intelligence Research'' 62:535-577. 2018.
[[https://ai.dmi.unibas.ch/papers/seipp-helmert-jair2018.pdf|Counterexample-Guided Cartesian Abstraction Refinement for Classical Planning]].<<BR>>
''Journal of Artificial Intelligence Research'' 62:535-577. 2018.
Line 109: Line 126:
  * {{{random}}}: select a random variable (among all eligible variables)
  * {{{min_unwanted}}}: select an eligible variable which has the least unwanted values (number of values of v that land in the abstract state whose h-value will probably be raised) in the flaw state
  * {{{max_unwanted}}}: select an eligible variable which has the most unwanted values (number of values of v that land in the abstract state whose h-value will probably be raised) in the flaw state
  * {{{min_refined}}}: select an eligible variable which is the least refined (-1 * (remaining_values(v) / original_domain_size(v))) in the flaw state
  * {{{max_refined}}}: select an eligible variable which is the most refined (-1 * (remaining_values(v) / original_domain_size(v))) in the flaw state
  * {{{min_hadd}}}: select an eligible variable with minimal h^add(s_0) value over all facts that need to be removed from the flaw state
  * {{{max_hadd}}}: select an eligible variable with maximal h^add(s_0) value over all facts that need to be removed from the flaw state
    * {{{random}}}: select a random variable (among all eligible variables)
     * {{{min_unwanted}}}: select an eligible variable which has the least unwanted values (number of values of v that land in the abstract state whose h-value will probably be raised) in the flaw state
     * {{{max_unwanted}}}: select an eligible variable which has the most unwanted values (number of values of v that land in the abstract state whose h-value will probably be raised) in the flaw state
    * {{{min_refined}}}: select an eligible variable which is the least refined (-1 * (remaining_values(v) / original_domain_size(v))) in the flaw state
     * {{{max_refined}}}: select an eligible variable which is the most refined (-1 * (remaining_values(v) / original_domain_size(v))) in the flaw state
     * {{{min_hadd}}}: select an eligible variable with minimal h^add(s_0) value over all facts that need to be removed from the flaw state
     * {{{max_hadd}}}: select an eligible variable with maximal h^add(s_0) value over all facts that need to be removed from the flaw state
Line 118: Line 135:
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
    * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
     * {{{debug}}}: like verbose with additional debug output
Line 125: Line 142:
Language features supported:
Supported l
anguage features:
Line 129: Line 148:
Properties:
Properties:
Line 134: Line 155:
Line 135: Line 157:
Line 139: Line 162:
Line 142: Line 164:
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
Language features supported:
    * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
    * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates

Supported l
anguage features:
Line 152: Line 176:
Properties:
Properties:
Line 157: Line 183:
Line 158: Line 185:
Line 162: Line 190:

* ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
* {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
Language features supported:
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
     * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
   
* {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates

Supported l
anguage features:
Line 174: Line 203:
Properties:
Properties:
Line 179: Line 210:
Line 180: Line 212:
Line 184: Line 217:

* ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
* {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
Language features supported:
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
     * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
   
* {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates

Supported l
anguage features:
Line 196: Line 230:
Properties:
Properties:
Line 201: Line 237:
Line 202: Line 239:
Line 206: Line 244:
Line 209: Line 246:
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
Language features supported:
    * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
    * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates

Supported l
anguage features:
Line 219: Line 258:
Properties:
Properties:
Line 224: Line 265:
Line 225: Line 267:
Line 229: Line 272:

* ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
* {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
Language features supported:
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
     * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
   
* {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates

Supported l
anguage features:
Line 241: Line 285:
Properties:
Properties:
Line 246: Line 292:
Line 247: Line 294:
Formerly known as the admissible landmark heuristic.
See the papers

 * Erez Karpas and Carmel Domshlak.<<BR>>
 [[https://www.ijcai.org/Proceedings/09/Papers/288.pdf|Cost-Optimal Planning with Landmarks]].<<BR>>
 In ''Proceedings of the 21st International Joint Conference on Artificial Intelligence (IJCAI 2009)'', pp. 1728-1733. AAAI Press, 2009.

and

 * Emil Keyder and Silvia Richter and Malte Helmert.<<BR>>
 [[https://ai.dmi.unibas.ch/papers/keyder-et-al-ecai2010.pdf|Sound and Complete Landmarks for And/Or Graphs]].<<BR>>
 In ''Proceedings of the 19th European Conference on Artificial Intelligence (ECAI 2010)'', pp. 335-340. IOS Press, 2010.

{{{
landmark_cost_partitioning(lm_factory, pref=false, verbosity=normal, transform=no_transform(), cache_estimates=true, optimal=false, alm=true, lpsolver=cplex)

Landmark progression is implemented according to the following paper:

 * Clemens Büchner, Thomas Keller, Salomé Eriksson and Malte Helmert.<<BR>>
[[https://ai.dmi.unibas.ch/papers/buechner-et-al-icaps2023.pdf|Landmarks Progression in Heuristic Search]].<<BR>>
In ''Proceedings of the Thirty-Third International Conference on Automated Planning and Scheduling (ICAPS 2023)'', pp. 70-79. AAAI Press, 2023.

{{{
landmark_cost_partitioning(lm_factory, pref=false, prog_goal=true, prog_gn=true, prog_r=true, verbosity=normal, transform=no_transform(), cache_estimates=true, cost_partitioning=uniform, alm=true, lpsolver=cplex)
Line 265: Line 306:
 * ''pref'' (bool): identify preferred operators (see [[OptionCaveats#Using_preferred_operators_with_landmark_heuristics|Using preferred operators with landmark heuristics]])
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
 * ''optimal'' (bool): use optimal (LP-based) cost sharing
 * ''pref'' (bool): enable preferred operators (see note below)
 * ''prog_goal'' (bool): Use goal progression.
 * ''prog_gn'' (bool): Use greedy-necessary ordering progression.
 * ''prog_r'' (bool): Use reasonable ordering progression.
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
     * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
     * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
 * ''cost_partitioning'' ({optimal, uniform}): strategy for partitioning operator costs among landmarks
     * {{{optimal}}}: use optimal (LP-based) cost partitioning
     * {{{uniform}}}: partition operator costs uniformly among all landmarks achieved by that operator
Line 276: Line 322:
  * {{{cplex}}}: commercial solver by IBM
  * {{{soplex}}}: open source solver by ZIB
'''Note:''' to use an LP solver, you must build the planner with LP support. See [[LPBuildInstructions|LPBuildInstructions]].
    * {{{cplex}}}: commercial solver by IBM
     * {{{soplex}}}: open source solver by ZIB

'''Note:''' to use an LP solver, you must build the planner with LP support. See [[https://github.com/aibasel/downward/blob/main/BUILD.md|build instructions]].
Line 284: Line 331:
'''Optimal Cost Partitioning:''' To use {{{optimal=true}}}, you must build the planner with LP support. See [[LPBuildInstructions|LPBuildInstructions]].

'''Preferred operators:''' Preferred operators should not be used for optimal planning. We allow computing preferred operators for this heuristic because it could be used for satisficing planning where preferred operators might improve performance (not tested). See [[Doc/Evaluator#Landmark_sum_heuristic|Landmark sum heuristic]] for more information on how our implementation of preferred operators differs from the description in the literature.

Language features supported:
'''Optimal Cost Partitioning:''' To use {{{cost_partitioning=optimal}}}, you must build the planner with LP support. See [[https://github.com/aibasel/downward/blob/main/BUILD.md|build instructions]].

'''Preferred operators:''' Preferred operators should not be used for optimal planning. See [[Doc/Evaluator#Landmark_sum_heuristic|Landmark sum heuristic]] for more information on using preferred operators; the comments there also apply to this heuristic.

Supported language features:
Line 292: Line 340:
Properties:
Properties:
Line 297: Line 347:
Line 298: Line 349:
Formerly known as the landmark heuristic or landmark count heuristic.
See the papers

 * Silvia Richter, Malte Helmert and Matthias Westphal.<<BR>>
 [[https://ai.dmi.unibas.ch/papers/richter-et-al-aaai2008.pdf|Landmarks Revisited]].<<BR>>
 In ''Proceedings of the 23rd AAAI Conference on Artificial Intelligence (AAAI 2008)'', pp. 975-982. AAAI Press, 2008.

and

 * Silvia Richter and Matthias Westphal.<<BR>>
 [[http://www.aaai.org/Papers/JAIR/Vol39/JAIR-3903.pdf|The LAMA Planner: Guiding Cost-Based Anytime Planning with Landmarks]].<<BR>>
 ''Journal of Artificial Intelligence Research'' 39:127-177. 2010.

{{{
landmark_sum(lm_factory, pref=false, verbosity=normal, transform=no_transform(), cache_estimates=true)

Landmark progression is implemented according to the following paper:

 * Clemens Büchner, Thomas Keller, Salomé Eriksson and Malte Helmert.<<BR>>
[[https://ai.dmi.unibas.ch/papers/buechner-et-al-icaps2023.pdf|Landmarks Progression in Heuristic Search]].<<BR>>
In ''Proceedings of the Thirty-Third International Conference on Automated Planning and Scheduling (ICAPS 2023)'', pp. 70-79. AAAI Press, 2023.

{{{
landmark_sum(lm_factory, pref=false, prog_goal=true, prog_gn=true, prog_r=true, verbosity=normal, transform=no_transform(), cache_estimates=true)
Line 316: Line 361:
 * ''pref'' (bool): identify preferred operators (see [[OptionCaveats#Using_preferred_operators_with_landmark_heuristics|Using preferred operators with landmark heuristics]])
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
 * ''pref'' (bool): enable preferred operators (see note below)
 * ''prog_goal'' (bool): Use goal progression.
 * ''prog_gn'' (bool): Use greedy-necessary ordering progression.
 * ''prog_r'' (bool): Use reasonable ordering progression.
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
     * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
     * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
Line 326: Line 375:
'''Preferred operators:''' Our implementation to compute preferred operators based on landmarks differs from the description in the literature (see reference above).The original implementation computes two kinds of preferred operators:
'''Preferred operators:''' Computing preferred operators is *only enabled* when setting pref=true because it has a nontrivial runtime cost. Using the heuristic for preferred operators without setting pref=true has no effect.
Our implementation to compute preferred operators based on landmarks differs from the description in the literature (see reference above).The original implementation computes two kinds of preferred operators:
Line 334: Line 383:
Language features supported: Supported language features:
Line 339: Line 388:
Properties:
Properties:
Line 344: Line 395:
Line 345: Line 397:
Line 349: Line 402:

* ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
* {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
Language features supported:
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
     * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
   
* {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates

Supported l
anguage features:
Line 361: Line 415:
Properties:
Properties:
Line 366: Line 422:
Line 367: Line 424:
Line 370: Line 428:
 [[https://ai.dmi.unibas.ch/papers/sievers-et-al-aaai2014.pdf|Generalized Label Reduction for Merge-and-Shrink Heuristics]].<<BR>>
 In ''Proceedings of the 28th AAAI Conference on Artificial Intelligence (AAAI 2014)'', pp. 2358-2366. AAAI Press, 2014.
[[https://ai.dmi.unibas.ch/papers/sievers-et-al-aaai2014.pdf|Generalized Label Reduction for Merge-and-Shrink Heuristics]].<<BR>>
In ''Proceedings of the 28th AAAI Conference on Artificial Intelligence (AAAI 2014)'', pp. 2358-2366. AAAI Press, 2014.
Line 376: Line 434:
 [[https://ai.dmi.unibas.ch/papers/sievers-helmert-jair2021.pdf|Merge-and-Shrink: A Compositional Theory of Transformations of Factored Transition Systems]].<<BR>>
 ''Journal of Artificial Intelligence Research'' 71:781-883. 2021.
[[https://ai.dmi.unibas.ch/papers/sievers-helmert-jair2021.pdf|Merge-and-Shrink: A Compositional Theory of Transformations of Factored Transition Systems]].<<BR>>
''Journal of Artificial Intelligence Research'' 71:781-883. 2021.
Line 382: Line 440:
 [[https://ai.dmi.unibas.ch/papers/sievers-et-al-icaps2016.pdf|An Analysis of Merge Strategies for Merge-and-Shrink Heuristics]].<<BR>>
 In ''Proceedings of the 26th International Conference on Automated Planning and Scheduling (ICAPS 2016)'', pp. 294-298. AAAI Press, 2016.
[[https://ai.dmi.unibas.ch/papers/sievers-et-al-icaps2016.pdf|An Analysis of Merge Strategies for Merge-and-Shrink Heuristics]].<<BR>>
In ''Proceedings of the 26th International Conference on Automated Planning and Scheduling (ICAPS 2016)'', pp. 294-298. AAAI Press, 2016.
Line 388: Line 446:
 [[https://ai.dmi.unibas.ch/papers/sievers-socs2018.pdf|Merge-and-Shrink Heuristics for Classical Planning: Efficient Implementation and Partial Abstractions]].<<BR>>
 In ''Proceedings of the 11th Annual Symposium on Combinatorial Search (SoCS 2018)'', pp. 90-98. AAAI Press, 2018.
[[https://ai.dmi.unibas.ch/papers/sievers-socs2018.pdf|Merge-and-Shrink Heuristics for Classical Planning: Efficient Implementation and Partial Abstractions]].<<BR>>
In ''Proceedings of the 11th Annual Symposium on Combinatorial Search (SoCS 2018)'', pp. 90-98. AAAI Press, 2018.
Line 396: Line 454:
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
    * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
     * {{{debug}}}: like verbose with additional debug output
Line 411: Line 469:
Line 419: Line 478:
merge_and_shrink(shrink_strategy=shrink_bisimulation(greedy=false),merge_strategy=merge_sccs(order_of_sccs=topological,merge_selector=score_based_filtering(scoring_functions=[goal_relevance,dfp,total_order])),label_reduction=exact(before_shrinking=true,before_merging=false),max_states=50k,threshold_before_merge=1)
}}}

Language features supported:
merge_and_shrink(shrink_strategy=shrink_bisimulation(greedy=false),merge_strategy=merge_sccs(order_of_sccs=topological,merge_selector=score_based_filtering(scoring_functions=[goal_relevance(),dfp(),total_order()])),label_reduction=exact(before_shrinking=true,before_merging=false),max_states=50k,threshold_before_merge=1)
}}}

Supported language features:
Line 427: Line 486:
Properties:
Properties:
Line 432: Line 493:
Line 433: Line 495:
Line 436: Line 499:
 [[http://www.aaai.org/ocs/index.php/ICAPS/ICAPS14/paper/view/7892/8031|LP-based Heuristics for Cost-optimal Planning]].<<BR>>
 In ''Proceedings of the Twenty-Fourth International Conference on Automated Planning and Scheduling (ICAPS 2014)'', pp. 226-234. AAAI Press, 2014.
[[http://www.aaai.org/ocs/index.php/ICAPS/ICAPS14/paper/view/7892/8031|LP-based Heuristics for Cost-optimal Planning]].<<BR>>
In ''Proceedings of the Twenty-Fourth International Conference on Automated Planning and Scheduling (ICAPS 2014)'', pp. 226-234. AAAI Press, 2014.
Line 446: Line 509:
  * {{{cplex}}}: commercial solver by IBM
  * {{{soplex}}}: open source solver by ZIB
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
'''Note:''' to use an LP solver, you must build the planner with LP support. See [[LPBuildInstructions|LPBuildInstructions]].

Language features supported:
    * {{{cplex}}}: commercial solver by IBM
     * {{{soplex}}}: open source solver by ZIB
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
     * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
    * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates

'''Note:''' to use an LP solver, you must build the planner with LP support. See [[https://github.com/aibasel/downward/blob/main/BUILD.md|build instructions]].

Supported language features:
Line 461: Line 526:
Properties:
Properties:
Line 470: Line 537:
Line 471: Line 539:
Line 475: Line 544:
Line 478: Line 546:
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
    * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
     * {{{debug}}}: like verbose with additional debug output
Line 483: Line 552:
Line 484: Line 554:
Line 488: Line 559:

* ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
     * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
     * {{{debug}}}: like verbose with additional debug output
Line 495: Line 566:
Line 496: Line 568:
Line 500: Line 573:
Line 503: Line 575:
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
    * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
     * {{{debug}}}: like verbose with additional debug output
Line 508: Line 581:
Line 509: Line 583:
Line 513: Line 588:

* ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
     * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
     * {{{debug}}}: like verbose with additional debug output
Line 520: Line 595:
Line 521: Line 597:
Line 525: Line 602:
Line 528: Line 604:
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
    * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
     * {{{debug}}}: like verbose with additional debug output
Line 533: Line 610:
Line 534: Line 612:
Line 537: Line 616:
Line 542: Line 620:
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
    * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
     * {{{debug}}}: like verbose with additional debug output
Line 550: Line 628:
Line 551: Line 630:
Line 554: Line 634:
Line 559: Line 638:
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
Language features supported:
    * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
    * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates

Supported l
anguage features:
Line 569: Line 650:
Properties:
Properties:
Line 574: Line 657:
Line 575: Line 659:
Line 578: Line 663:
 [[http://www.informatik.uni-freiburg.de/~ki/papers/haslum-etal-aaai07.pdf|Domain-Independent Construction of Pattern Database Heuristics for Cost-Optimal Planning]].<<BR>>
 In ''Proceedings of the 22nd AAAI Conference on Artificial Intelligence (AAAI 2007)'', pp. 1007-1012. AAAI Press, 2007.
[[https://ai.dmi.unibas.ch/papers/haslum-et-al-aaai07.pdf|Domain-Independent Construction of Pattern Database Heuristics for Cost-Optimal Planning]].<<BR>>
In ''Proceedings of the 22nd AAAI Conference on Artificial Intelligence (AAAI 2007)'', pp. 1007-1012. AAAI Press, 2007.
Line 584: Line 669:
 [[https://ai.dmi.unibas.ch/papers/sievers-et-al-socs2012.pdf|Efficient Implementation of Pattern Database Heuristics for Classical Planning]].<<BR>>
 In ''Proceedings of the Fifth Annual Symposium on Combinatorial Search (SoCS 2012)'', pp. 105-111. AAAI Press, 2012.
[[https://ai.dmi.unibas.ch/papers/sievers-et-al-socs2012.pdf|Efficient Implementation of Pattern Database Heuristics for Classical Planning]].<<BR>>
In ''Proceedings of the Fifth Annual Symposium on Combinatorial Search (SoCS 2012)'', pp. 105-111. AAAI Press, 2012.
Line 590: Line 675:
ipdb(pdb_max_size=2000000, collection_max_size=20000000, num_samples=1000, min_improvement=10, max_time=infinity, random_seed=-1, verbosity=normal, max_time_dominance_pruning=infinity, verbosity=normal, transform=no_transform(), cache_estimates=true) ipdb(pdb_max_size=2000000, collection_max_size=20000000, num_samples=1000, min_improvement=10, max_time=infinity, random_seed=-1, max_time_dominance_pruning=infinity, verbosity=normal, transform=no_transform(), cache_estimates=true)
Line 599: Line 684:
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
Line 606: Line 686:
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
    * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
    * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
Line 617: Line 698:
Line 628: Line 710:
Language features supported: Supported language features:
Line 632: Line 715:
Properties:
Properties:
Line 637: Line 722:
Line 638: Line 724:
Line 639: Line 726:
Line 643: Line 731:
Line 646: Line 733:
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
Language features supported:
    * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
    * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates

Supported l
anguage features:
Line 656: Line 745:
Properties:
Properties:
Line 661: Line 752:
Line 662: Line 754:
Line 663: Line 756:
Line 667: Line 761:
Line 670: Line 763:
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
Language features supported:
    * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
    * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates

Supported l
anguage features:
Line 680: Line 775:
Properties:
Properties:
Line 689: Line 786:
Line 692: Line 790:
 [[https://ai.dmi.unibas.ch/papers/seipp-et-al-icaps2015.pdf|New Optimization Functions for Potential Heuristics]].<<BR>>
 In ''Proceedings of the 25th International Conference on Automated Planning and Scheduling (ICAPS 2015)'', pp. 193-201. AAAI Press, 2015.
[[https://ai.dmi.unibas.ch/papers/seipp-et-al-icaps2015.pdf|New Optimization Functions for Potential Heuristics]].<<BR>>
In ''Proceedings of the 25th International Conference on Automated Planning and Scheduling (ICAPS 2015)'', pp. 193-201. AAAI Press, 2015.
Line 701: Line 799:
  * {{{cplex}}}: commercial solver by IBM
  * {{{soplex}}}: open source solver by ZIB
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
'''Note:''' to use an LP solver, you must build the planner with LP support. See [[LPBuildInstructions|LPBuildInstructions]].

Language features supported:
    * {{{cplex}}}: commercial solver by IBM
     * {{{soplex}}}: open source solver by ZIB
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
     * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
    * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates

'''Note:''' to use an LP solver, you must build the planner with LP support. See [[https://github.com/aibasel/downward/blob/main/BUILD.md|build instructions]].

Supported language features:
Line 716: Line 816:
Properties:
Properties:
Line 721: Line 823:
Line 722: Line 825:
Line 725: Line 829:
 [[https://ai.dmi.unibas.ch/papers/seipp-et-al-icaps2015.pdf|New Optimization Functions for Potential Heuristics]].<<BR>>
 In ''Proceedings of the 25th International Conference on Automated Planning and Scheduling (ICAPS 2015)'', pp. 193-201. AAAI Press, 2015.

{{{
diverse_potentials(num_samples=1000, max_num_heuristics=infinity, max_potential=1e8, lpsolver=cplex, verbosity=normal, transform=no_transform(), cache_estimates=true, random_seed=-1, verbosity=normal)
[[https://ai.dmi.unibas.ch/papers/seipp-et-al-icaps2015.pdf|New Optimization Functions for Potential Heuristics]].<<BR>>
In ''Proceedings of the 25th International Conference on Automated Planning and Scheduling (ICAPS 2015)'', pp. 193-201. AAAI Press, 2015.

{{{
diverse_potentials(num_samples=1000, max_num_heuristics=infinity, max_potential=1e8, lpsolver=cplex, verbosity=normal, transform=no_transform(), cache_estimates=true, random_seed=-1)
Line 736: Line 840:
  * {{{cplex}}}: commercial solver by IBM
  * {{{soplex}}}: open source solver by ZIB
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
    * {{{cplex}}}: commercial solver by IBM
     * {{{soplex}}}: open source solver by ZIB
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
     * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
     * {{{debug}}}: like verbose with additional debug output
Line 746: Line 850:
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
'''Note:''' to use an LP solver, you must build the planner with LP support. See [[LPBuildInstructions|LPBuildInstructions]].

Language features supported:

'''Note:''' to use an LP solver, you must build the planner with LP support. See [[https://github.com/aibasel/downward/blob/main/BUILD.md|build instructions]].

Supported language features:
Line 757: Line 858:
Properties:
Properties:
Line 762: Line 865:
Line 763: Line 867:
Line 766: Line 871:
 [[https://ai.dmi.unibas.ch/papers/seipp-et-al-icaps2015.pdf|New Optimization Functions for Potential Heuristics]].<<BR>>
 In ''Proceedings of the 25th International Conference on Automated Planning and Scheduling (ICAPS 2015)'', pp. 193-201. AAAI Press, 2015.
[[https://ai.dmi.unibas.ch/papers/seipp-et-al-icaps2015.pdf|New Optimization Functions for Potential Heuristics]].<<BR>>
In ''Proceedings of the 25th International Conference on Automated Planning and Scheduling (ICAPS 2015)'', pp. 193-201. AAAI Press, 2015.
Line 775: Line 880:
  * {{{cplex}}}: commercial solver by IBM
  * {{{soplex}}}: open source solver by ZIB
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates
'''Note:''' to use an LP solver, you must build the planner with LP support. See [[LPBuildInstructions|LPBuildInstructions]].

Language features supported:
    * {{{cplex}}}: commercial solver by IBM
     * {{{soplex}}}: open source solver by ZIB
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
     * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
    * {{{debug}}}: like verbose with additional debug output
 * ''transform'' ([[Doc/AbstractTask|AbstractTask]]): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.
 * ''cache_estimates'' (bool): cache heuristic estimates

'''Note:''' to use an LP solver, you must build the planner with LP support. See [[https://github.com/aibasel/downward/blob/main/BUILD.md|build instructions]].

Supported language features:
Line 790: Line 897:
Properties:
Properties:
Line 795: Line 904:
Line 796: Line 906:
Line 799: Line 910:
 [[https://ai.dmi.unibas.ch/papers/seipp-et-al-icaps2015.pdf|New Optimization Functions for Potential Heuristics]].<<BR>>
 In ''Proceedings of the 25th International Conference on Automated Planning and Scheduling (ICAPS 2015)'', pp. 193-201. AAAI Press, 2015.
[[https://ai.dmi.unibas.ch/papers/seipp-et-al-icaps2015.pdf|New Optimization Functions for Potential Heuristics]].<<BR>>
In ''Proceedings of the 25th International Conference on Automated Planning and Scheduling (ICAPS 2015)'', pp. 193-201. AAAI Press, 2015.
Line 810: Line 921:
  * {{{cplex}}}: commercial solver by IBM
  * {{{soplex}}}: open source solver by ZIB
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
  * {{{silent}}}: only the most basic output
  * {{{normal}}}: relevant information to monitor progress
  * {{{verbose}}}: full output
  * {{{debug}}}: like verbose with additional debug output
    * {{{cplex}}}: commercial solver by IBM
     * {{{soplex}}}: open source solver by ZIB
 * ''verbosity'' ({silent, normal, verbose, debug}): Option to specify the verbosity level.
     * {{{silent}}}: only the most basic output
     * {{{normal}}}: relevant information to monitor progress
     * {{{verbose}}}: full output
     * {{{debug}}}: like verbose with additional debug output
Line 820: Line 931:
'''Note:''' to use an LP solver, you must build the planner with LP support. See [[LPBuildInstructions|LPBuildInstructions]].

Language features supported:

'''Note:''' to use an LP solver, you must build the planner with LP support. See [[https://github.com/aibasel/downward/blob/main/BUILD.md|build instructions]].

Supported language features:
Line 826: Line 939:
Properties:
Properties:
Line 831: Line 946:

/* moin code generated by txt2tags 2.6 (http://txt2tags.org) */
/* cmdline: txt2tags */

An evaluator specification is either a newly created evaluator instance or an evaluator that has been defined previously. This page describes how one can specify a new evaluator instance. For re-using evaluators, see Evaluator Predefinitions.

If the evaluator is a heuristic, definitions of properties in the descriptions below:

  • admissible: h(s) <= h*(s) for all states s

  • consistent: h(s) <= c(s, s') + h(s') for all states s connected to states s' by an action with cost c(s, s')

  • safe: h(s) = infinity is only true for states with h*(s) = infinity

  • preferred operators: this heuristic identifies preferred operators

This feature type can be bound to variables using let(variable_name, variable_definition, expression) where expression can use variable_name. Predefinitions using --evaluator, --heuristic, and --landmarks are automatically transformed into let-expressions but are deprecated.

Additive heuristic

add(verbosity=normal, transform=no_transform(), cache_estimates=true)
  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

Supported language features:

  • action costs: supported

  • conditional effects: supported

  • axioms: supported (in the sense that the planner won't complain -- handling of axioms might be very stupid and even render the heuristic unsafe)

Properties:

  • admissible: no

  • consistent: no

  • safe: yes for tasks without axioms

  • preferred operators: yes

Blind heuristic

Returns cost of cheapest action for non-goal states, 0 for goal states

blind(verbosity=normal, transform=no_transform(), cache_estimates=true)
  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

Supported language features:

  • action costs: supported

  • conditional effects: supported

  • axioms: supported

Properties:

  • admissible: yes

  • consistent: yes

  • safe: yes

  • preferred operators: no

Context-enhanced additive heuristic

cea(verbosity=normal, transform=no_transform(), cache_estimates=true)
  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

Supported language features:

  • action costs: supported

  • conditional effects: supported

  • axioms: supported (in the sense that the planner won't complain -- handling of axioms might be very stupid and even render the heuristic unsafe)

Properties:

  • admissible: no

  • consistent: no

  • safe: no

  • preferred operators: yes

Additive Cartesian CEGAR heuristic

See the paper introducing counterexample-guided Cartesian abstraction refinement (CEGAR) for classical planning:

  • Jendrik Seipp and Malte Helmert.

Counterexample-guided Cartesian Abstraction Refinement.
In Proceedings of the 23rd International Conference on Automated Planning and Scheduling (ICAPS 2013), pp. 347-351. AAAI Press, 2013.

and the paper showing how to make the abstractions additive:

  • Jendrik Seipp and Malte Helmert.

Diverse and Additive Cartesian Abstraction Heuristics.
In Proceedings of the 24th International Conference on Automated Planning and Scheduling (ICAPS 2014), pp. 289-297. AAAI Press, 2014.

For more details on Cartesian CEGAR and saturated cost partitioning, see the journal paper

  • Jendrik Seipp and Malte Helmert.

Counterexample-Guided Cartesian Abstraction Refinement for Classical Planning.
Journal of Artificial Intelligence Research 62:535-577. 2018.

cegar(subtasks=[landmarks(),goals()], max_states=infinity, max_transitions=1M, max_time=infinity, pick=max_refined, use_general_costs=true, verbosity=normal, transform=no_transform(), cache_estimates=true, random_seed=-1)
  • subtasks (list of SubtaskGenerator): subtask generators

  • max_states (int [1, infinity]): maximum sum of abstract states over all abstractions

  • max_transitions (int [0, infinity]): maximum sum of real transitions (excluding self-loops) over all abstractions

  • max_time (double [0.0, infinity]): maximum time in seconds for building abstractions

  • pick ({random, min_unwanted, max_unwanted, min_refined, max_refined, min_hadd, max_hadd}): how to choose on which variable to split the flaw state

    • random: select a random variable (among all eligible variables)

    • min_unwanted: select an eligible variable which has the least unwanted values (number of values of v that land in the abstract state whose h-value will probably be raised) in the flaw state

    • max_unwanted: select an eligible variable which has the most unwanted values (number of values of v that land in the abstract state whose h-value will probably be raised) in the flaw state

    • min_refined: select an eligible variable which is the least refined (-1 * (remaining_values(v) / original_domain_size(v))) in the flaw state

    • max_refined: select an eligible variable which is the most refined (-1 * (remaining_values(v) / original_domain_size(v))) in the flaw state

    • min_hadd: select an eligible variable with minimal h^add(s_0) value over all facts that need to be removed from the flaw state

    • max_hadd: select an eligible variable with maximal h^add(s_0) value over all facts that need to be removed from the flaw state

  • use_general_costs (bool): allow negative costs in cost partitioning

  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

  • random_seed (int [-1, infinity]): Set to -1 (default) to use the global random number generator. Set to any other value to use a local random number generator with the given seed.

Supported language features:

  • action costs: supported

  • conditional effects: not supported

  • axioms: not supported

Properties:

  • admissible: yes

  • consistent: yes

  • safe: yes

  • preferred operators: no

Causal graph heuristic

cg(max_cache_size=1000000, verbosity=normal, transform=no_transform(), cache_estimates=true)
  • max_cache_size (int [0, infinity]): maximum number of cached entries per variable (set to 0 to disable cache)

  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

Supported language features:

  • action costs: supported

  • conditional effects: supported

  • axioms: supported (in the sense that the planner won't complain -- handling of axioms might be very stupid and even render the heuristic unsafe)

Properties:

  • admissible: no

  • consistent: no

  • safe: no

  • preferred operators: yes

FF heuristic

ff(verbosity=normal, transform=no_transform(), cache_estimates=true)
  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

Supported language features:

  • action costs: supported

  • conditional effects: supported

  • axioms: supported (in the sense that the planner won't complain -- handling of axioms might be very stupid and even render the heuristic unsafe)

Properties:

  • admissible: no

  • consistent: no

  • safe: yes for tasks without axioms

  • preferred operators: yes

Goal count heuristic

goalcount(verbosity=normal, transform=no_transform(), cache_estimates=true)
  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

Supported language features:

  • action costs: ignored by design

  • conditional effects: supported

  • axioms: supported

Properties:

  • admissible: no

  • consistent: no

  • safe: yes

  • preferred operators: no

h^m heuristic

hm(m=2, verbosity=normal, transform=no_transform(), cache_estimates=true)
  • m (int [1, infinity]): subset size

  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

Supported language features:

  • action costs: supported

  • conditional effects: ignored

  • axioms: ignored

Properties:

  • admissible: yes for tasks without conditional effects or axioms

  • consistent: yes for tasks without conditional effects or axioms

  • safe: yes for tasks without conditional effects or axioms

  • preferred operators: no

Max heuristic

hmax(verbosity=normal, transform=no_transform(), cache_estimates=true)
  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

Supported language features:

  • action costs: supported

  • conditional effects: supported

  • axioms: supported (in the sense that the planner won't complain -- handling of axioms might be very stupid and even render the heuristic unsafe)

Properties:

  • admissible: yes for tasks without axioms

  • consistent: yes for tasks without axioms

  • safe: yes for tasks without axioms

  • preferred operators: no

Landmark cost partitioning heuristic

Landmark progression is implemented according to the following paper:

  • Clemens Büchner, Thomas Keller, Salomé Eriksson and Malte Helmert.

Landmarks Progression in Heuristic Search.
In Proceedings of the Thirty-Third International Conference on Automated Planning and Scheduling (ICAPS 2023), pp. 70-79. AAAI Press, 2023.

landmark_cost_partitioning(lm_factory, pref=false, prog_goal=true, prog_gn=true, prog_r=true, verbosity=normal, transform=no_transform(), cache_estimates=true, cost_partitioning=uniform, alm=true, lpsolver=cplex)
  • lm_factory (LandmarkFactory): the set of landmarks to use for this heuristic. The set of landmarks can be specified here, or predefined (see LandmarkFactory).

  • pref (bool): enable preferred operators (see note below)

  • prog_goal (bool): Use goal progression.

  • prog_gn (bool): Use greedy-necessary ordering progression.

  • prog_r (bool): Use reasonable ordering progression.

  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

  • cost_partitioning ({optimal, uniform}): strategy for partitioning operator costs among landmarks

    • optimal: use optimal (LP-based) cost partitioning

    • uniform: partition operator costs uniformly among all landmarks achieved by that operator

  • alm (bool): use action landmarks

  • lpsolver ({cplex, soplex}): external solver that should be used to solve linear programs

    • cplex: commercial solver by IBM

    • soplex: open source solver by ZIB

Note: to use an LP solver, you must build the planner with LP support. See build instructions.

Usage with A*: We recommend to add this heuristic as lazy_evaluator when using it in the A* algorithm. This way, the heuristic is recomputed before a state is expanded, leading to improved estimates that incorporate all knowledge gained from paths that were found after the state was inserted into the open list.

Consistency: The heuristic is consistent along single paths if it is set as lazy_evaluator; i.e. when expanding s then we have h(s) <= h(s')+cost(a) for all successors s' of s reached with a. But newly found paths to s can increase h(s), at which point the above inequality might not hold anymore.

Optimal Cost Partitioning: To use cost_partitioning=optimal, you must build the planner with LP support. See build instructions.

Preferred operators: Preferred operators should not be used for optimal planning. See Landmark sum heuristic for more information on using preferred operators; the comments there also apply to this heuristic.

Supported language features:

  • action costs: supported

  • conditional_effects: supported if the LandmarkFactory supports them; otherwise not supported

  • axioms: not allowed

Properties:

  • preferred operators: yes (if enabled; see pref option)

  • admissible: yes

  • consistent: no; see document note about consistency

  • safe: yes

Landmark sum heuristic

Landmark progression is implemented according to the following paper:

  • Clemens Büchner, Thomas Keller, Salomé Eriksson and Malte Helmert.

Landmarks Progression in Heuristic Search.
In Proceedings of the Thirty-Third International Conference on Automated Planning and Scheduling (ICAPS 2023), pp. 70-79. AAAI Press, 2023.

landmark_sum(lm_factory, pref=false, prog_goal=true, prog_gn=true, prog_r=true, verbosity=normal, transform=no_transform(), cache_estimates=true)
  • lm_factory (LandmarkFactory): the set of landmarks to use for this heuristic. The set of landmarks can be specified here, or predefined (see LandmarkFactory).

  • pref (bool): enable preferred operators (see note below)

  • prog_goal (bool): Use goal progression.

  • prog_gn (bool): Use greedy-necessary ordering progression.

  • prog_r (bool): Use reasonable ordering progression.

  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

Note on performance for satisficing planning: The cost of a landmark is based on the cost of the operators that achieve it. For satisficing search this can be counterproductive since it is often better to focus on distance from goal (i.e. length of the plan) rather than cost. In experiments we achieved the best performance using the option 'transform=adapt_costs(one)' to enforce unit costs.

Preferred operators: Computing preferred operators is *only enabled* when setting pref=true because it has a nontrivial runtime cost. Using the heuristic for preferred operators without setting pref=true has no effect. Our implementation to compute preferred operators based on landmarks differs from the description in the literature (see reference above).The original implementation computes two kinds of preferred operators:

  1. If there is an applicable operator that reaches a landmark, all such operators are preferred.
  2. If no such operators exist, perform an FF-style relaxed exploration towards the nearest landmarks (according to the landmark orderings) and use the preferred operators of this exploration.

Our implementation only considers preferred operators of the first type and does not include the second type. The rationale for this change is that it reduces code complexity and helps more cleanly separate landmark-based and FF-based computations in LAMA-like planner configurations. In our experiments, only considering preferred operators of the first type reduces performance when using the heuristic and its preferred operators in isolation but improves performance when using this heuristic in conjunction with the FF heuristic, as in LAMA-like planner configurations.

Supported language features:

  • action costs: supported

  • conditional_effects: supported if the LandmarkFactory supports them; otherwise ignored

  • axioms: ignored

Properties:

  • preferred operators: yes (if enabled; see pref option)

  • admissible: no

  • consistent: no

  • safe: yes except on tasks with axioms or on tasks with conditional effects when using a LandmarkFactory not supporting them

Landmark-cut heuristic

lmcut(verbosity=normal, transform=no_transform(), cache_estimates=true)
  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

Supported language features:

  • action costs: supported

  • conditional effects: not supported

  • axioms: not supported

Properties:

  • admissible: yes

  • consistent: no

  • safe: yes

  • preferred operators: no

Merge-and-shrink heuristic

This heuristic implements the algorithm described in the following paper:

  • Silvan Sievers, Martin Wehrle and Malte Helmert.

Generalized Label Reduction for Merge-and-Shrink Heuristics.
In Proceedings of the 28th AAAI Conference on Artificial Intelligence (AAAI 2014), pp. 2358-2366. AAAI Press, 2014.

For a more exhaustive description of merge-and-shrink, see the journal paper

  • Silvan Sievers and Malte Helmert.

Merge-and-Shrink: A Compositional Theory of Transformations of Factored Transition Systems.
Journal of Artificial Intelligence Research 71:781-883. 2021.

The following paper describes how to improve the DFP merge strategy with tie-breaking, and presents two new merge strategies (dyn-MIASM and SCC-DFP):

  • Silvan Sievers, Martin Wehrle and Malte Helmert.

An Analysis of Merge Strategies for Merge-and-Shrink Heuristics.
In Proceedings of the 26th International Conference on Automated Planning and Scheduling (ICAPS 2016), pp. 294-298. AAAI Press, 2016.

Details of the algorithms and the implementation are described in the paper

  • Silvan Sievers.

Merge-and-Shrink Heuristics for Classical Planning: Efficient Implementation and Partial Abstractions.
In Proceedings of the 11th Annual Symposium on Combinatorial Search (SoCS 2018), pp. 90-98. AAAI Press, 2018.

merge_and_shrink(verbosity=normal, transform=no_transform(), cache_estimates=true, merge_strategy, shrink_strategy, label_reduction=<none>, prune_unreachable_states=true, prune_irrelevant_states=true, max_states=-1, max_states_before_merge=-1, threshold_before_merge=-1, main_loop_max_time=infinity)
  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

  • merge_strategy (MergeStrategy): See detailed documentation for merge strategies. We currently recommend SCC-DFP, which can be achieved using merge_strategy=merge_sccs(order_of_sccs=topological,merge_selector=score_based_filtering(scoring_functions=[goal_relevance,dfp,total_order]))

  • shrink_strategy (ShrinkStrategy): See detailed documentation for shrink strategies. We currently recommend non-greedy shrink_bisimulation, which can be achieved using shrink_strategy=shrink_bisimulation(greedy=false)

  • label_reduction (LabelReduction): See detailed documentation for labels. There is currently only one 'option' to use label_reduction, which is label_reduction=exact Also note the interaction with shrink strategies.

  • prune_unreachable_states (bool): If true, prune abstract states unreachable from the initial state.

  • prune_irrelevant_states (bool): If true, prune abstract states from which no goal state can be reached.

  • max_states (int [-1, infinity]): maximum transition system size allowed at any time point.

  • max_states_before_merge (int [-1, infinity]): maximum transition system size allowed for two transition systems before being merged to form the synchronized product.

  • threshold_before_merge (int [-1, infinity]): If a transition system, before being merged, surpasses this soft transition system size limit, the shrink strategy is called to possibly shrink the transition system.

  • main_loop_max_time (double [0.0, infinity]): A limit in seconds on the runtime of the main loop of the algorithm. If the limit is exceeded, the algorithm terminates, potentially returning a factored transition system with several factors. Also note that the time limit is only checked between transformations of the main loop, but not during, so it can be exceeded if a transformation is runtime-intense.

Note: Conditional effects are supported directly. Note, however, that for tasks that are not factored (in the sense of the JACM 2014 merge-and-shrink paper), the atomic transition systems on which merge-and-shrink heuristics are based are nondeterministic, which can lead to poor heuristics even when only perfect shrinking is performed.

Note: When pruning unreachable states, admissibility and consistency is only guaranteed for reachable states and transitions between reachable states. While this does not impact regular A* search which will never encounter any unreachable state, it impacts techniques like symmetry-based pruning: a reachable state which is mapped to an unreachable symmetric state (which hence is pruned) would falsely be considered a dead-end and also be pruned, thus violating optimality of the search.

Note: When using a time limit on the main loop of the merge-and-shrink algorithm, the heuristic will compute the maximum over all heuristics induced by the remaining factors if terminating the merge-and-shrink algorithm early. Exception: if there is an unsolvable factor, it will be used as the exclusive heuristic since the problem is unsolvable.

Note: A currently recommended good configuration uses bisimulation based shrinking, the merge strategy SCC-DFP, and the appropriate label reduction setting (max_states has been altered to be between 10k and 200k in the literature). As merge-and-shrink heuristics can be expensive to compute, we also recommend limiting time by setting main_loop_max_time to a finite value. A sensible value would be half of the time allocated for the planner.

merge_and_shrink(shrink_strategy=shrink_bisimulation(greedy=false),merge_strategy=merge_sccs(order_of_sccs=topological,merge_selector=score_based_filtering(scoring_functions=[goal_relevance(),dfp(),total_order()])),label_reduction=exact(before_shrinking=true,before_merging=false),max_states=50k,threshold_before_merge=1)

Supported language features:

  • action costs: supported

  • conditional effects: supported (but see note)

  • axioms: not supported

Properties:

  • admissible: yes (but see note)

  • consistent: yes (but see note)

  • safe: yes

  • preferred operators: no

Operator-counting heuristic

An operator-counting heuristic computes a linear program (LP) in each state. The LP has one variable Count_o for each operator o that represents how often the operator is used in a plan. Operator-counting constraints are linear constraints over these varaibles that are guaranteed to have a solution with Count_o = occurrences(o, pi) for every plan pi. Minimizing the total cost of operators subject to some operator-counting constraints is an admissible heuristic. For details, see

  • Florian Pommerening, Gabriele Roeger, Malte Helmert and Blai Bonet.

LP-based Heuristics for Cost-optimal Planning.
In Proceedings of the Twenty-Fourth International Conference on Automated Planning and Scheduling (ICAPS 2014), pp. 226-234. AAAI Press, 2014.

operatorcounting(constraint_generators, use_integer_operator_counts=false, lpsolver=cplex, verbosity=normal, transform=no_transform(), cache_estimates=true)
  • constraint_generators (list of ConstraintGenerator): methods that generate constraints over operator-counting variables

  • use_integer_operator_counts (bool): restrict operator-counting variables to integer values. Computing the heuristic with integer variables can produce higher values but requires solving a MIP instead of an LP which is generally more computationally expensive. Turning this option on can thus drastically increase the runtime.

  • lpsolver ({cplex, soplex}): external solver that should be used to solve linear programs

    • cplex: commercial solver by IBM

    • soplex: open source solver by ZIB

  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

Note: to use an LP solver, you must build the planner with LP support. See build instructions.

Supported language features:

  • action costs: supported

  • conditional effects: not supported (the heuristic supports them in theory, but none of the currently implemented constraint generators do)

  • axioms: not supported (the heuristic supports them in theory, but none of the currently implemented constraint generators do)

Properties:

  • admissible: yes

  • consistent: yes, if all constraint generators represent consistent heuristics

  • safe: yes

  • preferred operators: no

Basic Evaluators

Constant evaluator

Returns a constant value.

const(value=1, verbosity=normal)
  • value (int [0, infinity]): the constant value

  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

g-value evaluator

Returns the g-value (path cost) of the search node.

g(verbosity=normal)
  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

Max evaluator

Calculates the maximum of the sub-evaluators.

max(evals, verbosity=normal)
  • evals (list of Evaluator): at least one evaluator

  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

Preference evaluator

Returns 0 if preferred is true and 1 otherwise.

pref(verbosity=normal)
  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

Sum evaluator

Calculates the sum of the sub-evaluators.

sum(evals, verbosity=normal)
  • evals (list of Evaluator): at least one evaluator

  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

Weighted evaluator

Multiplies the value of the evaluator with the given weight.

weight(eval, weight, verbosity=normal)
  • eval (Evaluator): evaluator

  • weight (int): weight

  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

Pattern Database Heuristics

Canonical PDB

The canonical pattern database heuristic is calculated as follows. For a given pattern collection C, the value of the canonical heuristic function is the maximum over all maximal additive subsets A in C, where the value for one subset S in A is the sum of the heuristic values for all patterns in S for a given state.

cpdbs(patterns=systematic(1), max_time_dominance_pruning=infinity, verbosity=normal, transform=no_transform(), cache_estimates=true)
  • patterns (PatternCollectionGenerator): pattern generation method

  • max_time_dominance_pruning (double [0.0, infinity]): The maximum time in seconds spent on dominance pruning. Using 0.0 turns off dominance pruning. Dominance pruning excludes patterns and additive subsets that will never contribute to the heuristic value because there are dominating subsets in the collection.

  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

Supported language features:

  • action costs: supported

  • conditional effects: not supported

  • axioms: not supported

Properties:

  • admissible: yes

  • consistent: yes

  • safe: yes

  • preferred operators: no

iPDB

This approach is a combination of using the Canonical PDB heuristic over patterns computed with the hillclimbing algorithm for pattern generation. It is a short-hand for the command-line option cpdbs(hillclimbing()). Both the heuristic and the pattern generation algorithm are described in the following paper:

  • Patrik Haslum, Adi Botea, Malte Helmert, Blai Bonet and Sven Koenig.

Domain-Independent Construction of Pattern Database Heuristics for Cost-Optimal Planning.
In Proceedings of the 22nd AAAI Conference on Artificial Intelligence (AAAI 2007), pp. 1007-1012. AAAI Press, 2007.

For implementation notes, see:

  • Silvan Sievers, Manuela Ortlieb and Malte Helmert.

Efficient Implementation of Pattern Database Heuristics for Classical Planning.
In Proceedings of the Fifth Annual Symposium on Combinatorial Search (SoCS 2012), pp. 105-111. AAAI Press, 2012.

See also Canonical PDB and Hill climbing for more details.

ipdb(pdb_max_size=2000000, collection_max_size=20000000, num_samples=1000, min_improvement=10, max_time=infinity, random_seed=-1, max_time_dominance_pruning=infinity, verbosity=normal, transform=no_transform(), cache_estimates=true)
  • pdb_max_size (int [1, infinity]): maximal number of states per pattern database

  • collection_max_size (int [1, infinity]): maximal number of states in the pattern collection

  • num_samples (int [1, infinity]): number of samples (random states) on which to evaluate each candidate pattern collection

  • min_improvement (int [1, infinity]): minimum number of samples on which a candidate pattern collection must improve on the current one to be considered as the next pattern collection

  • max_time (double [0.0, infinity]): maximum time in seconds for improving the initial pattern collection via hill climbing. If set to 0, no hill climbing is performed at all. Note that this limit only affects hill climbing. Use max_time_dominance_pruning to limit the time spent for pruning dominated patterns.

  • random_seed (int [-1, infinity]): Set to -1 (default) to use the global random number generator. Set to any other value to use a local random number generator with the given seed.

  • max_time_dominance_pruning (double [0.0, infinity]): The maximum time in seconds spent on dominance pruning. Using 0.0 turns off dominance pruning. Dominance pruning excludes patterns and additive subsets that will never contribute to the heuristic value because there are dominating subsets in the collection.

  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

Note: The pattern collection created by the algorithm will always contain all patterns consisting of a single goal variable, even if this violates the pdb_max_size or collection_max_size limits.

Note: This pattern generation method generates patterns optimized for use with the canonical pattern database heuristic.

Implementation Notes

The following will very briefly describe the algorithm and explain the differences between the original implementation from 2007 and the new one in Fast Downward.

The aim of the algorithm is to output a pattern collection for which the Canonical PDB yields the best heuristic estimates.

The algorithm is basically a local search (hill climbing) which searches the "pattern neighbourhood" (starting initially with a pattern for each goal variable) for improving the pattern collection. This is done as described in the section "pattern construction as search" in the paper, except for the corrected search neighbourhood discussed below. For evaluating the neighbourhood, the "counting approximation" as introduced in the paper was implemented. An important difference however consists in the fact that this implementation computes all pattern databases for each candidate pattern rather than using A* search to compute the heuristic values only for the sample states for each pattern.

Also the logic for sampling the search space differs a bit from the original implementation. The original implementation uses a random walk of a length which is binomially distributed with the mean at the estimated solution depth (estimation is done with the current pattern collection heuristic). In the Fast Downward implementation, also a random walk is used, where the length is the estimation of the number of solution steps, which is calculated by dividing the current heuristic estimate for the initial state by the average operator costs of the planning task (calculated only once and not updated during sampling!) to take non-unit cost problems into account. This yields a random walk of an expected lenght of np = 2 * estimated number of solution steps. If the random walk gets stuck, it is being restarted from the initial state, exactly as described in the original paper.

The section "avoiding redundant evaluations" describes how the search neighbourhood of patterns can be restricted to variables that are relevant to the variables already included in the pattern by analyzing causal graphs. There is a mistake in the paper that leads to some relevant neighbouring patterns being ignored. See the errata for details. This mistake has been addressed in this implementation. The second approach described in the paper (statistical confidence interval) is not applicable to this implementation, as it doesn't use A* search but constructs the entire pattern databases for all candidate patterns anyway. The search is ended if there is no more improvement (or the improvement is smaller than the minimal improvement which can be set as an option), however there is no limit of iterations of the local search. This is similar to the techniques used in the original implementation as described in the paper.

Supported language features:

  • action costs: supported

  • conditional effects: not supported

  • axioms: not supported

Properties:

  • admissible: yes

  • consistent: yes

  • safe: yes

  • preferred operators: no

Pattern database heuristic

TODO

pdb(pattern=greedy(), verbosity=normal, transform=no_transform(), cache_estimates=true)
  • pattern (PatternGenerator): pattern generation method

  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

Supported language features:

  • action costs: supported

  • conditional effects: not supported

  • axioms: not supported

Properties:

  • admissible: yes

  • consistent: yes

  • safe: yes

  • preferred operators: no

Zero-One PDB

The zero/one pattern database heuristic is simply the sum of the heuristic values of all patterns in the pattern collection. In contrast to the canonical pattern database heuristic, there is no need to check for additive subsets, because the additivity of the patterns is guaranteed by action cost partitioning. This heuristic uses the most simple form of action cost partitioning, i.e. if an operator affects more than one pattern in the collection, its costs are entirely taken into account for one pattern (the first one which it affects) and set to zero for all other affected patterns.

zopdbs(patterns=systematic(1), verbosity=normal, transform=no_transform(), cache_estimates=true)
  • patterns (PatternCollectionGenerator): pattern generation method

  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

Supported language features:

  • action costs: supported

  • conditional effects: not supported

  • axioms: not supported

Properties:

  • admissible: yes

  • consistent: yes

  • safe: yes

  • preferred operators: no

Potential Heuristics

Potential heuristic optimized for all states

The algorithm is based on

  • Jendrik Seipp, Florian Pommerening and Malte Helmert.

New Optimization Functions for Potential Heuristics.
In Proceedings of the 25th International Conference on Automated Planning and Scheduling (ICAPS 2015), pp. 193-201. AAAI Press, 2015.

all_states_potential(max_potential=1e8, lpsolver=cplex, verbosity=normal, transform=no_transform(), cache_estimates=true)
  • max_potential (double [0.0, infinity]): Bound potentials by this number. Using the bound infinity disables the bounds. In some domains this makes the computation of weights unbounded in which case no weights can be extracted. Using very high weights can cause numerical instability in the LP solver, while using very low weights limits the choice of potential heuristics. For details, see the ICAPS paper cited above.

  • lpsolver ({cplex, soplex}): external solver that should be used to solve linear programs

    • cplex: commercial solver by IBM

    • soplex: open source solver by ZIB

  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

Note: to use an LP solver, you must build the planner with LP support. See build instructions.

Supported language features:

  • action costs: supported

  • conditional effects: not supported

  • axioms: not supported

Properties:

  • admissible: yes

  • consistent: yes

  • safe: yes

  • preferred operators: no

Diverse potential heuristics

The algorithm is based on

  • Jendrik Seipp, Florian Pommerening and Malte Helmert.

New Optimization Functions for Potential Heuristics.
In Proceedings of the 25th International Conference on Automated Planning and Scheduling (ICAPS 2015), pp. 193-201. AAAI Press, 2015.

diverse_potentials(num_samples=1000, max_num_heuristics=infinity, max_potential=1e8, lpsolver=cplex, verbosity=normal, transform=no_transform(), cache_estimates=true, random_seed=-1)
  • num_samples (int [0, infinity]): Number of states to sample

  • max_num_heuristics (int [0, infinity]): maximum number of potential heuristics

  • max_potential (double [0.0, infinity]): Bound potentials by this number. Using the bound infinity disables the bounds. In some domains this makes the computation of weights unbounded in which case no weights can be extracted. Using very high weights can cause numerical instability in the LP solver, while using very low weights limits the choice of potential heuristics. For details, see the ICAPS paper cited above.

  • lpsolver ({cplex, soplex}): external solver that should be used to solve linear programs

    • cplex: commercial solver by IBM

    • soplex: open source solver by ZIB

  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

  • random_seed (int [-1, infinity]): Set to -1 (default) to use the global random number generator. Set to any other value to use a local random number generator with the given seed.

Note: to use an LP solver, you must build the planner with LP support. See build instructions.

Supported language features:

  • action costs: supported

  • conditional effects: not supported

  • axioms: not supported

Properties:

  • admissible: yes

  • consistent: yes

  • safe: yes

  • preferred operators: no

Potential heuristic optimized for initial state

The algorithm is based on

  • Jendrik Seipp, Florian Pommerening and Malte Helmert.

New Optimization Functions for Potential Heuristics.
In Proceedings of the 25th International Conference on Automated Planning and Scheduling (ICAPS 2015), pp. 193-201. AAAI Press, 2015.

initial_state_potential(max_potential=1e8, lpsolver=cplex, verbosity=normal, transform=no_transform(), cache_estimates=true)
  • max_potential (double [0.0, infinity]): Bound potentials by this number. Using the bound infinity disables the bounds. In some domains this makes the computation of weights unbounded in which case no weights can be extracted. Using very high weights can cause numerical instability in the LP solver, while using very low weights limits the choice of potential heuristics. For details, see the ICAPS paper cited above.

  • lpsolver ({cplex, soplex}): external solver that should be used to solve linear programs

    • cplex: commercial solver by IBM

    • soplex: open source solver by ZIB

  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

Note: to use an LP solver, you must build the planner with LP support. See build instructions.

Supported language features:

  • action costs: supported

  • conditional effects: not supported

  • axioms: not supported

Properties:

  • admissible: yes

  • consistent: yes

  • safe: yes

  • preferred operators: no

Sample-based potential heuristics

Maximum over multiple potential heuristics optimized for samples. The algorithm is based on

  • Jendrik Seipp, Florian Pommerening and Malte Helmert.

New Optimization Functions for Potential Heuristics.
In Proceedings of the 25th International Conference on Automated Planning and Scheduling (ICAPS 2015), pp. 193-201. AAAI Press, 2015.

sample_based_potentials(num_heuristics=1, num_samples=1000, max_potential=1e8, lpsolver=cplex, verbosity=normal, transform=no_transform(), cache_estimates=true, random_seed=-1)
  • num_heuristics (int [0, infinity]): number of potential heuristics

  • num_samples (int [0, infinity]): Number of states to sample

  • max_potential (double [0.0, infinity]): Bound potentials by this number. Using the bound infinity disables the bounds. In some domains this makes the computation of weights unbounded in which case no weights can be extracted. Using very high weights can cause numerical instability in the LP solver, while using very low weights limits the choice of potential heuristics. For details, see the ICAPS paper cited above.

  • lpsolver ({cplex, soplex}): external solver that should be used to solve linear programs

    • cplex: commercial solver by IBM

    • soplex: open source solver by ZIB

  • verbosity ({silent, normal, verbose, debug}): Option to specify the verbosity level.

    • silent: only the most basic output

    • normal: relevant information to monitor progress

    • verbose: full output

    • debug: like verbose with additional debug output

  • transform (AbstractTask): Optional task transformation for the heuristic. Currently, adapt_costs() and no_transform() are available.

  • cache_estimates (bool): cache heuristic estimates

  • random_seed (int [-1, infinity]): Set to -1 (default) to use the global random number generator. Set to any other value to use a local random number generator with the given seed.

Note: to use an LP solver, you must build the planner with LP support. See build instructions.

Supported language features:

  • action costs: supported

  • conditional effects: not supported

  • axioms: not supported

Properties:

  • admissible: yes

  • consistent: yes

  • safe: yes

  • preferred operators: no

FastDownward: Doc/Evaluator (last edited 2024-10-07 13:03:56 by XmlRpcBot)