如何在AnyLogic中阻止Delay+GoTo总规模为6时代理离开Queue
解决AnyLogic中Queue+GoTo+Delay的容量控制问题
要实现Delay模块与GoTo路径中的代理总数不超过6时,才允许代理离开Queue,可以按以下步骤操作:
1. 追踪GoTo模块中的代理数量
AnyLogic的GoTo移动模块本身没有内置的size属性统计当前正在移动的代理数,需要手动追踪:
- 在模型中添加一个整数变量(比如命名为
agentsInGoTo),初始值设为0。 - 双击GoTo模块,在On enter事件中写入代码:
agentsInGoTo++;(代理开始移动时计数+1)。 - 在GoTo模块的On exit事件中写入代码:
agentsInGoTo--;(代理完成移动后计数-1)。
2. 设置Queue模块的离开条件
Queue模块默认会在下游模块可接收时放行代理,需要自定义条件限制总容量:
- 双击Queue模块,找到Exit condition(离开条件)选项(默认值为
true)。 - 将条件修改为:
delay.size + agentsInGoTo < 6- 其中
delay.size是Delay模块当前的代理数量,agentsInGoTo是正在GoTo路径上的代理数量,两者之和小于6时,才允许代理离开Queue。
- 其中
3. 简化场景的替代方案(可选)
如果你的GoTo模块直接连接到Delay模块,且移动时间极短、不会出现“代理在移动过程中Delay被填满”的情况,也可以直接将Queue的离开条件设为delay.size < 6。但移动时间较长时,建议优先用步骤1的计数方式,避免代理到达Delay时因容量已满被阻塞。
内容的提问来源于stack exchange,提问作者Aqeel Tariq
相关产品推荐
相关产品推荐

