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

关于PDDL中when子句是否修改谓词的技术咨询

解答

核心结论:属于理解误区

PDDL中的when子句是纯条件触发逻辑,规则明确:

  • when的条件部分(第一个括号内的内容)仅负责读取当前状态的谓词值,不会修改任何谓词。
  • 只有当条件满足时,才会执行when的效果部分(第二个括号内的内容),这部分才会对状态中的谓词进行修改。

针对你的疑问的具体说明

  • 你提到的检查(light-on ?room),这个判断只是查看当前该房间的灯是否处于亮着的状态,绝对不会自动把它设为True。如果需要修改这个谓词的状态,必须在when的效果部分明确写出对应的操作:比如(light-on ?room)是将该谓词设为真,(not (light-on ?room))是将其设为假。
  • 看你提供的toggle-light动作里的第一个when子句:
    (when
        (and (not(light-on ?room)) (vampire-is-in ?room) (not(light-on ?clockwise-neighbor)))
        (and (light-on ?room) (not(vampire-is-in ?room)) (vampire-is-in ?clockwise-neighbor))
    )
    
    这里的(not(light-on ?room))只是读取当前灯的状态,只有当所有条件都满足时,才会执行效果里的(light-on ?room)来打开灯——这才是修改谓词的动作,而非条件判断本身。

你的领域定义中的问题提示

  • 语法错误:toggle-light动作的效果块里,第五个效果缺少开头的(when(原代码里被注释掉了开头,但后面的括号没匹配),会导致PDDL解析失败,需要补全或者删除这段无效代码。
  • 逻辑冗余:前三个when子句的条件存在大量重叠(都是针对灯未亮且吸血鬼在房间的场景),可能会导致效果冲突或者预期外的行为,建议合并逻辑,减少重复判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 10:29:59