You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AnyLogic中合并状态图与流程?流程调用异常及返回问题排查

问题分析与解决方案

1. 仅首个人员进入流程的问题

你在Pharmacy状态中调用enter1.take(this)导致只有第一个人能进入流程,核心原因是:

  • 默认情况下,流程的Seize块(即你说的enter1)容量为1,后续人员无法被接纳。
  • 直接在状态图的状态内调用take(this),无法保证每个到达的Person都能触发该动作。

解决方法:

  • 调整enter1(Seize块)的Capacity参数,设置为实际药房窗口数,或直接设为Infinite。
  • 把enter1.take(this)的调用移到Person到达Pharmacy的触发逻辑中:比如在GIS区域的on enter事件,或者状态图中“到达Pharmacy”的转移动作里,确保每个Person到达时都会执行该调用。

2. 从流程返回状态图的逻辑修正

你当前的转移弧设置存在逻辑缺陷:直接从Pharmacy状态到家的转移没有触发条件,会导致Person还没完成服务就直接离开,同时流程和状态图的衔接断裂,Person进入流程后无法回到状态图。

正确实现步骤:

  1. 在流程的Exit块(最后一个节点)的on exit事件中,给当前Person发送触发信号:send(this, "serviceFinished")。
  2. 在Person的状态图中,给Pharmacy状态添加一条事件触发的转移弧:触发事件选择serviceFinished,目标状态设为“前往家”的状态或直接到家的状态。
  3. 删除原来无触发条件的Pharmacy到家的转移弧,避免提前触发。

3. 统计指标的实现建议

  • 队列长度:直接调用流程中Queue块的size()属性,或Seize块的queue.size(),将数值绑定到仪表盘或存入数据集。
  • 设施利用率:使用Seize块的utilization()方法直接获取,或自行计算:(所有Person的服务时长总和) / (模拟总运行时间)。
  • 系统停留时间:给Person添加两个变量arrivalTime和departureTime,到达药房时记录arrivalTime = time(),离开流程时记录departureTime = time(),计算差值departureTime - arrivalTime并收集到数据集做统计。

内容的提问来源于stack exchange,提问作者Morshed Dolon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 23:34:53