AnyLogic系统动力学模型中条件触发事件重启问题求助
AnyLogic系统动力学模型:流入启停的条件事件解决方案
问题背景
搭建了时间单位为年的简易系统动力学模型,需求如下:
- 触发停止流入:当存量(stock)≥2158590 或
time()为5的倍数时,停止存量的流入(inflow) - 触发重启流入:当存量<2158590(存在移除1000000的流出outflow)且
time()不为5的倍数时,重启流入 - 此前尝试添加
event.restart();、拆分事件、新增反向触发事件等方法均未解决第5年停止后无法重启的问题
可行解决方案
核心是拆分两个独立的条件触发事件,分别管控「停止流入」和「重启流入」,避免逻辑冲突:
1. 创建「停止流入」事件(条件触发)
- 触发条件:
stock >= 2158590 || (time() % 5 == 0 && time() > 0)注:添加
time()>0避免模拟初始时刻(time=0)误触发 - 动作代码:
inflow.set_rate(0); // 若流入由变量控制,替换为`inflowRate = 0;` - 事件属性:设置为「单次触发」(不勾选重复触发)
2. 创建「重启流入」事件(条件触发)
- 触发条件:
stock < 2158590 && (time() % 5 != 0) - 动作代码:
inflow.set_rate(原始流入速率); // 替换为模型中流入的初始值或计算逻辑,比如`inflowRate = 100000;` event.restart(); // 持续监控重启条件 - 事件属性:设置为「重复触发」
关键注意事项
- 确认流出(outflow)逻辑正常,确保存量能在触发流出后降至2158590以下
- 检查模型时间单位是否为年,避免
time()取模计算出错 - 若流入是自定义函数驱动,需对应调整启停逻辑(比如禁用/启用函数)
内容的提问来源于stack exchange,提问作者Vianey Rueda
相关产品推荐
相关产品推荐

