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

调用AGV.getDistanceTravelled()获取行驶距离报静态引用错误

报错根因

这个报错的核心问题是方法调用的对象层级搞错了:

  • getDistanceTravelled(Length Units)是单个AGV智能体实例的非静态方法,返回值是某一台具体AGV的实际行驶距离,这个方法只和仿真运行中生成的实体AGV绑定,和AGV这个类模板本身没有关联
  • 你写的AGV.getDistanceTravelled(METER);是直接通过AGV类名调用方法,属于静态调用实例方法,AnyLogic底层基于Java实现,不允许这种调用逻辑,因此抛出错误。

你遇到的具体报错信息如下:

Cannot make a static reference to the non-static method getDistanceTravelled(Length Units) from the type AGV.
(报错含义:无法对AGV类的非静态方法getDistanceTravelled(Length Units)进行静态引用)

仿真结束统计AGV行驶距离的正确实现

要统计所有AGV的行驶距离,不能直接用类名调用方法,必须遍历OrderFleet车队中实际生成的每一台AGV实体,逐个调用距离统计方法后累加结果。

常规场景实现(无AGV中途销毁逻辑)

如果你的模型里AGV生成后会一直存活到仿真结束,按以下步骤操作即可:

  1. 确认main主智能体中,你创建的运输车队对象名称和命名一致,为OrderFleet
  2. 打开main智能体的On destroy(销毁时触发)逻辑块,替换原有错误代码为以下内容:
// 初始化总距离统计变量,单位为米
double totalAgvDistance = 0;

// 遍历OrderFleet车队下的所有AGV实例
for (AGV agv : OrderFleet.agents()) {
    // 逐个累加单台AGV的行驶距离
    totalAgvDistance += agv.getDistanceTravelled(METER);
}

// 如需在控制台打印统计结果,可放开下方代码注释
// traceln("仿真结束,所有AGV累计行驶距离:" + totalAgvDistance + "米");

特殊场景适配(存在AGV中途销毁逻辑)

如果你的模型里有AGV完成任务后被销毁的逻辑,上述写法会漏掉已销毁AGV的行驶距离,需要补全统计逻辑:

  • 先在main主智能体中定义一个double类型的全局变量agvAccumulatedDistance,初始值设为0
  • 打开AGV智能体的On destroy逻辑块,写入代码:main.agvAccumulatedDistance += this.getDistanceTravelled(METER);,确保每台AGV销毁时就把自己的行驶距离提前累加到全局变量里
  • 最后在main的On destroy逻辑中,把遍历存活AGV得到的总距离,加上提前统计的agvAccumulatedDistance,就是仿真全周期内所有AGV的真实累计行驶距离。
补充说明

如果只需要获取单台特定AGV的行驶距离,也要先拿到对应的AGV实例再调用方法,比如通过OrderFleet.getAgentById(目标AGV的ID)拿到指定AGV对象后,再调用getDistanceTravelled()方法即可,永远不要直接用AGV类名调用这个实例方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:30:48