路线优化API是否不支持相同货物合并及明细上报?
optimizeTours API 相同货物合并配送的响应异常问题
我在调用optimizeTours API时遇到了以下问题:
- 场景:两个完全相同的运单(L-52和L-53),使用一辆可同时装载这两个运单货物的车辆
- API响应异常点:
- 访问点仅关联显示一个运单,但正确累加了两个运单的总需求(重量和处理单元数)
- 系统标记仅完成了L-52的配送,L-53被标记为已跳过
请问该API是否不支持将相同运单合并到同一车辆配送,同时在访问点中明确关联每个运单的信息?
API请求参数
{"timeout":"20s","solvingMode":"DEFAULT_SOLVE","searchMode":"RETURN_FAST","populateTransitionPolylines":false,"populatePolylines":false,"model":{"vehicles":[{"travelMode":"DRIVING","startTimeWindows":[],"routeModifiers":{},"loadLimits":{"Handling Unit Count":{"maxLoad":"26"},"Weight":{"maxLoad":"45000"}},"label":"Dry Van 53'-0","fixedCost":14,"endTimeWindows":[],"displayName":"Dry Van 53'-0","costPerTraveledHour":12,"costPerKilometer":20.9214784726033239401259473004051,"costPerHour":11}],"shipmentTypeIncompatibilities":[],"shipments":[{"pickups":[{"timeWindows":[{"startTime":"2025-12-04T15:00:00Z","endTime":"2025-12-05T04:00:00Z"}],"loadDemands":{"Handling Unit Count":{"amount":"10"},"Weight":{"amount":"20000"}},"label":"Revenova HQ","duration":"3600s","departureLocation":{"longitude":-87.859529000000000,"latitude":42.195650000000000},"cost":15,"avoidUTurns":true,"arrivalLocation":{"longitude":-87.859529000000000,"latitude":42.195650000000000}}],"loadDemands":{"Handling Unit Count":{"amount":"10"},"Weight":{"amount":"20000"}},"label":"L-52","displayName":"L-52","deliveries":[{"timeWindows":[{"startTime":"2025-12-09T17:00:00Z","endTime":"2025-12-10T06:00:00Z"}],"loadDemands":{"Handling Unit Count":{"amount":"10"},"Weight":{"amount":"20000"}},"label":"Los Angeles Lighting","duration":"3600s","departureLocation":{"longitude":-118.218198000000000,"latitude":34.023631000000000},"cost":15,"avoidUTurns":true,"arrivalLocation":{"longitude":-118.218198000000000,"latitude":34.023631000000000}}],"costsPerVehicleIndices":[],"costsPerVehicle":[],"allowedVehicleIndices":[]},{"pickups":[{"timeWindows":[{"startTime":"2025-12-04T15:00:00Z","endTime":"2025-12-05T04:00:00Z"}],"loadDemands":{"Handling Unit Count":{"amount":"10"},"Weight":{"amount":"20000"}},"label":"Revenova HQ","duration":"3600s","departureLocation":{"longitude":-87.859529000000000,"latitude":42.195650000000000},"cost":15,"avoidUTurns":true,"arrivalLocation":{"longitude":-87.859529000000000,"latitude":42.195650000000000}}],"loadDemands":{"Handling Unit Count":{"amount":"10"},"Weight":{"amount":"20000"}},"label":"L-53","displayName":"L-53","deliveries":[{"timeWindows":[{"startTime":"2025-12-09T17:00:00Z","endTime":"2025-12-10T06:00:00Z"}],"loadDemands":{"Handling Unit Count":{"amount":"10"},"Weight":{"amount":"20000"}},"label":"Los Angeles Lighting","duration":"3600s","departureLocation":{"longitude":-118.218198000000000,"latitude":34.023631000000000},"cost":15,"avoidUTurns":true,"arrivalLocation":{"longitude":-118.218198000000000,"latitude":34.023631000000000}}],"costsPerVehicleIndices":[],"costsPerVehicle":[],"allowedVehicleIndices":[]}],"precedenceRules":[],"objectives":[],"maxActiveVehicles":1,"globalStartTime":"2025-12-04T06:00:00Z","globalEndTime":"2025-12-10T06:00:00Z","globalDurationCostPerHour":10},"maxValidationErrors":100,"label":"Optimizer 2025-12-03 20:09:23","considerRoadTraffic":true}
API响应结果
{ "routes": [ { "vehicleLabel": "Dry Van 53'-0", "vehicleStartTime": "2025-12-05T04:00:00Z", "vehicleEndTime": "2025-12-09T18:00:00Z", "visits": [ { "isPickup": true, "startTime": "2025-12-05T04:00:00Z", "detour": "0s", "shipmentLabel": "L-52", "visitLabel": "Revenova HQ", "loadDemands": { "Handling Unit Count": { "amount": "20" }, "Weight": { "amount": "40000" } }, "injectedSolutionLocationToken": 3 }, { "startTime": "2025-12-09T17:00:00Z", "detour": "282909s", "shipmentLabel": "L-52", "visitLabel": "Los Angeles Lighting", "loadDemands": { "Handling Unit Count": { "amount": "-20" }, "Weight": { "amount": "-40000" } }, "injectedSolutionLocationToken": 3 } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2025-12-05T04:00:00Z", "vehicleLoads": { "Weight": {}, "Handling Unit Count": {} } }, { "travelDuration": "105454s", "travelDistanceMeters": 3261392, "trafficInfoUnavailable": true, "waitDuration": "283346s", "totalDuration": "388800s", "startTime": "2025-12-05T05:00:00Z", "vehicleLoads": { "Weight": { "amount": "40000" }, "Handling Unit Count": { "amount": "20" } } }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2025-12-09T18:00:00Z", "vehicleLoads": { "Handling Unit Count": {}, "Weight": {} } } ], "metrics": { "performedShipmentCount": 1, "travelDuration": "105454s", "waitDuration": "283346s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "7200s", "totalDuration": "396000s", "travelDistanceMeters": 3261392, "maxLoads": { "Weight": { "amount": "40000" }, "Handling Unit Count": { "amount": "20" } }, "performedMandatoryShipmentCount": 1 }, "routeCosts": { "model.shipments.pickups.cost": 15, "model.vehicles.cost_per_traveled_hour": 351.51333333333332, "model.shipments.deliveries.cost": 15, "model.vehicles.cost_per_kilometer": 68233.1425187207, "model.vehicles.cost_per_hour": 1210, "model.vehicles.fixed_cost": 14 }, "routeTotalCost": 69838.655852054042, "vehicleFullness": { "maxFullness": 0.88888888888888884, "maxLoad": 0.88888888888888884, "activeSpan": 0.76388888888888884 } } ], "requestLabel": "Optimizer 2025-12-03 20:09:23", "skippedShipments": [ { "index": 1, "label": "L-53" } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 1, "travelDuration": "105454s", "waitDuration": "283346s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "7200s", "totalDuration": "396000s", "travelDistanceMeters": 3261392, "maxLoads": { "Weight": { "amount": "40000" }, "Handling Unit Count": { "amount": "20" } }, "performedMandatoryShipmentCount": 1 }, "skippedMandatoryShipmentCount": 1, "usedVehicleCount": 1, "earliestVehicleStartTime": "2025-12-05T04:00:00Z", "latestVehicleEndTime": "2025-12-09T18:00:00Z", "totalCost": 70938.655852054042, "costs": { "model.vehicles.cost_per_kilometer": 68233.1425187207, "model.vehicles.cost_per_hour": 1210, "model.shipments.pickups.cost": 15, "model.vehicles.fixed_cost": 14, "model.shipments.deliveries.cost": 15, "model.global_duration_cost_per_hour": 1100, "model.vehicles.cost_per_traveled_hour": 351.51333333333332 } } }
解答
这是API的合并优化逻辑导致的:
- 当两个运单的取货/送货地点、时间窗、货物需求完全一致时,API会自动将它们合并为一次运输任务,以降低运输成本(避免重复的取送货操作)
- 响应中累加的总需求是正确的,但API只会关联其中一个运单作为代表,另一个则标记为“已跳过”——这是因为系统认为合并后的运输已经覆盖了两个运单的需求
- 如果你需要在访问点中明确显示每个运单的信息,需要调整请求参数:
- 给两个运单设置细微差异的取货/送货时间窗,避免触发自动合并
- 查看API文档,确认是否有禁用运单合并的配置开关(如
allowShipmentMerging类参数)
内容的提问来源于stack exchange,提问作者Dave C
相关产品推荐
相关产品推荐

