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

如何在AnyLogic ResourcePool中自定义卡车选择逻辑及启发式选车方案?

AnyLogic中基于属性自定义卡车选择逻辑及启发式方法推荐

一、自定义卡车选择逻辑的实现方法

1. 通过Seize块直接设置自定义选择逻辑

打开Seize块的属性面板,将**"Resource selection"选项从默认的"Random"改为"Custom"**,在弹出的代码编辑框中编写基于卡车属性的选择逻辑。

假设你的卡车Agent类(示例命名为Truck)包含driverCost(驾驶员成本)、fuelConsumption(单位里程油耗)、capacity(载重容量)等属性,ResourcePool的变量名为trucksPool,以下是几种常见场景的代码示例:

  • 选择单次运输总成本最低的卡车(需结合当前运输任务的里程):
// 替换deliveryDistance为当前实体的运输里程属性
double targetDistance = entity.deliveryDistance;
return trucksPool.getAvailableResources().stream()
    .min(Comparator.comparingDouble(truck -> {
        Truck t = (Truck)truck;
        return t.driverCost + t.fuelConsumption * targetDistance * 油价;
    }))
    .orElse(null);
  • 选择能承载当前货物的最小容量卡车:
int requiredLoad = entity.deliveryLoad;
return trucksPool.getAvailableResources().stream()
    .filter(truck -> ((Truck)truck).capacity >= requiredLoad)
    .min(Comparator.comparingInt(truck -> ((Truck)truck).capacity))
    .orElse(null);

2. 结合ResourcePool的预筛选优化

如果需要先排除不符合基础条件的卡车(比如容量不足),可以在ResourcePool的**"Filter condition"**中添加过滤逻辑,减少后续选择的计算量:

// 仅保留能承载当前货物的卡车
((Truck)agent).capacity >= entity.deliveryLoad

二、无需复杂算法的启发式/规则化方法推荐

1. 最低单位里程成本法

优先选择单位里程运营成本最低的卡车,适合成本导向型场景。计算逻辑为:
单位里程成本 = 单日驾驶员成本/单日运营里程 + 单位里程油耗×油价
在Seize的自定义逻辑中直接筛选该值最小的卡车即可。

2. 容量精准适配法

优先选择刚好能装下当前货物的卡车(避免空载浪费),若无匹配则选最小可用大容量卡车,适合货物批量固定的场景,代码示例见上文。

3. 效率优先法

选择单位时间运输量最大的卡车,核心指标为容量/单次运输耗时,适合追求运输吞吐量、时效优先的场景:

return trucksPool.getAvailableResources().stream()
    .max(Comparator.comparingDouble(truck -> {
        Truck t = (Truck)truck;
        return t.capacity / t.averageDeliveryTime;
    }))
    .orElse(null);

4. 均衡使用轮换法

为避免部分卡车过度损耗,在成本/效率相近的情况下,优先选择最近使用时间最早的卡车。需给Truck类添加lastUsedTime属性,在Release块中更新该值为time(),选择逻辑如下:

return trucksPool.getAvailableResources().stream()
    .min(Comparator.comparingDouble(truck -> ((Truck)truck).lastUsedTime))
    .orElse(null);

注意事项

  • 代码中需确保将ResourcePool返回的Agent类型强制转换为你的Truck类,避免类型错误。
  • 当无符合条件的可用资源时,orElse(null)需结合Seize块的"On resource unavailable"逻辑处理(比如排队、触发预警)。
  • 可通过trace()块输出选中卡车的属性值,验证选择逻辑是否符合预期。

内容的提问来源于stack exchange,提问作者Minh Nhật Hồ Tấn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 14:33:11