1

我正在学习如何在 IA 课程中使用 PDDL,我必须编写一个计划,我需要从 location4 接一个人并将其放在 location1 中,还要在 location3 中选择一个人并将其也放在 location1 中。我已经有了移动到位置选择人,移动到命运位置并放下它的代码。但是有些规则我不能放在代码上,我需要遵循一条连接路径,但我不知道如何设置这些条件:

这是连接路径:Location1 -> Location2 -> Location4 -> Location3

我有从一个位置到另一个位置的代码,但我不知道如何设置一个不能直接从位置 1 到位置 4 的条件

这是代码:

领域:

(定义(域planeacion_Str)

(:predicates (Hospital ?h)
    (Ambulancia ?a)
    (Location ?l)
    (Paciente ?px)
    (Libre ?a)
    (Ocupado ?a ?px)
    (at-ambulancia ?l)
    (at-paciente ?px ?l)
    
)

(:action Conducir
    :parameters  (?de ?para)
   :precondition (and  (Location ?de) (Location ?para) (at-ambulancia ?de))
   :effect (and  (at-ambulancia ?para)
         (not (at-ambulancia ?de)))
)

(:action subirPaciente
    :parameters (?pcte ?lctn ?amblnc)
   :precondition  (and  (Paciente ?pcte) (Location ?lctn) (Ambulancia ?amblnc)
            (at-paciente ?pcte ?lctn) (at-ambulancia ?lctn) (Libre ?amblnc))
   :effect (and (Ocupado ?pcte ?amblnc)
        (not (at-paciente ?pcte ?lctn)) 
        (not (Libre ?amblnc)))
)

(:action bajarPaciente
    :parameters  (?pcte ?lctn ?amblnc)
   :precondition  (and  (Paciente ?pcte) (Location ?lctn) (Ambulancia ?amblnc)
            (Ocupado ?pcte ?amblnc) (at-ambulancia ?lctn))
   :effect (and (at-paciente ?pcte ?lctn)
        (Libre ?amblnc)
        (not (Ocupado ?pcte ?amblnc)))
))

(define (problem practica_Planeacion_pblm) (:domain planeacion_Str) (:objects l1 l2 l3 l4 amblnc px1 px2 hospital) (:init (Hospital l1) (Ambulancia amblnc) (Location l1) (Location l2) (Location l3) (Location l4) (Paciente px1) (Paciente px2) (Libre amblnc) (at-ambulancia l1) (at-paciente px1 l4) (at-paciente px2 l3) ) (:goal (and (at-paciente px1 l1) (at-paciente px2) l1))))

希望可以有人帮帮我。

4

1 回答 1

1

您需要为您的移动动作添加一个前提条件,即您只能在相邻位置之间移动;然后在初始状态中添加相邻位置的列表作为谓词:

(adjacent location1 location2)   
(adjacent location2 location3)

但不是(adjacent location1 location4)

于 2021-06-01T17:12:08.510 回答