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

AnyLogic多船舶卸箱仿真问题:AGV调度与空指针报错求助

AnyLogic港口仿真多船并行服务问题解决方案

一、先修复SelectOutput的空指针异常

你的条件语句出现空指针,是因为未提前校验对象是否为空,即使之前无空值,仿真运行中也可能出现临时未赋值的情况。修改条件为:

agent != null && agent.vessel != null && agent.vessel.berth != null && agent.vessel.berth.CargoPoint == CargoPoints.get(0)

其他3个泊位的分支条件同理,仅需把CargoPoints.get(0)替换为get(1)、get(2)、get(3)即可。

二、解决单船独占AGV的核心问题

方案1:通过SelectOutput分流实现泊位级并行调度

  1. 确保Container与船舶/泊位的关联正确
    • 在Split Block的「On create agent」事件中,添加代码:newAgent.vessel = agent;(此处agent是当前生成集装箱的船舶),保证集装箱能关联到所属船舶。
    • 确认在集装箱生成后,已执行agent.setNetworkNode(agent.vessel.berth.CargoPoint);,确保CargoPoint参数正确赋值。
  2. 配置SelectOutput分支
    • 添加SelectOutput Block,设置4个输出分支(对应4个泊位的CargoPoint)。
    • 每个分支的条件按上述修复后的写法配置,分别对应CargoPoints集合中的4个节点。
    • 每个分支后接独立的Seize Block(可共享同一个AGV ResourcePool),不同泊位的集装箱会进入各自的等待队列,AGV会同时处理多个队列的请求,避免单船独占。

方案2:无需分流,直接修改Seize Block的排队策略

如果不想拆分流程,可直接调整Seize的调度逻辑:

  • 打开Seize Block的设置面板,切换到「Queueing」标签页。
  • 将排队策略从默认的「FIFO」改为「By Attribute」,选择属性为agent.vessel(即集装箱所属的船舶)。
  • 策略类型选择「Round Robin」(轮询),系统会轮流处理不同船舶的集装箱,实现多船并行服务。
  • 同时确保AGV ResourcePool的数量足够(建议≥4,对应4个泊位),保证有足够资源同时作业。

三、额外校验点

  • 检查Berth agent的CargoPoint参数,确认每个泊位都已正确绑定对应的CargoPoint1~4,无空值。
  • 运行仿真时,可添加临时的trace(agent.vessel.berth.CargoPoint)代码,在集装箱生成时打印参数,验证关联是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:57:13