2017-09-01 12 views
0

をコンパイル:PDDLエラー私はPDDLに新しい、私はblocksworldの問題をしようとしているのですが、私はエラーを得た

Failed to parse the problem -- Not args must be a list with only one element, got [Primitive sobre (default_object ?obj, default_object ?obj2), Primitive libre (default_object ?obj3), Primitive en (default_object ?obj, default_object ?from)] /tmp/solver_planning_domains_tmp_4BmsZdP37zJXS/domain.pddl: syntax error in line 16, '(': domain definition expected

私のファイルは、これらは、以下のとおりです。

(define (domain blocly) 
    (:predicates (espacio ?e) 
     (ficha ?t) 
     (sobre ?t ?t) 
     (en ?t ?e) 
     (vacio ?e) 
     (libre ?t)) 


    (:action movefichaficha 
     :parameters (?ficha ?ficha2 ?ficha3 ?from ?to) 
     :precondition (and (ficha ?ficha) (ficha ?ficha2) (ficha ?ficha3) (espacio ?from) (espacio ?to) 
        (sobre ?ficha ?ficha2) (libre ?ficha) (libre ?ficha3) (en ?ficha ?from) (en ?ficha2 ?from) 
        (en ?ficha3 ?to)) 
     :effect (and (sobre ?ficha ?ficha3) (en ?ficha ?to) (libre ?ficha2) 
       (not (sobre ?ficha ?ficha2) (libre ?ficha3) (en ?ficha ?from)))) 

    (:action movefichaesp 
     :parameters (?ficha ?ficha2 ?from ?to) 
     :precondition (and (ficha ?ficha) (ficha ?ficha2) (espacio ?from) (espacio ?to) 
        (sobre ?ficha ?ficha2) (vacio ?to) (en ?ficha ?from) (en ?ficha2 ?from)) 
     :effect (and (libre ?ficha2) (en ?ficha ?to) (arriba ?ficha ?to) 
       (not (vacio ?to) (en ?ficha ?from) (sobre ?ficha ?ficha2)))) 

    (:action moveoespficha 
     :parameters (?ficha ?ficha2 ?from ?to) 
     :precondition (and (ficha ?ficha) (ficha ?ficha2) (espacio ?from) (espacio ?to) 
        (libre ?ficha) (libre ?ficha2) (en ?ficha ?from) (en ?ficha ?to)()) 
     :effect (and (vacio ?from) (en ?ficha ?to) (sobre ?ficha ?ficha2) 
      (not (libre ?ficha2) (en ?ficha ?from) (en ?ficha ?from))))) 

及びこれら:

(define (problem blockly-world) 
    (:domain blocly) 
    (:objects t1 t2 t3 e1 e2 e3) 
    (:init (ficha t1) 
      (ficha t2) 
      (ficha t3) 
      (espacio e1) 
      (espacio e2) 
      (espacio e3) 
      (sobre t3 t2) 
      (sobre t2 t1) 
      (en t1 e1) 
      (en t2 e1) 
      (en t3 e1) 
      (libre t3) 
      (vacio e2) 
      (vacio e3)) 
    (:goal (and (sobre t1 t2) 
       (sobre t2 t3))) 

答えて

0

ソースコードには多くの問題があります。

  • 問題ファイルは例えば、不正に使用される最終)

  • 単項not論理演算を欠きます

    (not (vacio ?to) (en ?ficha ?from) (sobre ?ficha ?ficha2)) 
    

    ドメインファイル宣言されていない述語、arribaを使用しています

    (not (vacio ?to)) 
    (not (en ?ficha ?from)) 
    (not (sobre ?ficha ?ficha2)) 
    
  • ように書き換える必要があります。 enと同じ定義があり、(:init ...)ブロックには言及されていませんので、arribaenに変更して最後のオカレンスを変更することを忘れているため、これがタイプミスかどうかはわかりません。エラーでない場合は、

    (arriba ?t ?e) 
    

    を述語のリストに追加して修正できます。 問題ファイル(:init ...)ブロックに何かを追加する必要があるかどうかを自分で確認する必要があります。

    ブロッキー:

以下

、あなたは、最初の2つの特定された問題への適切な修正をソースコードの適切にインデントバージョン、および第三の問題を解決しようとする試みを見つけることができます-prob.pddl:

(define (problem blockly-world) 
    (:domain blocly) 
    (:objects t1 t2 t3 e1 e2 e3) 
    (:init 
      (ficha t1) 
      (ficha t2) 
      (ficha t3) 
      (espacio e1) 
      (espacio e2) 
      (espacio e3) 
      (sobre t3 t2) 
      (sobre t2 t1) 
      (en t1 e1) 
      (en t2 e1) 
      (en t3 e1) 
      (libre t3) 
      (vacio e2) 
      (vacio e3) 
    ) 
    (:goal (and 
       (sobre t1 t2) 
       (sobre t2 t3) 
     ) 
    ) 
) 

ブロックdomain.pddl:

(define (domain blocly) 
    (:predicates 
     (espacio ?e) 
     (ficha ?t) 
     (sobre ?t ?t) 
     (en ?t ?e) 
     (arriba ?t ?e) 
     (vacio ?e) 
     (libre ?t) 
    ) 

    (:action movefichaficha 
     :parameters (?ficha ?ficha2 ?ficha3 ?from ?to) 
     :precondition 
      (and 
       (ficha ?ficha) 
       (ficha ?ficha2) 
       (ficha ?ficha3) 
       (espacio ?from) 
       (espacio ?to) 
       (sobre ?ficha ?ficha2) 
       (libre ?ficha) 
       (libre ?ficha3) 
       (en ?ficha ?from) 
       (en ?ficha2 ?from) 
       (en ?ficha3 ?to) 
      ) 
     :effect 
      (and 
       (sobre ?ficha ?ficha3) 
       (en ?ficha ?to) 
       (libre ?ficha2) 
       (not (sobre ?ficha ?ficha2)) 
       (not (libre ?ficha3)) 
       (not (en ?ficha ?from)) 
      ) 
    ) 

    (:action movefichaesp 
     :parameters (?ficha ?ficha2 ?from ?to) 
     :precondition 
      (and 
       (ficha ?ficha) 
       (ficha ?ficha2) 
       (espacio ?from) 
       (espacio ?to) 
       (sobre ?ficha ?ficha2) 
       (vacio ?to) 
       (en ?ficha ?from) 
       (en ?ficha2 ?from) 
      ) 
     :effect 
      (and 
       (libre ?ficha2) 
       (en ?ficha ?to) 
       (arriba ?ficha ?to) 
       (not (vacio ?to)) 
       (not (en ?ficha ?from)) 
       (not (sobre ?ficha ?ficha2)) 
      ) 
    ) 

    (:action moveoespficha 
     :parameters (?ficha ?ficha2 ?from ?to) 
     :precondition 
      (and 
       (ficha ?ficha) 
       (ficha ?ficha2) 
       (espacio ?from) 
       (espacio ?to) 
       (libre ?ficha) 
       (libre ?ficha2) 
       (en ?ficha ?from) 
       (en ?ficha ?to) 
      ) 
     :effect 
      (and 
       (vacio ?from) 
       (en ?ficha ?to) 
       (sobre ?ficha ?ficha2) 
       (not (libre ?ficha2)) 
       (not (en ?ficha ?from)) 
       (not (en ?ficha ?from)) 
      ) 
    ) 
) 

コードが正しくも解を求める私のマシン上ソルバfast-downward.pyPDDLによってが解析されます。モデル化しようとしているものがわからないので、モデル化したいものと一致するかどうかを検証することができません。


注:あなただけの個人的な理由のために学習している場合でも、あなたの述語、オブジェクトと変数のための英語名前を使用しての習慣になって検討してください。さらに、ソースコードを字下げして、あなたが扱っている状況を適切に記述することが、アップポーズとあなたの質問に対する良い答えの両方を引き付けるという二重の利点があると考えてください。

+0

ありがとうございます!家に帰るときに試してみるよ。初心者のミスをおかけして申し訳ありません。私はこのから学ぶことを確認します:) – Jamidd

関連する問題

 関連する問題