इस दस्तावेज़ में, असल दुनिया के इस्तेमाल के उदाहरण के ज़रिए, 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पर सेट करें. इसके बाद, मालिक के अनुरोध किए गए पिकअप के समय (सुबह 7:30 बजे से 9:30 बजे तक) कोtimeWindowsपर सेट करें.डिलीवरी के लिए, डेकेयर सेंटर के लिए
arrivalWaypointऔर ड्रॉपऑफ़ के लिएtimeWindowsको सेट करें. ड्रॉपऑफ़ का समय सुबह 9:30 बजे से 11:30 बजे के बीच होना चाहिए.
टाइम विंडो के बारे में ज़्यादा जानने के लिए, टाइम विंडो लेख पढ़ें.
labelफ़ील्ड का इस्तेमाल करके, हर शिपमेंट के लिए एक आइडेंटिफ़ायर जोड़ा जा सकता है. जैसे, "बर्नीज़ माउंटेन डॉग" और "चिहुआहुआ". इससे आपको जवाब में मौजूद शिपमेंट की पहचान करने में मदद मिल सकती है.
शिपमेंट तय करने के बारे में ज़्यादा जानकारी के लिए, शिपमेंट देखें.
वाहनों के बारे में जानकारी देना.
vehiclesफ़ील्ड में, अपनी एक वैन के लिएVehicleमैसेज जोड़ें. इसमें डेकेयर सेंटर को शुरुआती और आखिरी पॉइंट के तौर पर शामिल करें. साथ ही, ड्राइवर के वेतन और वैन के चलने के समय की जानकारी दें.वैन के लिए, दिन की शुरुआत और खत्म होने की जगह के तौर पर
startWaypointऔरendWaypointसेट करें. यह जगह, मिशन डोलोरेस पार्क के पास मौजूद डेकेयर सेंटर है.अपने बिज़नेस के ऑपरेशंस की लागत कम करने के लिए, आपको अपने बिज़नेस की लागत की सीमाएं तय करनी होंगी. लागत पैरामीटर
costPerHourको 27 पर सेट करें. यह वह रकम है जो आपने ड्राइवर को डॉगी डेकेयर वैन चलाने के लिए दी है. लागत के पैरामीटर के बारे में ज़्यादा जानने के लिए, लागत मॉडल देखें.यह पक्का करने के लिए कि ऑप्टिमाइज़र, वैन के चलने के समय के हिसाब से रूट बनाए,
startTimeWindowsको उस मान्य सीमा के हिसाब से तय करें जिसमें ड्राइवर वैन चलाना शुरू कर सकता है. साथ ही,endTimeWindowsको उस मान्य सीमा के हिसाब से तय करें जिसमें ड्राइवर को डेकेयर सेंटर वापस लौटना होता है. टाइम विंडो के बारे में ज़्यादा जानने के लिए, टाइम विंडो लेख पढ़ें.
वाहनों को तय करने के बारे में ज़्यादा जानकारी के लिए, वाहन देखें.
ग्लोबल टाइम विंडो सेट करें. ग्लोबल टाइम विंडो से पता चलता है कि वैन, पूरे दिन में किस समय आपके डेकेयर से बच्चों को पिकअप और ड्रॉप ऑफ़ कर सकती है. इस उदाहरण के लिए, 13 फ़रवरी, 2024 के लिए
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) |
यह रूट पर किसी खास जगह की यात्रा की जानकारी है. इसे अक्षांश और देशांतर निर्देशांक, जगह का आईडी या हेडिंग का इस्तेमाल करके तय किया जा सकता है. पालतू जानवरों के देखभाल केंद्र के इस उदाहरण में, pickups के लिए इसे मालिक की दी गई जगह की जानकारी पर सेट करें. साथ ही, deliveries के लिए इसे देखभाल केंद्र के पते पर सेट करें. |
timeWindows[] |
ऑब्जेक्ट का कलेक्शन (TimeWindow) |
यह ऑब्जेक्ट का एक ऐसा ऐरे है जो पिकअप या डिलीवरी के लिए समयसीमा तय करता है. इस उदाहरण के लिए, इस फ़ील्ड का इस्तेमाल करके हर कुत्ते के लिए पिकअप विंडो और डेकेयर सेंटर में कुत्तों को छोड़ने के लिए स्वीकार्य विंडो तय करें. | |
Vehicle |
startWaypoint[] |
ऑब्जेक्ट (Waypoint) |
यह वाहन के रास्ते की शुरुआती जगह है. इसे अक्षांश और देशांतर निर्देशांक या जगह के आईडी से तय किया जाता है. यह पैरामीटर, ऑप्टिमाइज़र को बताता है कि वाहन को रूट कहां से शुरू करना चाहिए. अगर आपने इस वेपॉइंट को तय नहीं किया है, तो ऑप्टिमाइज़र, पिकअप या डिलीवरी की किसी एक जगह को शुरुआती जगह के तौर पर चुनता है. इस डॉगी डेकेयर के उदाहरण में, ड्राइवर दिन की शुरुआत डेकेयर से करता है. इसलिए, मिशन डेलोरस पार्क के निर्देशांकों का इस्तेमाल करें. |
endWaypoint[] |
ऑब्जेक्ट (Waypoint) |
यह वाहन के रूट की आखिरी मंज़िल होती है. इसे अक्षांश और देशांतर निर्देशांकों या जगह के आईडी के साथ तय किया जाता है. इस पैरामीटर से ऑप्टिमाइज़र को पता चलता है कि वाहन को अपना रास्ता कहां खत्म करना है. अगर आपने इस वेपॉइंट को तय नहीं किया है, तो ऑप्टिमाइज़र, पिकअप या डिलीवरी में से किसी एक को रास्ते के आखिर में मौजूद जगह के तौर पर चुनता है. कुत्ते की डेकेयर सेवा के इस उदाहरण में, ड्राइवर को दिन के आखिर में डेकेयर फ़ैसिलिटी पर पहुंचना है. इसलिए, मिशन डेलोरिस पार्क के निर्देशांकों का इस्तेमाल करें. | |
costPerHour |
संख्या | यह वाहन के इस्तेमाल का हर घंटे का शुल्क है. इससे कोई फ़र्क़ नहीं पड़ता कि वाहन चल रहा है या रुका हुआ है. कुत्ते की देखभाल करने वाले इस डेकेयर के लिए, ड्राइवर की हर घंटे की मजदूरी का मॉडल बनाने के लिए इसका इस्तेमाल करें. | |
startTimeWindows[] |
ऑब्जेक्ट का कलेक्शन (TimeWindow) |
यह वह समयसीमा है जिसमें ड्राइवर, सुबह कुत्तों को पिकअप करने के लिए वैन चलाना शुरू कर सकता है. | |
endTimeWindows[] |
ऑब्जेक्ट का कलेक्शन (TimeWindow) |
यह वह समय अवधि है जिसमें ड्राइवर को वैन चलाकर वापस डॉगी डेकेयर सेंटर पहुंचना होता है. |