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

AnyLogic车辆避让行人模型报错:get_Main()方法未定义

解决AnyLogic中车辆识别行人的代码报错问题

问题背景

正在构建一个AnyLogic模型,模拟行人在非指定区域(非人行横道)横穿有车辆行驶的道路。当前模型里车辆无法识别行人,会直接穿过,希望实现车辆识别路径中的行人并停下避让。参考相关方案后,在Cars状态机的checkForPed转换块中,Action函数报错:The method get_Main() is undefined for the type Cars,尝试用main.pedestrian也无效,相关代码如下:

for (Pedestrian thisPed : get_Main().pedestrian) {
    // for each pedestrian in model
    double pedX = thisPed.getX() - getX();
    double pedY = thisPed.getY() - getY();
    if (fieldOfView.contains(pedX, pedY)) {
        pedInDanger = true;
        break;
    } 
}

解决方法

方法1:通过环境引用主模型

如果Cars是自定义代理类型(继承自Agent),需通过getEnvironment()获取主模型实例,再访问行人集合:

Main mainModel = (Main) getEnvironment();
for (Pedestrian thisPed : mainModel.pedestrian) {
    double pedX = thisPed.getX() - getX();
    double pedY = thisPed.getY() - getY();
    if (fieldOfView.contains(pedX, pedY)) {
        pedInDanger = true;
        break;
    } 
}

注意:将Main替换为你实际的主模型类名(若主模型不是默认命名)

方法2:检查行人集合的访问权限

确保主模型中的pedestrian集合是**公共(public)**的;若为私有集合,需在主模型中添加公共getter方法:

// 主模型中添加
public List<Pedestrian> getPedestrians() {
    return pedestrian;
}

再在车辆代码中调用:

Main mainModel = (Main) getEnvironment();
for (Pedestrian thisPed : mainModel.getPedestrians()) {
    // 后续逻辑同上
}

方法3:静态引用(不推荐)

若行人集合是主模型中的公共静态集合,可直接通过类名访问,但会增加代码耦合度,仅作备选:

for (Pedestrian thisPed : Main.pedestrian) {
    // 后续逻辑同上
}

额外注意事项

  • 确认fieldOfView是车辆代理中正确定义的几何区域(如Polygon或Circle),用于检测视野内的行人。
  • 状态机转换逻辑需配合pedInDanger变量,检测到行人时触发车辆停车动作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 05:24:54