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

OR-Tools中如何在VRP/CVRP/VRPTW场景定义不可直接通行的节点路径

OR-Tools 完全支持有向图场景下的禁止通行边约束,你遇到的问题是用0表示无通路的方式错误,按照以下步骤调整即可:

1. 替换无通路标记

不要用0表示无直接通路,0会被求解器识别为通行成本为0,会被优先选择。你可以用一个远大于业务场景最大可能路径总成本的常量(通常称为INF)表示不可通行。注意不要取值过大避免数值溢出,以你的示例场景为例,所有边总长度不超过20,INF设为10000即可。

2. 修正距离矩阵

调整后的Java代码示例如下:

// 不可通行边的标记值,需远大于场景最大可行路径总成本
private static final long INF = 10000L;
public final long[][] distanceMatrix = {
         {0, 2, 1, INF, INF},
         {INF, 0, INF, 2, 1},
         {INF, 1, 0, INF, INF},
         {INF, INF, INF, 0, 3},
         {INF, INF, INF, INF, 0},
};

3. 正常注册成本回调

不需要额外添加特殊约束,直接将距离矩阵作为弧成本注册即可:

// 示例回调代码,需结合你实际的RoutingManager、RoutingModel实例调整
LongToLong transitCallback = fromIndex -> {
    long from = routingManager.indexToNode(fromIndex);
    return toIndex -> {
        long to = routingManager.indexToNode(toIndex);
        return distanceMatrix[(int) from][(int) to];
    };
};
routing.setArcCostEvaluatorOfAllVehicles(transitCallback);

求解器会自动规避成本为INF的边,这类边会导致总成本远超可行解的数值,不会被纳入最优解的选择范围。

补充说明

OR-Tools的VRP求解天然支持不对称的有向图距离矩阵,你不需要额外做其他配置,只要保证距离矩阵中两个方向的成本按照实际有向通路填写即可。比如节点1到节点3成本为2,节点3到节点1成本为INF,就代表仅允许从节点1到节点3的单向通行,完全匹配你的业务需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:57:04