This is a project that is a collection of several different meta action generators.
Some of the generators have some dependencies they need to work, however they are all described in their respective section.
You can either use the NuGet Package to generate meta actions, or use dotnet run
on the CLI project.
Here is a short description of all the different generators that this project includes.
All the examples are based on the blocksworld
domain.
All the generates put a $
as a prefix for the candidates to make it clear its a meta action.
Some of the generators takes some additional arguments to run, if they do they are described below. Otherwise, you dont need to pass any additional arguments.
Some of the generators have some dependencies that is OS specific. But do note, that one could most likely still get some of the Linux only dependencies to work on Windows as well.
This is simply meta actions that consists of taking all actions in the original domain and removing their preconditions.
An example of a meta action from this generator can be seen below:
(:action $putdown
:parameters (?ob)
:precondition ()
:effect (and
(clear ?ob)
(arm-empty)
(on-table ?ob)
(not (holding ?ob))
)
)
These are meta actions that consists of a single predicate in the effects, with no preconditions. There is a "true" and a "false" version of all the predicates.
An example of a meta action from this generator can be seen below:
(:action $clear
:parameters (?ob)
:precondition ()
:effect (and
(clear ?ob)
)
)
These are meta actions that flip the value of a single predicate, i.e. the precondition requires a predicate to be true, and the effect sets it to false.
(:action $clear
:parameters (?ob)
:precondition (and
(not (clear ?ob))
)
:effect (and
(clear ?ob)
)
)
These are meta actions that are based on reductions from the paper Can I Really Do That? Verification of Meta-Operators via Stackelberg Planning. The macros are generated by PDDLSharp, so they are usually very long and complex.
This generator have the following arguments:
Argument | Description | Default |
---|---|---|
macroLimit | An integer limit to how many macros PDDLSharp should make. | 10 |
tempFolder | A folder to store temporary files. | |
fastDownwardPath | A path to a build of Fast Downward. This should be to the fast-downward.py file. |
|
logFD | Output the stdout from Fast Downward into the console for debug purposes. | false |
An example of a meta action from this generator can be seen below:
(:action $unstack-stack-pickup-stack
:parameters (?b2 - object ?b4 - object ?b1 - object)
:precondition (and
(arm-empty)
(clear ?b4)
(clear ?b1)
(on-table ?b1)
)
:effect (and
(not (clear ?b4))
(not (on-table ?b1))
(on ?b1 ?b2)
)
)
This generator is also based on reduction of macro actions. With this generator, the macros are generated with CSM, using the MUM and BloMa methods.
This generator have the following arguments:
Argument | Description | Default |
---|---|---|
csmPath | The path to the CSMs folder. It should be the root folder of CSMs! | |
tempFolder | A folder to store temporary files. | |
fastDownwardPath | A path to a build of Fast Downward. This should be to the fast-downward.py file. |
|
log | Output stdout from CSM | false |
An example of a meta action from this generator can be seen below:
(:action $unstack_mcr_putdown_1
:parameters (?underob - object)
:precondition (and
(arm-empty))
:effect (and
(clear ?underob)
(arm-empty)
)
)
This one is also based on reducing actions, however it just tries to reduce primitive actions. It makes a meta action candidate for each possible reduction permutation for normal actions, in an attempt to find some reduced precondition that makes the meta action more useful.
An example of a meta action from this generator can be seen below:
(:action $unstack
:parameters (?ob ?underob)
:precondition (and
(on ?ob ?underob)
(arm-empty)
)
:effect (and
(holding ?ob)
(clear ?underob)
(not (on ?ob ?underob))
(not (clear ?ob))
(not (arm-empty))
)
)
These are meta actions that is based on Predicate meta actions, however it will force all the candidates to uphold mutex groups in the domain. This generator used CPDDL to find lifted mutex groups, and then fixes the predicate meta actions that violate the groups.
This generator have the following arguments:
Argument | Description | Default |
---|---|---|
cpddlExecutable | Path to a compiled binary of CPDDL, this should be the /bin/pddl file in the CPDDL repository. | |
tempFolder | A path to a folder to store temporary files from the CPDDL execution. | |
cpddlOutput | A path to the output of a CPDDL run (if you dont want to run the tool at runtime) |
Either the first two arguments must be given, or only the last argument.
An example of a meta action from this generator can be seen below:
(:action $meta_clear_0
:parameters (?x - object)
:precondition (and
(holding ?x)
(not (arm-empty))
(not (on-table ?x))
)
:effect (and
(clear ?x)
(not (holding ?x))
(arm-empty)
(on-table ?x)
)
)
This generator simply takes a path, and outputs the meta actions contained in it. This is mostly just for debug purposes.
This generator have the following arguments:
Argument | Description | Default |
---|---|---|
metaPath | A path to the folder containing the meta actions. |