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

在moveByCrane块统计agent.p_type生成饼图报错问题咨询

问题排查与解决方案

报错核心原因

  1. count()函数使用错误:AnyLogic的count()函数必须指定统计的集合范围(比如全局Population、队列等),你直接写count(agent.p_type == 0)没有明确统计对象,系统无法识别要统计哪些agent。
  2. agent上下文错误:在moveByCrane块中,agent仅指代当前正在处理的单个包裹,用它做统计条件只能针对当前包裹,无法实现全局或指定范围的类型计数。

正确实现方案

方案1:全局集合统计(适合全局计数)

  • 先创建全局Population集合(命名为allPackages),在每个Source的On exit事件中添加代码:allPackages.add(agent),把生成的包裹都加入集合。
  • 在moveByCrane块中定义统计变量:
    int auftrag1 = count(allPackages, p -> p.p_type == 0);
    int auftrag2 = count(allPackages, p -> p.p_type == 1);
    int auftrag3 = count(allPackages, p -> p.p_type == 2);
    
  • 饼图直接调用这三个变量即可。

方案2:自定义计数器(性能更优)

  • 创建三个全局整数变量countType0、countType1、countType2,初始值设为0。
  • 在对应Source的On exit事件中分别累加:
    • 第一个Source:countType0++;
    • 第二个Source:countType1++;
    • 第三个Source:countType2++;
  • 饼图直接调用这三个变量,无需在moveByCrane内写统计代码。

方案3:统计moveByCrane处理过的包裹

如果只需要统计经过该块的包裹类型数量:

  • 在moveByCrane块的变量中定义auftrag1、auftrag2、auftrag3,初始值设为0。
  • 在块的On enter事件中添加代码:
    switch(agent.p_type) {
        case 0: auftrag1++; break;
        case 1: auftrag2++; break;
        case 2: auftrag3++; break;
    }
    
  • 饼图调用这三个变量即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 12:30:12