เอกสารนี้แสดงวิธีส่งคำขอแรกไปยัง Route Optimization API โดยใช้สถานการณ์กรณีการใช้งานจริง
ตัวอย่างนี้ใช้ HTTP และ JSON เพื่อแสดง REST API เพื่อให้เข้าใจได้ง่าย อย่างไรก็ตาม สำหรับสภาพแวดล้อมการใช้งานจริง คำแนะนำโดยรวมคือให้ใช้ gRPC เพื่อประโยชน์ด้านประสิทธิภาพ อย่างไรก็ตาม gRPC ต้องมีการติดตั้ง ดูข้อมูลเพิ่มเติมได้ที่ไลบรารีของไคลเอ็นต์ Route Optimization API
สถานการณ์
คุณให้บริการรับเลี้ยงสุนัขแบบไปกลับตั้งแต่เวลา 07:00 น. ถึง 19:00 น. ในซานฟรานซิสโก เช้านี้คุณต้องไปรับสุนัข 2 ตัวจากสถานที่ต่างๆ ในเมือง เจ้าของสุนัขทั้ง 2 ราย ให้ช่วงเวลารับคุณระหว่าง 07:30 น. ถึง 09:30 น.
คุณมีรถตู้ 1 คันสำหรับงานนี้ และจ่ายค่าจ้างให้คนขับ 27 ดอลลาร์ต่อชั่วโมง คนขับและรถตู้จะเริ่มงานที่ศูนย์รับเลี้ยงเด็กตอน 07:00 น. และต้องกลับจาก การรับช่วงเช้าภายในเวลา 12:00 น. เพื่อพักกลางวัน
วันนี้คือวันที่ 13 กุมภาพันธ์ 2024 และคนขับมีงานดังนี้
- รับสุนัขเบอร์นีสเมาน์เทนด็อกที่อยู่ใกล้กับ Coit Tower
- รับชิวาวาที่สวนสาธารณะ South Sunset Playground
- ไปส่งสุนัขทั้ง 2 ตัวที่ศูนย์รับฝากสุนัขที่ Mission Dolores Park
คุณต้องมีเส้นทางที่ลดเวลาที่สุนัขอยู่ในรถตู้ให้น้อยที่สุด พร้อมทั้งปฏิบัติตามข้อกำหนดในการรับและส่ง
ก่อนเริ่มต้น
หากต้องการเรียกใช้โค้ดในสถานการณ์ตัวอย่างนี้ คุณต้องทำตาม วิธีการในตั้งค่า Route Optimization API ให้เสร็จสมบูรณ์ก่อน
1. เลือกแนวทางการเพิ่มประสิทธิภาพเส้นทาง
Route Optimization API มีหลายวิธีให้คุณเลือกใช้ตามความซับซ้อนของปัญหาการเพิ่มประสิทธิภาพ
เนื่องจากสถานการณ์รับฝากสุนัขนี้เป็นคำขอขนาดเล็กและตรงไปตรงมา ให้ใช้วิธีการบล็อก เช่น optimizeTours ซึ่งจะแสดงผลลัพธ์สำหรับคำขอขนาดเล็กได้อย่างรวดเร็ว ดูข้อมูลเพิ่มเติมเกี่ยวกับเมธอด Route Optimization API ได้ที่ปลายทางแบบซิงโครนัสและอะซิงโครนัส
ใช้ URL ต่อไปนี้เพื่อส่งคำขอ HTTP POST ไปยังเมธอด optimizeTours
https://routeoptimization.googleapis.com/v1/projects/PROJECT_OR_ID:optimizeTours
นอกจากนี้ คุณยังต้องตั้งค่าระยะหมดเวลาและกำหนดเวลาให้สั้นเพื่อลดเวลาในการรอที่ไม่จำเป็น สำหรับสถานการณ์รับฝากสุนัขนี้ เครื่องมือเพิ่มประสิทธิภาพไม่ จำเป็นต้องใช้เวลามากในการตอบคำขอของคุณ ดังนั้นให้ใช้การตั้งค่าต่อไปนี้
- ตั้งค่าพารามิเตอร์
timeoutเป็น 2 วินาที - ปล่อยให้การตั้งค่ากำหนดเวลาเป็นค่าเริ่มต้น ซึ่งคือ 60 วินาทีสำหรับคำขอ REST
2. สร้างเนื้อความของข้อความคำขอ
หลังจากเลือกoptimizeToursวิธีการบล็อกและกำหนดการตั้งค่าการหมดเวลาและ
กำหนดเวลาแล้ว ขั้นตอนถัดไปคือการสร้างเนื้อหาของข้อความคำขอ
สำหรับสถานการณ์นี้ คำขอคือข้อความ OptimizeToursRequest ที่เข้ารหัสเป็น JSON ใน REST API
หากต้องการสร้างข้อความคำขอ ให้ทำตามขั้นตอนถัดไป
เริ่มต้นด้วยโครงสร้างคำขอพื้นฐาน ซึ่งมีลักษณะดังนี้
{ "timeout": ..., "model": { "shipments": [...], "vehicles": [...], "globalStartTime": "...", "globalEndTime": "..." } }ดูข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้างได้ที่คู่มือแนวคิดหลักสำหรับโครงสร้างพื้นฐาน (ShipmentModel, Shipment และ Vehicle)
กำหนดการจัดส่ง ในช่อง
shipmentsให้เพิ่มShipmentข้อความสำหรับ สุนัขแต่ละตัวที่ต้องรับและส่งในตอนเช้า ส่วนนี้คือ ที่ที่คุณกำหนดสถานที่และเวลาที่เจ้าของสุนัขแต่ละรายต้องการให้ไปรับ และสถานที่และเวลาที่ศูนย์รับฝากสุนัขจะไปส่งสุนัขสร้าง
VisitRequestสำหรับการรับและอีกรายการสำหรับการนำส่งสำหรับสุนัขแต่ละตัว ซึ่งในสถานการณ์นี้เรียกว่าการนำส่งที่สถานรับเลี้ยงเด็กในการรับ ให้ตั้งค่า
arrivalWaypointเป็นสถานที่รับสุนัข (Coit Tower สำหรับ Bernese Mountain Dog หรือ South Sunset Playground Park สำหรับชิวาวา) และตั้งค่าtimeWindowsเป็นเวลารับที่เจ้าของร้องขอ (07:30 น. ถึง 09:30 น.)ในการนำส่ง ให้ตั้งค่า
arrivalWaypointเป็น ศูนย์รับเลี้ยงเด็กและตั้งค่าtimeWindowsสำหรับเวลานำส่งที่ต้องการ (09:30 น. ถึง 11:30 น.)
ดูข้อมูลเพิ่มเติมเกี่ยวกับกรอบเวลาได้ที่กรอบเวลา
คุณใช้ฟิลด์
labelเพื่อเพิ่มตัวระบุสำหรับการจัดส่งแต่ละครั้งได้ เช่น "เบอร์นีสเมาน์เทนด็อก" และ "ชิวาวา" ซึ่งจะช่วยให้คุณระบุ การจัดส่งในคำตอบได้
ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดการจัดส่งได้ที่ การจัดส่ง
ระบุยานพาหนะ ในช่อง
vehiclesให้เพิ่มข้อความVehicleสำหรับ รถตู้ 1 คันโดยมีศูนย์รับเลี้ยงเด็กเป็นจุดเริ่มต้นและจุดสิ้นสุด ค่าจ้างของคนขับ และเวลาทำการของรถตู้ตั้งค่า
startWaypointและendWaypointสำหรับรถตู้ไปยังจุดเริ่มต้นและ จุดสิ้นสุดของวัน ซึ่งก็คือศูนย์ดูแลเด็กใกล้กับ Mission Dolores Parkหากต้องการลดต้นทุนการดำเนินงาน คุณต้องกำหนดข้อจำกัดด้านต้นทุนของธุรกิจ ตั้งค่าพารามิเตอร์ต้นทุน
costPerHourเป็น 27 ซึ่งเป็นจำนวนเงินที่คุณจ่ายให้คนขับรถตู้รับส่ง สถานรับฝากสุนัข ดูข้อมูลเพิ่มเติมเกี่ยวกับพารามิเตอร์ต้นทุนได้ที่ รูปแบบต้นทุนหากต้องการให้เครื่องมือเพิ่มประสิทธิภาพสร้างเส้นทางภายในเวลาทำการของรถตู้ ให้กำหนด
startTimeWindowsเป็นช่วงเวลาที่ยอมรับได้สำหรับคนขับที่จะเริ่มขับรถตู้ และกำหนดendTimeWindowsเป็นช่วงเวลาที่ยอมรับได้สำหรับเวลาที่คนขับต้องกลับไปที่ศูนย์ดูแลเด็ก ดูข้อมูลเพิ่มเติมเกี่ยวกับกรอบเวลาได้ที่กรอบเวลา
ตั้งกรอบเวลาทั่วโลก กรอบเวลาทั่วโลกแสดง กรอบเวลาที่รถตู้สามารถรับและส่ง สถานรับเลี้ยงเด็กได้ตลอดทั้งวัน สําหรับสถานการณ์นี้ ให้ตั้งค่า
globalStartTimeเป็น 07:00 น. และglobalEndTimeเป็น 19:00 น. สําหรับวันที่ 13 กุมภาพันธ์ 2024 ซึ่ง แสดงถึงเวลาทําการของศูนย์รับฝากสุนัข
3. ส่งคำขอ
ต่อไปนี้คือcurlคำขออย่างง่ายตามสถานการณ์จำลองของศูนย์รับฝากสุนัข
และใช้วิธีการบล็อกoptimizeTours
ก่อนส่งคำขอ ให้แทนที่ PROJECT_NUMBER_OR_ID ในโค้ดตัวอย่างด้วยรหัสโปรเจ็กต์ Google Cloud
curl -X POST 'https://routeoptimization.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID:optimizeTours' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
--data @- << EOM
{
"timeout": 2s,
"model": {
"shipments": [
{
"pickups": [
{
"arrivalWaypoint": {
"location": {
"latLng": {
"latitude": 37.802395,
"longitude": -122.405822
}
}
},
"timeWindows": [
{
"startTime": "2024-02-13T07:30:00Z",
"endTime": "2024-02-13T09:30:00Z"
}
]
}
],
"deliveries": [
{
"arrivalWaypoint": {
"location": {
"latLng": {
"latitude": 37.760202,
"longitude": -122.426796
}
}
},
"timeWindow": [
{
"startTime": "2024-02-13T09:30:00Z",
"endTime": "2024-02-13T11:30:00Z"
}
]
}
],
"label": "Bernese mountain dog"
},
{
"pickups": [
{
"arrivalWaypoint": {
"location": {
"latLng": {
"latitude": 37.738067,
"longitude": -122.498593
}
}
},
"timeWindows": [
{
"startTime": "2024-02-13T07:30:00Z",
"endTime": "2024-02-13T09:30:00Z"
}
]
}
],
"deliveries": [
{
"arrivalWaypoint": {
"location": {
"latLng": {
"latitude": 37.760202,
"longitude": -122.426796
}
}
},
"timeWindow": [
{
"startTime": "2024-02-13T09:30:00Z",
"endTime": "2024-02-13T11:30:00Z"
}
]
}
],
"label": "Chihuahua"
}
],
"vehicles": [
{
"startWaypoint": {
"location": {
"latLng": {
"latitude": 37.760202,
"longitude": -122.426796
}
}
},
"endWaypoint": {
"location": {
"latLng": {
"latitude": 37.760202,
"longitude": -122.426796
}
}
},
"costPerHour": 27,
"startTimeWindows": [
{
"startTime": "2024-02-13T07:00:00Z",
"endTime": "2024-02-13T07:15:00Z"
}
],
"endTimeWindows": [
{
"startTime": "2024-02-13T11:45:00Z",
"endTime": "2024-02-13T12:00:00Z"
}
]
}
],
"globalStartTime": "2024-02-13T07:00:00Z",
"globalEndTime": "2024-02-13T19:00:00Z"
}
}
EOM
พารามิเตอร์คำขอที่ใช้ในคำขอ
ตารางต่อไปนี้อธิบายพารามิเตอร์คำขอที่ใช้ในเนื้อหาคำขอของ สถานการณ์ตัวอย่าง คุณกรองเนื้อหาตามโฟลเดอร์หลักหรือตามการค้นหาข้อความได้
| ผู้ปกครอง | พารามิเตอร์ | ประเภทพร็อพเพอร์ตี้ | คำอธิบาย |
|---|---|---|---|
OptimizeToursRequest |
model |
ออบเจ็กต์ (ShipmentModel) |
นี่คือหัวใจสำคัญของคำขอ ซึ่งเป็นออบเจ็กต์เดียวที่คุณ
กำหนดปัญหาทั้งหมด รวมถึงสุนัขทั้งหมดที่คุณต้องรับและ
ส่ง (shipments) และรถตู้ในกองยานพาหนะ (vehicles) ให้คิดว่าออบเจ็กต์นี้เป็นพิมพ์เขียวที่สมบูรณ์สำหรับปัญหาที่คุณต้องเพิ่มประสิทธิภาพ |
timeout |
ระยะเวลา | พารามิเตอร์นี้ระบุเวลาสูงสุดที่เซิร์ฟเวอร์จะใช้ในการประมวลผลคำขอก่อนที่จะส่งการตอบกลับ ใช้พารามิเตอร์นี้เพื่อลดเวลา รอสาย สำหรับคำขอขนาดเล็กและรวดเร็ว เช่น สถานการณ์รับฝากสุนัขนี้ ให้ตั้งค่านี้เป็น 2 วินาที | |
ShipmentModel |
shipments[] |
อาร์เรย์ของออบเจ็กต์ (Shipment) |
อาร์เรย์ของออบเจ็กต์ โดยแต่ละออบเจ็กต์แสดงถึงสุนัขที่ ต้องรับหรือส่ง |
vehicles[] |
อาร์เรย์ของออบเจ็กต์ (Vehicle) |
อาร์เรย์ของออบเจ็กต์ซึ่งแต่ละออบเจ็กต์จะกำหนดรถในกองยานพาหนะ ของคุณ ซึ่งเป็นที่ที่คุณอธิบายทรัพยากร เช่น รถตู้ที่ รับและส่งสินค้า คุณต้องกำหนดรถอย่างน้อย 1 คันเพื่อ รับเส้นทางที่เพิ่มประสิทธิภาพแล้ว | |
globalStartTime |
การประทับเวลา | นี่คือเวลาที่เร็วที่สุดที่เหตุการณ์ใดๆ ในโมเดลทั้งหมดของคุณจะเกิดขึ้นได้ พารามิเตอร์นี้จะจำกัดปัญหาการเพิ่มประสิทธิภาพ ลงในเวลา ซึ่งมีความสําคัญอย่างยิ่งต่อการคํานวณการเข้าชมและการกำหนดเส้นทาง ที่ถูกต้อง สำหรับสถานการณ์รับส่งสุนัขนี้ ให้ตั้งค่าเป็นเวลาที่เร็วที่สุด ที่คนขับสามารถขับรถตู้ได้ในวันนั้น ซึ่งก็คือ 07:00 น. ของวันที่ 13 กุมภาพันธ์ 2024 | |
globalEndTime |
การประทับเวลา | นี่คือเวลาล่าสุดที่เหตุการณ์ใดๆ ในโมเดลทั้งหมดของคุณจะเกิดขึ้นได้ สำหรับสถานการณ์รับฝากสุนัขนี้ ให้ตั้งค่าเป็นเวลาที่คาดว่ารถตู้จะสิ้นสุดการให้บริการ ซึ่งก็คือ 19:00 น. ของวันที่ 13 กุมภาพันธ์ 2024 | |
Shipment |
pickups[] |
อาร์เรย์ของออบเจ็กต์ (VisitRequest) |
นี่คือรายการตัวเลือกการรับสินค้าทั้งหมดที่เป็นไปได้สำหรับการ จัดส่ง โดยตัวเพิ่มประสิทธิภาพจะเลือกตัวเลือกที่ดีที่สุดเพื่อแก้ปัญหาของคุณ สำหรับ สถานการณ์รับส่งสุนัขนี้ ให้ระบุสถานที่รับส่งและช่วงเวลา ที่เจ้าของแต่ละรายระบุไว้สำหรับสุนัขแต่ละตัว |
deliveries[] |
อาร์เรย์ของออบเจ็กต์ (VisitRequest) |
นี่คือรายการตัวเลือกการนำส่งที่เป็นไปได้ทั้งหมดสำหรับการ จัดส่ง โดยตัวเพิ่มประสิทธิภาพจะเลือกตัวเลือกที่ดีที่สุดเพื่อแก้ปัญหาของคุณ สำหรับ สถานการณ์รับฝากสุนัขนี้ ให้ระบุสถานที่ตั้งของสถานรับฝากสุนัข และช่วงเวลาที่คนขับต้องกลับมารับสุนัขแต่ละตัวไปทานอาหารกลางวัน | |
label |
สตริง | นี่คือตัวระบุสำหรับการจัดส่งที่เฉพาะเจาะจงในคำขอของคุณ คุณระบุป้ายกำกับในคำขอเพื่อให้ตอบกลับได้ง่ายขึ้น สำหรับสถานการณ์รับฝากสุนัขนี้ ให้ใช้สตริงอธิบาย เช่น "ชิวาวา" "เบอร์นีสเมาน์เทนด็อก" หรือชื่อสุนัข เพื่อให้ตรงกับ โซลูชันกับอินพุตเมื่อคุณได้รับคำตอบจาก API | |
VisitRequest |
arrivalWaypoint[] |
ออบเจ็กต์ (Waypoint) |
นี่คือตำแหน่งของการเข้าชมที่เฉพาะเจาะจงในเส้นทาง คุณกำหนดพารามิเตอร์นี้ได้
โดยใช้พิกัดละติจูดและลองจิจูด รหัสสถานที่ หรือส่วนหัว ใน
สถานการณ์รับเลี้ยงสุนัขแบบไปกลับนี้ ให้ตั้งค่านี้เป็นสถานที่ที่เจ้าของระบุสำหรับ pickups และเป็นที่อยู่ของ
ศูนย์รับเลี้ยงเด็กสำหรับ deliveries |
timeWindows[] |
อาร์เรย์ของออบเจ็กต์ (TimeWindow) |
อาร์เรย์ของออบเจ็กต์ที่กำหนดข้อจำกัดด้านเวลาสำหรับการรับสินค้าหรือ การนำส่ง สำหรับสถานการณ์นี้ ให้ใช้ข้อมูลนี้เพื่อกำหนดช่วงเวลารับสำหรับสุนัขแต่ละตัวและช่วงเวลาที่ยอมรับได้สำหรับการส่งสุนัขไปที่ศูนย์รับเลี้ยง | |
Vehicle |
startWaypoint[] |
ออบเจ็กต์ (Waypoint) |
นี่คือจุดเริ่มต้นของเส้นทางของยานพาหนะ ซึ่งกำหนดด้วย พิกัดละติจูดและลองจิจูดหรือรหัสสถานที่ พารามิเตอร์นี้จะบอก เครื่องมือเพิ่มประสิทธิภาพว่ายานพาหนะต้องเริ่มเส้นทางที่ใด หากคุณไม่ได้กำหนดจุดอ้างอิงนี้ เครื่องมือเพิ่มประสิทธิภาพจะเลือกจุดรับสินค้าหรือ จุดนำส่งอย่างใดอย่างหนึ่งเป็นสถานที่ตั้งเริ่มต้น สำหรับสถานการณ์รับฝากสุนัขนี้ เนื่องจาก คนขับเริ่มวันทำงานที่สถานรับฝาก จึงใช้พิกัดของ Mission Dolores Park |
endWaypoint[] |
ออบเจ็กต์ (Waypoint) |
นี่คือจุดหมายปลายทางสุดท้ายของเส้นทางยานพาหนะ ซึ่งกำหนดด้วยพิกัดละติจูด และลองจิจูดหรือรหัสสถานที่ พารามิเตอร์นี้จะบอก เครื่องมือเพิ่มประสิทธิภาพว่ายานพาหนะต้องสิ้นสุดเส้นทางที่ใด หากคุณไม่ได้กำหนดจุดแวะพักนี้ ตัวเพิ่มประสิทธิภาพจะเลือกการรับหรือการนำส่งอย่างใดอย่างหนึ่งเป็นจุดสิ้นสุดของเส้นทาง สำหรับสถานการณ์รับฝากสุนัขนี้ เนื่องจากคนขับต้องสิ้นสุดวัน ณ สถานที่รับฝากสุนัข ให้ใช้พิกัดของ Mission Dolores Park | |
costPerHour |
ตัวเลข | นี่คือค่าใช้จ่ายที่เกิดขึ้นทุกชั่วโมงที่ใช้ยานพาหนะ ไม่ว่าจะ เดินทางหรือหยุดอยู่ก็ตาม สำหรับสถานการณ์จำลองของศูนย์รับฝากสุนัขนี้ ให้ใช้ เพื่อจำลองค่าจ้างรายชั่วโมงของคนขับรถ | |
startTimeWindows[] |
อาร์เรย์ของออบเจ็กต์ (TimeWindow) |
นี่คือกรอบเวลาที่ยอมรับได้สำหรับคนขับในการเริ่มขับรถตู้เพื่อ รับสุนัขในตอนเช้า | |
endTimeWindows[] |
อาร์เรย์ของออบเจ็กต์ (TimeWindow) |
ซึ่งเป็นช่วงเวลาที่ยอมรับได้สำหรับคนขับรถตู้ในการขับรถให้เสร็จและ จอดรถกลับที่ศูนย์รับฝากสุนัข |