Skip to content

Repository files navigation

* ArriVAL - Yet Another Classical planning plan validator written in *modern* Common Lisp

This is a library separated from ALIEN classical planner code base.

ARRIVAL provides a binary =arrival= that takes a PDDL problem file, a domain file and
a plan file, returns 0 when the plan is correct and returns 1 otherwise.

The implementation is intensively focused on clarity: The total LOC is just 941.
This is even shorter compared to [[https://github.com/patrikhaslum/INVAL][INVAL]] validator.

Unlike [[https://github.com/patrikhaslum/INVAL][INVAL]], the repository follows the *modern* Common Lisp repository
structure, is ASDF loadable, and is written in a clean functional style with
pattern matching.

ArriVAL ignores the =:requirement=. The following features are supported:

|                                  | detail                                                          |
|----------------------------------+-----------------------------------------------------------------|
| STRIPS                           | =and=                                                           |
| negative precondition            | =not=                                                           |
| disjunctive precondition         | =or= =imply=                                                    |
| universal precondition           | =forall=                                                        |
| existential preondition          | =exists=                                                        |
| conditional effects              | =when=                                                          |
| The =forall= in effects          | supported                                                       |
| ADL                              | supports =forall= =exists= =when= =or= =imply=                  |
| Axioms                           | supported, fixpoint calculation                                 |
| types                            | supported except =either=                                       |
| equality (===)                   | supported                                                       |
| duplicate args in actions/axioms | supported, imply equality constaints                            |
|----------------------------------+-----------------------------------------------------------------|
| fluents                          | supported (beta) (numeric, objects, action-cost)                |
|                                  | e.g. =assign=, =increase=, =decrease=, =scale-up=, =scale-down= |
|                                  | It accepts both integers and floats.                            |

Arrival currently has no plan to support scheduling problems.


** Installation

Step 1. Install Roswell (https://roswell.github.io/) (modern lisp equivalent of pyenv)

On Mac + homebrew or Linux + [[https://docs.brew.sh/Homebrew-on-Linux][linuxbrew]],

: brew install roswell

On Linux (without linuxbrew),

: sudo apt-get -y install git build-essential automake libcurl4-openssl-dev
: git clone -b release https://github.com/roswell/roswell.git
: cd roswell
: sh bootstrap
: ./configure --prefix=$HOME/.local
: make
: make install
: ~/.local/bin/ros setup   # expect ~5min

Step 2. Install arrival

#+begin_src
$ ~/.local/bin/ros install guicho271828/arrival
$ ~/.roswell/bin/arrival
Usage: [--notype] [-v[v[v]] | --verbose N] [-r|--relaxed] arrival domain problem planfile [trace-output]
     --notype    : The trace output will not contain the type predicates
-v | --verbose N : Specify the verbosity, from 0 to 3                   
-r | --relaxed   : Perform the relaxed planning instead                 
Got ARGV: NIL
            dynamic space size: 8388608000
      lisp implementation type: SBCL
   lisp implementation version: 1.4.12
              machine instance: masataro-ThinkPad-T460
                  machine type: X86-64
               machine version: Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz
                 software type: Linux
              software version: 4.4.0-145-generic
#+end_src

** Usage

: arrival [-v|-vv|-vvv|--verbose N] DOMAINFILE PROBLEMFILE PLANFILE [TRACEFILE]

+ PLANFILE    :: a SEXP file containing plan traces as action signatures.
+ PROBLEMFILE :: a PDDL problem file.
+ DOMAINFILE  :: a PDDL domain file.
+ TRACEFILE   :: An optional output file. Unless specified, the same information
                 is written to the standard output.
+ -v | -vv | -vvv | --verbose N :: verbosity, from level 1 to 3. Default is 0.

** Dependencies
This library is at least tested on implementation listed below:

+ SBCL 1.4.12 on X86-64 Linux 4.4.0-142-generic (author's environment)

Also, it depends on the following libraries:

+ trivia by *Masataro Asai* :
    NON-optimized pattern matcher compatible with OPTIMA, with extensible optimizer interface and clean codebase
+ alexandria by *Nikodemus Siivola <nikodemus@sb-studio.net>, and others.* :
    Alexandria is a collection of portable public domain utilities.
+ iterate by ** :
    Jonathan Amsterdam's iterator/gatherer/accumulator facility

** Author

Masataro Asai (guicho2.71828@gmail.com)

** Copyright

Copyright (c) 2019 Masataro Asai (guicho2.71828@gmail.com)

* License

Licensed under the LLGPL License.

[[arrival.svg]]

About

Yet Another Classical planning plan validator written in modern Common Lisp

Resources

Stars

13 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages