เอกสารนี้จะแสดงวิธีส่งคำขอแรกไปยัง Route Optimization API โดยใช้สถานการณ์การใช้งานจริง
ตัวอย่างนี้ใช้ HTTP และ JSON เพื่อแสดง REST API เพื่อความเรียบง่าย อย่างไรก็ตาม เราขอแนะนำให้ใช้ gRPC ในสภาพแวดล้อมการใช้งานจริง เนื่องจากมีประสิทธิภาพดีกว่า แต่ gRPC ต้องมีการติดตั้ง ดูข้อมูลเพิ่มเติมได้ที่ ไลบรารีของไคลเอ็นต์ Route Optimization API
สถานการณ์
คุณให้บริการรับฝากเลี้ยงสุนัขตั้งแต่เวลา 7:00 น. ถึง 19:00 น. ในซานฟรานซิสโก เช้านี้คุณต้องไปรับสุนัข 2 ตัวจากสถานที่ต่างๆ ในเมือง เจ้าของสุนัขทั้ง 2 ตัวให้ช่วงเวลามารับระหว่าง 7:30 น. ถึง 9:30 น.
คุณมีรถตู้ 1 คันสำหรับงานนี้ และจ่ายค่าจ้างให้คนขับ 27 ดอลลาร์ต่อชั่วโมง คนขับและรถตู้จะเริ่มงานที่ศูนย์รับฝากเลี้ยงเวลา 7:00 น. และต้องกลับจากการรับสุนัขช่วงเช้าภายในเวลา 12:00 น. เพื่อพักรับประทานอาหารกลางวัน
วันนี้คือวันที่ 13 กุมภาพันธ์ 2024 และคนขับมีงานที่ต้องทำดังนี้
- ไปรับสุนัขเบอร์นีสเมาน์เทนด็อกที่อยู่ใกล้กับ Coit Tower
- ไปรับสุนัขพันธุ์ชิวาวาที่ South Sunset Playground Park
- ไปส่งสุนัขทั้ง 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 สำหรับสุนัขเบอร์นีสเมาน์เทนด็อก หรือ South Sunset Playground Park สำหรับสุนัขพันธุ์ชิวาวา) และตั้งค่าtimeWindowsเป็นเวลาที่เจ้าของต้องการให้ไปรับ (7:30 น. ถึง 9:30 น.)ในการส่งสุนัข ให้ตั้งค่า
arrivalWaypointเป็น ศูนย์รับฝากเลี้ยง และตั้งค่าtimeWindowsเป็นเวลาที่ต้องไปส่ง (9:30 น. ถึง 11:30 น.)
ดูข้อมูลเพิ่มเติมเกี่ยวกับช่วงเวลาได้ที่ช่วงเวลา
คุณสามารถใช้ช่อง
labelเพื่อเพิ่มตัวระบุสำหรับการจัดส่งแต่ละครั้ง เช่น "สุนัขเบอร์นีสเม้าเทนด็อก" และ "สุนัขพันธุ์ชิวาวา" ซึ่งจะช่วยให้คุณระบุการจัดส่งในการตอบกลับได้
ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดการจัดส่งได้ที่การจัดส่ง
กำหนดรถตู้ ในช่อง
vehiclesให้เพิ่มข้อความVehicleสำหรับรถตู้ 1 คัน โดยกำหนดให้ศูนย์รับฝากเลี้ยงเป็นจุดเริ่มต้นและจุดสิ้นสุด รวมถึงกำหนดค่าจ้างของคนขับและเวลาทำการของรถตู้ตั้งค่า
startWaypointและendWaypointสำหรับรถตู้เป็น สถานที่เริ่มต้นและสถานที่สิ้นสุดของวัน ซึ่งคือศูนย์รับฝากเลี้ยงที่อยู่ใกล้กับ Mission Dolores Parkหากต้องการลดต้นทุนการดำเนินงาน คุณต้องกำหนดข้อจำกัดด้านต้นทุนของธุรกิจ ตั้งค่าพารามิเตอร์ต้นทุน
costPerHourเป็น 27 ซึ่งเป็นจำนวนเงินที่คุณจ่ายให้คนขับสำหรับการขับรถตู้รับฝากเลี้ยงสุนัข ดูข้อมูลเพิ่มเติมเกี่ยวกับพารามิเตอร์ต้นทุนได้ที่ โมเดลต้นทุนหากต้องการให้เครื่องมือเพิ่มประสิทธิภาพสร้างเส้นทางภายในเวลาทำการของรถตู้ ให้กำหนด
startTimeWindowsเป็นช่วงเวลาที่ยอมรับได้สำหรับคนขับในการเริ่มขับรถตู้ และกำหนดendTimeWindowsเป็นช่วงเวลาที่ยอมรับได้สำหรับเวลาที่คนขับต้องกลับมาที่ศูนย์รับฝากเลี้ยง ดูข้อมูลเพิ่มเติมเกี่ยวกับช่วงเวลาได้ที่ช่วงเวลา
ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดรถตู้ได้ที่ รถตู้
ตั้งค่าช่วงเวลาส่วนกลาง ช่วงเวลาส่วนกลางแสดงถึงกรอบเวลาที่รถตู้สามารถไปรับและไปส่งสุนัขสำหรับศูนย์รับฝากเลี้ยงของคุณได้ตลอดทั้งวัน สำหรับสถานการณ์นี้ ให้ตั้งค่า
globalStartTimeเป็น 7: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
}
}
},
"timeWindows": [
{
"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
}
}
},
"timeWindows": [
{
"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
พารามิเตอร์คำขอที่ใช้ในคำขอ
ตารางต่อไปนี้อธิบายพารามิเตอร์คำขอที่ใช้ในเนื้อหาคำขอของสถานการณ์ตัวอย่าง คุณสามารถกรองเนื้อหาตามรายการหลักหรือตามการค้นหาข้อความ
| Parent | พารามิเตอร์ | ประเภทพร็อพเพอร์ตี้ | คำอธิบาย |
|---|---|---|---|
OptimizeToursRequest |
model |
ออบเจ็กต์ (ShipmentModel) |
นี่คือส่วนหลักของคำขอ ซึ่งเป็นออบเจ็กต์เดียวที่คุณ
กำหนดปัญหาทั้งหมด รวมถึงสุนัขทั้งหมดที่ต้องไปรับและ
ไปส่ง (shipments)
และรถตู้ในกองยานพาหนะ
(vehicles)
ให้คิดว่านี่คือพิมพ์เขียวที่สมบูรณ์สำหรับปัญหาที่คุณต้องเพิ่มประสิทธิภาพ |
timeout |
ระยะเวลา | พารามิเตอร์นี้ระบุเวลาสูงสุดที่เซิร์ฟเวอร์จะใช้ในการประมวลผลคำขอ ก่อนที่จะส่งการตอบกลับ ใช้พารามิเตอร์นี้เพื่อลดเวลารอ สำหรับคำขอขนาดเล็กและรวดเร็ว เช่น สถานการณ์การรับฝากเลี้ยงสุนัขนี้, ให้ตั้งค่านี้เป็น 2 วินาที | |
ShipmentModel |
shipments[] |
อาร์เรย์ของออบเจ็กต์ (Shipment) |
นี่คืออาร์เรย์ของออบเจ็กต์ โดยแต่ละออบเจ็กต์แสดงถึงสุนัขที่ ต้องไปรับหรือไปส่ง |
vehicles[] |
อาร์เรย์ของออบเจ็กต์ (Vehicle) |
นี่คืออาร์เรย์ของออบเจ็กต์ โดยแต่ละออบเจ็กต์กำหนดรถตู้ใน กองยานพาหนะ ซึ่งเป็นจุดที่คุณอธิบายทรัพยากร เช่น รถตู้ที่ใช้ไปรับและไปส่ง คุณต้องกำหนดรถตู้อย่างน้อย 1 คันจึงจะได้รับเส้นทางที่เพิ่มประสิทธิภาพแล้ว | |
globalStartTime |
การประทับเวลา | นี่คือเวลาที่เป็นไปได้เร็วที่สุดสำหรับเหตุการณ์ใดๆ ใน โมเดลทั้งหมดของคุณ พารามิเตอร์นี้จะจำกัดปัญหาการเพิ่มประสิทธิภาพ ตามเวลา ซึ่งมีความสำคัญอย่างยิ่งต่อการคำนวณการจราจรและการกำหนดเส้นทาง ที่แม่นยำ สำหรับสถานการณ์การรับฝากเลี้ยงสุนัขนี้ ให้ตั้งค่านี้เป็นเวลาที่เร็วที่สุด ที่คนขับสามารถขับรถตู้ได้ในวันนั้น ซึ่งคือ 7: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) |
นี่คือช่วงเวลาที่ยอมรับได้สำหรับคนขับในการขับรถตู้เสร็จ และจอดรถกลับที่ศูนย์รับฝากเลี้ยงสุนัข |