You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PDDL领域文件变量未声明及语法错误问题求助

解决PDDL领域文件的两个问题

问题1:变量?m和?p未声明

PDDL要求动作内使用的所有变量必须在:parameters部分明确声明并绑定类型。如果你的diagnose-patient动作涉及医生(?m)和病人(?p),需在参数列表中补充这两个变量的定义。

修正示例:

假设领域中定义了doctor和patient两种类型,修正后的动作参数部分如下:

(:action diagnose-patient
 :parameters (?m doctor ?p patient)  ; 声明变量?m(医生)和?p(病人)
 :precondition (and (available ?m) (needs-diagnosis ?p))  ; 示例前提条件
 :effect ...  ; 后续修正的效应部分
)

确保动作的precondition和effect中用到的所有变量,都已在:parameters中完成声明。

问题2:diagnose-patient动作的effect语法错误

经典PDDL不允许在动作效应中直接用(or ...)表示不确定结果——经典规划基于确定性状态转移逻辑。你试图表达的“诊断后确定患者是否患肺癌”,需要调整建模方式:

方案1:使用条件效应(支持PDDL 2.1及以上版本)

若规划器支持条件效应,可以根据患者真实状态设置诊断结果,示例如下:

:effect (and
    (not (needs-diagnosis ?p))  ; 标记诊断完成
    (when (has-lung-cancer ?p) (diagnosed-positive ?p))  ; 患病则标记确诊阳性
    (when (not (has-lung-cancer ?p)) (diagnosed-negative ?p))  ; 未患病则标记确诊阴性
)

方案2:拆分动作(适配不支持条件效应的规划器)

将诊断动作拆分为两个明确的动作,分别对应确诊患病和未患病的场景:

; 确诊患者患肺癌的动作
(:action diagnose-positive
 :parameters (?m doctor ?p patient)
 :precondition (and (available ?m) (needs-diagnosis ?p) (has-lung-cancer ?p))
 :effect (and (not (needs-diagnosis ?p)) (diagnosed-positive ?p))
)

; 确诊患者未患肺癌的动作
(:action diagnose-negative
 :parameters (?m doctor ?p patient)
 :precondition (and (available ?m) (needs-diagnosis ?p) (not (has-lung-cancer ?p)))
 :effect (and (not (needs-diagnosis ?p)) (diagnosed-negative ?p))
)

方案3:建模认知状态(需支持认知PDDL扩展)

如果需要显式表示智能体对患者状态的未知认知,可以使用认知PDDL扩展,添加(knows ?m (has-lung-cancer ?p))这类谓词,诊断动作的效应为让智能体获取该知识。这种方式需要规划器支持认知扩展,如POPF2或PRP。

内容的提问来源于stack exchange,提问作者Ndinelago

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 07:32:49