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

AnyLogic动态执行字符串校验设置智能体参数的方法咨询

AnyLogic动态匹配停车场的可行解决方案

你所使用的executeExpression方法需要严格匹配执行上下文,一旦变量作用域传递错误就会返回null,后续操作空对象就会触发你遇到的报错,且该方法解析成本高,完全没必要用这种方式实现需求,可通过AnyLogic原生的findAgentByName方法实现需求,两种可行方案如下:

方案一:提前缓存停车场列表(最高效,推荐)

  • 在停车场所在的上层智能体(通常是Main)中定义一个List<ParkingLot>类型的变量,命名为parkingLots
  • 在该智能体的「启动时」动作中写入初始化代码,一次性把所有停车场存入列表:
parkingLots = new ArrayList<>();
for(int i = 0; i <= 200; i++){
    parkingLots.add((ParkingLot)findAgentByName("parkingLot" + i));
}
  • 为DetachedTrailer智能体分配车位时直接遍历列表即可:
for(ParkingLot lot : parkingLots){
    if(lot.getOccupancy() == 0){
        agent.parking = lot;
        lot.enter(agent); // 占用车位
        break;
    }
}

方案二:直接循环匹配(适合临时调用场景)

如果不想额外缓存列表,也可以在需要分配车位时直接遍历查找:

ParkingLot freeLot = null;
for(int i = 0; i <= 200; i++){
    ParkingLot temp = (ParkingLot)findAgentByName("parkingLot" + i);
    if(temp.getOccupancy() == 0){
        freeLot = temp;
        break;
    }
}
if(freeLot != null){
    agent.parking = freeLot;
    freeLot.enter(agent);
}

提示:如果你的匹配逻辑写在非停车场所在的上层智能体中,需要先获取到停车场所在智能体的实例再调用查找方法,比如停车场都在Main智能体中,就调用main.findAgentByName("parkingLot" + i)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:15:03