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

如何在AnyLogic中统计路径及moveTo块内agent数并关联移动速度

该需求可直接通过AnyLogic流程库内置API实现,无需复杂二次开发,具体操作方法如下:

具体实现步骤

1. 实时统计单个MoveTo模块内的移动Agent数量

所有流程建模库(Process Modeling Library)的模块都内置了Agent列表维护能力,不需要手动编写进入/退出的计数逻辑,也不需要额外添加统计组件:

  • 直接调用对应MoveTo模块的agents()方法即可获取当前处于该模块内的所有Agent实例列表,列表长度你的MoveTo模块名.agents().size()就是需要的实时移动Agent数量。
  • 如果需要在画布上实时显示数值,拖入一个Text文本控件到演示界面,将文本内容设置为动态表达式,填入"当前模块内移动Agent数:" + moveTo1.agents().size()(将moveTo1替换为你自己的模块名),模型运行时会自动刷新数值。

如果你之前手动用自定义变量做进入加1、退出减1的计数出现数值偏差,是因为没有覆盖Agent异常离开模块的场景(比如Agent被提前移除、触发流程中断跳转等),直接用内置API计数不会出现这类误差,AnyLogic会自动维护列表的准确性。

  • 如果你需要统计的是两个节点之间某一段独立通行路径(而非整个MoveTo模块覆盖范围)的Agent数,直接选中对应路径的空间标记(Path),调用你的Path名.getAgents().size()即可得到该段路径的实时Agent数,统计逻辑完全一致。

2. 实现Agent移动速度与统计值的动态关联

MoveTo模块的速度属性支持动态求值,Agent移动过程中会按模型时间步自动重新计算速度,不需要额外添加事件触发更新:

  • 选中目标MoveTo模块,找到「速度」属性,点击输入框前方的图标切换为动态求值模式(图标显示为等号=)
  • 在速度表达式框中写入需要的关联逻辑即可,参考示例:
    • 线性降速场景(自由流速度5m/s,每增加1个Agent速度降低0.3m/s,最低速度不低于1m/s):
      int currentAgentNum = moveTo1.agents().size();
      max(1, 5 - currentAgentNum * 0.3);
      
    • 阈值降速场景(Agent数低于3个时保持自由流速度,3-8个时线性降速,超过8个时保持最低通行速度):
      int currentAgentNum = moveTo1.agents().size();
      if(currentAgentNum <= 3) {
          return 5;
      } else if(currentAgentNum <= 8) {
          return 5 - (currentAgentNum - 3) * 0.5;
      } else {
          return 1.5;
      }
      
  • 如果你是按单段Path的Agent数关联速度,只需要把上述示例里的moveTo1.agents().size()替换成对应Path的计数表达式path1.getAgents().size()即可。

内容的提问来源于stack exchange,提问作者M. Müller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:33:22