I have recently started working with PDDL, specifically using PDDL and Fast-downward to solve problems.
However, there is a problem that I encountered while working with PDDL. Defining a domain and a problem that is solvable is not challenging, the big issue is the running time of the solver.
A problem that can be solved within seconds with a well-defined domain is solved within minutes with a poorly defined domain.
I want to ask about which criteria I should look into when defining a PDDL domain. (Ex: fewer predicates, minimal use of "forall" or "exists", etc...)
I have been looking around on the internet about optimizing the domain definition for PDDL, however there has been no answers.
CodePudding user response:
It's kind of an impossible question to answer crisply. General rules of thumb:
use the simplest formalism you can get away with (strips being the simplest)
avoid actions with many parameters
avoid having actions with huge conditions or effects
avoid predicates with too many parameters
Beyond that, it really depends on what's happening with the solving process to diagnose what you could change.