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

Python基于Google OR Tools求解带时间窗VRP问题异常求助

带时间窗VRP问题异常排查与修复方案

一、车辆闲置问题(仅1辆车执行任务)

1. 调整车辆容量与成本设置

  • 若所有订单总需求小于单辆车容量,算法会优先用单辆车完成以降低成本。要强制多派车可:
    • 降低单辆车容量上限,确保总需求超过单车载量;
    • 给车辆添加固定使用成本,让算法更倾向于拆分任务到多辆车。示例代码:
      # 为每辆车设置固定启动成本,数值越低越易触发多派车
      for vehicle_id in range(num_vehicles):
          routing.SetFixedCostOfVehicle(80, vehicle_id)
      

2. 确认车辆配置正确性

  • 检查num_vehicles参数是否设置为你期望的车辆数量;
  • 确保所有车辆的起点/终点都设为depot(默认索引0),避免因起点错误导致车辆无法调度:
    for vehicle_id in range(num_vehicles):
        routing.SetStart(0, vehicle_id)
        routing.SetEnd(0, vehicle_id)
    

二、到达时间不符合时间窗问题

1. 验证time_matrix准确性

  • 检查时间矩阵的数值是否对应真实行驶时间,避免混淆距离与时间、单位不统一的问题;
  • 确认矩阵索引与客户点完全对应:depot对应0,客户点按顺序对应1-16。

2. 修复时间窗约束逻辑

  • 确保每个客户点都正确添加时间窗约束,且时间单位与time_matrix一致(比如统一用分钟)。示例代码:
    # 示例时间窗配置,按需替换为你的实际数据
    time_windows = [
        (0, 1440),  # depot无严格时间窗
        (60, 120),  # 客户1的时间窗(开始-结束)
        (180, 240), # 客户2的时间窗
        # ... 其余14个客户的时间窗配置
    ]
    
    # 注册时间回调函数
    def time_callback(from_index, to_index):
        from_node = routing.IndexToNode(from_index)
        to_node = routing.IndexToNode(to_index)
        return time_matrix[from_node][to_node]
    
    transit_callback_index = routing.RegisterTransitCallback(time_callback)
    routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index)
    
    # 初始化时间维度,设置允许等待时间和车辆最大工作时长
    time_dim = routing.AddDimension(
        transit_callback_index,
        60,  # 最大等待时间(单位与时间矩阵一致)
        480, # 车辆单日最大工作时长
        False,
        "Time"
    )
    
    # 为每个节点绑定时间窗约束
    for loc_idx, (start, end) in enumerate(time_windows):
        node_idx = routing.NodeToIndex(loc_idx)
        time_dim.CumulVar(node_idx).SetRange(start, end)
    

3. 确认等待时间配置

  • 如果车辆到达时间早于客户时间窗开始时间,需确保AddDimension的slack_max参数(即最大允许等待时间)设置合理,避免因无法等待导致时间窗违规。

三、调试辅助技巧

  • 开启算法日志输出,查看调度过程细节,定位异常原因:
    solver = routing.solver()
    solver.parameters.log_search_progress = True
    
  • 简化测试场景:先将客户数量缩减至3-5个,手动设置明确的时间窗和车辆容量,验证算法能正确调度后,再逐步扩展到16个客户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 18:52:41