Restructured output format documentation once more and documented variables.

This commit is contained in:
Patrick Lühne 2016-08-14 14:55:53 +02:00
parent 0fb282d153
commit 00c3140f3b

View File

@ -1,6 +1,15 @@
# Output Format # Output Format
`plasp` 3 translates SAS and PDDL files into the same ASP fact format. `plasp` 3 translates SAS and PDDL files into a uniform ASP fact format.
## Overview
Essentially, `plasp`s output format consists of *variables* that are modified by *actions* whose preconditions are fulfilled.
`plasp`s variables correspond to the multivalued variables in SAS.
PDDL predicates are turned into Boolean variables to make the output format consistent.
Actions are modeled exactly as PDDL actions and SAS operators.
## In a Nutshell ## In a Nutshell
@ -14,11 +23,7 @@ type(type(switch)).
constant(constant(a)). constant(constant(a)).
has(constant(a), type(switch)). has(constant(a), type(switch)).
% introduces another switch "constant(a)" % declares a variable "variable(on(X))" for switches X
constant(constant(b)).
has(constant(b), type(switch)).
% declares a variable "variable(on(X))" for each switch X
variable(variable(on(X))) :- has(X, type(switch)). variable(variable(on(X))) :- has(X, type(switch)).
% the variable may be true or false % the variable may be true or false
@ -30,91 +35,55 @@ action(action(turnOn(X))) :- has(X, type(switch)).
precondition(action(turnOn(X)), variable(on(X)), value(on(X), false)) :- has(X, type(switch)). precondition(action(turnOn(X)), variable(on(X)), value(on(X), false)) :- has(X, type(switch)).
postcondition(action(turnOn(X)), effect(0), variable(on(X)), value(on(X), true)) :- has(X, type(switch)). postcondition(action(turnOn(X)), effect(0), variable(on(X)), value(on(X), true)) :- has(X, type(switch)).
% declares the action "action(turnOff(X))", which requires switch X to be on and then turns it off % initially, the switch is off
action(action(turnOff(X))) :- has(X, type(switch)).
precondition(action(turnOff(X)), variable(on(X)), value(on(X), true)) :- has(X, type(switch)).
postcondition(action(turnOff(X)), effect(0), variable(on(X)), value(on(X), false)) :- has(X, type(switch)).
% initially, switch a is off and switch b is on
initialState(variable(on(constant(a))), value(on(constant(a)), false)). initialState(variable(on(constant(a))), value(on(constant(a)), false)).
initialState(variable(on(constant(b))), value(on(constant(b)), true)).
% in the end, switch a should be on and switch b should be off % in the end, the switch should be on
goal(variable(on(constant(a))), value(on(constant(a)), true)). goal(variable(on(constant(a))), value(on(constant(a)), true)).
goal(variable(on(constant(b))), value(on(constant(b)), false)).
``` ```
When translating SAS or PDDL problems, `plasp` structures the translated ASP facts into multiple sections, which are explained in the following. ## Syntax and Semantics
## Feature Requirements `plasp` structures the translated ASP facts into multiple sections, which are explained in the following.
This section declares advanced features required by the input planning problem, such as conditional effects and axiom rules. ### Feature Requirements
Feature requirements may be used in meta encodings to warn about unsupported features.
### Syntax
syntax | description
-------|------------
`requiresFeature(<feature name>).` | declares the feature `<feature name>` to be required by the input problem
Currently, feature requirements are only recognized with SAS problems.
`plasp` supports the following feature requirements:
SAS feature | description
------------|------------
`actionCosts` | actions have associated costs
`axiomRules` | immediate actions are used, which are executed as soon as the preconditions are satisfied
`conditionalEffects` | some effects of an action may have additional conditions
### Example
The following specifies that the input problem has the two requirements `actionCosts` and `conditionalEffects`.
```prolog ```prolog
% requirements % declares a required feature
requiresFeature(actionCosts). requires(feature(<name>)).
requiresFeature(conditionalEffects).
``` ```
## Types `plasp` recognizes and declares advanced features used by the input problem, such as conditional effects and [axiom rules](#axiom-rules) (currently only SAS).
See the [full list of supported features](feature-requirements.md) for more information.
This section specifies all object types used by the problem (only with PDDL and if typing is enabled). The feature requirement predicates may be used in meta encodings to warn about unsupported features.
### Syntax ### Types
syntax | description
-------|------------
`type(type(<type name>)).` | declares the type `type(<type name>)`
### Example
The following declares the type `type(block)` for later usage by the problem:
```prolog ```prolog
% types % declares a <type>
type(type(block)). type(type(<name>)).
% specifies <object> to be of type type(<name>)
has(<object>, type(<name>)).
``` ```
## Constants/Objects [Variables](#variables), [constants](#constants), and [objects](#objects) may be typed. Types are only available with PDDL and if typing is enabled.
These two sections specify domain-specific (global) constants and problem-specific (local) objects (such as the blocks in a Blocks World puzzle). ### Variables
Constants and objects are not distinguished by `plasp`.
### Syntax
syntax | description
-------|------------
`constant(constant(<constant name>)).` | declares the constant or object `constant(<constant name>)`
`has(constant(<constant name>), type(<type name>)).` | declares constant or object `constant(<constant name>)` to be of [type](#type) `type(<type name>)`
### Example
The following declares a constant `constant(a)` of [type](#types) `type(block)`:
```prolog ```prolog
% objects % declares a <variable>
constant(constant(a)). variable(variable(<name>)).
has(constant(a), type(block)).
% adds a <value> to the domain of a <variable>
contains(<variable>, <value>).
``` ```
With SAS, variable names are numbers starting at 0, `variable(<number>)`.
SAS variables are inherently multivalued, which results in two or more values of the form `value(<SAS predicate>, <bool>)` for each variable.
With PDDL, Boolean variables are created from the PDDL predicates.
Variables ared named after the PDDL predicates, `variable(<PDDL predicate>).`
Each variable contains exactly two values (one true, one false) of the form `value(<PDDL predicate>, <bool>)`.
Note that with PDDL, variables and values are named identically.