/MetaActionGenerators

A package to generate meta action candidates.

Primary LanguageC#MIT LicenseMIT

Build and Publish Nuget Nuget GitHub last commit (branch) GitHub commit activity (branch) Static Badge Static Badge Static Badge

Meta Action Generators

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.

Generators

Static Badge Static Badge

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.

Stripped Meta Actions

Static Badge Static Badge

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))
	)
)

Predicate Meta Actions

Static Badge Static Badge

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)
	)
)

Flip Meta Actions

Static Badge Static Badge

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)
	)
)

PDDLSharp Macro Reduction Meta Actions

Static Badge

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)
	)
)

CSM Macro Reduction Meta Actions

Static Badge

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)
	)
)

Precondition Permutation Reduction Meta Actions

Static Badge Static Badge

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))
	)
)

CPDDL Mutex Meta Actions

Static Badge

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)
	)
)

Manual Meta Actions

Static Badge Static Badge

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.