0

私は PDDL と AI の計画領域に不慣れです。私は実際にシナリオでヒューマノイドが人間と対話するための計画を作成しています。シナリオは次のとおりです

  1. 人間が部屋に入る (ロボットといくつかのオブジェクトが部屋に存在する場所)
  2. ロボットが人を検知
  3. 検出後、人に挨拶
  4. 次に、人間がカップを求めます
  5. ロボットは人間がコーヒーを飲みたいと仮定し、人間が薬を飲んだ時間を人間に応答します (薬とコーヒーには 1 時間のギャップがあるはずです)。
  6. 人間は時間に反応する
  7. 時間が1時間のずれに一致する場合、ロボットはカップを見つけると応答します
  8. ロボットがテーブル上のカップを検出
  9. カップがテーブルの上にある人間に反応するロボット
  10. 人間がカップを選ぶ
  11. 人間がコップを持っていることをロボットが感知して挨拶する

私の PDDL ドメイン ファイルのロジックは次のとおりです。

(define (domain sp)
 (:requirements :typing :strips :adl)


 (:types    location agent item - object 
            robot human speak - agent 
            room - location
            fruit cup table - item
            clear polite listenatt - speak)

(:predicates    
        (at ?o - object ?l - location)
        (detected_human ?p - human  ?l - room)
        (greeted ?r - robot ?p - human)
        (detected_cup ?c - cup  ?l - room)
        (holded ?c - cup ?p - human)
        (medichecked ?r - robot ?p - human)
        (human_asked ?p - human)
        (robot_responded ?r - robot ?cl - clear ?pl - polite)
)


    (:action detect_human
        :parameters (?p - human ?r - robot ?l - location)
        :precondition (at ?r ?l)
        :effect (detected_human ?p ?l)
    )

    (:action detect_cup
        :parameters (?p - human ?c - cup ?r - robot ?l - location )
        :precondition (and (detected_human ?p ?l) 
                           (human_asked ?p) 
                           (medichecked ?r ?p) 
                           )
        :effect (detected_cup ?c ?l) 
    )

    (:action greet
        :parameters (?r - robot ?p - human ?l - location ?pl - polite ?cl - clear)
        :precondition (and (at ?r ?l) (detected_human ?p ?l)) 
        :effect (and (greeted ?r ?p) (robot_responded ?r ?cl ?pl))
    )

    (:action hold
        :parameters (?c - cup ?p - human ?l - location ?r - robot ?cl - clear ?pl - polite)
        :precondition (and (detected_human ?p ?l) 
                           (detected_cup ?c ?l) 
                           (robot_responded ?r ?cl ?pl) 
                           (medichecked ?r ?p) 

                           ) 
        :effect (holded ?c ?p)
    )    
    
    (:action check_medi
        :parameters (?p - human ?l - location ?r - robot)
        :precondition (human_asked ?p) 
        :effect (medichecked ?r ?p)
    )  
    
    (:action human_ask
        :parameters (?p - human ?l - location ?r - robot)
        :precondition (and (detected_human ?p ?l) (greeted ?r ?p))
        :effect (human_asked ?p)
    )  
    
    (:action robot_respond
        :parameters (?p - human ?l - location ?r - robot ?cl - clear ?pl - polite ?c -cup)
        :precondition (and (at ?r ?l) (detected_human ?p ?l)) 
        :effect (and (when (human_asked ?p) (robot_responded ?r ?cl ?pl))
                     (when (detected_cup ?c ?l) (robot_responded ?r ?cl ?pl)))
    )  
)

私の PDDL 問題ファイルは次のとおりです。

(define (problem test12)
(:domain sp)

(:objects person0 - Human 
          pepper0 - Robot 
          apple - Fruit
          cup0 - Cup
          table0 - Table
          room0 - Room
          clear0 - Clear
          polite0 - Polite)

(:init
(at pepper0 room0)


)
(:goal (holded cup0 person0)
)

現在、次の計画を生成します。


plan-found
(detect_human person0 pepper0 room0)
(greet pepper0 person0 room0 polite0 clear0)
(human_ask person0 room0 pepper0)
(check_medi person0 room0 pepper0)
(detect_cup person0 cup0 pepper0 room0)
(hold cup0 person0 room0 pepper0 clear0 polite0)

予想される計画は次のようなものにしたかった:


plan-found
(detect_human person0 pepper0 room0)
(greet pepper0 person0 room0 polite0 clear0)
(human_ask person0 room0 pepper0)
(robot_respond person0 polite0 clear0 room0)
(check_medi person0 room0 pepper0)
(robot_respond person0 polite0 clear0 room0)
(detect_cup person0 cup0 pepper0 room0)
(robot_respond person0 polite0 clear0 room0)
(hold cup0 person0 room0 pepper0 clear0 polite0)

効果と前提条件で与えられているのに、なぜrobot_respondアクションが計画に含まれていないのかわかりません。

この問題に関する方向性があれば感謝します。ロジックを正しくするのに苦労している1週間以上経ちました。

4

1 に答える 1