微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 PDDL 中放置条件?

如何解决如何在 PDDL 中放置条件?

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

这是连接路径: 位置 1 -> 位置 2 -> 位置 4 -> 位置 3

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

代码如下:

域:

(define (domain 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) (:域平面_Str) (:objects l1 l2 l3 l4 amblnc px1 px2 医院) (:init (医院 l1) (Ambulancia amblnc) (位置 l1) (位置 l2) (位置 l3) (位置 l4) (Paciente px1) (Paciente px2) (Libre amblnc) (at-ambulancia l1) (at-paciente px1 l4) (at-paciente px2 l3) ) (:goal (和 (at-paciente px1 l1) (at-paciente px2 l1) ) ) )

希望有人能帮助我。

解决方法

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

(adjacent location1 location2)   
(adjacent location2 location3)

但不是(adjacent location1 location4)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。