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

Anylogic人道主义物流模型:多卡车无法独立选择可用近距仓库求助

修复Anylogic卡车调度算法:确保每辆卡车独立计算最近可用仓库

问题根源

  1. 循环内重复执行排序逻辑,每次以不同仓库为参照排序,导致最终排序结果完全混乱,并非基于当前卡车到仓库的距离排序
  2. sortmag = subsetlist是直接引用原集合,未创建独立副本,后续操作会干扰原仓库数据
  3. distance列表如果是卡车的成员变量,未在每次计算前清空,会残留之前卡车的计算数据
  4. 代码中Magazzini和Warehouses类型混用,可能引发类型匹配问题

修复后的代码

// 筛选所有有可用物资的仓库
List<Magazzini> availableWarehouses = findAll(main.magazzinis, w -> w.availabilty > 0);

// 无可用仓库时的兜底处理,避免索引越界
if(availableWarehouses.isEmpty()){
    System.out.println("当前无可用仓库");
    return;
}

// 创建独立副本,避免修改原仓库集合
List<Magazzini> sortedWarehouses = new ArrayList<>(availableWarehouses);

// 核心逻辑:按当前卡车到仓库的距离升序排序
sortedWarehouses = sortAscending(sortedWarehouses, warehouse -> distanceTo(warehouse));

// 移动到最近的可用仓库
moveTo(sortedWarehouses.get(0));
System.out.println("选中仓库:" + sortedWarehouses.get(0));

// 清空临时列表(若为局部变量可省略,方法结束后会自动回收)
sortedWarehouses.clear();

关键修复说明

  • 一次性精准排序:直接以当前卡车的distanceTo方法为排序依据,一次完成升序排序,确保结果是仓库到当前卡车的距离从近到远
  • 独立集合副本:用new ArrayList<>(availableWarehouses)创建独立副本,避免操作影响原仓库集合的原始数据
  • 空集合校验:添加空集合判断,防止无可用仓库时抛出索引越界异常
  • 统一类型:全程使用Magazzini类型,消除类型混用带来的潜在错误

额外注意事项

  • 仓库物资被提取后,要及时将availabilty更新为0,避免后续卡车误判仓库可用性
  • 若distance是卡车的成员变量,需在每次计算前执行distance.clear(),防止前次计算的数据累积干扰结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:48:43