Spectra

View the Project on GitHub naveensundarg/Spectra

Spectra

Spectra is a general purpose planning system. It extends STRIPS-style planning by allowing arbitray first-order formulae for state descriptions and background knowledge rather than just predicates. This allows, for instance, handling domains with infinite or unbounded objects elegantly (among other things).

Overview Presentation (pdf)

Spectra’s Architecture

spectra-arch.png

Example Input File

examples.png

Scaling Up

Two approaches:

  1. Procedural Attachments: Special purpose procedural code that can bypass strict formal reasoning.

  2. μ-methods: Written in denotational proof language. Preserves soundness by letting us write down commonly used patterns of reasoning (a bit unwieldy integration now than the first approach)

;; (removeFrom  ?x ?y) => "Remove ?x from ?y"
;; (placeInside  ?x ?y) ==> "Place ?x inside ?y"
(define-method planMethod [?b ?c ?d]
  {:goal [(In ?b ?c) (In ?c ?d)]
   :while [(In ?b ?d) (Empty ?c)
           (< (size ?c) (size ?d))
           (< (size ?b) (size ?c))]
   :actions [(removeFrom  ?b ?d) (placeInside  ?b ?c) (placeInside  ?c ?d)]})

Roughly, a method has conditions that the goal and background + start state should satisfy. If the conditions are satisfied, a plan template is generated (note the variables). The planner then verifies if the plan template works, if so it outputs the plan.

Spectra on a Seriated Cup Challenge

download-3.gif