- การแสดง JSON
- การจัดส่ง
- VisitRequest
- LatLng
- Waypoint
- ตำแหน่ง
- TimeWindow
- ยานพาหนะ
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- ช่วงเวลา
- LoadCost
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- วัตถุประสงค์
- ประเภท
- DurationDistanceMatrix
- แถว
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
รูปแบบการจัดส่งประกอบด้วยชุดการจัดส่งที่ต้องดำเนินการโดยชุดยานพาหนะ ในขณะที่ลดต้นทุนโดยรวม ซึ่งเป็นผลรวมของรายการต่อไปนี้
- ต้นทุนของการกำหนดเส้นทางยานพาหนะ (ผลรวมของต้นทุนต่อเวลารวม ต้นทุนต่อเวลาเดินทาง และต้นทุนคงที่ของยานพาหนะทั้งหมด)
- ค่าปรับสำหรับการจัดส่งที่ไม่ได้ดำเนินการ
- ต้นทุนของระยะเวลาการจัดส่งทั่วโลก
| การแสดง JSON |
|---|
{ "shipments": [ { object ( |
| ช่อง | |
|---|---|
shipments[] |
ชุดการจัดส่งที่ต้องดำเนินการในโมเดล |
vehicles[] |
ชุดยานพาหนะที่ใช้ในการเข้าชมได้ |
objectives[] |
ชุดวัตถุประสงค์สำหรับโมเดลนี้ ซึ่งเราจะเปลี่ยนให้เป็นต้นทุน หากไม่ใช่ค่าว่าง โมเดลอินพุตต้องไม่มีค่าใช้จ่าย หากต้องการรับคำขอที่แก้ไขแล้ว โปรดใช้ ทดลอง: ดูรายละเอียดเพิ่มเติมได้ที่ https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request |
globalStartTime |
เวลาเริ่มต้นและสิ้นสุดทั่วโลกของโมเดล: ระบบจะไม่พิจารณาเวลาที่อยู่นอกช่วงนี้ว่าถูกต้อง ช่วงเวลาของโมเดลต้องน้อยกว่า 1 ปี กล่าวคือ เมื่อใช้ฟิลด์ ใช้ RFC 3339 โดยเอาต์พุตที่สร้างขึ้นจะได้รับการแปลงเป็นรูปแบบ Z เสมอ และใช้ตัวเลขเศษส่วน 0, 3, 6 หรือ 9 หลัก นอกจากนี้ ระบบยังยอมรับออฟเซ็ตอื่นๆ นอกเหนือจาก "Z" ด้วย เช่น |
globalEndTime |
หากไม่ได้ตั้งค่า ระบบจะใช้ 00:00:00 UTC, 1 มกราคม 1971 (เช่น วินาที: 31536000, นาโน: 0) เป็นค่าเริ่มต้น ใช้ RFC 3339 โดยเอาต์พุตที่สร้างขึ้นจะได้รับการแปลงเป็นรูปแบบ Z เสมอ และใช้ตัวเลขเศษส่วน 0, 3, 6 หรือ 9 หลัก นอกจากนี้ ระบบยังยอมรับออฟเซ็ตอื่นๆ นอกเหนือจาก "Z" ด้วย เช่น |
globalDurationCostPerHour |
"ระยะเวลารวม" ของแพ็กเกจโดยรวมคือความแตกต่างระหว่างเวลาเริ่มต้นที่มีผลเร็วที่สุดและเวลาสิ้นสุดที่มีผลช้าที่สุดของยานพาหนะทั้งหมด ผู้ใช้สามารถกำหนดต้นทุนต่อชั่วโมงให้กับปริมาณดังกล่าวเพื่อลองเพิ่มประสิทธิภาพให้งานเสร็จเร็วที่สุด เป็นต้น ต้นทุนนี้ต้องอยู่ในหน่วยเดียวกับ |
durationDistanceMatrices[] |
ระบุเมทริกซ์ระยะเวลาและระยะทางที่ใช้ในโมเดล หากช่องนี้ว่างเปล่า ระบบจะใช้ Google Maps หรือระยะทางทางภูมิศาสตร์แทน ทั้งนี้ขึ้นอยู่กับค่าของช่อง ตัวอย่างการใช้งาน
|
durationDistanceMatrixSrcTags[] |
แท็กที่กำหนดแหล่งที่มาของเมทริกซ์ระยะเวลาและระยะทาง แท็กตรงกับ |
durationDistanceMatrixDstTags[] |
แท็กที่กำหนดปลายทางของเมทริกซ์ระยะเวลาและระยะทาง แท็กตรงกับ |
transitionAttributes[] |
เพิ่มแอตทริบิวต์การเปลี่ยนฉากลงในโมเดล |
shipmentTypeIncompatibilities[] |
ชุด shipment_types ที่เข้ากันไม่ได้ (ดู |
shipmentTypeRequirements[] |
ชุด |
precedenceRules[] |
ชุดกฎลำดับความสำคัญที่ต้องบังคับใช้ในโมเดล สำคัญ: การใช้กฎลำดับความสำคัญจะจำกัดขนาดของปัญหาที่สามารถเพิ่มประสิทธิภาพได้ คำขอที่ใช้กฎลำดับความสำคัญซึ่งมีการจัดส่งหลายรายการอาจถูกปฏิเสธ |
maxActiveVehicles |
จำกัดจำนวนยานพาหนะที่ใช้งานอยู่สูงสุด ยานพาหนะจะใช้งานได้หากเส้นทางของยานพาหนะดังกล่าวมีการจัดส่งอย่างน้อย 1 รายการ ซึ่งใช้เพื่อจำกัดจำนวนเส้นทางในกรณีที่มีคนขับน้อยกว่ายานพาหนะและกองยานพาหนะมีความหลากหลายได้ จากนั้นการเพิ่มประสิทธิภาพจะเลือกกลุ่มย่อยของยานพาหนะที่ดีที่สุดเพื่อใช้งาน ต้องเป็นค่าบวกอย่างเคร่งครัด |
การจัดส่ง
การจัดส่งสินค้า 1 รายการตั้งแต่การรับสินค้าครั้งแรกจนถึงการนำส่งครั้งแรก หากต้องการให้ระบบพิจารณาว่าการจัดส่งเสร็จสมบูรณ์แล้ว ยานพาหนะที่ไม่ซ้ำกันต้องไปที่สถานที่รับสินค้าแห่งใดแห่งหนึ่ง (และลดความจุสำรองตามนั้น) จากนั้นจึงไปที่สถานที่นำส่งแห่งใดแห่งหนึ่งในภายหลัง (และเพิ่มความจุสำรองตามนั้น)
| การแสดง JSON |
|---|
{ "displayName": string, "pickups": [ { object ( |
| ช่อง | |
|---|---|
displayName |
ชื่อที่แสดงของการจัดส่งที่ผู้ใช้กำหนด มีความยาวได้สูงสุด 63 อักขระและอาจใช้อักขระ UTF-8 |
pickups[] |
ชุดทางเลือกการรับสินค้าที่เชื่อมโยงกับการจัดส่ง หากไม่ได้ระบุไว้ ยานพาหนะจะต้องไปที่ตำแหน่งที่สอดคล้องกับการนำส่งเท่านั้น |
deliveries[] |
ชุดทางเลือกในการนำส่งที่เชื่อมโยงกับการจัดส่ง หากไม่ได้ระบุไว้ ยานพาหนะจะต้องไปที่สถานที่ที่สอดคล้องกับการรับเท่านั้น |
loadDemands |
ความต้องการในการบรรทุกของการจัดส่ง (เช่น น้ำหนัก ปริมาตร จำนวนพาเล็ต ฯลฯ) คีย์ในแผนที่ควรเป็นตัวระบุที่อธิบายประเภทของโหลดที่เกี่ยวข้อง และควรมีหน่วยด้วย เช่น "weight_kg", "volume_gallons", "pallet_count" เป็นต้น หากคีย์ที่ระบุไม่ปรากฏในแผนที่ ระบบจะถือว่าการโหลดที่เกี่ยวข้องเป็นค่าว่าง |
allowedVehicleIndices[] |
ชุดยานพาหนะที่อาจทำการจัดส่งนี้ หากเว้นว่างไว้ รถทุกคันจะดำเนินการนี้ได้ ยานพาหนะจะระบุตามดัชนีในรายการ |
costsPerVehicle[] |
ระบุค่าใช้จ่ายที่เกิดขึ้นเมื่อยานพาหนะแต่ละคันนำส่งการจัดส่งนี้ หากระบุ จะต้องมีอย่างใดอย่างหนึ่งต่อไปนี้
ต้นทุนเหล่านี้ต้องอยู่ในหน่วยเดียวกันกับ |
costsPerVehicleIndices[] |
ดัชนีของยานพาหนะที่ |
pickupToDeliveryAbsoluteDetourLimit |
ระบุเวลาอ้อมสูงสุดแบบสัมบูรณ์เมื่อเทียบกับเส้นทางที่สั้นที่สุดจากจุดรับไปยังจุดนำส่ง หากระบุ ต้องเป็นค่าที่ไม่เป็นลบ และการจัดส่งต้องมีการรับสินค้าและการนำส่งอย่างน้อย ตัวอย่างเช่น ให้ t เป็นเวลาที่สั้นที่สุดในการเดินทางจากทางเลือกในการรับสินค้าที่เลือกไปยังทางเลือกในการนำส่งที่เลือกโดยตรง จากนั้นการตั้งค่า หากมีการระบุทั้งขีดจำกัดแบบสัมพัทธ์และแบบสัมบูรณ์ในการจัดส่งเดียวกัน ระบบจะใช้ขีดจำกัดที่จำกัดมากกว่าสำหรับคู่การรับ/นำส่งที่เป็นไปได้แต่ละคู่ ตั้งแต่เดือนตุลาคม 2017 เป็นต้นมา ระบบจะรองรับการอ้อมเมื่อระยะเวลาการเดินทางไม่ขึ้นอยู่กับยานพาหนะเท่านั้น ระยะเวลาเป็นวินาทีที่มีเศษทศนิยมได้สูงสุด 9 หลัก โดยลงท้ายด้วย ' |
pickupToDeliveryTimeLimit |
ระบุระยะเวลาสูงสุดตั้งแต่เริ่มรับสินค้าจนถึงเริ่มนำส่งสินค้า หากระบุ ต้องเป็นค่าที่ไม่เป็นลบ และการจัดส่งต้องมีการรับสินค้าและการนำส่งอย่างน้อย โดยไม่ขึ้นอยู่กับทางเลือกที่เลือกสำหรับการรับและการนำส่ง หรือความเร็วของยานพาหนะ คุณระบุข้อจำกัดนี้ควบคู่ไปกับข้อจำกัดการอ้อมสูงสุดได้ โดยโซลูชันจะคำนึงถึงข้อกำหนดทั้ง 2 รายการ ระยะเวลาเป็นวินาทีที่มีเศษทศนิยมได้สูงสุด 9 หลัก โดยลงท้ายด้วย ' |
shipmentType |
สตริงที่ไม่ว่างเปล่าซึ่งระบุ "ประเภท" สำหรับการจัดส่งนี้ ฟีเจอร์นี้ใช้เพื่อกำหนดความเข้ากันไม่ได้หรือข้อกำหนดระหว่าง แตกต่างจาก |
label |
ระบุป้ายกำกับการจัดส่งนี้ ระบบจะรายงานป้ายกำกับนี้ในการตอบกลับใน |
ignore |
หากเป็นจริง ให้ข้ามการจัดส่งนี้ แต่ไม่ต้องใช้ การไม่สนใจการจัดส่งจะทำให้เกิดข้อผิดพลาดในการตรวจสอบเมื่อมี ระบบอนุญาตให้ละเว้นการจัดส่งที่ดำเนินการใน |
penaltyCost |
หากการจัดส่งไม่สำเร็จ ระบบจะเพิ่มค่าปรับนี้ลงในต้นทุนโดยรวมของเส้นทาง ระบบจะถือว่าการจัดส่งเสร็จสมบูรณ์หากมีการเข้าชมทางเลือกในการรับและนำส่งอย่างใดอย่างหนึ่ง ต้นทุนอาจแสดงในหน่วยเดียวกันกับที่ใช้สำหรับฟิลด์อื่นๆ ที่เกี่ยวข้องกับต้นทุนในโมเดล และต้องเป็นค่าบวก สำคัญ: หากไม่ได้ระบุค่าปรับนี้ ระบบจะถือว่าไม่มีที่สิ้นสุด นั่นคือต้องดำเนินการจัดส่งให้เสร็จสมบูรณ์ |
pickupToDeliveryRelativeDetourLimit |
ระบุเวลาอ้อมสูงสุดเมื่อเทียบกับเส้นทางที่สั้นที่สุดจากจุดรับไปยังจุดนำส่ง หากระบุ ต้องเป็นค่าที่ไม่เป็นลบ และการจัดส่งต้องมีการรับสินค้าและการนำส่งอย่างน้อย ตัวอย่างเช่น ให้ t เป็นเวลาที่สั้นที่สุดในการเดินทางจากทางเลือกในการรับสินค้าที่เลือกไปยังทางเลือกในการนำส่งที่เลือกโดยตรง จากนั้นการตั้งค่า หากมีการระบุทั้งขีดจำกัดแบบสัมพัทธ์และแบบสัมบูรณ์ในการจัดส่งเดียวกัน ระบบจะใช้ขีดจำกัดที่จำกัดมากกว่าสำหรับคู่การรับ/นำส่งที่เป็นไปได้แต่ละคู่ ตั้งแต่เดือนตุลาคม 2017 เป็นต้นมา ระบบจะรองรับการอ้อมเมื่อระยะเวลาการเดินทางไม่ขึ้นอยู่กับยานพาหนะเท่านั้น |
VisitRequest
คำขอให้ไปที่สถานที่ซึ่งยานพาหนะสามารถไปได้ โดยคำขอจะมีตำแหน่งทางภูมิศาสตร์ (หรือ 2 ตำแหน่ง ดูด้านล่าง) เวลาเปิดและปิดที่แสดงด้วยช่วงเวลา และระยะเวลาในการให้บริการ (เวลาที่ยานพาหนะใช้เมื่อไปถึงเพื่อรับหรือส่งสินค้า)
| การแสดง JSON |
|---|
{ "arrivalLocation": { object ( |
| ช่อง | |
|---|---|
arrivalLocation |
ตำแหน่งทางภูมิศาสตร์ที่ยานพาหนะมาถึงเมื่อดำเนินการ |
arrivalWaypoint |
จุดอ้างอิงที่ยานพาหนะจะไปถึงเมื่อทำ |
departureLocation |
ตำแหน่งทางภูมิศาสตร์ที่ยานพาหนะออกเดินทางหลังจากทำ |
departureWaypoint |
จุดอ้างอิงที่ยานพาหนะออกเดินทางหลังจากทำ |
tags[] |
ระบุแท็กที่แนบมากับคำขอเข้าชม ไม่อนุญาตให้ใช้สตริงที่ว่างเปล่าหรือซ้ำกัน |
timeWindows[] |
กรอบเวลาที่จำกัดเวลามาถึงในการเข้าชม โปรดทราบว่ายานพาหนะอาจออกเดินทางนอกกรอบเวลาการมาถึง กล่าวคือ เวลามาถึง + ระยะเวลาไม่จำเป็นต้องอยู่ภายในกรอบเวลา ซึ่งอาจทำให้ต้องรอหากยานพาหนะมาถึงก่อน การไม่มี กรอบเวลาต้องไม่ทับซ้อนกัน กล่าวคือ กรอบเวลาต้องไม่ทับซ้อนหรืออยู่ติดกับกรอบเวลาอื่น และต้องเรียงตามลำดับจากน้อยไปมาก คุณจะตั้งค่า |
duration |
ระยะเวลาการเข้าชม เช่น เวลาที่ยานพาหนะใช้ระหว่างการมาถึงและการออกเดินทาง (จะเพิ่มลงในเวลาที่อาจต้องรอ ดู ระยะเวลาเป็นวินาทีที่มีเศษทศนิยมได้สูงสุด 9 หลัก โดยลงท้ายด้วย ' |
cost |
ค่าใช้จ่ายในการให้บริการคำขอการเข้าชมนี้ในเส้นทางของยานพาหนะ ซึ่งสามารถใช้ชำระค่าใช้จ่ายที่แตกต่างกันสำหรับการรับหรือนำส่งพัสดุแต่ละรายการได้ ต้นทุนนี้ต้องอยู่ในหน่วยเดียวกับ |
loadDemands |
โหลดความต้องการของคำขอการเข้าชมนี้ ซึ่งจะเหมือนกับฟิลด์ |
visitTypes[] |
ระบุประเภทการเข้าชม ซึ่งอาจใช้เพื่อจัดสรรเวลาเพิ่มเติมที่จำเป็นสำหรับยานพาหนะในการเข้าชมนี้ให้เสร็จสมบูรณ์ (ดู ประเภทจะปรากฏได้เพียงครั้งเดียว |
label |
ระบุป้ายกำกับสำหรับ |
avoidUTurns |
ระบุว่าควรหลีกเลี่ยงการกลับรถในเส้นทางการขับขี่ที่ตำแหน่งนี้หรือไม่ การหลีกเลี่ยงการเลี้ยวกลับเป็นไปอย่างเต็มความสามารถและไม่รับประกันว่าจะหลีกเลี่ยงได้ทั้งหมด นี่เป็นฟีเจอร์ทดลองและลักษณะการทำงานอาจมีการเปลี่ยนแปลง ทดลอง: ดูรายละเอียดเพิ่มเติมได้ที่ https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request |
LatLng
ออบเจ็กต์ที่แสดงคู่ละติจูด/ลองจิจูด โดยจะแสดงเป็นคู่ของจำนวนทศนิยมเพื่อแสดงองศาละติจูดและองศาลองจิจูด ออบเจ็กต์นี้ต้องเป็นไปตาม มาตรฐาน WGS84 เว้นแต่จะระบุไว้เป็นอย่างอื่น ค่าต้องอยู่ในช่วงที่ทำให้เป็นปกติ
| การแสดง JSON |
|---|
{ "latitude": number, "longitude": number } |
| ช่อง | |
|---|---|
latitude |
ละติจูดเป็นองศา ต้องอยู่ในช่วง [-90.0, +90.0] |
longitude |
ลองจิจูดในหน่วยองศา ต้องอยู่ในช่วง [-180.0, +180.0] |
จุดบอกทาง
ห่อหุ้มจุดอ้างอิง จุดอ้างอิงจะทำเครื่องหมายตำแหน่งที่มาถึงและตำแหน่งที่ออกเดินทางของ VisitRequest รวมถึงตำแหน่งเริ่มต้นและตำแหน่งสิ้นสุดของยานพาหนะ
| การแสดง JSON |
|---|
{ "sideOfRoad": boolean, "vehicleStopover": boolean, // Union field |
| ฟิลด์ | |
|---|---|
sideOfRoad |
ไม่บังคับ ระบุว่าจุดอ้างอิงนี้มีไว้เพื่อกำหนดให้ยานพาหนะจอดที่ด้านใดด้านหนึ่งของถนน เมื่อตั้งค่านี้ เส้นทางจะผ่านตำแหน่งเพื่อให้รถหยุดที่ข้างถนนซึ่งตำแหน่งนั้นอยู่ใกล้จากกึ่งกลางถนน ตัวเลือกนี้ใช้ไม่ได้กับโหมดการเดินทาง "เดิน" |
vehicleStopover |
ระบุว่าจุดอ้างอิงมีไว้สำหรับให้ยานพาหนะหยุด โดยมีจุดประสงค์เพื่อรับหรือส่งผู้โดยสาร ตัวเลือกนี้ใช้ได้เฉพาะโหมดการเดินทาง "DRIVING" และเมื่อ "locationType" เป็น "location" ทดลอง: ลักษณะการทำงานหรือการมีอยู่ของฟิลด์นี้อาจมีการเปลี่ยนแปลงในอนาคต |
ฟิลด์ Union location_type วิธีต่างๆ ในการแสดงสถานที่ location_type ต้องเป็นค่าใดค่าหนึ่งต่อไปนี้เท่านั้น |
|
location |
จุดที่ระบุโดยใช้พิกัดทางภูมิศาสตร์ รวมถึงส่วนหัวที่ไม่บังคับ |
placeId |
รหัสสถานที่ของจุดสนใจที่เชื่อมโยงกับจุดแวะพัก เมื่อใช้รหัสสถานที่เพื่อระบุสถานที่มาถึงหรือสถานที่ออกเดินทางของ VisitRequest ให้ใช้รหัสสถานที่ที่เฉพาะเจาะจงเพียงพอที่จะกำหนดตำแหน่ง LatLng สำหรับการนำทางไปยังสถานที่นั้น เช่น รหัสสถานที่ที่แสดงถึงอาคารจะเหมาะสม แต่ไม่แนะนำให้ใช้รหัสสถานที่ที่แสดงถึงถนน |
ตำแหน่ง
ห่อหุ้มตำแหน่ง (จุดทางภูมิศาสตร์และส่วนหัวที่ไม่บังคับ)
| การแสดง JSON |
|---|
{
"latLng": {
object ( |
| ช่อง | |
|---|---|
latLng |
พิกัดทางภูมิศาสตร์ของจุดอ้างอิง |
heading |
เข็มทิศที่เชื่อมโยงกับทิศทางการไหลของการเข้าชม ค่านี้ใช้เพื่อระบุฝั่งของถนนที่จะใช้สำหรับการรับและส่ง ค่า Heading จะมีตั้งแต่ 0 ถึง 360 โดย 0 หมายถึงทิศเหนือ 90 หมายถึงทิศตะวันออก เป็นต้น |
TimeWindow
กรอบเวลาจะจำกัดเวลาของเหตุการณ์ เช่น เวลาที่มาถึงในการเข้าชม หรือเวลาเริ่มต้นและสิ้นสุดของยานพาหนะ
ขอบเขตกรอบเวลาที่แน่นอน startTime และ endTime บังคับใช้เวลาที่เร็วที่สุดและช้าที่สุดของเหตุการณ์เพื่อให้ startTime <= event_time <=
endTime ขอบเขตล่างของกรอบเวลาแบบยืดหยุ่น softStartTime แสดงถึงความต้องการให้เหตุการณ์เกิดขึ้นที่หรือหลังจาก softStartTime โดยการเรียกเก็บค่าใช้จ่ายตามสัดส่วนของระยะเวลาก่อน softStartTime ที่เหตุการณ์เกิดขึ้น ขอบเขตบนของกรอบเวลาแบบยืดหยุ่น softEndTime แสดงถึงความต้องการให้เหตุการณ์เกิดขึ้นที่หรือก่อน softEndTime โดยการเรียกเก็บค่าใช้จ่ายตามสัดส่วนของระยะเวลาที่เหตุการณ์เกิดขึ้นหลังจาก softEndTime startTime, endTime, softStartTime และ softEndTime ควรอยู่ภายในขีดจำกัดเวลาทั่วโลก (ดู ShipmentModel.global_start_time และ ShipmentModel.global_end_time) และควรเป็นไปตามข้อกำหนดต่อไปนี้
0 <= `startTime` <= `endTime` and
0 <= `startTime` <= `softStartTime` and
0 <= `softEndTime` <= `endTime`.
| การแสดง JSON |
|---|
{ "startTime": string, "endTime": string, "softStartTime": string, "softEndTime": string, "costPerHourBeforeSoftStartTime": number, "costPerHourAfterSoftEndTime": number } |
| ช่อง | |
|---|---|
startTime |
เวลาเริ่มต้นของกรอบเวลาที่แน่นอน หากไม่ได้ระบุ ระบบจะตั้งค่าเป็น ใช้ RFC 3339 โดยเอาต์พุตที่สร้างขึ้นจะได้รับการแปลงเป็นรูปแบบ Z เสมอ และใช้ตัวเลขเศษส่วน 0, 3, 6 หรือ 9 หลัก นอกจากนี้ ระบบยังยอมรับออฟเซ็ตอื่นๆ นอกเหนือจาก "Z" ด้วย เช่น |
endTime |
เวลาสิ้นสุดของกรอบเวลาที่แน่นอน หากไม่ได้ระบุ ระบบจะตั้งค่าเป็น ใช้ RFC 3339 โดยเอาต์พุตที่สร้างขึ้นจะได้รับการแปลงเป็นรูปแบบ Z เสมอ และใช้ตัวเลขเศษส่วน 0, 3, 6 หรือ 9 หลัก นอกจากนี้ ระบบยังยอมรับออฟเซ็ตอื่นๆ นอกเหนือจาก "Z" ด้วย เช่น |
softStartTime |
เวลาเริ่มต้นแบบค่อยเป็นค่อยไปของกรอบเวลา ใช้ RFC 3339 โดยเอาต์พุตที่สร้างขึ้นจะได้รับการแปลงเป็นรูปแบบ Z เสมอ และใช้ตัวเลขเศษส่วน 0, 3, 6 หรือ 9 หลัก นอกจากนี้ ระบบยังยอมรับออฟเซ็ตอื่นๆ นอกเหนือจาก "Z" ด้วย เช่น |
softEndTime |
เวลาสิ้นสุดแบบยืดหยุ่นของกรอบเวลา ใช้ RFC 3339 โดยเอาต์พุตที่สร้างขึ้นจะได้รับการแปลงเป็นรูปแบบ Z เสมอ และใช้ตัวเลขเศษส่วน 0, 3, 6 หรือ 9 หลัก นอกจากนี้ ระบบยังยอมรับออฟเซ็ตอื่นๆ นอกเหนือจาก "Z" ด้วย เช่น |
costPerHourBeforeSoftStartTime |
ต้นทุนต่อชั่วโมงที่เพิ่มลงในต้นทุนอื่นๆ ในโมเดลหากเหตุการณ์เกิดขึ้นก่อน softStartTime โดยคำนวณดังนี้ ต้นทุนนี้ต้องเป็นค่าบวก และจะตั้งค่าฟิลด์ได้ก็ต่อเมื่อตั้งค่า softStartTime แล้วเท่านั้น |
costPerHourAfterSoftEndTime |
ค่าใช้จ่ายต่อชั่วโมงที่เพิ่มลงในค่าใช้จ่ายอื่นๆ ในโมเดล หากเหตุการณ์เกิดขึ้นหลังจาก ต้นทุนนี้ต้องเป็นค่าบวก และจะตั้งค่าช่องนี้ได้ก็ต่อเมื่อตั้งค่า |
ยานพาหนะ
สร้างโมเดลยานพาหนะในปัญหาการจัดส่ง การแก้ปัญหาการจัดส่งจะสร้างเส้นทางที่เริ่มต้นจาก startLocation และสิ้นสุดที่ endLocation สำหรับยานพาหนะนี้ เส้นทางคือลำดับของการเข้าชม (ดู ShipmentRoute)
| การแสดง JSON |
|---|
{ "displayName": string, "travelMode": enum ( |
| ช่อง | |
|---|---|
displayName |
ชื่อที่แสดงของยานพาหนะที่กำหนดโดยผู้ใช้ มีความยาวได้สูงสุด 63 อักขระและอาจใช้อักขระ UTF-8 |
travelMode |
โหมดการเดินทางซึ่งส่งผลต่อถนนที่ยานพาหนะใช้ได้และความเร็วของยานพาหนะ ดู |
routeModifiers |
ชุดเงื่อนไขที่ต้องปฏิบัติตามซึ่งส่งผลต่อวิธีคำนวณเส้นทางสำหรับยานพาหนะที่กำหนด |
startLocation |
สถานที่ตั้งทางภูมิศาสตร์ที่ยานพาหนะเริ่มก่อนรับสินค้า หากไม่ได้ระบุ ระบบจะเริ่มยานพาหนะที่จุดรับแรก หากรูปแบบการจัดส่งมีเมทริกซ์ระยะเวลาและระยะทาง คุณต้องไม่ระบุ |
startWaypoint |
จุดอ้างอิงที่แสดงถึงสถานที่ตั้งทางภูมิศาสตร์ซึ่งยานพาหนะเริ่มต้นก่อนรับสินค้า หากไม่ได้ระบุทั้ง |
endLocation |
สถานที่ตั้งทางภูมิศาสตร์ที่ยานพาหนะสิ้นสุดหลังจากที่ |
endWaypoint |
จุดอ้างอิงที่แสดงถึงสถานที่ตั้งทางภูมิศาสตร์ซึ่งยานพาหนะจะสิ้นสุดหลังจากทำ |
startTags[] |
ระบุแท็กที่ติดไว้ที่จุดเริ่มต้นของเส้นทางของยานพาหนะ ไม่อนุญาตให้ใช้สตริงที่ว่างเปล่าหรือซ้ำกัน |
endTags[] |
ระบุแท็กที่แนบไว้ที่ส่วนท้ายของเส้นทางของยานพาหนะ ไม่อนุญาตให้ใช้สตริงที่ว่างเปล่าหรือซ้ำกัน |
startTimeWindows[] |
ช่วงเวลาที่รถอาจออกจากตำแหน่งเริ่มต้น โดยต้องอยู่ภายในขีดจำกัดเวลาทั่วโลก (ดูฟิลด์ กรอบเวลาที่อยู่ในฟิลด์ที่เกิดซ้ำเดียวกันต้องไม่ซ้อนทับกัน กล่าวคือ กรอบเวลาใดๆ จะซ้อนทับหรืออยู่ติดกับกรอบเวลาอื่นไม่ได้ และต้องเรียงตามลำดับเวลา คุณจะตั้งค่า |
endTimeWindows[] |
ช่วงเวลาที่ยานพาหนะอาจไปถึงจุดหมายปลายทาง โดยต้องอยู่ภายในขีดจำกัดเวลาทั่วโลก (ดูฟิลด์ กรอบเวลาที่อยู่ในฟิลด์ที่เกิดซ้ำเดียวกันต้องไม่ซ้อนทับกัน กล่าวคือ กรอบเวลาใดๆ จะซ้อนทับหรืออยู่ติดกับกรอบเวลาอื่นไม่ได้ และต้องเรียงตามลำดับเวลา คุณจะตั้งค่า |
unloadingPolicy |
บังคับใช้นโยบายการขนถ่ายสินค้ากับยานพาหนะ |
loadLimits |
ความจุของยานพาหนะ (เช่น น้ำหนัก ปริมาตร จำนวนพาเล็ต) คีย์ในแผนที่เป็นตัวระบุประเภทการโหลด ซึ่งสอดคล้องกับคีย์ของฟิลด์ |
costPerHour |
ค่าใช้จ่ายของยานพาหนะ: ค่าใช้จ่ายทั้งหมดจะรวมกันและต้องอยู่ในหน่วยเดียวกันกับ ต้นทุนต่อชั่วโมงของเส้นทางยานพาหนะ ค่าใช้จ่ายนี้จะนำไปใช้กับเวลาทั้งหมดที่เส้นทางใช้ และรวมถึงเวลาเดินทาง เวลาที่ต้องรอ และเวลาเยี่ยมชม การใช้ |
costPerTraveledHour |
ต้นทุนต่อชั่วโมงที่เดินทางของเส้นทางยานพาหนะ ต้นทุนนี้จะมีผลกับเวลาเดินทางที่ใช้ในเส้นทางเท่านั้น (กล่าวคือ เวลาที่รายงานใน |
costPerKilometer |
ต้นทุนต่อกิโลเมตรของเส้นทางยานพาหนะ ค่าใช้จ่ายนี้จะใช้กับระยะทางที่รายงานใน |
fixedCost |
ค่าใช้จ่ายคงที่ที่ใช้หากใช้ยานพาหนะนี้ในการจัดการการจัดส่ง |
usedIfRouteIsEmpty |
ฟิลด์นี้ใช้กับยานพาหนะเท่านั้นเมื่อเส้นทางไม่ได้ให้บริการจัดส่ง ระบุว่าควรพิจารณายานพาหนะเป็นยานพาหนะที่ใช้แล้วหรือไม่ในกรณีนี้ หากเป็นจริง ยานพาหนะจะเดินทางจากจุดเริ่มต้นไปยังจุดสิ้นสุด แม้ว่าจะไม่ได้ให้บริการจัดส่งใดๆ และระบบจะนำค่าใช้จ่ายด้านเวลาและระยะทางที่เกิดจากการเดินทางจากจุดเริ่มต้นไปยังจุดสิ้นสุดมาพิจารณา ไม่เช่นนั้น รถจะไม่เดินทางจากจุดเริ่มต้นไปยังจุดสิ้นสุด และจะไม่มีการกำหนดเวลา |
routeDurationLimit |
ขีดจำกัดที่ใช้กับระยะเวลาทั้งหมดของเส้นทางของยานพาหนะ ใน |
travelDurationLimit |
ขีดจำกัดที่ใช้กับระยะเวลาการเดินทางของเส้นทางยานพาหนะ ใน |
routeDistanceLimit |
ขีดจำกัดที่ใช้กับระยะทางรวมของเส้นทางยานพาหนะ ใน |
extraVisitDurationForVisitType |
ระบุแผนที่จากสตริง visitTypes ไปยังระยะเวลา ระยะเวลาคือเวลาที่เพิ่มจาก หากคำขอเข้าชมมีหลายประเภท ระบบจะเพิ่มระยะเวลาสำหรับแต่ละประเภทในแผนที่ |
breakRule |
อธิบายกำหนดเวลาพักที่จะบังคับใช้กับยานพาหนะนี้ หากเว้นว่างไว้ ระบบจะไม่กำหนดเวลาพักสำหรับยานพาหนะนี้ |
label |
ระบุป้ายกำกับสำหรับยานพาหนะนี้ ป้ายกำกับนี้จะรายงานในคำตอบเป็น |
ignore |
หากเป็นจริง หากมีการจัดส่งโดยยานพาหนะที่ถูกละเว้นใน หากการจัดส่งดำเนินการโดยยานพาหนะที่ถูกละเว้นใน |
travelDurationMultiple |
ระบุปัจจัยการคูณที่ใช้เพื่อเพิ่มหรือลดเวลาเดินทางของยานพาหนะนี้ได้ เช่น การตั้งค่านี้เป็น 2.0 หมายความว่ารถคันนี้ช้ากว่าและมีเวลาเดินทางเป็น 2 เท่าของรถยนต์มาตรฐาน ตัวคูณนี้ไม่มีผลต่อระยะเวลาเข้าชม แต่จะส่งผลต่อค่าใช้จ่ายหากมีการระบุ คำเตือน: ระบบจะปัดเศษเวลาเดินทางเป็นวินาทีที่ใกล้ที่สุดหลังจากใช้ตัวคูณนี้ แต่ก่อนที่จะดำเนินการทางตัวเลขใดๆ ดังนั้น ตัวคูณขนาดเล็กอาจทำให้ความแม่นยำลดลง ดู |
TravelMode
โหมดการเดินทางที่ยานพาหนะใช้ได้
ซึ่งควรเป็นชุดย่อยของโหมดการเดินทางของ Google Maps Platform Routes API ดูที่ https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode
หมายเหตุ: WALKING เส้นทางอยู่ในเวอร์ชันเบต้าและบางครั้งอาจไม่มีทางเท้าหรือเส้นทางคนเดินที่ชัดเจน คุณต้องแสดงคำเตือนนี้ต่อผู้ใช้สำหรับเส้นทางเดินทั้งหมดที่แสดงในแอป
| Enum | |
|---|---|
TRAVEL_MODE_UNSPECIFIED |
โหมดการเดินทางที่ไม่ได้ระบุ เทียบเท่ากับ DRIVING |
DRIVING |
โหมดการเดินทางที่สอดคล้องกับเส้นทางการขับรถ (รถยนต์ ฯลฯ) |
WALKING |
โหมดการเดินทางที่สอดคล้องกับเส้นทางการเดิน |
RouteModifiers
แคปซูลชุดเงื่อนไขที่ไม่บังคับเพื่อตอบสนองเมื่อคำนวณเส้นทางของยานพาหนะ ซึ่งคล้ายกับ RouteModifiers ใน Routes Preferred API ของ Google Maps Platform ดูที่ https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers
| การแสดง JSON |
|---|
{ "avoidTolls": boolean, "avoidHighways": boolean, "avoidFerries": boolean, "avoidIndoor": boolean } |
| ช่อง | |
|---|---|
avoidTolls |
ระบุว่าจะหลีกเลี่ยงถนนที่มีค่าผ่านทางเมื่อเป็นไปได้หรือไม่ ระบบจะให้ความสำคัญกับเส้นทางที่ไม่มีถนนที่มีการเก็บค่าผ่านทาง ใช้ได้กับโหมดการเดินทางที่ใช้เครื่องยนต์เท่านั้น |
avoidHighways |
ระบุว่าจะเลี่ยงทางหลวงเมื่อเป็นไปได้หรือไม่ ระบบจะให้ความสำคัญกับเส้นทางที่ไม่มีทางหลวง ใช้ได้กับโหมดการเดินทางที่ใช้เครื่องยนต์เท่านั้น |
avoidFerries |
ระบุว่าจะหลีกเลี่ยงเรือข้ามฟากเมื่อเป็นไปได้หรือไม่ ระบบจะให้ความสำคัญกับเส้นทางที่ไม่มีการเดินทางด้วยเรือข้ามฟาก ใช้ได้กับโหมดการเดินทางที่ใช้เครื่องยนต์เท่านั้น |
avoidIndoor |
ไม่บังคับ ระบุว่าจะหลีกเลี่ยงการนำทางในอาคารเมื่อเป็นไปได้หรือไม่ ระบบจะให้ความสำคัญกับเส้นทางที่ไม่มีการนำทางในอาคาร ใช้กับโหมดการเดินทาง |
UnloadingPolicy
นโยบายเกี่ยวกับวิธีขนถ่ายยานพาหนะ ใช้กับการจัดส่งที่มีทั้งการรับและการนำส่งเท่านั้น
การจัดส่งอื่นๆ จะเกิดขึ้นได้ทุกที่ในเส้นทางโดยไม่ขึ้นอยู่กับ unloadingPolicy
| Enum | |
|---|---|
UNLOADING_POLICY_UNSPECIFIED |
นโยบายการขนถ่ายที่ไม่ได้ระบุไว้ การนำส่งต้องเกิดขึ้นหลังจากรับสินค้าที่เกี่ยวข้อง |
LAST_IN_FIRST_OUT |
การนำส่งต้องเกิดขึ้นในลำดับย้อนกลับของการรับ |
FIRST_IN_FIRST_OUT |
การนำส่งต้องเกิดขึ้นในลำดับเดียวกับการรับสินค้า |
LoadLimit
กำหนดขีดจำกัดการรับน้ำหนักที่ใช้กับยานพาหนะ เช่น "รถบรรทุกคันนี้รับน้ำหนักได้ไม่เกิน 3, 500 กก." ดูloadLimits
| การแสดง JSON |
|---|
{ "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( |
| ช่อง | |
|---|---|
softMaxLoad |
ขีดจำกัดแบบไม่เข้มงวดของภาระงาน ดู |
costPerUnitAboveSoftMax |
หากน้ำหนักบรรทุกเกิน |
startLoadInterval |
ช่วงเวลาที่ยอมรับได้ในการบรรทุกของยานพาหนะเมื่อเริ่มเส้นทาง |
endLoadInterval |
ช่วงเวลาที่ยอมรับได้ในการบรรทุกยานพาหนะที่จุดสิ้นสุดของเส้นทาง |
maxLoad |
ปริมาณการโหลดสูงสุดที่ยอมรับได้ |
costPerKilometer |
ค่าใช้จ่ายในการเคลื่อนย้ายน้ำหนัก 1 หน่วยเป็นระยะทาง 1 กิโลเมตรสำหรับยานพาหนะนี้ ซึ่งใช้เป็นตัวแทนของปริมาณการใช้เชื้อเพลิงได้ หากโหลดเป็นน้ำหนัก (ในหน่วยนิวตัน) โหลด*กิโลเมตรจะมีมิติของพลังงาน ทดลอง: ดูรายละเอียดเพิ่มเติมได้ที่ https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request |
costPerTraveledHour |
ค่าใช้จ่ายในการเดินทางพร้อมสัมภาระ 1 หน่วยเป็นเวลา 1 ชั่วโมงสำหรับยานพาหนะนี้ ทดลอง: ดูรายละเอียดเพิ่มเติมได้ที่ https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request |
ช่วงเวลา
ช่วงของจำนวนการโหลดที่ยอมรับได้
| การแสดง JSON |
|---|
{ "min": string, "max": string } |
| ช่อง | |
|---|---|
min |
โหลดขั้นต่ำที่ยอมรับได้ ต้อง ≥ 0 หากระบุทั้ง 2 ค่า |
max |
โหลดสูงสุดที่ยอมรับได้ ต้อง ≥ 0 หากไม่ได้ระบุไว้ ข้อความนี้จะไม่จำกัดการโหลดสูงสุด หากระบุทั้ง 2 ค่า |
LoadCost
ต้นทุนในการย้ายโหลด 1 หน่วยในระหว่าง Transition สำหรับภาระงานหนึ่งๆ ค่าใช้จ่ายคือผลรวมของ 2 ส่วนต่อไปนี้
- min(load,
loadThreshold) *costPerUnitBelowThreshold - max(0, load -
loadThreshold) *costPerUnitAboveThreshold
ด้วยต้นทุนนี้ โซลูชันจึงต้องการส่งมอบความต้องการสูงก่อน หรือเทียบเท่ากับการรับความต้องการสูงเป็นอันดับสุดท้าย เช่น หากยานพาหนะมี
load_limit {
key: "weight"
value {
costPerKilometer {
loadThreshold: 15
costPerUnitBelowThreshold: 2.0
costPerUnitAboveThreshold: 10.0
}
}
}
และเส้นทางคือ start,pickup,pickup,delivery,delivery,end โดยมีการเปลี่ยนเส้นทางดังนี้
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
จากนั้นต้นทุนที่เกิดจาก LoadCost นี้คือ (cost_below * load_below * kilometers + cost_above * load_above * kms)
- การเปลี่ยน 0: 0.0
- การเปลี่ยน 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- การเปลี่ยน 2: 2.0 * 15 * 1.0 + 10.0 * (20 - 15) * 1.0 = 80.0
- การเปลี่ยน 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- การเปลี่ยนฉาก 4: 0.0
ดังนั้น LoadCost ตลอดเส้นทางจึงเป็น 120.0
อย่างไรก็ตาม หากเส้นทางเป็น start,pickup,delivery,pickup,delivery,end โดยมีการเปลี่ยนผ่าน
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
จากนั้นค่าใช้จ่ายที่เกิดจาก LoadCost นี้คือ
- การเปลี่ยน 0: 0.0
- การเปลี่ยน 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- ทรานซิชัน 2: 0.0
- การเปลี่ยน 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- การเปลี่ยนฉาก 4: 0.0
ในที่นี้ LoadCost ตลอดเส้นทางคือ 40.0
LoadCost ทำให้โซลูชันที่มีการเปลี่ยนฉากหนักๆ มีราคาแพงขึ้น
ทดลอง: ดูรายละเอียดเพิ่มเติมได้ที่ https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request
| การแสดง JSON |
|---|
{ "loadThreshold": string, "costPerUnitBelowThreshold": number, "costPerUnitAboveThreshold": number } |
| ช่อง | |
|---|---|
loadThreshold |
ปริมาณการโหลดที่ค่าใช้จ่ายในการย้ายหน่วยการโหลดจะเปลี่ยนจาก costPerUnitBelowThreshold เป็น costPerUnitAboveThreshold ต้องมีค่ามากกว่าหรือเท่ากับ 0 |
costPerUnitBelowThreshold |
ต้นทุนในการย้ายหน่วยของภาระงานสำหรับแต่ละหน่วยระหว่าง 0 กับเกณฑ์ ต้องเป็นค่าที่สิ้นสุดและมากกว่าหรือเท่ากับ 0 |
costPerUnitAboveThreshold |
ค่าใช้จ่ายในการย้ายหน่วยของภาระงานสำหรับแต่ละหน่วยที่สูงกว่าเกณฑ์ ในกรณีพิเศษที่เกณฑ์ = 0 ค่านี้จะเป็นต้นทุนคงที่ต่อหน่วย ต้องเป็นค่าที่สิ้นสุดและมากกว่าหรือเท่ากับ 0 |
DurationLimit
ขีดจำกัดที่กำหนดระยะเวลาสูงสุดของเส้นทางของยานพาหนะ โดยอาจเป็นแบบแข็งหรือแบบอ่อนก็ได้
เมื่อกำหนดฟิลด์ขีดจำกัดแบบยืดหยุ่นแล้ว คุณต้องกำหนดทั้งเกณฑ์สูงสุดแบบยืดหยุ่นและต้นทุนที่เกี่ยวข้องพร้อมกัน
| การแสดง JSON |
|---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
| ช่อง | |
|---|---|
maxDuration |
ขีดจํากัดที่จํากัดระยะเวลาให้ไม่เกิน maxDuration ระยะเวลาเป็นวินาทีที่มีเศษทศนิยมได้สูงสุด 9 หลัก โดยลงท้ายด้วย ' |
softMaxDuration |
ขีดจำกัดแบบยืดหยุ่นที่ไม่ได้บังคับใช้ขีดจำกัดระยะเวลาสูงสุด แต่เมื่อละเมิดจะทำให้เส้นทางมีค่าใช้จ่าย ต้นทุนนี้จะรวมกับต้นทุนอื่นๆ ที่กำหนดไว้ในโมเดล โดยมีหน่วยเดียวกัน หากกำหนดไว้ ระยะเวลาเป็นวินาทีที่มีเศษทศนิยมได้สูงสุด 9 หลัก โดยลงท้ายด้วย ' |
quadraticSoftMaxDuration |
ขีดจำกัดแบบยืดหยุ่นที่ไม่ได้บังคับใช้ขีดจำกัดระยะเวลาสูงสุด แต่เมื่อละเมิดจะทำให้เส้นทางมีค่าใช้จ่ายเป็นสัดส่วนกำลังสองของระยะเวลา ต้นทุนนี้จะรวมกับต้นทุนอื่นๆ ที่กำหนดไว้ในโมเดล โดยมีหน่วยเดียวกัน หากกำหนดไว้
ระยะเวลาเป็นวินาทีที่มีเศษทศนิยมได้สูงสุด 9 หลัก โดยลงท้ายด้วย ' |
costPerHourAfterSoftMax |
ค่าใช้จ่ายต่อชั่วโมงที่เกิดขึ้นหากมีการละเมิด ค่าใช้จ่ายต้องไม่ติดลบ |
costPerSquareHourAfterQuadraticSoftMax |
ค่าใช้จ่ายต่อชั่วโมงต่อตารางเมตรที่เกิดขึ้นหากมีการละเมิด ค่าใช้จ่ายเพิ่มเติมจะเป็น 0 หากระยะเวลาต่ำกว่าเกณฑ์ มิฉะนั้นค่าใช้จ่ายจะขึ้นอยู่กับระยะเวลาดังนี้ ค่าใช้จ่ายต้องไม่ติดลบ |
DistanceLimit
ขีดจำกัดที่กำหนดระยะทางสูงสุดที่เดินทางได้ โดยอาจเป็นแบบแข็งหรือแบบอ่อนก็ได้
หากกำหนดขีดจำกัดแบบยืดหยุ่น คุณต้องกำหนดทั้ง softMaxMeters และ costPerKilometerAboveSoftMax และต้องไม่เป็นค่าลบ
| การแสดง JSON |
|---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
| ช่อง | |
|---|---|
maxMeters |
ขีดจำกัดที่กำหนดระยะทางให้ไม่เกิน maxMeters ขีดจำกัดต้องไม่ติดลบ |
softMaxMeters |
ขีดจำกัดแบบยืดหยุ่นที่ไม่บังคับใช้ขีดจำกัดระยะทางสูงสุด แต่เมื่อละเมิดจะส่งผลให้เกิดค่าใช้จ่ายซึ่งรวมกับค่าใช้จ่ายอื่นๆ ที่กำหนดไว้ในโมเดล โดยมีหน่วยเดียวกัน หากกำหนด softMaxMeters ต้องน้อยกว่า maxMeters และต้องไม่ใช่ค่าติดลบ |
costPerKilometerBelowSoftMax |
ต้นทุนต่อกิโลเมตรที่เกิดขึ้น โดยเพิ่มขึ้นสูงสุด
|
costPerKilometerAboveSoftMax |
ค่าใช้จ่ายต่อกิโลเมตรที่เกิดขึ้นหากระยะทางสูงกว่าขีดจำกัด ค่าใช้จ่ายต้องไม่ติดลบ |
BreakRule
กฎในการสร้างช่วงพักสำหรับยานพาหนะ (เช่น ช่วงพักกลางวัน) ช่วงพักคือระยะเวลาต่อเนื่องที่ยานพาหนะจอดอยู่กับที่ในตำแหน่งปัจจุบันและไม่สามารถทำการเข้าชมใดๆ ได้ การหยุดพักอาจเกิดขึ้นในกรณีต่อไปนี้
- ในระหว่างการเดินทางระหว่างการเข้าชม 2 ครั้ง (ซึ่งรวมถึงเวลาก่อนหรือหลังการเข้าชมทันที แต่ไม่ใช่ระหว่างการเข้าชม) ในกรณีนี้ ระบบจะขยายเวลาในการเปลี่ยนเครื่องที่สอดคล้องกันระหว่างการเข้าชม
- หรือก่อนที่รถจะเริ่มวิ่ง (รถอาจไม่เริ่มวิ่งในช่วงพัก) ในกรณีนี้ เวลาเริ่มวิ่งของรถจะไม่ได้รับผลกระทบ
- หรือหลังจากสิ้นสุดยานพาหนะ (เช่นเดียวกับเวลาสิ้นสุดยานพาหนะ)
| การแสดง JSON |
|---|
{ "breakRequests": [ { object ( |
| ช่อง | |
|---|---|
breakRequests[] |
ลำดับการหยุดพัก ดูข้อความ |
frequencyConstraints[] |
อาจมี |
BreakRequest
คุณต้องทราบลำดับการหยุดพัก (เช่น หมายเลขและลำดับ) ที่ใช้กับยานพาหนะแต่ละคันล่วงหน้า BreakRequestที่ซ้ำกันจะกำหนดลำดับนั้นตามลำดับที่ต้องเกิดขึ้น ช่วงเวลา (earliestStartTime / latestStartTime) อาจทับซ้อนกัน แต่ต้องเข้ากันได้กับคำสั่งซื้อ (ระบบจะตรวจสอบ)
| การแสดง JSON |
|---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
| ช่อง | |
|---|---|
earliestStartTime |
ต้องระบุ ขอบเขตล่าง (รวม) ของจุดเริ่มต้นของช่วงพัก ใช้ RFC 3339 โดยเอาต์พุตที่สร้างขึ้นจะได้รับการแปลงเป็นรูปแบบ Z เสมอ และใช้ตัวเลขเศษส่วน 0, 3, 6 หรือ 9 หลัก นอกจากนี้ ระบบยังยอมรับออฟเซ็ตอื่นๆ นอกเหนือจาก "Z" ด้วย เช่น |
latestStartTime |
ต้องระบุ ขอบเขตบน (รวม) ของเวลาเริ่มต้นของช่วงพัก ใช้ RFC 3339 โดยเอาต์พุตที่สร้างขึ้นจะได้รับการแปลงเป็นรูปแบบ Z เสมอ และใช้ตัวเลขเศษส่วน 0, 3, 6 หรือ 9 หลัก นอกจากนี้ ระบบยังยอมรับออฟเซ็ตอื่นๆ นอกเหนือจาก "Z" ด้วย เช่น |
minDuration |
ต้องระบุ ระยะเวลาขั้นต่ำของช่วงพัก ต้องเป็นค่าบวก ระยะเวลาเป็นวินาทีที่มีเศษทศนิยมได้สูงสุด 9 หลัก โดยลงท้ายด้วย ' |
FrequencyConstraint
คุณอาจจำกัดความถี่และระยะเวลาของช่วงพักที่ระบุไว้ข้างต้นเพิ่มเติมได้โดยบังคับใช้ความถี่ขั้นต่ำของช่วงพัก เช่น "ต้องมีช่วงพักอย่างน้อย 1 ชั่วโมงทุกๆ 12 ชั่วโมง" หากตีความได้ว่า "ภายในกรอบเวลาแบบเลื่อนใดๆ 12 ชั่วโมง ต้องมีเวลาพักอย่างน้อย 1 ชั่วโมง" ตัวอย่างดังกล่าวจะแปลเป็นFrequencyConstraintดังนี้
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
เวลาและระยะเวลาของช่วงพักในโซลูชันจะเป็นไปตามข้อจำกัดดังกล่าวทั้งหมด นอกเหนือจากกรอบเวลาและระยะเวลาขั้นต่ำที่ระบุไว้แล้วใน BreakRequest
ในทางปฏิบัติ FrequencyConstraint อาจมีผลกับช่วงพักที่ไม่ต่อเนื่อง เช่น ตารางเวลาต่อไปนี้จะตรงกับตัวอย่าง "1 ชั่วโมงทุก 12 ชั่วโมง"
04:00 vehicle start
.. performing travel and visits ..
09:00 1 hour break
10:00 end of the break
.. performing travel and visits ..
12:00 20-min lunch break
12:20 end of the break
.. performing travel and visits ..
21:00 1 hour break
22:00 end of the break
.. performing travel and visits ..
23:59 vehicle end
| การแสดง JSON |
|---|
{ "minBreakDuration": string, "maxInterBreakDuration": string } |
| ช่อง | |
|---|---|
minBreakDuration |
ต้องระบุ ระยะเวลาขั้นต่ำของช่วงพักสำหรับข้อจำกัดนี้ ไม่เป็นลบ ดูคำอธิบายของ ระยะเวลาเป็นวินาทีที่มีเศษทศนิยมได้สูงสุด 9 หลัก โดยลงท้ายด้วย ' |
maxInterBreakDuration |
ต้องระบุ ช่วงเวลาสูงสุดที่อนุญาตในเส้นทางซึ่งไม่มีช่วงพักของ ระยะเวลาเป็นวินาทีที่มีเศษทศนิยมได้สูงสุด 9 หลัก โดยลงท้ายด้วย ' |
วัตถุประสงค์
วัตถุประสงค์จะแทนที่รูปแบบต้นทุนทั้งหมด จึงไม่สามารถใช้ร่วมกับต้นทุนที่มีอยู่ก่อนได้ วัตถุประสงค์แต่ละอย่างจะแมปกับต้นทุนที่กำหนดไว้ล่วงหน้า เช่น ยานพาหนะ การจัดส่ง หรือแอตทริบิวต์การเปลี่ยนผ่าน
ทดลอง: ดูรายละเอียดเพิ่มเติมได้ที่ https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request
| การแสดง JSON |
|---|
{
"type": enum ( |
| ช่อง | |
|---|---|
type |
ประเภทของวัตถุประสงค์ |
weight |
ควรให้ความสำคัญกับวัตถุประสงค์นี้มากน้อยเพียงใดเมื่อเทียบกับวัตถุประสงค์อื่นๆ ซึ่งอาจเป็นจำนวนใดๆ ก็ได้ที่ไม่ติดลบ โดยน้ำหนักไม่จำเป็นต้องรวมกันเป็น 1 ค่าเริ่มต้นของน้ำหนักคือ 1.0 |
ประเภท
ประเภทวัตถุประสงค์ที่จะแมปกับชุดค่าใช้จ่าย
| Enum | |
|---|---|
DEFAULT |
ระบบจะใช้ชุดค่าใช้จ่ายเริ่มต้นเพื่อให้มั่นใจว่าโซลูชันมีความสมเหตุสมผล หมายเหตุ: คุณสามารถใช้วัตถุประสงค์นี้ได้ด้วยตัวเอง แต่ระบบจะเพิ่มวัตถุประสงค์นี้โดยมีน้ำหนักเป็น 1.0 เสมอเป็นพื้นฐานให้กับวัตถุประสงค์ที่ผู้ใช้ระบุ หากยังไม่มีวัตถุประสงค์นี้ |
MIN_DISTANCE |
วัตถุประสงค์ "MIN" ลดระยะทางรวมที่เดินทาง |
MIN_WORKING_TIME |
ลดเวลาทำงานทั้งหมดที่รวมกันของยานพาหนะทั้งหมด |
MIN_TRAVEL_TIME |
เหมือนกับด้านบน แต่เน้นที่เวลาเดินทางเท่านั้น |
MIN_NUM_VEHICLES |
ลดจำนวนยานพาหนะที่ใช้ |
DurationDistanceMatrix
ระบุเมทริกซ์ระยะเวลาและระยะทางจากตำแหน่งเริ่มต้นของการเยี่ยมชมและยานพาหนะไปยังตำแหน่งสิ้นสุดของการเยี่ยมชมและยานพาหนะ
| การแสดง JSON |
|---|
{
"rows": [
{
object ( |
| ช่อง | |
|---|---|
rows[] |
ระบุแถวของเมทริกซ์ระยะเวลาและระยะทาง ต้องมีองค์ประกอบเท่ากับ |
vehicleStartTag |
แท็กที่กำหนดว่าเมทริกซ์ระยะเวลาและระยะทางนี้ใช้กับยานพาหนะใด หากเว้นว่างไว้ จะมีผลกับยานพาหนะทั้งหมด และจะมีได้เพียงเมทริกซ์เดียว การเริ่มต้นของยานพาหนะแต่ละครั้งต้องตรงกับเมทริกซ์ 1 รายการเท่านั้น กล่าวคือ ฟิลด์ เมทริกซ์ทั้งหมดต้องมี |
แถว
ระบุแถวของเมทริกซ์ระยะเวลาและระยะทาง
| การแสดง JSON |
|---|
{ "durations": [ string ], "meters": [ number ] } |
| ช่อง | |
|---|---|
durations[] |
ค่าระยะเวลาสำหรับแถวที่ระบุ ต้องมีองค์ประกอบเท่ากับ ระยะเวลาเป็นวินาทีที่มีเศษทศนิยมได้สูงสุด 9 หลัก โดยลงท้ายด้วย ' |
meters[] |
ค่าระยะทางสำหรับแถวที่ระบุ หากไม่มีต้นทุนหรือข้อจำกัดที่อ้างอิงถึงระยะทางในโมเดล คุณสามารถปล่อยให้ช่องนี้ว่างไว้ได้ แต่หากมี คุณต้องระบุองค์ประกอบให้มีจำนวนเท่ากับ |
TransitionAttributes
ระบุแอตทริบิวต์ของการเปลี่ยนระหว่างการเข้าชม 2 ครั้งติดต่อกันในเส้นทาง TransitionAttributes หลายรายการอาจมีผลกับการเปลี่ยนผ่านเดียวกัน ในกรณีนี้ ค่าใช้จ่ายเพิ่มเติมทั้งหมดจะรวมกัน และข้อจำกัดหรือขีดจำกัดที่เข้มงวดที่สุดจะมีผล (ตามความหมายของ "และ" ตามธรรมชาติ)
| การแสดง JSON |
|---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
| ช่อง | |
|---|---|
srcTag |
แท็กที่กำหนดชุดการเปลี่ยน (src->dst) ที่แอตทริบิวต์เหล่านี้ใช้ การเข้าชมแหล่งที่มาหรือการเริ่มต้นยานพาหนะจะตรงกันก็ต่อเมื่อ |
excludedSrcTag |
ดู |
dstTag |
การเข้าชมปลายทางหรือการสิ้นสุดของยานพาหนะจะตรงกันก็ต่อเมื่อ |
excludedDstTag |
ดู |
cost |
ระบุค่าใช้จ่ายในการดำเนินการเปลี่ยนผ่านนี้ ซึ่งอยู่ในหน่วยเดียวกันกับต้นทุนอื่นๆ ทั้งหมดในโมเดล และต้องไม่ใช่ค่าลบ โดยจะมีการเรียกเก็บเพิ่มเติมจากค่าใช้จ่ายอื่นๆ ที่มีอยู่ทั้งหมด |
costPerKilometer |
ระบุต้นทุนต่อกิโลเมตรที่ใช้กับระยะทางที่เดินทางขณะทำการเปลี่ยนผ่านนี้ โดยจะรวมกับ |
distanceLimit |
ระบุขีดจำกัดของระยะทางที่เดินทางขณะทำการเปลี่ยนนี้ ตั้งแต่เดือนมิถุนายน 2021 เป็นต้นไป ระบบจะรองรับเฉพาะขีดจำกัดแบบยืดหยุ่น |
delay |
ระบุการหน่วงเวลาที่เกิดขึ้นเมื่อทำการเปลี่ยนผ่านนี้ ความล่าช้านี้จะเกิดขึ้นหลังจากการเข้าชมแหล่งที่มาเสร็จสิ้นและก่อนเริ่มการเข้าชมหน้า Landing Page เสมอ ระยะเวลาเป็นวินาทีที่มีเศษทศนิยมได้สูงสุด 9 หลัก โดยลงท้ายด้วย ' |
ShipmentTypeIncompatibility
ระบุความไม่เข้ากันระหว่างการจัดส่งโดยขึ้นอยู่กับ shipmentType ระบบจะจำกัดการแสดงการจัดส่งที่ไม่รองรับในเส้นทางเดียวกันตามโหมดการไม่รองรับ
| การแสดง JSON |
|---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
| ช่อง | |
|---|---|
types[] |
รายการประเภทที่ใช้ร่วมกันไม่ได้ การจัดส่ง 2 รายการที่มี |
incompatibilityMode |
โหมดที่ใช้กับความไม่เข้ากัน |
IncompatibilityMode
โหมดที่กำหนดวิธีจำกัดลักษณะที่ปรากฏของการจัดส่งที่ไม่เข้ากันในเส้นทางเดียวกัน
| Enum | |
|---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
โหมดความเข้ากันไม่ได้ที่ไม่ได้ระบุ ไม่ควรใช้ค่านี้ |
NOT_PERFORMED_BY_SAME_VEHICLE |
ในโหมดนี้ การจัดส่ง 2 รายการที่มีประเภทไม่เข้ากันจะใช้ยานพาหนะเดียวกันไม่ได้ |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
ในโหมดนี้ การจัดส่ง 2 รายการที่มีประเภทไม่เข้ากันจะอยู่ในยานพาหนะเดียวกันพร้อมกันไม่ได้
|
ShipmentTypeRequirement
ระบุข้อกำหนดระหว่างการจัดส่งตาม shipmentType รายละเอียดของข้อกำหนดจะกำหนดโดยโหมดข้อกำหนด
| การแสดง JSON |
|---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
| ช่อง | |
|---|---|
requiredShipmentTypeAlternatives[] |
รายการประเภทการจัดส่งทางเลือกที่ |
dependentShipmentTypes[] |
การจัดส่งทั้งหมดที่มีประเภทในฟิลด์ หมายเหตุ: ไม่อนุญาตให้มีเชนของข้อกำหนดที่ |
requirementMode |
โหมดที่ใช้กับข้อกำหนด |
RequirementMode
โหมดที่กำหนดลักษณะที่ปรากฏของการจัดส่งที่ขึ้นอยู่กับเส้นทาง
| Enum | |
|---|---|
REQUIREMENT_MODE_UNSPECIFIED |
โหมดข้อกำหนดที่ไม่ได้ระบุ ไม่ควรใช้ค่านี้ |
PERFORMED_BY_SAME_VEHICLE |
ในโหมดนี้ การจัดส่งทั้งหมดที่ "ขึ้นอยู่กับ" ต้องใช้ยานพาหนะเดียวกันกับการจัดส่ง "ที่จำเป็น" อย่างน้อย 1 รายการ |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
ใน ดังนั้น การรับสินค้าที่จัดส่ง "ขึ้นอยู่กับ" จะต้องมีอย่างใดอย่างหนึ่งต่อไปนี้
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
เช่นเดียวกับก่อนหน้านี้ ยกเว้นการจัดส่งที่ "ขึ้นอยู่กับ" จะต้องมีการจัดส่งที่ "ต้องมี" ในยานพาหนะ ณ เวลาที่นำส่ง |
PrecedenceRule
กฎลำดับความสำคัญระหว่างเหตุการณ์ 2 เหตุการณ์ (แต่ละเหตุการณ์คือการรับหรือการนำส่งของการจัดส่ง) เหตุการณ์ "ที่ 2" ต้องเริ่มต้นอย่างน้อย offsetDuration หลังจากเหตุการณ์ "แรก" เริ่มต้น
ลำดับความสำคัญหลายรายการอาจอ้างอิงถึงเหตุการณ์เดียวกัน (หรือเหตุการณ์ที่เกี่ยวข้อง) เช่น "รับ B หลังจากนำส่ง A" และ "รับ C หลังจากรับ B"
นอกจากนี้ ลำดับความสำคัญจะมีผลเมื่อมีการจัดส่งทั้ง 2 รายการเท่านั้น มิเช่นนั้นระบบจะไม่สนใจ
| การแสดง JSON |
|---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
| ช่อง | |
|---|---|
firstIsDelivery |
ระบุว่าเหตุการณ์ "แรก" เป็นการนำส่งหรือไม่ |
secondIsDelivery |
ระบุว่าเหตุการณ์ "ที่ 2" เป็นการนำส่งหรือไม่ |
offsetDuration |
ออฟเซ็ตระหว่างเหตุการณ์ "แรก" กับเหตุการณ์ "ที่สอง" ซึ่งอาจเป็นค่าลบได้ ระยะเวลาเป็นวินาทีที่มีเศษทศนิยมได้สูงสุด 9 หลัก โดยลงท้ายด้วย ' |
firstIndex |
ดัชนีการจัดส่งของเหตุการณ์ "แรก" ต้องระบุข้อมูลในช่องนี้ |
secondIndex |
ดัชนีการจัดส่งของเหตุการณ์ "ที่ 2" ต้องระบุข้อมูลในช่องนี้ |