ตัวอย่างนี้แสดงวิธีใช้ loadDemands และ loadLimits เพื่อจัดการ
ข้อจำกัดด้านความจุของยานพาหนะในคำขอ Route Optimization API
ดูภาพรวมแนวคิดทั้งหมดได้ในเอกสารแนวคิดสำคัญเกี่ยวกับดีมานด์และขีดจำกัดในการโหลด
ตัวอย่างคำขอ
ตัวอย่างต่อไปนี้แสดงสถานการณ์ที่รถยนต์คันเดียวที่มีขีดจำกัดน้ำหนักบรรทุก ต้องนำส่งสินค้า 3 รายการที่มีน้ำหนักแตกต่างกัน
คำขอตัวอย่างนี้มีพารามิเตอร์ที่เกี่ยวข้องกับการโหลดต่อไปนี้
shipments[0]ที่มีดีมานด์การโหลดamountที่ 50weightKgshipments[1]โดยมีดีมานด์การโหลดamountเท่ากับ 10weightKgshipments[2]ที่มีดีมานด์การโหลดamountที่ 80weightKgvehicles[0]โดยมีขีดจำกัดการโหลดmaxLoadที่ 100weightKg
ดูตัวอย่างคำขอที่มีความต้องการโหลดและ ขีดจำกัด
{ "populatePolylines": false, "populateTransitionPolylines": false, "model": { "globalStartTime": "2023-01-13T16:00:00Z", "globalEndTime": "2023-01-14T16:00:00Z", "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 100.0, "loadDemands": { "weightKg": { "amount": "50" } } }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 15.0, "loadDemands": { "weightKg": { "amount": "10" } } }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 50.0, "loadDemands": { "weightKg": { "amount": "80" } } } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0, "loadLimits": { "weightKg": { "maxLoad": "100" } } } ] } }
ตัวอย่างการตอบกลับ
การตอบกลับจะแสดงเส้นทางที่เพิ่มประสิทธิภาพแล้วสำหรับยานพาหนะ เนื่องจากน้ำหนักรวม
ของการจัดส่งทั้งหมดเกินความจุของยานพาหนะ ตัวเพิ่มประสิทธิภาพจึงสร้างลำดับ
การรับและการนำส่งเพื่อให้มั่นใจว่าloadLimitsจะไม่ถูกละเมิด
ดูการตอบกลับคำขอที่มีดีมานด์และขีดจำกัดการโหลด
{ "routes": [ { "vehicleStartTime": "2023-01-13T16:00:00Z", "vehicleEndTime": "2023-01-13T16:43:27Z", "visits": [ { "isPickup": true, "startTime": "2023-01-13T16:00:00Z", "detour": "0s", "loadDemands": { "weightKg": { "amount": "50" } } }, { "shipmentIndex": 1, "isPickup": true, "startTime": "2023-01-13T16:02:30Z", "detour": "150s", "loadDemands": { "weightKg": { "amount": "10" } } }, { "startTime": "2023-01-13T16:08:55Z", "detour": "150s", "loadDemands": { "weightKg": { "amount": "-50" } } }, { "shipmentIndex": 1, "startTime": "2023-01-13T16:16:37Z", "detour": "343s", "loadDemands": { "weightKg": { "amount": "-10" } } }, { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-13T16:27:07Z", "detour": "1627s", "loadDemands": { "weightKg": { "amount": "80" } } }, { "shipmentIndex": 2, "startTime": "2023-01-13T16:36:26Z", "detour": "0s", "loadDemands": { "weightKg": { "amount": "-80" } } } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T16:00:00Z", "vehicleLoads": { "weightKg": {} } }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T16:02:30Z", "vehicleLoads": { "weightKg": { "amount": "50" } } }, { "travelDuration": "235s", "travelDistanceMeters": 795, "waitDuration": "0s", "totalDuration": "235s", "startTime": "2023-01-13T16:05:00Z", "vehicleLoads": { "weightKg": { "amount": "60" } } }, { "travelDuration": "212s", "travelDistanceMeters": 791, "waitDuration": "0s", "totalDuration": "212s", "startTime": "2023-01-13T16:13:05Z", "vehicleLoads": { "weightKg": { "amount": "10" } } }, { "travelDuration": "380s", "travelDistanceMeters": 1190, "waitDuration": "0s", "totalDuration": "380s", "startTime": "2023-01-13T16:20:47Z", "vehicleLoads": { "weightKg": {} } }, { "travelDuration": "409s", "travelDistanceMeters": 1371, "waitDuration": "0s", "totalDuration": "409s", "startTime": "2023-01-13T16:29:37Z", "vehicleLoads": { "weightKg": { "amount": "80" } } }, { "travelDuration": "171s", "travelDistanceMeters": 665, "waitDuration": "0s", "totalDuration": "171s", "startTime": "2023-01-13T16:40:36Z", "vehicleLoads": { "weightKg": {} } } ], "metrics": { "performedShipmentCount": 3, "travelDuration": "1407s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "2607s", "travelDistanceMeters": 4812, "maxLoads": { "weightKg": { "amount": "80" } } }, "routeCosts": { "model.vehicles.cost_per_kilometer": 48.12, "model.vehicles.cost_per_hour": 28.966666666666665 }, "routeTotalCost": 77.086666666666659 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 3, "travelDuration": "1407s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "2607s", "travelDistanceMeters": 4812, "maxLoads": { "weightKg": { "amount": "80" } } }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-13T16:00:00Z", "latestVehicleEndTime": "2023-01-13T16:43:27Z", "totalCost": 77.086666666666659, "costs": { "model.vehicles.cost_per_hour": 28.966666666666665, "model.vehicles.cost_per_kilometer": 48.12 } } }
เนื่องจากloadDemandsรวมของการจัดส่งทั้ง 3 รายการ (50 + 10 + 80 = 140) เกินloadLimitsของยานพาหนะ (100) ยานพาหนะจึงรับสินค้าทั้งหมดพร้อมกันไม่ได้
เครื่องมือเพิ่มประสิทธิภาพจะพิจารณาเฉพาะเส้นทางที่ shipment[0]
และ shipment[2] ไม่ได้อยู่ในยานพาหนะพร้อมกัน เนื่องจากสินค้าที่จัดส่งเหล่านี้
มีน้ำหนักรวมกันเกินขีดจำกัดการบรรทุกของยานพาหนะ
เส้นทางมีvisitsต่อไปนี้เพื่อไม่ให้เกินขีดจำกัดน้ำหนักบรรทุกของยานพาหนะ
- มีผู้มารับ
shipment[0]แล้ว - มีผู้มารับ
shipment[1]แล้ว shipment[0]ได้รับการนำส่งแล้วshipment[1]ได้รับการนำส่งแล้ว- มีผู้มารับ
shipment[2]แล้ว shipment[2]ได้รับการนำส่งแล้ว
น้ำหนักบรรทุกของยานพาหนะจะเปลี่ยนแปลงตลอดเส้นทาง ซึ่งคุณสามารถสังเกตได้ในอาร์เรย์ transitions เช่น transitions[2] แสดงยานพาหนะ
บรรทุกสินค้า 60 weightKg หลังจากรับสินค้า 2 รายการแรก (50 +
10)
พร็อพเพอร์ตี้ maxLoads ใน metrics แสดงให้เห็นว่าน้ำหนักบรรทุกสูงสุด
ที่บรรทุกในจุดใดก็ตามของเส้นทางคือ 80 weightKg ซึ่งยืนยันว่า
โซลูชันยังคงอยู่ภายในขีดจำกัด 100 weightKg ของยานพาหนะได้สำเร็จ
ขีดจำกัดการโหลดแบบไม่เข้มงวด
ตัวอย่างต่อไปนี้แสดงวิธีใช้ขีดจำกัดการโหลดแบบยืดหยุ่นเพื่อเพิ่มประสิทธิภาพเส้นทางที่มีรถหลายคัน โซลูชันจะแบ่งการจัดส่งระหว่างยานพาหนะ 2 คันเพื่อหลีกเลี่ยงค่าปรับสำหรับการเกินขีดจำกัดการโหลดแบบยืดหยุ่นของยานพาหนะ
ตัวอย่างคำขอ
ตอนนี้คำขอนี้รวมการจัดส่งแบบนำส่งเท่านั้น 3 รายการและยานพาหนะ 2 คันที่มีloadLimits และ softMaxLoad เดียวกัน
พารามิเตอร์หลักสำหรับตัวอย่างนี้มีดังนี้
- การจัดส่งทั้ง 3 รายการมี
loadDemandsรวม 140weightKg(50- 60 + 30)
- มียานพาหนะ 2 คันที่มี
softMaxLoadเป็น "100"weightKgและมีcostPerUnitAboveSoftMaxเป็น 5.0
ดูตัวอย่างคำขอที่มีขีดจำกัดการโหลดแบบยืดหยุ่น
{ "populatePolylines": false, "populateTransitionPolylines": false, "model": { "globalStartTime": "2023-01-13T16:00:00Z", "globalEndTime": "2023-01-14T16:00:00Z", "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "loadDemands": { "weightKg": { "amount": "50" } } }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "loadDemands": { "weightKg": { "amount": "60" } } }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "loadDemands": { "weightKg": { "amount": "30" } } } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0, "loadLimits": { "weightKg": { "maxLoad": "150", "softMaxLoad": "100", "costPerUnitAboveSoftMax": 5.0 } } }, { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0, "loadLimits": { "weightKg": { "maxLoad": "150", "softMaxLoad": "100", "costPerUnitAboveSoftMax": 5.0 } } } ] } }
ตัวอย่างการตอบกลับ
ตอนนี้การตอบกลับมี 2 เส้นทาง ซึ่งเป็นเส้นทางสำหรับยานพาหนะแต่ละคัน เครื่องมือเพิ่มประสิทธิภาพ พิจารณาแล้วว่าการใช้ยานพาหนะทั้ง 2 คันนั้นคุ้มค่ากว่าการใช้ยานพาหนะเพียงคันเดียว และเสียค่าปรับตามขีดจำกัดแบบยืดหยุ่น
ดูการตอบกลับคำขอที่มีขีดจำกัดการโหลดแบบยืดหยุ่น
{ "routes": [ { "vehicleStartTime": "2023-01-13T16:00:00Z", "vehicleEndTime": "2023-01-13T16:13:31Z", "visits": [ { "startTime": "2023-01-13T16:03:53Z", "detour": "0s", "loadDemands": { "weightKg": { "amount": "-50" } } } ], "transitions": [ { "travelDuration": "233s", "travelDistanceMeters": 794, "waitDuration": "0s", "totalDuration": "233s", "startTime": "2023-01-13T16:00:00Z", "vehicleLoads": { "weightKg": { "amount": "50" } } }, { "travelDuration": "328s", "travelDistanceMeters": 1188, "waitDuration": "0s", "totalDuration": "328s", "startTime": "2023-01-13T16:08:03Z", "vehicleLoads": { "weightKg": {} } } ], "metrics": { "performedShipmentCount": 1, "travelDuration": "561s", "visitDuration": "250s", "totalDuration": "811s", "travelDistanceMeters": 1982, "maxLoads": { "weightKg": { "amount": "50" } } }, "routeCosts": { "model.vehicles.cost_per_kilometer": 19.82, "model.vehicles.cost_per_hour": 9.01 }, "routeTotalCost": 28.83 }, { "vehicleIndex": 1, "vehicleStartTime": "2023-01-13T16:00:00Z", "vehicleEndTime": "2023-01-13T16:21:43Z", "visits": [ { "shipmentIndex": 1, "startTime": "2023-01-13T16:05:54Z", "detour": "0s", "loadDemands": { "weightKg": { "amount": "-60" } } }, { "shipmentIndex": 2, "startTime": "2023-01-13T16:13:52Z", "detour": "473s", "loadDemands": { "weightKg": { "amount": "-30" } } } ], "transitions": [ { "travelDuration": "354s", "travelDistanceMeters": 1196, "waitDuration": "0s", "totalDuration": "354s", "startTime": "2023-01-13T16:00:00Z", "vehicleLoads": { "weightKg": { "amount": "90" } } }, { "travelDuration": "228s", "travelDistanceMeters": 808, "waitDuration": "0s", "totalDuration": "228s", "startTime": "2023-01-13T16:10:04Z", "vehicleLoads": { "weightKg": { "amount": "30" } } }, { "travelDuration": "221s", "travelDistanceMeters": 655, "waitDuration": "0s", "totalDuration": "221s", "startTime": "2023-01-13T16:18:02Z", "vehicleLoads": { "weightKg": {} } } ], "metrics": { "performedShipmentCount": 2, "travelDuration": "803s", "visitDuration": "500s", "totalDuration": "1303s", "travelDistanceMeters": 2659, "maxLoads": { "weightKg": { "amount": "90" } } }, "routeCosts": { "model.vehicles.cost_per_kilometer": 26.59, "model.vehicles.cost_per_hour": 14.48 }, "routeTotalCost": 41.07 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 3, "travelDuration": "1364s", "visitDuration": "750s", "totalDuration": "2114s", "travelDistanceMeters": 4641, "maxLoads": { "weightKg": { "amount": "90" } } }, "usedVehicleCount": 2, "earliestVehicleStartTime": "2023-01-13T16:00:00Z", "latestVehicleEndTime": "2023-01-13T16:21:43Z", "totalCost": 69.90, "costs": { "model.vehicles.cost_per_kilometer": 46.41, "model.vehicles.cost_per_hour": 23.49 } } }
ฟิลด์ต่อไปนี้แสดงวิธีที่เครื่องมือเพิ่มประสิทธิภาพแบ่งการจัดส่งในรถ 2 คันเพื่อรักษาน้ำหนักบรรทุกไม่ให้เกินขีดจำกัดแบบยืดหยุ่นที่ 100 weightKg
- เส้นทางแรก (
vehicleIndex: 0) จัดการการจัดส่ง 50weightKgmaxLoadsคือ "50" ซึ่งต่ำกว่าขีดจำกัดแบบยืดหยุ่น - ส่วนเส้นทางที่ 2 (
vehicleIndex: 1) จะจัดการการจัดส่ง 60 และ 30weightKgmaxLoadsคือ "90" ซึ่งต่ำกว่าขีดจำกัดแบบยืดหยุ่นเช่นกัน - เนื่องจากรถทั้ง 2 คันไม่ละเมิดขีดจำกัดแบบยืดหยุ่น
routeCostsของทั้ง 2 เส้นทางจึงไม่แสดงค่าปรับcostPerUnitAboveSoftMax