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

VRPTW场景下如何不修改时间窗口强制指定车辆下一个访问节点

强制首访节点3的实现方案

基于你使用的OR-Tools VRP求解器环境,无需修改节点3的时间窗口、无需调整0到3的行程时间,可通过硬约束+初始解适配实现需求:

  • 步骤1:添加强制顺序硬约束
    调用求解器原生AddNextVisit接口,直接指定起始节点0的下一个访问节点固定为3,该约束优先级高于路径搜索逻辑,只要0到3的行程时间满足节点3的时间窗口要求,就会强制生效:
    # routing为已初始化的RoutingModel实例,manager为对应的RoutingIndexManager实例
    start_idx = manager.NodeToIndex(0)
    first_visit_idx = manager.NodeToIndex(3)
    # 单车辆场景直接指定车辆编号为0,多车辆场景按需给对应车辆添加约束即可
    routing.AddNextVisit(start_idx, first_visit_idx, 0)
    

    该约束不会修改任何节点的时间窗口、行程矩阵参数,完全独立于原有业务规则。

  • 步骤2:适配初始解策略
    你当前使用的GLOBAL_CHEAPEST_ARC初始解策略本身会优先满足已添加的硬约束,可通过给0->3的路径段添加极小的成本偏好,提升初始解生成效率,该调整不会影响最终路径的成本计算逻辑:
    def cost_callback(from_idx, to_idx):
        from_node = manager.IndexToNode(from_idx)
        to_node = manager.IndexToNode(to_idx)
        origin_cost = your_original_distance_matrix[from_node][to_node]
        # 仅给0->3的路径段设置极低的成本权重,系数可选0.001这类不影响整体成本排序的极小值
        if from_node == 0 and to_node == 3:
            return int(origin_cost * 0.001)
        return origin_cost
    
    # 注册成本回调,时间回调保持原有逻辑不变,不影响时间窗口校验
    transit_cb_idx = routing.RegisterTransitCallback(cost_callback)
    routing.SetArcCostEvaluatorOfAllVehicles(transit_cb_idx)
    
  • 步骤3:校验规则生效
    求解完成后输出路径的前两个节点必然为0 -> 3,节点3与节点4的取派件绑定关系不受影响,所有原有时间窗口、行程时间规则完全保留。

内容的提问来源于stack exchange,提问作者Kiluvya.A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:36:03