AnyLogic项目求助:如何让不同到达时间的Agent同时离开Delay块
AnyLogic实现Agent同时离开Delay块的解决方案
步骤1:配置Hold块
- 将Queue和Delay之间的Hold块,释放类型修改为
按条件,条件栏暂时留空。 - 确保Hold块的容量设置足够大,能容纳所有需要同步的Agent,避免出现溢出问题。
步骤2:创建释放所有Agent的函数
- 在模型树的
Functions节点右键,新建一个函数:- 返回类型选
void,函数名设为releaseAllAgents(可自定义)。 - 函数内写入代码:
你的Hold块名称.releaseAll();
示例:如果Hold块命名为holdSync,则代码为holdSync.releaseAll();
- 返回类型选
步骤3:设置触发释放的时机
根据你的需求选择触发逻辑:
场景1:等最后一个Agent到达Hold后触发
- 在Queue块的
On exit事件中添加代码:
如果总Agent数固定,也可以直接写数值,比如// 假设用totalAgents变量统计总需同步的Agent数量(提前在Source的On creation事件中让totalAgents++) if (holdSync.size() == totalAgents) { releaseAllAgents(); }holdSync.size() == 50
场景2:固定时间点触发
- 添加一个
Event块,设置好触发时间(比如模型运行后第30个时间单位)。 - 在Event块的
Action中调用函数:releaseAllAgents();
步骤4:配置Delay块
- 将Delay块的延迟时间设为固定值(比如
15,根据你的业务需求调整)。所有Agent被同步释放后会同时进入Delay块,最终同时离开。
内容的提问来源于stack exchange,提问作者Dimitris
相关产品推荐
相关产品推荐

