プランニング記述言語PDDLの簡単な紹介

PDDLはPlanning Domain Descrition Language の略で, 1998年にDrew McDermott によって最初のIPC(International Planning Competition の略) のために開発されたプランニング言語です. PDDLの文法表現はLisp のSyntaxに基づくものです. その使用方法としてはPDDLの問題を解く汎用的なプランナに対して, PDDLで記述したドメインファイル(述語, オペレータ等) と問題ファイル(オブジェクト, 初期状態, ゴール状態) を入力として与えることで, 最終的にそのプランニング問題を解くための一連のアクション列を得ることができます.

PDDLで記述したプランニングドメインの具体例として, 積木の世界で表現された古典的なプランニングの問題のBlock WorldをPDDLで実装した例について説明します.


  • 以下はBlock Worldドメインの概要です.
    • このドメインでは, ロボットアームとテーブルの上に置かれた積木の集まりから構成されています.
    • 積木は積み上げることが可能ですが, 1つの積木の上には1 つの積木しか置くことができません.
    • ロボットアームは, 1つの積木を持ち上げ, テーブルの上か他の積木の上に移動することが可能です.
    • またロボットアームは1度に1 つしか積木を持ち上げることしかできないため, 他の積木が上に積まれているときはそれを持ち上げることはできないです.
;; Block WorldのPDDLによるドメイン記述
(define (domain blocks)
   ;; 使用する5つの述語です.
   (:predicates
     ;; ブロック?xが?yの上に載っていることを表す述語です.
     (on ?x ?y)
     ;; ブロック?xがテーブルの上に載っていることを表す述語です.
     (ontable ?x)
     ;; ブロック?xの上に何も載っていないことを表す述語です.
     (clear ?x)
     ;; ロボットアームが何も持っていないことを表す述語です.
     (handempty)
     ;; ロボットアームがブロック?xを掴んでいることを示す述語です.
     (holding ?x)
    )
  ;; ロボットアームでテーブルの上に載っているブロック?xを掴むアクションです.
  (:action pick-up
   :parameters (?x)
   ;; 前提条件の一覧です.
   :precondition (and (clear ?x)
                      (ontable ?x) (handempty))
   ;; アクション実行後に生成する述語です.
   :effect (and (not (ontable ?x))
                (not (clear ?x)) (not (handempty))
               (holding ?x)))
   ;; ロボットアームがブロック?xをテーブルの上に置くアクションです.
  (:action put-down
   :parameters (?x)
   :precondition (holding ?x)
   :effect (and (not (holding ?x))
                (clear ?x) (handempty) (ontable ?x)))
   ;; ロボットアームが掴んでいるブロック?xをブロック?yの上に置くアクションです.
  (:action stack
   :parameters (?x ?y)
   :precondition (and (holding ?x) (clear ?y))
   :effect (and (not (holding ?x)) (not (clear ?y))
           (clear ?x)(handempty) (on ?x ?y)))
   ;; ロボットアームがブロック?yの上に載っているブロック?xを掴むアクションです.
 (:action unstack
  :parameters (?x ?y)
  :precondition (and (on ?x ?y)
                     (clear ?x) (handempty))
  :effect (and (holding ?x) (clear ?y)
               (not (clear ?x))(not (handempty)) (not (on ?x ?y)))))

このようにシンボリックなタスクプランニングのドメインをPDDLで記述して, それとその問題を汎用的なPDDLプランナに渡せば, 一連の解を得ることができます.
ゴール指向型エージェントのAIで利用できるかもしれないです.