इस गाइड में, ट्रांज़िशन एट्रिब्यूट के इस्तेमाल के बारे में बताया गया है. इसमें आपको दो उदाहरणों की मदद से, असल दुनिया के सिनेारियो को मॉडल करने का तरीका सिखाया जाएगा: पहला, ऑप्टिमाइज़ किए गए रास्तों में वाहन पार्क करने के समय को शामिल करना. दूसरा, यह पक्का करना कि हर रास्ता किसी खास जगह पर जाकर खत्म हो.
शुरू करने से पहले
ऑप्टिमाइज़ किए गए रास्तों में, मॉडल के हिसाब से लागत और देरी की जानकारी जोड़ने के लिए, ट्रांज़िशन एट्रिब्यूट का इस्तेमाल किया जाता है. ऐसा कुछ ट्रांज़िशन के लिए किया जाता है. ये लागत और देरी, ट्रांज़िशन की अवधि और इस्तेमाल किए गए वाहन के पैरामीटर के आधार पर मैप के डेटा से कैलकुलेट की गई लागत के अलावा जोड़ी जाती हैं.
ट्रांज़िशन, रास्ते का वह हिस्सा होता है जो एक जगह को दूसरी जगह से जोड़ता है.
जगह से मतलब, वाहन के रास्ते में मौजूद इनमें से किसी भी पॉइंट से है:
- रास्ते का शुरुआती पॉइंट.
- वह जगह जहां से पिकअप या डिलीवरी की जाती है.
- रास्ते का आखिरी पॉइंट.
मॉडल के लिए सभी ट्रांज़िशन एट्रिब्यूट तय किए जाते हैं. इसके लिए, उन्हें ShipmentModel.transition_attributes सूची में जोड़ा जाता है.
सूची का हर एलिमेंट, ट्रांज़िशन एट्रिब्यूट का एक सेट तय करता है. इसे ट्रांज़िशन की शुरुआत और खत्म होने की जगह पर टैग का इस्तेमाल करके, रास्तों में मौजूद ट्रांज़िशन से मैच किया जाता है. ट्रांज़िशन एट्रिब्यूट के बारे में ज़्यादा जानने के लिए, TransitionAttributes का रेफ़रंस दस्तावेज़ देखें.
असल दुनिया से जुड़े उदाहरणों को मॉडल करना
इस सेक्शन में, ट्रांज़िशन एट्रिब्यूट का इस्तेमाल करके, कारोबार से जुड़ी असल समस्याओं को हल करने के दो छोटे उदाहरण दिए गए हैं.
पार्किंग के लिए समय बुक करना
इस स्थिति में, ड्राइवर को जगह A पर जाने से पहले वाहन पार्क करना होगा. जगह B पास में है. इसलिए, ड्राइवर दोनों जगहों पर जाने के लिए एक ही पार्किंग स्पॉट का इस्तेमाल कर सकता है. अगर ड्राइवर, A के बाद सीधे B पर जाता है, तो उसका समय बचता है. ऐसा इसलिए, क्योंकि उसे पार्किंग की जगह से बाहर निकलने और वाहन को फिर से पार्क करने की ज़रूरत नहीं पड़ती. रूट ऑप्टिमाइज़ेशन एपीआई में, ट्रांज़िशन एट्रिब्यूट का इस्तेमाल किया जा सकता है. इससे वाहन को पार्क करने के लिए अतिरिक्त समय जोड़ा जा सकता है. हालांकि, ऐसा सिर्फ़ तब किया जाता है, जब ड्राइवर एक पार्किंग की जगह से दूसरी जगह पर जाता है.
विज़िट की अवधि से अलग पार्किंग के समय को मॉडल करने पर, आपको ऐसे रास्ते मिलते हैं जहां एक ही पार्किंग का इस्तेमाल करने वाली विज़िट को ग्रुप किया जाता है. इससे विज़िट में कम समय लगता है. इससे मॉडल ज़्यादा सटीक बनता है. साथ ही, ऑप्टिमाइज़र उन रास्तों को प्राथमिकता देता है जहां विज़िट को ग्रुप किया जाता है.
रूट ऑप्टिमाइज़ेशन एपीआई के अनुरोध में ऐसा करने के लिए, यह तरीका अपनाएं:
VisitRequest.durationका इस्तेमाल सिर्फ़ तब तक करें, जब तक विज़िट पूरी न हो जाए. उदाहरण के लिए, पैकेज देने और खरीदार से हस्ताक्षर लेने के लिए.मॉडल में इस्तेमाल किए गए हर पार्किंग स्पॉट के लिए, एक नया टैग इस्तेमाल करें. यह टैग, मॉडल में किसी और चीज़ के लिए इस्तेमाल नहीं किया जाना चाहिए. उदाहरण के लिए,
PARKING_123.इस टैग को यहां जोड़ें:
VisitRequest.tagsइस पार्किंग की जगह का इस्तेमाल करने वाले सभी विज़िट अनुरोधों में.Vehicle.start_tagsअगर वाहन इस पार्किंग स्पॉट से अपना रास्ता शुरू करता है.Vehicle.end_tagsअगर वाहन इस पार्किंग की जगह से अपना रूट शुरू करता है और यहीं पर खत्म करता है.
हर नए पार्किंग टैग के लिए,
ShipmentModel.transition_attributesमें एक एंट्री जोड़ें. इससे, किसी दूसरी पार्किंग की जगह से आने पर पार्किंग में देरी हो जाएगी. इसके लिए, यह तरीका अपनाएं:TransitionAttributes.excluded_src_tagऔरTransitionAttributes.dst_tagकोPARKING_123पर सेट करें.वाहन पार्क करने के लिए ज़रूरी समय के हिसाब से,
TransitionAttributes.delayसेट करें.
उदाहरण के लिए, अगर किसी जगह का टैग
PARKING_123है और वाहन को पार्क करने में 150 सेकंड लगते हैं, तोShipmentModel.transition_attributesमें यह एंट्री जोड़ें:{ "excluded_src_tag": "PARKING_123", "dst_tag": "PARKING_123", "delay": "150s" }
रास्ते के आखिर में साफ़-सफ़ाई करना ज़रूरी है
इस मामले में, रूट के आखिर में वाहन को साफ़ करना होगा. साथ ही, इन अतिरिक्त शर्तों का पालन करना होगा:
- बस को डिपो में वापस भेजने से पहले, उसे साफ़ करने की खास सुविधा वाले सेंटर में साफ़ किया जाता है. ऑप्टिमाइज़ किए गए रास्ते में, सबसे अच्छी क्लीनिंग फ़ैसिलिटी का इस्तेमाल किया जाता है. यह फ़ैसिलिटी, वाहन की जगह और वाहन से पिकअप और डिलीवरी की जगहों के हिसाब से तय की जाती है.
- सफ़ाई के बाद, वाहन को कोई और पिकअप या डिलीवरी नहीं करनी चाहिए.
- वाहन को वहां तक ले जाने और साफ़ करने में लगने वाला समय, ड्राइवर के काम के घंटों में गिना जाता है. साथ ही, यह समय रूट की ज़्यादा से ज़्यादा अवधि के अंदर होना चाहिए.
इस ज़रूरत को पूरा करने के लिए, सिर्फ़ उन रास्तों को अनुमति दें जो खाली हैं या जिनकी आखिरी यात्रा किसी सफ़ाई की सुविधा वाली जगह पर हुई है. Route Optimization API में, ऐसा करने के लिए, रूट के आखिरी वेपॉइंट पर ट्रांज़िशन को प्रतिबंधित करें. ऐसा किसी भी जगह से किया जा सकता है. हालांकि, ऐसा सिर्फ़ सफ़ाई की सुविधा या रूट के शुरुआती पॉइंट से किया जा सकता है:
- ऐसे दो नए टैग चुनें जिनका इस्तेमाल मॉडल में कहीं भी न किया गया हो. उदाहरण के लिए,
CLEANEDऔरROUTE_END. पहला विकल्प उन जगहों के लिए है जहां वाहन को साफ़ किया जाता है या साफ़ किया जाएगा. वहीं, दूसरा विकल्प रूट के आखिर के लिए है. - हर वाहन के लिए, सिर्फ़ डिलीवरी के लिए शिपमेंट की एक नई जानकारी जोड़ें. इससे, क्लीनिंग फ़ैसिलिटी पर जाने की जानकारी मिलती है. इसके लिए, इन एट्रिब्यूट का इस्तेमाल करें:
- सफ़ाई की हर सुविधा की जगह की जानकारी को, इस शिपमेंट के लिए डिलीवरी विज़िट के अनुरोध के तौर पर दिखाया जाना चाहिए.
- सफ़ाई की सुविधा देने वाली कंपनी के हर विज़िट अनुरोध के
VisitRequest.tagsमेंCLEANEDजोड़ें. इससे पता चलता है कि इस जगह से निकलने वाला वाहन साफ़ है. मॉडल में, विज़िट के अन्य अनुरोधों के लिए इस टैग का इस्तेमाल नहीं किया जाना चाहिए, ताकि वाहन को "साफ़ नहीं है" के तौर पर मार्क किया जा सके. - अगर वाहन का इस्तेमाल नहीं किया जा रहा है, तो ऑप्टिमाइज़र को इस शिपमेंट को छोड़ने की अनुमति दें. इसके लिए,
penalty_costको कम संख्या पर सेट करें.
हर वाहन के लिए,
Vehicle.start_tagsमेंCLEANEDजोड़ें. इसका इस्तेमाल, वाहन को साफ़ के तौर पर मार्क करने के लिए किया जाता है. ऐसा तब किया जाता है, जब वाहन को कोई पिकअप या डिलीवरी करनी हो. यह मान लिया जाता है कि वाहन को पिछले कामकाजी दिन के आखिर में साफ़ किया गया था. इससे वाहन को शुरुआती वेपॉइंट से सीधे आखिरी वेपॉइंट तक जाने की अनुमति मिलती है. भले ही, इस तरह के रास्ते असल में न हों, लेकिन इस तरह के रास्तों की अनुमति देने से, ऑप्टिमाइज़र को ऑप्टिमाइज़ किए गए रास्तों को ज़्यादा असरदार तरीके से खोजने में मदद मिलती है.हर वाहन के लिए,
Vehicle.end_tagsमेंROUTE_ENDजोड़ें.ShipmentModel.transition_attributesमें एक नई एंट्री जोड़ें. इससे वाहनों को, वाहन के आखिरी वेपॉइंट पर पहुंचने से रोका जा सकेगा. ऐसा तब होगा, जब वे साफ़ नहीं होंगे. इसके लिए, इन प्रॉपर्टी का इस्तेमाल करें:TransitionAttributes.excluded_src_tagकोCLEANEDपर सेट करें.TransitionAttributes.dst_tagकोROUTE_ENDपर सेट करें.TransitionAttributes.delayको बड़ी वैल्यू पर सेट करें. अगर आपने देरी का समय, रास्ते की ज़्यादा से ज़्यादा अवधि से ज़्यादा सेट किया है, तो इसका मतलब है कि आपने ऑप्टिमाइज़र को किसी रास्ते में इस ट्रांज़िशन का इस्तेमाल करने से रोक दिया है.
उदाहरण के लिए, जब मॉडल का टाइम स्केल एक कामकाजी दिन हो, तब 24 घंटे (86,400 सेकंड) की देरी का इस्तेमाल किया जा सकता है. इससे, रूट के आखिर में ट्रांज़िशन को रोका जा सकता है. हालांकि, ऐसा सिर्फ़ सफ़ाई की सुविधा और रूट की शुरुआत को छोड़कर किसी भी जगह से किया जा सकता है:
{ "excluded_src_tag": "CLEANED", "dst_tag": "ROUTE_END", "delay": "86400s" }
डिलीवरी में होने वाली देरी और डिलीवरी के लिए खरीदार से लिए जाने वाले शुल्क के बीच अंतर कैसे करें
डेटा अपडेट होने में लगने वाला समय और लागत, लागू किए गए कारोबार के लॉजिक और शर्तों पर निर्भर करती है. सेटिंग
TransitionAttributes.delay
का इस्तेमाल, मुश्किल शर्तों को लागू करने या समय के हिसाब से ट्रेड-ऑफ़ दिखाने के लिए सबसे सही है.
TransitionAttributes.cost
का इस्तेमाल तब बेहतर होता है, जब आपको किसी अतिरिक्त लागत के तौर पर, नरम प्राथमिकताओं या ट्रेड-ऑफ़ को लागू करना हो. समय और लागत, दोनों के मामले में देरी और लागत को एक साथ जोड़ा जा सकता है.
वाहन की सफ़ाई के उदाहरण में, delay का इस्तेमाल बहुत ज़्यादा समय के लिए किया गया है. ऐसा इसलिए, क्योंकि रूट के आखिर में वाहन की सफ़ाई करना ज़रूरी है. साथ ही, ज़्यादा समय के लिए delay का इस्तेमाल करने से, ऑप्टिमाइज़र इस ज़रूरी शर्त को अनदेखा नहीं कर पाता. अगर आपने सिर्फ़ लागत सेट की है, तो ऑप्टिमाइज़र, वाहन की सफाई को छोड़ सकता है. ऐसा तब होता है, जब उसे लागत की भरपाई करने का कोई दूसरा तरीका मिल जाता है. उदाहरण के लिए, वाहन की सफाई न करके "बचाए गए" समय में ज़्यादा शिपमेंट डिलीवर करना.
पार्किंग के उदाहरण में, देरी के लिए कम समय का इस्तेमाल किया गया है. यह समय, वाहन को पार्क करने के लिए ज़रूरी अतिरिक्त समय के बराबर है. अगर ड्राइवर किसी पेड पार्किंग में रुकता है, तो देरी की जानकारी के साथ किराये की जानकारी भी दी जा सकती है.
ऐसा ट्रांज़िशन एट्रिब्यूट जोड़ने का तरीका जो विज़िट के सभी अनुरोधों से मेल खाता हो
ऊपर दिए गए उदाहरणों में, ट्रांज़िशन एट्रिब्यूट का इस्तेमाल किया गया है. ये एट्रिब्यूट, उन जगहों से मेल खाते हैं जिनमें कोई टैग मौजूद है या उन जगहों से मेल खाते हैं जिनमें कोई टैग मौजूद नहीं है. हालांकि, अगर आपको ऐसे ट्रांज़िशन एट्रिब्यूट जोड़ने हैं जो सभी ट्रांज़िशन पर लागू होते हैं, तो क्या होगा?
टैग को हटाया नहीं जा सकता, क्योंकि हर TransitionAttributes मैसेज में TransitionAttributes.src_tag और TransitionAttributes.excluded_src_tag में से कोई एक टैग होना चाहिए. साथ ही, TransitionAttributes.dst_tag और TransitionAttributes.excluded_dst_tag में से कोई एक टैग होना चाहिए.
हालांकि, मॉडल में कहीं भी इस्तेमाल न किए गए टैग के लिए, TransitionAttributes.excluded_src_tag या TransitionAttributes.excluded_dst_tag सेट करके, सभी टैग मैच किए जा सकते हैं. इससे उन सभी जगहों से मिलान किया जाएगा जिनमें यह टैग नहीं है. हालांकि, आपने जान-बूझकर ऐसा टैग चुना है जिसका इस्तेमाल किसी भी जगह के लिए नहीं किया जाता है. इसलिए, ट्रांज़िशन एट्रिब्यूट का मिलान सभी जगहों से होगा.