如何在AnyLogic中让每第7个Agent从Output Block的False端口流出?
在AnyLogic的Output Block中分离每第7个Agent
有两种简单的实现方式,根据你的模型需求选择:
方案一:基于Agent自身编号(适合需要保留Agent顺序信息的场景)
- 给你的Agent类型添加一个整数属性,命名为
sequenceNumber(用来标记每个Agent的生成顺序)。 - 在生成Agent的Source块中,设置On exit动作,给该属性赋值:
- 可以用全局计数器:先创建一个int变量
agentCounter(初始值0),然后在Source的On exit中写:agentCounter++; agent.sequenceNumber = agentCounter; - 或者直接利用种群计数:
agent.sequenceNumber = getPopulationSize(你的Agent类型) + 1;
- 可以用全局计数器:先创建一个int变量
- 打开目标Output Block的属性面板,在Condition栏输入表达式:
agent.sequenceNumber % 7 != 0- 逻辑说明:编号不是7的倍数的Agent会从True端口流出,编号为7、14...700这类7的倍数的Agent会从False端口流出,完全匹配你的需求。
方案二:基于Output Block的进入计数(无需修改Agent类型)
- 在模型中创建一个整数变量
outputCounter,初始值设为0。 - 选中目标Output Block,在On enter动作中添加代码:
outputCounter++; - 在Output Block的Condition栏输入表达式:
outputCounter % 7 != 0- 逻辑说明:每有一个Agent进入Output Block,计数器自增1;当计数器值为7的倍数时,Condition返回false,Agent从False端口流出,其余从True端口流出。
内容的提问来源于stack exchange,提问作者Ehsan Ul Haque
相关产品推荐
相关产品推荐

