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

在PDDL中如何将计划启动后的累计时间作为变量访问?

PDDL中全局累计时间与成本计算的解决方案

核心结论

你要用到的计划启动后总累计时间,和持续效果里的#t是完全不同的变量:#t仅代表当前持续动作的已执行时长,无法直接用来表示全局时间线的累计值。

问题(a):POPF拒绝#t的原因

POPF规划器对#t的使用场景有严格限制:它只能用于和当前动作持续时间直接绑定的线性效果(比如按动作时长累计热量的场景)。你把#t和动态变化的num-not-yet-fixed变量做乘法,属于非线性效果定义,超出了POPF的支持范围,因此会被拒绝。

问题(b):实现全局累计时间的方法

要获取计划启动后的总累计时间,需要手动维护一个全局时间变量,具体步骤如下:

  1. 初始化全局时间:在问题的初始状态中添加(= (global-time) 0)
  2. 添加全局时间更新动作:定义一个持续运行的背景动作,自动累计时间:
    (durative-action update-global-time
        :duration (= ?duration 1)  # 按1时间单位粒度更新,可根据需求调整
        :condition (and (at start (>= (global-time) 0)))
        :effect (and (increase (global-time) ?duration)))
    
    如果是连续时间场景,可将?duration设为一个极小值,或者使用连续时间的语法定义。
  3. 修改成本计算逻辑:用全局时间变量(global-time)替代#t,你的效果定义改为:
    (increase (total-cost) (* (global-time) (num-not-yet-fixed ?group)))
    
    这样就能实现“后期修复待处理项成本更高”的设计目标。

注意事项

确保你的PDDL域定义包含必要的需求声明:(:requirements :typing :durative-actions :continuous-effects :action-costs),POPF需要这些需求来支持持续动作和成本计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 13:33:24