PDDL患者转运场景代码无控制台报错但规划器无求解结果求助
PDDL代码问题排查结果
你的代码语法完全合规,所以调试控制台没有错误提示,所有问题都是业务逻辑层面的错误,导致规划器无法找到满足目标的动作序列,核心问题如下:
- mover动作设计错误
现有mover动作多了冗余的?p - paciente参数,且前置条件中(not (hospitalp ?p))的约束完全不符合业务逻辑:救护车移动不需要绑定特定病人,也和病人是否已送达医院无关。空车移动时规划器甚至无法找到合法的?p参数完成绑定,直接卡死动作生成。 - subir动作的effect逻辑错误
现有subir的effect里错误添加了(not (ambulancia ?l))语句,病人上车后救护车并不会消失,这一语句会直接删除救护车的位置事实。后续所有动作(mover、bajar)都需要(ambulancia ?l)作为前置条件,执行完subir后直接没有符合条件的动作可执行,规划自然无法推进。 - bajar动作逻辑错误
- 前置条件缺失
(hospital ?l)约束:你要求病人必须送到医院,但现有逻辑允许在任意位置放下病人,无法满足目标中病人需在l1(预设医院)的要求。 - effect里错误添加了
(hospital ?l)语句:医院是初始状态就固定的设施,不是放下病人就会把当前位置变成医院,这条语句会破坏位置的属性定义。
- 前置条件缺失
修正后的核心代码片段
修正后的mover动作
(:action mover :parameters (?x - localizacion ?y - localizacion) :precondition ( and (ambulancia ?x) (adjacent ?x ?y)) :effect (and (not (ambulancia ?x)) (ambulancia ?y)) )
修正后的subir动作
(:action subir :parameters (?p - paciente ?l - localizacion) :precondition (and (vacia-ambulancia) (ambulancia ?l) (ubicacion ?p ?l)) :effect (and (not (vacia-ambulancia)) (not (ubicacion ?p ?l)) (llena-ambulancia)) )
修正后的bajar动作
(:action bajar :parameters (?p - paciente ?l - localizacion) :precondition (and (llena-ambulancia) (ambulancia ?l) (not (hospitalp ?p)) (hospital ?l)) :effect (and (vacia-ambulancia) (not (llena-ambulancia)) (ubicacion ?p ?l) (hospitalp ?p)) )
修正后重新运行规划器即可生成可行的病人转运序列。
内容的提问来源于stack exchange,提问作者NICO POLIS
相关产品推荐
相关产品推荐

