基于AnyLogic流程建模库实现同批次智能体同步离场的咨询
解决AnyLogic中同批次智能体同步离场的问题(仅用Process Modelling Library)
核心思路
给同一时间到达的智能体打上相同的批次标识,让它们在离场前等待同批次所有成员完成各自流程,再一起进入Sink。
步骤1:给智能体添加批次标识
- 打开你的智能体(Agent)编辑界面,进入「Parameters」面板。
- 添加一个整数类型的参数,命名为
batchId(用来标记所属批次)。
步骤2:配置Source生成同批次智能体
- 在Main模块的「Variables」面板,添加两个全局整数变量:
currentBatchId:初始值设为0,用来记录当前批次ID。batchSize:设为你每次从Source生成的智能体数量(比如5,根据你的需求调整)。
- 回到Source组件:
- 「Number of agents per arrival」设为
batchSize。 - 在「On exit」代码框中输入:
agent.batchId = currentBatchId; - 在「Actions」的「After arrival」代码框中输入:
currentBatchId++;
- 「Number of agents per arrival」设为
步骤3:用Wait块实现同批次同步
- 从Process Modelling Library拖入一个
Wait块,放在智能体各自处理流程的末尾、Sink之前。 - 选中Wait块,在「Wait condition」中输入代码:
(如果担心统计范围包含已离场的智能体,可替换为count(agent.batchId == this.agent.batchId, main.allAgents) == batchSizecount(agent.batchId == this.agent.batchId, waitBlock.agents()) == batchSize,其中waitBlock是你这个Wait块的名称)
步骤4:连接流程并测试
- 将智能体处理流程的出口连接到Wait块,再把Wait块的出口连接到Sink。
- 运行模型,同一批次到达的智能体就会在Wait块等待所有同批次成员完成流程后,同步进入Sink离场。
内容的提问来源于stack exchange,提问作者Devansh Gala
相关产品推荐
相关产品推荐

