इस दस्तावेज़ में, Route Optimization API को पहला अनुरोध भेजने का तरीका बताया गया है. इसके लिए, असल दुनिया में इस्तेमाल के उदाहरण का इस्तेमाल किया गया है.
उदाहरण में, REST API को दिखाने के लिए, एचटीटीपी और JSON का इस्तेमाल किया गया है. हालांकि, प्रोडक्शन एनवायरमेंट के लिए, gRPC का इस्तेमाल करने का सुझाव दिया जाता है, क्योंकि इससे परफ़ॉर्मेंस बेहतर होती है. हालांकि, gRPC को इंस्टॉल करना ज़रूरी है. ज़्यादा जानकारी के लिए, Route Optimization API की क्लाइंट लाइब्रेरी देखें.
स्थिति
सैन फ़्रांसिस्को में, आप सुबह 7:00 बजे से शाम 7:00 बजे तक डॉगी डेकेयर की सेवा देते हैं. आज सुबह, आपको शहर में अलग-अलग जगहों से दो कुत्ते पिक अप करने हैं. दोनों कुत्तों के मालिकों ने आपको सुबह 7:30 बजे से सुबह 9:30 बजे के बीच पिक अप करने का समय दिया है.
आपके पास इस काम के लिए एक वैन है और आप ड्राइवर को हर घंटे के 27 डॉलर चुकाते हैं. ड्राइवर और वैन, सुबह 7:00 बजे आपके डेकेयर सेंटर से काम शुरू करते हैं. साथ ही, उन्हें दोपहर 12:00 बजे तक सुबह के पिकअप पूरे करके, लंच ब्रेक के लिए वापस आना होगा.
आज 13 फ़रवरी, 2024 है और ड्राइवर को ये काम करने हैं:
- कोइट टॉवर के पास से बर्नीज़ माउंटेन डॉग को पिक अप करना.
- साउथ सनसेट प्लेग्राउंड पार्क से चिहुआहुआ को पिक अप करना.
- दोनों कुत्तों को मिशन डोलोरेस पार्क में मौजूद डॉगी डेकेयर सेंटर पर ड्रॉप करना.
आपको एक ऐसे रूट की ज़रूरत है जिससे कुत्तों को वैन में कम से कम समय बिताना पड़े. साथ ही, पिक अप और ड्रॉप ऑफ़ की ज़रूरी शर्तें भी पूरी हों.
शुरू करने से पहले
इस उदाहरण की स्थिति में कोड चलाने के लिए, पहले आपको Route Optimization API सेट अप करना में दिए गए निर्देशों को पूरा करना होगा.
1. रूट ऑप्टिमाइज़ेशन का तरीका चुनना
Route Optimization API में कई तरीके उपलब्ध हैं. इनमें से कोई भी तरीका चुना जा सकता है. यह इस बात पर निर्भर करता है कि ऑप्टिमाइज़ेशन की आपकी समस्या कितनी जटिल है.
डॉगी डेकेयर की इस स्थिति में, अनुरोध छोटा और आसान है. इसलिए,
ब्लॉकिंग तरीके का इस्तेमाल करें. जैसे, optimizeTours. यह छोटे अनुरोधों के लिए, तुरंत नतीजे देता है.
Route Optimization API
के तरीकों के बारे में ज़्यादा जानने के लिए, सिंक और असिंक एंडपॉइंट देखें.
`optimizeTours
` तरीके के लिए, एचटीटीपी पीओएसटी अनुरोध करने के लिए, यहां दिया गया यूआरएल इस्तेमाल करें:
https://routeoptimization.googleapis.com/v1/projects/PROJECT_OR_ID:optimizeTours
साथ ही, आपको टाइमआउट और डेडलाइन की सेटिंग को कम समय के लिए सेट करना होगा, ताकि इंतज़ार का अनावश्यक समय कम किया जा सके. डॉगी डेकेयर की इस स्थिति में, ऑप्टिमाइज़र को आपके अनुरोध का जवाब देने के लिए ज़्यादा समय की ज़रूरत नहीं होती. इसलिए, यहां दी गई सेटिंग का इस्तेमाल करें:
timeoutपैरामीटर को दो सेकंड पर सेट करें.- डेडलाइन की सेटिंग को डिफ़ॉल्ट पर छोड़ दें. REST अनुरोधों के लिए, यह 60 सेकंड होती है.
2. अनुरोध मैसेज का मुख्य हिस्सा बनाना
ब्लॉकिंग optimizeTours तरीका चुनने और टाइमआउट
और डेडलाइन की सेटिंग तय करने के बाद, अगला चरण अनुरोध
मैसेज का मुख्य हिस्सा बनाना है.
इस स्थिति के लिए, अनुरोध एक OptimizeToursRequest मैसेज है, जिसे REST API में JSON के तौर पर एनकोड किया गया है.
अनुरोध मैसेज बनाने के लिए, यह तरीका अपनाएं:
अनुरोध के बुनियादी स्ट्रक्चर से शुरू करें. यह स्ट्रक्चर इस तरह है:
{ "timeout": ..., "model": { "shipments": [...], "vehicles": [...], "globalStartTime": "...", "globalEndTime": "..." } }स्ट्रक्चर के बारे में ज़्यादा जानने के लिए, बुनियादी स्ट्रक्चर (ShipmentModel, Shipment, और Vehicle) के लिए मुख्य कॉन्सेप्ट की गाइड देखें.
शिपमेंट तय करें.
shipmentsफ़ील्ड में, हर उस कुत्ते के लिएShipmentमैसेज जोड़ें जिसे सुबह पिक अप और ड्रॉप करना है. यहां, हर कुत्ते के मालिक की पसंदीदा पिक अप लोकेशन और समय, और कुत्तों को ड्रॉप करने के लिए डेकेयर सेंटर की लोकेशन और समय तय किया जाता है.हर कुत्ते के लिए, पिक अप के लिए
VisitRequestऔर डिलीवरी के लिए एक और बनाएं. इस स्थिति में, इसे डेकेयर ड्रॉपऑफ़ कहा जाता है.पिक अप के लिए,
arrivalWaypointको कुत्ते की पिक अप लोकेशन (बर्नीज़ माउंटेन डॉग के लिए कोइट टॉवर या चिहुआहुआ के लिए साउथ सनसेट प्लेग्राउंड पार्क) पर सेट करें. साथ ही,timeWindowsको मालिक के अनुरोध किए गए पिक अप समय (सुबह 7:30 बजे से सुबह 9:30 बजे) पर सेट करें.डिलीवरी के लिए,
arrivalWaypointको डेकेयर सेंटर पर सेट करें. साथ ही,timeWindowsको ड्रॉपऑफ़ के लिए ज़रूरी समय (सुबह 9:30 बजे से सुबह 11:30 बजे) पर सेट करें.
टाइम विंडो के बारे में ज़्यादा जानने के लिए, टाइम विंडो देखें.
आप हर शिपमेंट के लिए आइडेंटिफ़ायर जोड़ने के लिए
labelफ़ील्ड का इस्तेमाल कर सकते हैं, जैसे "बर्नीज़ माउंटेन डॉग" और "चिहुआहुआ". इससे, आपको जवाब में शिपमेंट की पहचान करने में मदद मिल सकती है.
शिपमेंट तय करने के बारे में ज़्यादा जानने के लिए, शिपमेंट देखें.
वाहन तय करें.
vehiclesफ़ील्ड में, अपनी एक वैन के लिएVehicleमैसेज जोड़ें. इसमें डेकेयर सेंटर को शुरुआती और आखिरी पॉइंट के तौर पर, ड्राइवर की मज़दूरी की लागत, और वैन के चलने के घंटे शामिल करें.वैन के लिए
startWaypointऔरendWaypointको दिन की शुरुआती और आखिरी लोकेशन पर सेट करें. यह लोकेशन, मिशन डोलोरेस पार्क के पास मौजूद डेकेयर सेंटर है.अपने कारोबार की लागत को कम करने के लिए, आपको लागत की पाबंदियां तय करनी होंगी. लागत पैरामीटर
costPerHourको 27 पर सेट करें. यह वह रकम है जो आप डॉगी डेकेयर वैन चलाने के लिए ड्राइवर को चुकाते हैं. लागत पैरामीटर के बारे में ज़्यादा जानने के लिए, लागत मॉडल देखें.यह पक्का करने के लिए कि ऑप्टिमाइज़र, वैन के चलने के घंटों के अंदर रूट बनाए,
startTimeWindowsको उस स्वीकार्य सीमा पर सेट करें जब ड्राइवर वैन चलाना शुरू कर सकता है. साथ ही,endTimeWindowsको उस स्वीकार्य सीमा पर सेट करें जब ड्राइवर को डेकेयर सेंटर पर वापस आना होगा. टाइम विंडो के बारे में ज़्यादा जानने के लिए, टाइम विंडो देखें.
वाहन तय करने के बारे में ज़्यादा जानने के लिए, वाहन देखें.
ग्लोबल टाइम विंडो सेट करें. ग्लोबल टाइम विंडो, वह समयावधि होती है जिसके दौरान वैन, पूरे दिन आपके डेकेयर के लिए पिक अप और ड्रॉपऑफ़ कर सकती है. इस स्थिति के लिए,
globalStartTimeको सुबह 7:00 बजे औरglobalEndTimeको शाम 7:00 बजे पर सेट करें. यह आपके डॉगी डेकेयर के चलने के घंटों को दिखाता है.
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) |
यह ऑब्जेक्ट का एक कलेक्शन है. इसमें हर ऑब्जेक्ट, आपके बेड़े में मौजूद किसी वाहन के बारे में बताता है. इसमें, आपके संसाधनों के बारे में बताया जाता है. जैसे, वह वैन जो पिक अप और ड्रॉपऑफ़ करती है. ऑप्टिमाइज़ किया गया रूट पाने के लिए, कम से कम एक वाहन तय करना ज़रूरी है. | |
globalStartTime |
टाइमस्टैम्प | यह आपके पूरे मॉडल में किसी भी इवेंट के होने का सबसे पहला समय है. यह पैरामीटर, ऑप्टिमाइज़ेशन की समस्या को समय के हिसाब से कम करता है . यह ट्रैफ़िक और रूटिंग के सटीक कैलकुलेशन के लिए ज़रूरी है . डॉगी डेकेयर की इस स्थिति के लिए, इसे उस सबसे पहले समय पर सेट करें जब ड्राइवर वैन चला सकता है. यह समय, 13 फ़रवरी, 2024 के लिए सुबह 7:00 बजे है. | |
globalEndTime |
टाइमस्टैम्प | यह आपके पूरे मॉडल में किसी भी इवेंट के होने का सबसे आखिरी समय है. डॉगी डेकेयर की इस स्थिति के लिए, इसे उस समय पर सेट करें जब वैन के चलने का समय खत्म होने की उम्मीद है. यह समय, 13 फ़रवरी, 2024 के लिए शाम 7:00 बजे है. | |
Shipment |
pickups[] |
ऑब्जेक्ट का कलेक्शन (VisitRequest) |
यह शिपमेंट के लिए, पिक अप के सभी संभावित विकल्पों की सूची है. ऑप्टिमाइज़र, आपकी समस्या को हल करने के लिए सबसे अच्छा विकल्प चुनता है. डॉगी डेकेयर की इस स्थिति के लिए, हर कुत्ते के लिए, मालिक की ओर से दी गई पिक अप लोकेशन और टाइम विंडो की सूची बनाएं. |
deliveries[] |
ऑब्जेक्ट का कलेक्शन (VisitRequest) |
यह शिपमेंट के लिए, ड्रॉपऑफ़ के सभी संभावित विकल्पों की सूची है. ऑप्टिमाइज़र, आपकी समस्या को हल करने के लिए सबसे अच्छा विकल्प चुनता है. डॉगी डेकेयर की इस स्थिति के लिए, डॉगी डेकेयर की सुविधा की लोकेशन और उस टाइम विंडो की सूची बनाएं जिसके दौरान ड्राइवर को लंच के लिए वापस आना होगा. | |
label |
स्ट्रिंग | यह आपके अनुरोध में किसी खास शिपमेंट के लिए आइडेंटिफ़ायर है. जवाब को आसानी से पढ़ने के लिए, अपने अनुरोध में लेबल तय किए जा सकते हैं. डॉगी डेकेयर की इस स्थिति के लिए, "चिहुआहुआ", "बर्नीज़ माउंटेन डॉग" या कुत्ते के नाम जैसी जानकारी देने वाली स्ट्रिंग का इस्तेमाल करें, ताकि एपीआई का जवाब मिलने पर, आपके इनपुट से मेल खाने वाला समाधान मिल सके. | |
VisitRequest |
arrivalWaypoint[] |
ऑब्जेक्ट (Waypoint) |
यह रूट पर किसी खास जगह पर जाने की लोकेशन है. इसे अक्षांश और देशांतर निर्देशांकों, जगह के आईडी या हेडिंग का इस्तेमाल करके तय किया जा सकता है. डॉगी डेकेयर की इस स्थिति में, इसे मालिक की ओर से दी गई लोकेशन और डेकेयर सेंटर के पते पर सेट करें.pickupsdeliveries |
timeWindows[] |
ऑब्जेक्ट का कलेक्शन (TimeWindow) |
यह ऑब्जेक्ट का एक कलेक्शन है. इसमें पिक अप या डिलीवरी के लिए, समय की पाबंदियां तय की जाती हैं. इस स्थिति के लिए, इसका इस्तेमाल हर कुत्ते के लिए पिक अप विंडो और डेकेयर सेंटर पर कुत्तों को ड्रॉप करने के लिए स्वीकार्य विंडो तय करने के लिए करें. | |
Vehicle |
startWaypoint[] |
ऑब्जेक्ट (Waypoint) |
यह वाहन के रूट की शुरुआती लोकेशन है. इसे अक्षांश और देशांतर निर्देशांकों या जगह के आईडी से तय किया जाता है. यह पैरामीटर, ऑप्टिमाइज़र को बताता है कि वाहन को रूट कहां से शुरू करना है. अगर इस वेपॉइंट को तय नहीं किया जाता है, तो ऑप्टिमाइज़र, पिक अप या डिलीवरी में से किसी एक को शुरुआती लोकेशन के तौर पर चुनता है. डॉगी डेकेयर की इस स्थिति के लिए, ड्राइवर दिन की शुरुआत डेकेयर की सुविधा से करता है. इसलिए, मिशन डोलोरेस पार्क के निर्देशांकों का इस्तेमाल करें. |
endWaypoint[] |
ऑब्जेक्ट (Waypoint) |
यह वाहन के रूट की आखिरी डेस्टिनेशन है. इसे अक्षांश और देशांतर निर्देशांकों या जगह के आईडी से तय किया जाता है. यह पैरामीटर, ऑप्टिमाइज़र को बताता है कि वाहन को रूट कहां खत्म करना है. अगर इस वेपॉइंट को तय नहीं किया जाता है, तो ऑप्टिमाइज़र, पिक अप या डिलीवरी में से किसी एक को रूट के आखिर के तौर पर चुनता है. डॉगी डेकेयर की इस स्थिति के लिए, ड्राइवर को दिन का आखिर डेकेयर की सुविधा पर करना होगा. इसलिए, मिशन डोलोरेस पार्क के निर्देशांकों का इस्तेमाल करें. | |
costPerHour |
संख्या | यह हर घंटे वाहन के इस्तेमाल की लागत है. इससे कोई फ़र्क़ नहीं पड़ता कि वाहन चल रहा है या रुका हुआ है. डॉगी डेकेयर की इस स्थिति के लिए, इसका इस्तेमाल ड्राइवर की हर घंटे की मज़दूरी को मॉडल करने के लिए करें. | |
startTimeWindows[] |
ऑब्जेक्ट का कलेक्शन (TimeWindow) |
यह वह स्वीकार्य विंडो है जिसके दौरान ड्राइवर, सुबह के कुत्ते के पिक अप के लिए वैन चलाना शुरू कर सकता है. | |
endTimeWindows[] |
ऑब्जेक्ट का कलेक्शन (TimeWindow) |
यह वह स्वीकार्य विंडो है जिसके दौरान ड्राइवर, वैन चलाना खत्म कर सकता है और डॉगी डेकेयर सेंटर पर वापस आ सकता है. |