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
相关产品推荐
相关产品推荐

