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

如何在输出元素中获取makespan时间?仿真停止失效问题排查

AnyLogic仿真停止与时间显示问题解答

问题描述

我在Main模块的销毁事件中编写了如下代码:

// Stop the simulation when all the jobs are done

if (jobs.size() == 0) {
    makespan = time();
    getEngine().finish(); // Pausiere die Simulation
    getEngine().getState();
}

遇到两个技术问题:

  • 调用getEngine().finish()后,仿真并未停止,时间仍在持续运行
  • 已配置输出元素和文本元素显示时间,但即使手动停止模型也无法获取该时间,推测是上述代码未生效导致

问题1:getEngine().finish()无法停止仿真的原因及修复

核心问题:销毁事件的触发逻辑不匹配

销毁事件(Destroy Event)仅在Main模块被销毁的瞬间执行一次,而非仿真运行过程中持续监控jobs集合状态。如果你的Main模块全程没有被销毁,这段代码根本不会执行,自然无法触发停止操作。

另外,getEngine().getState()只是获取当前仿真状态,不会对停止逻辑产生任何作用,可以直接删除。

修复方案

将监控逻辑移到**循环事件(Cyclic Event)**中,设置一个极小的触发间隔(比如0.1时间单位),让仿真持续检查任务状态:

// 在循环事件中编写的代码
if (jobs.size() == 0) {
    makespan = time();
    getEngine().finish();
}

同时确认jobs集合确实包含了所有需要监控的任务,没有遗漏未加入的任务实例。


问题2:无法获取显示时间的修复

核心原因

要么是代码未执行(比如销毁事件没触发),要么是makespan变量与UI元素的绑定存在问题。

修复方案

  1. 确保变量可被UI访问:在Main模块的变量面板中,将makespan设置为公开(Public),这样UI元素能正确读取它的值。
  2. 覆盖手动停止场景:在仿真的“停止”按钮点击事件中添加makespan = time();,确保无论自动停止还是手动停止,都能记录当前时间。
  3. 检查UI绑定设置:
    • 输出元素的「Value」属性选择main.makespan(如果Main模块的实例名为main)
    • 文本元素的「Text」属性设置为"" + main.makespan,将数值转为字符串显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:13:18