इस दस्तावेज़ में, असल दुनिया के इस्तेमाल के उदाहरण के तौर पर, 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को उस समय के लिए तय करें जब ड्राइवर को डेकेयर सेंटर पर वापस आना है. टाइम विंडो के बारे में ज़्यादा जानने के लिए, टाइम विंडो देखें.
वाहन तय करने के बारे में ज़्यादा जानने के लिए, वाहन देखें.
ग्लोबल टाइम विंडो सेट करें. ग्लोबल टाइम विंडो, वह समयावधि होती है जिसके दौरान वैन, पूरे दिन आपके डेकेयर के लिए पिकअप और ड्रॉपऑफ़ कर सकती है. इस उदाहरण के लिए, 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) |
यह वह समय है जब ड्राइवर, वैन चलाना खत्म करके, डॉगी डेकेयर सेंटर पर वापस आ सकता है. |