如何在AnyLogic中搭建有限呼叫人口仿真模型?
AnyLogic 有限呼叫人口模型(固定10个Agent)搭建方案
有限呼叫人口模型的核心是固定数量的Agent循环参与服务流程,你之前尝试将Agent返回Source的思路不可行,因为Source是仅用于生成Agent的输出型节点,无输入端口,以下是两种可落地的实现方案:
方案1:流程网络直接循环法(适合简单服务场景)
无需额外编写逻辑,直接通过流程节点连接实现循环:
- 将Source节点的到达方式设置为一次性到达,到达数量设为10,同时取消Source节点「达到最大到达数后停止模型」的勾选,避免模型提前终止。
- 原有服务流程(排队、服务等节点)的末端不要连接Sink节点(Sink会销毁Agent),直接将服务完成后的输出端口连回流程的起始节点(如需重新排队就接Queue输入,无需排队直接接对应服务节点的输入即可)。
- 如果需要设置Agent两次参与服务的间隔,可在服务完成后新增一个
Delay节点,设置对应间隔时长后再连回流程起点。
方案2:Agent池+状态机控制法(适合带复杂自定义行为的场景)
如果你的Agent除了参与服务外还有其他自定义行为逻辑,用该方案更灵活:
- 在MainAgent中新建一个自定义Agent的种群,数量固定设为10,不需要用Source节点生成Agent。
- 给自定义Agent添加状态机,设置空闲、等待服务、服务中、冷却中四个状态,按需配置状态切换条件。
- 用
Enter节点替代原有Source作为流程入口,当Agent状态切换为等待服务时,调用Enter节点的inject()方法将该Agent注入流程。 - 流程末端用
Leave节点将完成服务的Agent送出流程,修改其状态为冷却中,冷却时长到后切换为空闲/等待服务状态,触发下一次流程注入。
你之前设置Source到达上限10后模型自动停止,是因为默认勾选了「到达后停止模型」选项,即使取消该选项也无法实现循环逻辑,因为Source生成的Agent走到Sink会被直接销毁,去掉Sink节点让流程闭环是核心要求。
内容的提问来源于stack exchange,提问作者Mykola Lazarenko
相关产品推荐
相关产品推荐

