रास्ते के ऑप्टिमाइज़ेशन के लिए अपना पहला अनुरोध करें

यूरोपियन इकनॉमिक एरिया (ईईए) के डेवलपर

इस दस्तावेज़ में, 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 के तौर पर एनकोड किया गया है.

अनुरोध वाला मैसेज बनाने के लिए, यह तरीका अपनाएं:

  1. अनुरोध के बुनियादी स्ट्रक्चर से शुरुआत करें. यह स्ट्रक्चर इस तरह है:

    {
      "timeout": ...,
      "model": {
        "shipments": [...],
        "vehicles": [...],
        "globalStartTime": "...",
        "globalEndTime": "..."
      }
    }
    

    स्ट्रक्चर के बारे में ज़्यादा जानने के लिए, बुनियादी स्ट्रक्चर (ShipmentModel, Shipment, और Vehicle) के लिए, मुख्य कॉन्सेप्ट वाली गाइड देखें.

  2. शिपमेंट तय करें. shipments फ़ील्ड में, हर उस कुत्ते के लिए Shipment मैसेज जोड़ें जिसे सुबह पिकअप और ड्रॉपऑफ़ करना है. यहां, हर कुत्ते के मालिक की पसंदीदा पिकअप की जगह और समय, और कुत्तों को ड्रॉप करने के लिए डेकेयर सेंटर की जगह और समय तय किया जाता है.

    1. हर कुत्ते के लिए, पिकअप के लिए VisitRequest और डिलीवरी के लिए एक और बनाएं. इस स्थिति में, इसे डेकेयर ड्रॉपऑफ़ कहा जाता है.

      • पिकअप के लिए, arrivalWaypoint को कुत्ते के पिकअप की जगह (बर्नीज़ माउंटेन डॉग के लिए कोइट टॉवर या चिहुआहुआ के लिए साउथ सनसेट प्लेग्राउंड पार्क) और timeWindows को मालिक के अनुरोध किए गए पिकअप के समय (सुबह 7:30 बजे से सुबह 9:30 बजे) पर सेट करें.

      • डिलीवरी के लिए, arrivalWaypoint को डेकेयर सेंटर और timeWindows को ड्रॉपऑफ़ के लिए ज़रूरी समय (सुबह 9:30 बजे से सुबह 11:30 बजे) पर सेट करें.

      टाइम विंडो के बारे में ज़्यादा जानने के लिए, टाइम विंडो देखें.

    2. आप हर शिपमेंट के लिए आइडेंटिफ़ायर जोड़ने के लिए label फ़ील्ड का इस्तेमाल कर सकते हैं, जैसे "बर्नीज़ माउंटेन डॉग" और "चिहुआहुआ". इससे, आपको जवाब में शिपमेंट की पहचान करने में मदद मिल सकती है.

    शिपमेंट तय करने के बारे में ज़्यादा जानने के लिए, शिपमेंट देखें.

  3. वाहन तय करें. vehicles फ़ील्ड में, अपनी एक वैन के लिए Vehicle मैसेज जोड़ें. इसमें डेकेयर सेंटर को शुरुआती और आखिरी पॉइंट के तौर पर, ड्राइवर की मज़दूरी की लागत, और वैन के चलने के घंटे शामिल करें.

    1. वैन के लिए startWaypoint और endWaypoint को दिन की शुरुआत और खत्म होने की जगहों पर सेट करें. यह मिशन डोलोरेस पार्क के पास मौजूद डेकेयर सेंटर है.

    2. अपने कारोबार की लागत को कम करने के लिए, आपको लागत की सीमाएं तय करनी होंगी. लागत के पैरामीटर costPerHour को 27 पर सेट करें. यह वह रकम है जो आप कुत्तों के लिए डेकेयर की वैन चलाने के लिए ड्राइवर को देते हैं. लागत के पैरामीटर के बारे में ज़्यादा जानने के लिए, लागत का मॉडल देखें.

    3. यह पक्का करने के लिए कि ऑप्टिमाइज़र, वैन के चलने के घंटों के अंदर ही रास्ता बनाए, startTimeWindows को उस स्वीकार्य रेंज पर सेट करें जिसमें ड्राइवर वैन चलाना शुरू कर सकता है. साथ ही, endTimeWindows को उस स्वीकार्य रेंज पर सेट करें जिसमें ड्राइवर को डेकेयर सेंटर पर वापस आना होगा. टाइम विंडो के बारे में ज़्यादा जानने के लिए, टाइम विंडो देखें.

    वाहन तय करने के बारे में ज़्यादा जानने के लिए, वाहन देखें.

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

Parent पैरामीटर प्रॉपर्टी का टाइप ब्यौरा
OptimizeToursRequest model ऑब्जेक्ट (ShipmentModel) यह आपके अनुरोध का मुख्य हिस्सा है. यह एक ऐसा ऑब्जेक्ट है जिसमें अपनी पूरी समस्या के बारे में बताया जाता है. इसमें उन सभी कुत्तों की जानकारी शामिल होती है जिन्हें पिकअप और ड्रॉपऑफ़ करना है (shipments). साथ ही, इसमें आपके बेड़े में मौजूद वैन (vehicles) की जानकारी भी शामिल होती है. इसे उस समस्या के पूरे ब्लूप्रिंट के तौर पर समझें जिसे ऑप्टिमाइज़ करना है.
timeout कुल समय यह पैरामीटर, उस ज़्यादा से ज़्यादा समय के बारे में बताता है जिसके दौरान सर्वर, जवाब देने से पहले किसी अनुरोध पर काम करता है. इंतज़ार का समय कम करने के लिए, इस पैरामीटर का इस्तेमाल करें. छोटे और तुरंत जवाब देने वाले अनुरोधों के लिए, इस वैल्यू को दो सेकंड पर सेट करें. जैसे, कुत्तों के लिए डेकेयर की इस स्थिति में.
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) यह वह स्वीकार्य विंडो है जिसमें ड्राइवर, वैन चलाना खत्म कर सकता है और कुत्तों के लिए डेकेयर सेंटर पर वापस आ सकता है.

अगला

जवाब को समझना