AnyLogic作业车间模型记录资源池活动制作甘特图问题求助
问题根源
On unit state change是状态切换触发型动作,仅在资源单元的忙碌/空闲状态发生变化的瞬间执行1次,不存在持续运行的上下文。你编写的while循环会直接占满AnyLogic的模型调度主线程,导致模型时间无法推进,因此看起来没有报错但完全无法运行。
正确实现方案
你不需要自行写循环采集状态,按照以下步骤操作即可:
- 第一步:根据你的资源池规模创建对应的数据存储对象
若为单单元资源池,直接新建1个普通DataSet组件即可,命名可设为machineGanttData;若为多单元资源池,可创建List<DataSet>批量存储每个单元的状态数据。 - 第二步:替换
On unit state change中的代码,删除所有while循环逻辑,仅保留单次状态记录代码:// 内置局部变量unit代表当前触发状态变化的资源单元 // time()获取当前模型时间,将当前时间点的状态写入数据集 machineGanttData.add(time(), unit.isBusy() ? 1 : 0); - 第三步:甘特图渲染
新增Time Plot组件,绑定上述数据集,将图表类型设置为阶梯图(Step Chart),Y轴范围固定为0~1,即可直接得到设备忙碌状态甘特图,1区间代表设备占用、0区间代表设备空闲。
更简便的原生方案
如果你不需要自定义状态采集逻辑,AnyLogic自带的Gantt Chart组件支持直接绑定资源池对象,无需编写任何代码即可自动生成所有资源单元的调度甘特图。
内容的提问来源于stack exchange,提问作者Rodrigo Lemos
相关产品推荐
相关产品推荐

