สถานการณ์นี้จะเพิ่มประสิทธิภาพลําดับป้ายจอดรถที่กำหนดให้กับยานพาหนะด้วยพารามิเตอร์ต้นทุนแบบง่าย นี่คือโหมดที่ง่ายที่สุดของการดำเนินการเพิ่มประสิทธิภาพเส้นทาง และ ทำให้มั่นใจได้ว่าจะมีการแวะพักทั้งหมดภายในกรอบเวลาที่กำหนด
ตัวอย่างต่อไปนี้แสดงสถานการณ์เบื้องต้นที่มีรถยนต์ 1 คันและ 3 คัน การจัดส่ง ซึ่งทั้งหมดมาจากสถานที่แห่งเดียวซึ่งเรียกว่า depot
ดูตัวอย่างคำขอ
{ "populatePolylines": true, "populateTransitionPolylines": true, "model": { "globalStartTime": "2023-01-13T16:00:00-08:00", "globalEndTime": "2023-01-14T16:00:00-08:00", "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ] }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ] }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ] } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerKilometer": 10.0, "costPerHour": 40.0 } ] } }
ช่องคำขอเพิ่มประสิทธิภาพเส้นทาง
ดังที่กล่าวไว้ในภาพรวม พร็อพเพอร์ตี้คำขอการเพิ่มประสิทธิภาพเส้นทางที่สำคัญที่สุดคือ vehicles
และ shipments
นอกจากยานพาหนะและการจัดส่งแล้ว คำขอยังมีข้อมูลต่อไปนี้ด้วย ฟิลด์:
เส้นประกอบ
populatePolylines
และ populateTransitionPolylines
ระบุว่าจะใช้เส้นทางหรือไม่
การเพิ่มประสิทธิภาพควรแสดงเส้นประกอบ
บริการจะเข้ารหัสโพลีไลน์โดยใช้ตัวแปลงรหัสโพลีไลน์ JS ของ Maps ซึ่งแสดงถึง
ข้อมูลโพลีไลน์ในไบนารีโดยใช้อักขระ ASCII ที่พิมพ์ได้ คุณสามารถใช้
ยูทิลิตีโปรแกรมเปลี่ยนไฟล์โพลีไลน์แบบอินเทอร์แอกทีฟเพื่อแสดงภาพเส้นทางที่คำนวณโดยใช้
การเพิ่มประสิทธิภาพเส้นทาง ตัวอย่างในคู่มือนี้ตั้งค่า populatePolylines
และ
populateTransitionPolylines
เป็นจริง แต่คำแนะนำอื่นๆ ตั้งค่าเป็น "เท็จ" เป็น
ลดขนาดการตอบกลับ
ดูคำอธิบายการเข้ารหัสในรูปแบบอัลกอริทึม Polyline ที่เข้ารหัส
ข้อจำกัดด้านเวลาทั่วโลก
ตั้งค่า model.globalStartTime
และ model.globalEndTime
เป็น 24 ที่กําหนดเอง
ระยะเวลา 1 ชั่วโมง ซึ่งจะช่วยให้ตีความการประทับเวลาเอาต์พุตได้ง่ายขึ้น
เยี่ยมชมสถานที่
คําขอตัวอย่างใช้เฉพาะ model.shipments[].pickups[].arrivalLocation
และ model.shipments[].deliveries[].arrivalLocation
นอกจากนี้ยังมี
พร็อพเพอร์ตี้ departureLocation
สำหรับกรณีที่ยานพาหนะออกจาก
ต่างจากจุดที่มาถึง เช่น ที่จอดรถที่มีทางเข้า
ที่ด้านหนึ่งของอาคาร และทางออกอีกด้านหนึ่ง ในคู่มือนี้และคู่มือต่อๆ ไป เราจะถือว่าจุดต้นทางและจุดหมายเดียวกัน
ทั้งขาเข้าและขาออก waypoint
ยังมีอีกตัวเลือกหนึ่งสำหรับใช้แทน latLng
ฟิลด์ Waypoint
รองรับการใช้รหัส Google Places แทน LatLng
และระบุทิศทางของยานพาหนะได้ด้วย ดูเอกสารอ้างอิง
(REST, gRPC) เพื่อขอรายละเอียดเพิ่มเติม
ข้อจำกัดในตัวอย่าง
สถานการณ์นี้จะจำกัดเครื่องมือเพิ่มประสิทธิภาพในหลายๆ วิธี
- กิจกรรมทั้งหมดต้องเสร็จสิ้นระหว่างเวลาเริ่มต้นและเวลาสิ้นสุดทั่วโลก ในกรณีนี้ เวลาเริ่มต้นและเวลาสิ้นสุดเป็นข้อจำกัดที่ยืดหยุ่นมากเนื่องจากการจัดส่งอยู่ใกล้กันและมีกรอบเวลาทั่วโลกที่กว้าง
- การจัดส่งทั้งหมดต้องเสร็จสิ้น นี่คือลักษณะการทำงานเริ่มต้นเมื่อ
ไม่ได้ระบุค่าปรับใน
shipments
- มีการตั้งค่า
costPerKilometer
และcostPerHour
ในรถ
ค่าใช้จ่ายจะระบุอยู่ในพารามิเตอร์รูปแบบต้นทุน
พร็อพเพอร์ตี้คำตอบของ Route Optimization
ดูการตอบกลับคำขอตัวอย่าง
{ "routes": [ { "vehicleStartTime": "2023-01-14T00:00:00Z", "vehicleEndTime": "2023-01-14T00:36:41Z", "visits": [ { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-14T00:00:00Z", "detour": "0s" }, { "shipmentIndex": 1, "isPickup": true, "startTime": "2023-01-14T00:02:30Z", "detour": "150s" }, { "isPickup": true, "startTime": "2023-01-14T00:05:00Z", "detour": "300s" }, { "startTime": "2023-01-14T00:11:25Z", "detour": "0s" }, { "shipmentIndex": 1, "startTime": "2023-01-14T00:19:29Z", "detour": "503s" }, { "shipmentIndex": 2, "startTime": "2023-01-14T00:29:02Z", "detour": "1324s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:00:00Z", "routePolyline": {} }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:02:30Z", "routePolyline": {} }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:05:00Z", "routePolyline": {} }, { "travelDuration": "235s", "travelDistanceMeters": 795, "waitDuration": "0s", "totalDuration": "235s", "startTime": "2023-01-14T00:07:30Z", "routePolyline": { "points": "kvteFtfjVAA?C?C@C?A?C@AFMj@s@JKb@k@Zc@LSjA}ARWDGdAxAdAvAXa@@k@AsA\\c@FKp@_A\\c@Ze@fA{ALSFGd@o@rAgBB{BZc@" } }, { "travelDuration": "234s", "travelDistanceMeters": 793, "waitDuration": "0s", "totalDuration": "234s", "startTime": "2023-01-14T00:15:35Z", "routePolyline": { "points": "cwseFti_jVRWj@w@x@eAHLNRHJbApAHLX\\V^?@hA~AT\\PVFFDHDFJNp@~@NRLNNTFFUZIJY^Y^g@p@[`@KP{@fAEFSXe@l@c@h@WZY\\?BELk@v@MNa@l@" } }, { "travelDuration": "323s", "travelDistanceMeters": 1204, "waitDuration": "0s", "totalDuration": "323s", "startTime": "2023-01-14T00:23:39Z", "routePolyline": { "points": "cuseFhjVSTY`@Yb@GHEDIJEF]f@IJi@r@oAbBeCfDKLaApAKNQVIPKPCDQJIBIBM@iAJeALqBVC@C?A?QBYDI@C?_@Dc@FO@a@FDp@HfAHvABVDl@Dj@PpCQDiALsALAQASKwAOgBEe@COCYEa@Es@Eg@" } }, { "travelDuration": "209s", "travelDistanceMeters": 665, "waitDuration": "0s", "totalDuration": "209s", "startTime": "2023-01-14T00:33:12Z", "routePolyline": { "points": "{zteFxbajV?CAYEc@AMC_@AOAK?E?CCWAOAKCe@CY?WScDEm@d@EFA\\ENCB?XEVC^E`@EhBUVCNEB?@?\\Er@IMUe@k@k@w@AAMQa@i@SWQWMQi@u@AC?A" } } ], "routePolyline": { "points": "kvteFtfjVAA?C?C@C?A?C@AFMj@s@JKb@k@Zc@LSjA}ARWDGdAxAdAvAXa@@k@AsA\\c@FKp@_A\\c@Ze@fA{ALSFGd@o@rAgBB{BZc@RWj@w@x@eAHLNRHJbApAHLX\\V^?@hA~AT\\PVFFDHDFJNp@~@NRLNNTFFUZIJY^Y^g@p@[@KP{@fAEFSXe@l@c@h@WZY\\?BELk@v@MNa@l@STY@Yb@GHEDIJEF]f@IJi@r@oAbBeCfDKLaApAKNQVIPKPCDQJIBIBM@iAJeALqBVC@C?A?QBYDI@C?_@Dc@FO@a@FDp@HfAHvABVDl@Dj@PpCQDiALsALAQASKwAOgBEe@COCYEa@Es@Eg@?CAYEc@AMC_@AOAK?E?CCWAOAKCe@CY?WScDEm@d@EFA\\ENCB?XEVC^E`@EhBUVCNEB?@?\\Er@IMUe@k@k@w@AAMQa@i@SWQWMQi@u@AC?A" }, "metrics": { "performedShipmentCount": 3, "travelDuration": "1001s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "2201s", "travelDistanceMeters": 3457 }, "travelSteps": [ { "duration": "0s", "routePolyline": {} }, { "duration": "0s", "routePolyline": {} }, { "duration": "0s", "routePolyline": {} }, { "duration": "227s", "distanceMeters": 794, "routePolyline": { "points": "kvteFtfjVAA?C?C@C?A?C@AFMj@s@JKb@k@Zc@LSjA}ARWDGdAxAdAvAXa@@k@AsA\\c@FKp@_A\\c@Ze@fA{ALSFGd@o@rAgBB{BZc@" } }, { "duration": "233s", "distanceMeters": 791, "routePolyline": { "points": "cwseFti_jVRWj@w@x@eAHLNRHJbApAHLX\\V^?@hA~AT\\PVFFDHDFJNp@~@NRLNNTFFUZIJY^Y^g@p@[`@KP{@fAEFSXe@l@c@h@WZY\\?BELk@v@MNa@l@" } }, { "duration": "322s", "distanceMeters": 1205, "routePolyline": { "points": "cuseFhjVSTY`@Yb@GHEDIJEF]f@IJi@r@oAbBeCfDKLaApAKNQVIPKPCDQJIBIBM@iAJeALqBVC@C?A?QBYDI@C?_@Dc@FO@a@FDp@HfAHvABVDl@Dj@PpCQDiALsALAQASKwAOgBEe@COCYEa@Es@Eg@" } }, { "duration": "208s", "distanceMeters": 666, "routePolyline": { "points": "{zteFxbajV?CAYEc@AMC_@AOAK?E?CCWAOAKCe@CY?WScDEm@d@EFA\\ENCB?XEVC^E`@EhBUVCNEB?@?\\Er@IMUe@k@k@w@AAMQa@i@SWQWMQi@u@AC?A" } } ], "vehicleDetour": "2201s", "routeCosts": { "model.vehicles.cost_per_hour": 24.455555555555556, "model.vehicles.cost_per_kilometer": 34.57 }, "routeTotalCost": 59.025555555555556 } ], "totalCost": 59.025555555555556, "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 3, "travelDuration": "1001s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "2201s", "travelDistanceMeters": 3457 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-14T00:00:00Z", "latestVehicleEndTime": "2023-01-14T00:36:41Z", "totalCost": 59.025555555555556, "costs": { "model.vehicles.cost_per_kilometer": 34.57, "model.vehicles.cost_per_hour": 24.455555555555556 } } }
การตอบกลับการเพิ่มประสิทธิภาพเส้นทางจะมีช่อง routes
ระดับบนสุดที่
เป็นเส้นทางที่นำเสนอ โดยมี 1 เส้นทางต่อยานพาหนะ 1 คัน เนื่องจากคำขอตัวอย่างในคู่มือนี้ระบุเฉพาะยานพาหนะ 1 คัน routes
จึงมีข้อความ ShipmentRoute
1 รายการ
ที่พัก ShipmentRoute
แห่ง
คุณสมบัติที่สำคัญที่สุด 2 รายการสำหรับประเภทข้อความ ShipmentRoute
คือ
visits
และ transitions
Visit
แต่ละรายการแสดงถึงการมารับสินค้าหรือการนำส่งเสร็จสมบูรณ์จากหนึ่งใน
VisitRequest
ของข้อความคำขอ การเข้าชมจะได้รับมอบหมาย
ด้วยยานพาหนะในบางสถานที่และบางเวลา
Transition
แต่ละรายการจะแสดงยานพาหนะที่เดินทางจากตำแหน่งหนึ่งไปยัง
ถัดไป การเปลี่ยนอาจเกิดขึ้นระหว่างจุดเริ่มต้นของยานพาหนะ สถานที่เข้าชม และจุดสิ้นสุดของยานพาหนะ
เพื่อสร้างเส้นทางที่สมบูรณ์ของยานพาหนะใหม่ไปยัง visits
ของ ShipmentRoute
และ
ต้องรวม transitions
ชุดค่าผสมของช่องเป็นความคืบหน้าของ
กิจกรรมของยานพาหนะมีลักษณะดังนี้
request.vehicles[0].startLocation -> transitions[0] -> visits[0] ->
transitions[1] -> visits[1] -> transitions[2] -> ... -> visits[3] ->
transitions[4] -> request.vehicles[0].endLocation
ShipmentRoute
จะมีtransitions
มากกว่าvisits
1 รายการเสมอ เนื่องจากยานพาหนะต้องเดินทางจากจุดเริ่มต้นไปยังจุดที่ไปครั้งแรกที่จุดเริ่มต้นของเส้นทาง และจากจุดที่ไปครั้งล่าสุดไปยังจุดสิ้นสุดที่จุดสิ้นสุดของเส้นทาง หากรถไม่มีตำแหน่งเริ่มต้นหรือสิ้นสุด ตำแหน่งดังกล่าวจะยังมีตำแหน่งอยู่
transitions
มากกว่า visits
เนื่องจากตำแหน่งของการเข้าชมครั้งแรกหรือครั้งสุดท้ายคือ
ใช้เป็นตำแหน่งเริ่มต้นหรือจุดสิ้นสุดของยานพาหนะตามลำดับ
ในตัวอย่างนี้ การเข้าชมการรับสินค้า 3 ครั้งแรกมีการเปลี่ยนผ่าน โดยใช้ระยะทางและระยะเวลาเป็นศูนย์เพราะรถกระบะทั้ง 3 ชิ้น จะแชร์ตำแหน่งเดียวกันในคำขอดังกล่าว
ดูข้อมูลเพิ่มเติมในเอกสารประกอบอ้างอิงShipmentRoute
(REST, gRPC)
รายละเอียด
การเพิ่มประสิทธิภาพคำสั่งซื้อจุดอ้างอิงอย่างง่าย
ตามตัวอย่างนี้ โมเดลการเพิ่มประสิทธิภาพเส้นทางจะเข้าชมในฐานะพร็อพเพอร์ตี้ของ
การจัดส่งสินค้า และไม่มีแนวคิดของจุดอ้างอิงหรือจุดแวะพักในฐานะอิสระ
เอนทิตี แต่คุณสามารถแสดงจุดแวะพักหรือจุดอ้างอิงว่าเป็นการจัดส่งได้
ด้วย VisitRequest
เพียง 1 รายการเป็นแบบไปรับที่ร้านหรือจัดส่ง พาหนะต้องนิ่ง
ได้รับ costPerHour
หรือ costPerKilometer
เพื่อให้เครื่องมือเพิ่มประสิทธิภาพค้นหา
เส้นทางที่ดีที่สุด (ไม่ใช่การค้นหาเส้นทางที่เป็นไปได้)