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

调用SetArcCostEvaluatorOfAllVehicles函数遇CS1660错误,求解决方法

解决CS1660错误:正确设置OR-Tools路径成本
  • 错误原因:SetArcCostEvaluatorOfAllVehicles方法接收的参数是成本评估器的ID(int类型),而非直接传入lambda表达式。你直接传递lambda时,编译器会尝试将其转换为int类型,因此触发报错。

  • 正确实现步骤:

    1. 先通过RegisterTransitCallback方法注册成本计算逻辑,该方法会返回一个int类型的评估器ID。
    2. 将这个ID传入SetArcCostEvaluatorOfAllVehicles方法,完成所有车辆的路径成本设置。
  • 修正后的代码:

// 注册成本评估逻辑,获取对应的评估器ID
var costEvaluatorId = routing.RegisterTransitCallback((long fromIndex, long toIndex) =>
{
    int fromNode = manager.IndexToNode((int)fromIndex);
    int toNode = manager.IndexToNode((int)toIndex);
    return (long)distanciaMatriz[fromNode, toNode];
});

// 为所有车辆绑定该成本评估器
routing.SetArcCostEvaluatorOfAllVehicles(costEvaluatorId);
  • 额外说明:
    • RegisterTransitCallback要求的委托类型是Func<long, long, long>,所以参数和返回值都需使用long类型(OR-Tools内部用long处理成本,避免数值溢出)。
    • 若你的distanciaMatriz存储的是int类型,直接强制转换为long即可,无需反向转int,否则可能丢失精度或引发溢出问题。

内容的提问来源于stack exchange,提问作者Bruno Raphael Facundo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 10:59:49