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

AnyLogic中如何通过运行时复选框动态更新停机时长与间隔?

解决AnyLogic停机模块参数动态更新问题

核心问题原因

AnyLogic的Downtime模块默认仅在模型初始化时读取一次参数值,后续变量更新不会自动同步到模块内部的调度逻辑,因此直接绑定普通变量无法实现动态调整。

可行实现步骤

1. 用动态函数替换固定参数

不给停机模块的Total time between occurrences和Task duration绑定普通变量,改用返回值随复选框状态变化的函数:

  • 新建两个函数,例如getDowntimeInterval()和getDowntimeDuration()
  • 函数内容分别编写:
    return checkbox.isSelected() ? 10 : 5;
    
    (注意与模型时间单位保持一致,此处假设为分钟)

2. 重置停机模块调度逻辑

仅修改函数还不够,需在复选框状态变化时,强制让停机模块重新读取参数并刷新调度:

  • 在复选框的On click事件中添加代码:
    // 假设停机模块名为downtime1,关联的资源池为resourcePool1
    downtime1.cancelAllDelays();
    downtime1.scheduleNextOccurrence();
    
    这段代码会取消当前等待的下一次停机调度,立即根据新的函数返回值重新计算并安排下一次停机。

3. 正在运行的停机场景处理(可选)

若勾选复选框时资源正处于停机状态,可根据需求调整当前停机的剩余时长:

  • 在复选框On click事件中补充判断逻辑:
    if(downtime1.isOccurring()){
        double remainingTime = downtime1.getRemainingDuration();
        downtime1.stop();
        // 按新时长比例调整剩余时间后重启停机(逻辑可按需修改)
        downtime1.start(checkbox.isSelected() ? remainingTime * 2 : remainingTime / 2);
    }
    
    无需调整的话可跳过此步骤。

关键说明

  • 必须使用函数而非普通变量绑定参数,因为函数每次调用都会重新计算返回值,而变量仅在初始化时读取一次
  • 必须调用停机模块的cancelAllDelays()和scheduleNextOccurrence()方法,才能让新参数生效

内容的提问来源于stack exchange,提问作者Beatriz Valladão

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:03:16