AI Planning Course @ ECI 2025

This course will survey Automated Planning as a model-based AI approach to sequential decision making, from the classical formulation to the non-deterministic variant that relates to other areas of CS and AI, like formal methods and intelligent agents.

The course has run as part of the ECI38 from July 28th to August 1st, 2025 at Universidad de Buenos Aires. Course N2.

Link de evaluación: https://forms.gle/8JzR2c9LF4inJVDX7 (Fecha limite de envio: Viernes Agosto 22, 2025)

Last updated: August 12, 2025

Resources

The main slides can be obtained HERE. The slides will be incrementally extended as the course progresses. At the end, the link should contain all the slides!

  • Day 1: Intro, Motivation, and Uniformed Search
  • Day 2: Informed Search, Intro to Classical Planning, Planning Languages
  • Day 3: Solving Classical Planning I: Automatic Heuristic Extraction, h^+, h_max, h_add
  • Day 4: Solving Classical Planning II: h_ff and SAT; Intro to FOND Planning
  • Day 5: FOND Planning: solution concepts, fairness, comptuational techniques; conditional fairness

References

Almost all references (papers and web-resources) will be linked from the corresponding slides, but some general book references are:

Relevant Systems and Tools

PDDL

A Planning and PDDL Wiki can be found here: https://planning.wiki/

The best VSCode plugin for PDDL can be found HERE, a must to have if you will do some planning work.

Parsing PDDL can be a laborious and boring task. There are many PDDL parsers out there, and many planners use their own parser. However, today, the best parser is the pddl system. If you ever want to build a planning system, I strongly recommend to use this parser, which is well done and well maintained. :-)

Classical Planning

There are many, many, classical planners out there. One of the most developed ones is FastDownward, which can be configured to realise (mostly search engine and heuristic to use) many different type of planning solvers. However, it is a bit of a monster system and requires to be compiled.

A very accessible and complete system is pyperplan, a lightweight STRIPS planner written in Python that includes most of the aspects touched in the course. For example, to solve the Blocks World on with an A* search under an hff heuristic:

$ pyperplan benchmarks/blocks/domain.pddl benchmarks/blocks/task04.pddl -s astar -H hff
2025-08-12 15:59:24,326 INFO     using search: astar_search
2025-08-12 15:59:24,326 INFO     using heuristic: hFFHeuristic
2025-08-12 15:59:24,326 INFO     Parsing Domain /home/ssardina/PROJECTS/planning/sys/pyperplan.git/benchmarks/blocks/domain.pddl
2025-08-12 15:59:24,327 INFO     Parsing Problem /home/ssardina/PROJECTS/planning/sys/pyperplan.git/benchmarks/blocks/task04.pddl
2025-08-12 15:59:24,327 INFO     5 Predicates parsed
2025-08-12 15:59:24,327 INFO     4 Actions parsed
2025-08-12 15:59:24,327 INFO     5 Objects parsed
2025-08-12 15:59:24,327 INFO     0 Constants parsed
2025-08-12 15:59:24,327 INFO     Grounding start: blocks-5-0
2025-08-12 15:59:24,328 INFO     Relevance analysis removed 0 facts
2025-08-12 15:59:24,329 INFO     Grounding end: blocks-5-0
2025-08-12 15:59:24,329 INFO     41 Variables created
2025-08-12 15:59:24,329 INFO     60 Operators created
2025-08-12 15:59:24,329 INFO     Search start: blocks-5-0
2025-08-12 15:59:24,329 INFO     Initial h value: 8.000000
2025-08-12 15:59:24,338 INFO     Goal reached. Start extraction of solution.
2025-08-12 15:59:24,338 INFO     23 Nodes expanded
2025-08-12 15:59:24,338 INFO     Search end: blocks-5-0
2025-08-12 15:59:24,338 INFO     Search time: 0.009
2025-08-12 15:59:24,338 INFO     Plan length: 12
2025-08-12 15:59:24,343 INFO     Plan correct

You can find many domains under the benchmarks/ folder. As you can see, the planner reports the heuristic value of the initial state ;-)

A nice modern planning system in Julia can be found here. It is meant to be super fast (as it is written in Julia), and even comes with a visualizer.

Finally, there is also the planning.domain web-page, which includes an online editor. I find it easier to work on my VsCode install, but….

Planning Graphs

The original tool/algorithm by Blum & Furst (1997) builds a planning graph explicitly and searches backward to extract a plan. The original Graphplan C code is still available online here.

The planning-graph is usually built by many planners, but they are not exposed except by hacking their code. There are also some Java-based planning graph implementations out there, but they are either too old or not great, I found. The AIMA book comes with a GraphPlan notebook.

Probably the best planning-graph system can be found here. For example:

$ python graphplan.py domain/dock-worker-robot-domain.pddl domain/dock-worker-robot-problem.pddl --max 10 --output graph.png --plan
Planning graph created with Planning Graph object with 4 levels levels.
Layered plan: LayeredPlan. Levels=4
0 []
1 ['load(loc2, contb, robq)', 'load(loc1, conta, robr)']
2 ['move(robq, loc2, loc1)', 'move(robr, loc1, loc2)']
3 ['unload(loc2, conta, robr)', 'unload(loc1, contb, robq)']

The planning graph will be saved in file graph.png. You can see above the relaxed plan extracted, with 6 actions across 3 levels.

FOND Planning

Some FOND Planners:

  • PRP: a FOND planner built on top of heuristic-based classical planning. This is probably the FOND planner that scales best today.
  • PR2: the new version of PRP, presumably much faster and nicer codebase.
  • FOND-SAT: A FOND planner in SAT that computes compact controlllers. Can mix fair and unfair actions.
  • CFOND-ASP: Similar to FOND-SAT, but uses Clingo ASP solver rather than SAT solvers and brings PRP ideas of regression. Can mix fair and unfair actions.
  • FOND+-ASP: a FOND planner that can handle fair and unfair actions, as well as conditional fairness.

Tools:

  • fond-domains: a collection of FOND planning problems used in the literature.
  • fond-utils: some tools for FOND planning, with the most important being an all-outcome determinizer.