如何创建JSON文件向Google Cloud发送OptimizeTourRequest优化单取多送物流
适配Google OR-Tools(CFR)的单工厂配送JSON构建方案
核心结构设计思路
聚焦你的需求:统一取货点、多配送任务、车辆规格,将「全局配送时长要求」转化为车辆可用时间窗+配送任务时间约束的组合,完全适配Google OR-Tools的VRPTW(带时间窗和载重的路径规划)模型。
关键字段解析
1. 配送任务(Shipments)
每个任务需包含:
- 固定的工厂取货节点(坐标、取货时长、开放时间窗)
- 独立的配送节点(坐标、配送时长、时间窗)
- 重量需求(取货为正,配送为负,用于载重计算)
2. 车辆规格(Vehicles)
- 载重上限
- 起止地点(建议设为工厂,形成闭环运营)
- 每小时行驶成本
- 车辆总可用时间窗(对应你要的全局配送时长要求)
完整JSON示例
{ "shipments": [ { "id": "delivery_001", "pickup": { "location": { "lat": 31.2304, "lng": 121.4737 }, "duration": 180, // 取货耗时3分钟(单位:秒) "time_windows": [ { "start": 0, "end": 3600 // 工厂取货开放时段:运营开始后1小时内 } ], "demand": { "weight": 500 // 该任务取货重量500kg } }, "delivery": { "location": { "lat": 31.2165, "lng": 121.4365 }, "duration": 120, // 配送耗时2分钟 "time_windows": [ { "start": 300, "end": 7200 // 配送需在运营后5分钟至2小时内完成 } ], "demand": { "weight": -500 // 配送完成后载重减少500kg } } }, { "id": "delivery_002", "pickup": { "location": { "lat": 31.2304, "lng": 121.4737 }, "duration": 180, "time_windows": [ { "start": 0, "end": 3600 } ], "demand": { "weight": 300 } }, "delivery": { "location": { "lat": 31.1958, "lng": 121.4292 }, "duration": 90, "time_windows": [ { "start": 300, "end": 7200 } ], "demand": { "weight": -300 } } } ], "vehicles": [ { "id": "truck_001", "start_location": { "lat": 31.2304, "lng": 121.4737 }, "end_location": { "lat": 31.2304, "lng": 121.4737 }, "capacity": { "weight": 2000 // 车辆最大载重2000kg }, "cost_per_hour": 150, // 每小时运营成本150元 "time_windows": [ { "start": 0, "end": 7200 // 车辆总可用时长2小时,对应全局配送完成要求 } ] }, { "id": "truck_002", "start_location": { "lat": 31.2304, "lng": 121.4737 }, "end_location": { "lat": 31.2304, "lng": 121.4737 }, "capacity": { "weight": 2000 }, "cost_per_hour": 150, "time_windows": [ { "start": 0, "end": 7200 } ] } ], "distance_matrix": "auto" // 自动基于坐标计算行驶时间/距离矩阵 }
时间窗设置优化方案
针对你提到的「全局n小时内完成配送」,推荐两种组合方式:
- 车辆时间窗为主约束:设置车辆的
time_windows.end为n*3600(秒),确保所有任务必须在车辆运营时段内完成 - 配送任务时间窗为辅:给所有配送节点设置统一的
time_windows.end为n*3600,同时设置合理的起始时间(比如运营后5分钟),避免逻辑冲突
注意:取货节点的时间窗要匹配工厂实际开放时段,确保车辆能在合理时间完成取货。
适配OR-Tools的关键细节
- 重量需求:取货用正数,配送用负数,系统会自动实时计算车辆载重变化
- 时间单位统一用秒,与OR-Tools默认单位保持一致
- 若无需自动计算距离矩阵,可替换为预计算的矩阵数据,覆盖
"distance_matrix": "auto"
内容的提问来源于stack exchange,提问作者Tahmid Sadman
相关产品推荐
相关产品推荐

