ตัวอย่างนี้แสดงวิธีใช้ timeWindows เพื่อตั้งเวลา
รับและนำส่งสำหรับการจัดส่ง
ดูภาพรวมแนวคิดที่สมบูรณ์และวิธีอื่นๆ ในการใช้ timeWindows
ได้ที่เอกสารแนวคิดคีย์ช่วงเวลา
สถานการณ์ที่ 1: การนำส่งภายในกรอบเวลา
ตัวอย่างต่อไปนี้แสดงสถานการณ์ที่ยานพาหนะคันเดียวต้องนำส่งสินค้า 3 รายการภายในtimeWindowsที่ระบุ
ตัวอย่างคำขอ
คำขอนี้มีการจัดส่ง 3 รายการ โดยแต่ละรายการมีการนำส่งที่แตกต่างกัน
TimeWindow ดังนี้
shipments[0]กรอบเวลาในการนำส่ง: 18:00 - 19:00shipments[1]กรอบเวลาในการนำส่ง: 18:00 - 18:30shipments[2]กรอบเวลาในการนำส่ง: 17:30 - 18:00
ดูตัวอย่างคำขอที่มีกรอบเวลา
{ "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", "timeWindows": [ { "startTime": "2023-01-13T18:00:00Z", "endTime": "2023-01-13T19:00:00Z" } ] } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 100.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s", "timeWindows": [ { "startTime": "2023-01-13T18:00:00Z", "endTime": "2023-01-13T18:30:00Z" } ] } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 20.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s", "timeWindows": [ { "startTime": "2023-01-13T17:30:00Z", "endTime": "2023-01-13T18:00:00Z" } ] } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 50.0 } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0 } ] } }
ตัวอย่างการตอบกลับ
คำตอบแสดงให้เห็นว่าเครื่องมือเพิ่มประสิทธิภาพจะจัดกำหนดการ visits แต่ละรายการเพื่อ
เคารพกรอบเวลา โดยจะนำส่งการจัดส่งที่มีกรอบเวลาเร็วกว่าก่อน
ดูการตอบกลับคำขอตัวอย่างที่มี กรอบเวลา
{ "routes": [ { "vehicleStartTime": "2023-01-13T17:35:50Z", "vehicleEndTime": "2023-01-13T18:17:24Z", "visits": [ { "isPickup": true, "startTime": "2023-01-13T17:35:50Z", "detour": "0s" }, { "shipmentIndex": 1, "isPickup": true, "startTime": "2023-01-13T17:38:20Z", "detour": "150s" }, { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-13T17:40:50Z", "detour": "300s" }, { "shipmentIndex": 2, "startTime": "2023-01-13T17:50:09Z", "detour": "0s" }, { "shipmentIndex": 1, "startTime": "2023-01-13T18:00:00Z", "detour": "796s" }, { "startTime": "2023-01-13T18:07:35Z", "detour": "1520s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T17:35:50Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T17:38:20Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T17:40:50Z" }, { "travelDuration": "409s", "travelDistanceMeters": 1371, "waitDuration": "0s", "totalDuration": "409s", "startTime": "2023-01-13T17:43:20Z" }, { "travelDuration": "341s", "travelDistanceMeters": 1312, "waitDuration": "0s", "totalDuration": "341s", "startTime": "2023-01-13T17:54:19Z" }, { "travelDuration": "205s", "travelDistanceMeters": 636, "waitDuration": "0s", "totalDuration": "205s", "startTime": "2023-01-13T18:04:10Z" }, { "travelDuration": "339s", "travelDistanceMeters": 1276, "waitDuration": "0s", "totalDuration": "339s", "startTime": "2023-01-13T18:11:45Z" } ], "metrics": { "performedShipmentCount": 3, "travelDuration": "1294s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "2494s", "travelDistanceMeters": 4595 }, "routeCosts": { "model.vehicles.cost_per_hour": 27.711111111111112, "model.vehicles.cost_per_kilometer": 45.95 }, "routeTotalCost": 73.661111111111111 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 3, "travelDuration": "1294s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "2494s", "travelDistanceMeters": 4595 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-13T17:35:50Z", "latestVehicleEndTime": "2023-01-13T18:17:24Z", "totalCost": 73.661111111111111, "costs": { "model.vehicles.cost_per_hour": 27.711111111111112, "model.vehicles.cost_per_kilometer": 45.95 } } }
startTimeการนำส่งสำหรับการจัดส่งแต่ละรายการจะอยู่ในกรอบเวลาที่ขอ
shipments[2]นำส่งเวลา 17:50 น. (ภายในกรอบเวลา 17:30 - 18:00 น.)shipments[1]จะนำส่งเวลา 18:00 น. (ภายในกรอบเวลา 18:00 - 18:30 น.)shipments[0]จัดส่งเวลา 18:07 น. (ภายในช่วงเวลา 18:00 - 19:00 น.)
สถานการณ์ที่ 2: ข้ามการจัดส่งเนื่องจากช่วงเวลา
ตัวอย่างต่อไปนี้แสดงสถานการณ์ที่ช่วงเวลาการนำส่งอยู่ห่างจากช่วงเวลาอื่นๆ มากเกินไป ซึ่งทำให้การข้ามการนำส่งและชำระค่าธรรมเนียม penaltyCost เป็นตัวเลือกที่คุ้มค่ากว่าสำหรับเครื่องมือเพิ่มประสิทธิภาพ
ตัวอย่างคำขอ
คำขอนี้เหมือนกับสถานการณ์แรก ยกเว้นช่วงเวลาการนำส่งของสินค้าที่จัดส่ง 1 รายการจะอยู่ที่เวลาอื่น ซึ่งช้ากว่ามากในวันนั้น
shipments[1]กรอบเวลาในการนำส่งคือ 21:00 - 21:30 น.
ดูตัวอย่างคำขอที่มีกรอบเวลาที่ไม่สามารถ ตอบสนองได้
{ "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", "timeWindows": [ { "startTime": "2023-01-13T18:00:00Z", "endTime": "2023-01-13T19:00:00Z" } ] } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 100.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s", "timeWindows": [ { "startTime": "2023-01-13T21:00:00Z", "endTime": "2023-01-13T21:30:00Z" } ] } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 20.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s", "timeWindows": [ { "startTime": "2023-01-13T17:30:00Z", "endTime": "2023-01-13T18:00:00Z" } ] } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 50.0 } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0 } ] } }
ตัวอย่างการตอบกลับ
คำตอบแสดงให้เห็นว่าเครื่องมือเพิ่มประสิทธิภาพข้าม shipment[1] สาเหตุเป็นเพราะหากต้องการนำส่งสินค้าดังกล่าว ยานพาหนะจะต้องวิ่งเพิ่มอีกหลายชั่วโมง และต้นทุนที่คำนวณสำหรับเวลานั้นสูงกว่าpenaltyCostของสินค้าที่ 20.0
ดูการตอบกลับคำขอตัวอย่างที่มี กรอบเวลาที่ข้ามการจัดส่ง
{ "routes": [ { "vehicleStartTime": "2023-01-13T17:37:49Z", "vehicleEndTime": "2023-01-13T18:09:49Z", "visits": [ { "isPickup": true, "startTime": "2023-01-13T17:37:49Z", "detour": "0s" }, { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-13T17:40:19Z", "detour": "150s" }, { "shipmentIndex": 2, "startTime": "2023-01-13T17:49:38Z", "detour": "0s" }, { "startTime": "2023-01-13T18:00:00Z", "detour": "946s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T17:37:49Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T17:40:19Z" }, { "travelDuration": "409s", "travelDistanceMeters": 1371, "waitDuration": "0s", "totalDuration": "409s", "startTime": "2023-01-13T17:42:49Z" }, { "travelDuration": "372s", "travelDistanceMeters": 1348, "waitDuration": "0s", "totalDuration": "372s", "startTime": "2023-01-13T17:53:48Z" }, { "travelDuration": "339s", "travelDistanceMeters": 1276, "waitDuration": "0s", "totalDuration": "339s", "startTime": "2023-01-13T18:04:10Z" } ], "metrics": { "performedShipmentCount": 2, "travelDuration": "1120s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1920s", "travelDistanceMeters": 3995 }, "routeCosts": { "model.vehicles.cost_per_kilometer": 39.95, "model.vehicles.cost_per_hour": 21.333333333333332 }, "routeTotalCost": 61.283333333333331 } ], "skippedShipments": [ { "index": 1 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 2, "travelDuration": "1120s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1920s", "travelDistanceMeters": 3995 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-13T17:37:49Z", "latestVehicleEndTime": "2023-01-13T18:09:49Z", "totalCost": 81.283333333333331, "costs": { "model.shipments.penalty_cost": 20, "model.vehicles.cost_per_hour": 21.333333333333332, "model.vehicles.cost_per_kilometer": 39.95 } } }
อาร์เรย์ skippedShipments ในการตอบกลับแสดงให้เห็นว่าไม่ได้ดำเนินการจัดส่งที่มี
index: 1 ซึ่งส่งผลต่อพารามิเตอร์ต้นทุนต่อไปนี้
penaltyCost20.0 จากการจัดส่งนั้นจะรวมอยู่ในmetrics.coststotalCost(81.28) คือผลรวมของrouteTotalCost(61.28) และpenalty_cost(20.0)
สถานการณ์ที่ 3: การใช้กรอบเวลาแบบยืดหยุ่น
ตัวอย่างต่อไปนี้แสดงวิธีใช้กรอบเวลาแบบยืดหยุ่น ซึ่งช่วยให้เครื่องมือเพิ่มประสิทธิภาพกำหนดเวลาการนำส่งนอกช่วงเวลาที่ระบุได้ แต่จะมีค่าใช้จ่าย
ดูภาพรวมเชิงแนวคิดของฟีเจอร์นี้ได้ที่ส่วนช่วงเวลาที่ยืดหยุ่นในเอกสารแนวคิดหลักของช่วงเวลา
ตัวอย่างคำขอ
คำขอนี้จะแก้ไขสถานการณ์ก่อนหน้าโดยเปลี่ยนกรอบเวลาที่แน่นอนสำหรับ
shipment[1]เป็นกรอบเวลาแบบยืดหยุ่น โดยใช้ softStartTime และ
ระบุ costPerHourBeforeSoftStartTime
ตอนนี้ shipment[1] มีsoftStartTime 21:00 น.และcostPerHourBeforeSoftStartTime 2.0 ซึ่งหมายความว่าระบบจะปรับโทษ
ทุกชั่วโมงที่นำส่งก่อนเวลา 21:00 น.
ดูตัวอย่างคำขอที่มีช่วงเวลาที่แน่นอนและช่วงเวลาที่ยืดหยุ่น ได้
{ "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", "timeWindows": [ { "startTime": "2023-01-13T18:00:00Z", "softEndTime": "2023-01-13T19:00:00Z", "costPerHourAfterSoftEndTime": 2.0 } ] } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 100.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s", "timeWindows": [ { "softStartTime": "2023-01-13T21:00:00Z", "endTime": "2023-01-13T21:30:00Z", "costPerHourBeforeSoftStartTime": 2.0 } ] } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 20.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s", "timeWindows": [ { "startTime": "2023-01-13T17:30:00Z", "softEndTime": "2023-01-13T18:00:00Z", "costPerHourAfterSoftEndTime": 2.0 } ] } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 50.0 } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0 } ] } }
ตัวอย่างการตอบกลับ
คำตอบแสดงให้เห็นว่าตอนนี้เครื่องมือเพิ่มประสิทธิภาพได้กำหนดเวลาการจัดส่งทั้ง 3 รายการแล้ว โดยจะกำหนดเวลาการนำส่งshipment[1]เร็วกว่าเวลา 21:00 น. อย่างมาก
softStartTime โซลูชันนี้คุ้มค่าที่สุดเนื่องจากต้นทุน
ของการละเมิดกรอบเวลาแบบยืดหยุ่นน้อยกว่าpenaltyCostของการ
ข้ามการจัดส่ง และยังน้อยกว่าต้นทุนของการให้ยานพาหนะ
รอจัดส่งในช่วงกรอบเวลาด้วย
ดูการตอบกลับคำขอตัวอย่างที่มีกรอบเวลาแบบเข้มงวดและ แบบยืดหยุ่น
{ "routes": [ { "vehicleStartTime": "2023-01-13T17:48:35Z", "vehicleEndTime": "2023-01-13T18:24:28Z", "visits": [ { "isPickup": true, "startTime": "2023-01-13T17:48:35Z", "detour": "0s" }, { "shipmentIndex": 1, "isPickup": true, "startTime": "2023-01-13T17:51:05Z", "detour": "150s" }, { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-13T17:53:35Z", "detour": "300s" }, { "startTime": "2023-01-13T18:00:00Z", "detour": "300s" }, { "shipmentIndex": 1, "startTime": "2023-01-13T18:07:42Z", "detour": "493s" }, { "shipmentIndex": 2, "startTime": "2023-01-13T18:17:27Z", "detour": "873s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T17:48:35Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T17:51:05Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T17:53:35Z" }, { "travelDuration": "235s", "travelDistanceMeters": 795, "waitDuration": "0s", "totalDuration": "235s", "startTime": "2023-01-13T17:56:05Z" }, { "travelDuration": "212s", "travelDistanceMeters": 791, "waitDuration": "0s", "totalDuration": "212s", "startTime": "2023-01-13T18:04:10Z" }, { "travelDuration": "335s", "travelDistanceMeters": 1204, "waitDuration": "0s", "totalDuration": "335s", "startTime": "2023-01-13T18:11:52Z" }, { "travelDuration": "171s", "travelDistanceMeters": 665, "waitDuration": "0s", "totalDuration": "171s", "startTime": "2023-01-13T18:21:37Z" } ], "metrics": { "performedShipmentCount": 3, "travelDuration": "953s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "2153s", "travelDistanceMeters": 3455 }, "routeCosts": { "model.shipments.deliveries.time_windows.cost_per_hour_after_soft_end_time": 0.58166666666666667, "model.shipments.deliveries.time_windows.cost_per_hour_before_soft_start_time": 5.7433333333333332, "model.vehicles.cost_per_hour": 23.922222222222221, "model.vehicles.cost_per_kilometer": 34.55 }, "routeTotalCost": 64.797222222222217 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 3, "travelDuration": "953s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "2153s", "travelDistanceMeters": 3455 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-13T17:48:35Z", "latestVehicleEndTime": "2023-01-13T18:24:28Z", "totalCost": 64.797222222222217, "costs": { "model.vehicles.cost_per_kilometer": 34.55, "model.shipments.deliveries.time_windows.cost_per_hour_before_soft_start_time": 5.7433333333333332, "model.shipments.deliveries.time_windows.cost_per_hour_after_soft_end_time": 0.58166666666666667, "model.vehicles.cost_per_hour": 23.922222222222221 } } }
กรอบเวลาแบบยืดหยุ่นจะช่วยให้ได้โซลูชันที่ดีขึ้น ซึ่งจะเห็นได้จากการปรับปรุงต่อไปนี้
- ระบบจะกำหนดเวลาการจัดส่งทั้ง 3 รายการโดยไม่ข้ามรายการใด
- ตอนนี้
totalCostอยู่ที่ 64.79 ซึ่งต่ำกว่าต้นทุนของโซลูชันก่อนหน้าที่ 81.28 - ออบเจ็กต์
routeCostsมีค่าใช้จ่าย 5.74 สำหรับการนำส่งshipment[1]เกือบ 3 ชั่วโมงก่อนsoftStartTimeค่าใช้จ่ายนี้penaltyCostต่ำกว่า 20.0 จึงเป็นตัวเลือกที่คุ้มค่าที่สุด