इस गाइड में, ट्रांज़िशन एट्रिब्यूट के इस्तेमाल के संभावित तरीके बताए गए हैं. इसमें आपको दो उदाहरणों की मदद से, असल दुनिया के उदाहरणों को मॉडल करने का तरीका सिखाया जाएगा: ऑप्टिमाइज़ किए गए रास्तों में गाड़ी पार्क करने का समय शामिल करना और यह पक्का करना कि हर रास्ता किसी खास जगह पर जाकर खत्म हो.
शुरू करने से पहले
ऑप्टिमाइज़ किए गए रास्तों में, मॉडल के हिसाब से लागत और देरी की जानकारी जोड़ने के लिए, ट्रांज़िशन एट्रिब्यूट का इस्तेमाल किया जाता है. ऐसा कुछ ट्रांज़िशन के लिए किया जाता है. ये लागत और देरी, ट्रांज़िशन की अवधि और इस्तेमाल किए गए वाहन के पैरामीटर के आधार पर मैप के डेटा से कैलकुलेट की गई लागत के अलावा जोड़ी जाती हैं.
ट्रांज़िशन, रास्ते का वह हिस्सा होता है जो एक जगह को दूसरी जगह से जोड़ता है.
जगह से मतलब, वाहन के रास्ते में मौजूद इनमें से किसी भी पॉइंट से है:
- रास्ते का शुरुआती पॉइंट.
- वह जगह जहां से पिकअप या डिलीवरी की जाती है.
- रास्ते का आखिरी पॉइंट.
मॉडल के लिए सभी ट्रांज़िशन एट्रिब्यूट तय किए जाते हैं. इसके लिए, उन्हें ShipmentModel.transition_attributes सूची में जोड़ा जाता है.
सूची का हर एलिमेंट, ट्रांज़िशन एट्रिब्यूट का एक सेट तय करता है. इसे ट्रांज़िशन की शुरुआत और खत्म होने की जगह पर टैग का इस्तेमाल करके, रास्तों में मौजूद ट्रांज़िशन से मैच किया जाता है. ट्रांज़िशन एट्रिब्यूट के बारे में ज़्यादा जानने के लिए, TransitionAttributes का रेफ़रंस दस्तावेज़ देखें.
असल दुनिया के उदाहरणों को मॉडल करना
इस सेक्शन में, ट्रांज़िशन एट्रिब्यूट का इस्तेमाल करके, कारोबार से जुड़ी असल दुनिया की पाबंदियों को लागू करने के दो छोटे उदाहरण दिए गए हैं.
पार्किंग के लिए समय बुक करना
इस स्थिति में, ड्राइवर को जगह A पर जाने से पहले गाड़ी पार्क करनी होगी. जगह B पास में है. इसलिए, ड्राइवर दोनों जगहों पर जाने के लिए एक ही पार्किंग स्पॉट का इस्तेमाल कर सकता है. अगर ड्राइवर, A के बाद सीधे B पर जाता है, तो उसका समय बचता है. ऐसा इसलिए, क्योंकि उसे पार्किंग की जगह से बाहर निकलने और वाहन को फिर से पार्क करने की ज़रूरत नहीं पड़ती. रूट ऑप्टिमाइज़ेशन एपीआई में, ट्रांज़िशन एट्रिब्यूट का इस्तेमाल किया जा सकता है. इससे वाहन को पार्क करने के लिए अतिरिक्त समय सिर्फ़ तब जोड़ा जाता है, जब ड्राइवर एक पार्किंग की जगह से दूसरी जगह पर जाता है.
विज़िट की अवधि से अलग पार्किंग के समय को मॉडल करने पर, आपको ऐसे रास्ते मिलते हैं जहां एक ही पार्किंग का इस्तेमाल करने वाली विज़िट को ग्रुप किया जाता है. इससे विज़िट में कम समय लगता है. इससे मॉडल ज़्यादा सटीक बनता है. साथ ही, ऑप्टिमाइज़र उन रास्तों को प्राथमिकता देता है जहां विज़िट को ग्रुप किया जाता है.
Route Optimization API के अनुरोध में ऐसा करने के लिए, यह तरीका अपनाएं:
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 घंटे (86400 सेकंड) की देरी का इस्तेमाल किया जा सकता है. इससे, रूट के आखिर में ट्रांज़िशन को रोका जा सकता है. हालांकि, ऐसा सिर्फ़ सफ़ाई की सुविधा और रूट की शुरुआत से किया जा सकता है:
{ "excluded_src_tag": "CLEANED", "dst_tag": "ROUTE_END", "delay": "86400s" }
डिलीवरी में लगने वाले समय और उसके शुल्क के बीच फ़ैसला कैसे करें
डेटा अपडेट होने में लगने वाला समय और लागत, लागू किए गए कारोबारी नियमों और शर्तों पर निर्भर करती है. सेटिंग
TransitionAttributes.delay
का इस्तेमाल, मुश्किल शर्तों को लागू करने या समय के हिसाब से ट्रेड-ऑफ़ दिखाने के लिए सबसे सही है.
TransitionAttributes.cost
का इस्तेमाल तब बेहतर होता है, जब आपको किसी अतिरिक्त लागत के तौर पर, नरम प्राथमिकताओं या ट्रेड-ऑफ़ को लागू करना हो. समय और लागत, दोनों के मामले में देरी और लागत को एक साथ जोड़ा जा सकता है.
वाहन की सफ़ाई के उदाहरण में, देरी काफ़ी ज़्यादा है. ऐसा इसलिए, क्योंकि रूट के आखिर में वाहन की सफ़ाई करना ज़रूरी है. साथ ही, ज़्यादा देरी होने की वजह से ऑप्टिमाइज़र इस ज़रूरी शर्त को अनदेखा नहीं कर सकता. अगर आपने सिर्फ़ लागत सेट की है, तो ऑप्टिमाइज़र, वाहन को साफ़ न करने का विकल्प चुन सकता है. ऐसा तब होता है, जब उसे लागत की भरपाई करने का कोई दूसरा तरीका मिल जाता है. उदाहरण के लिए, वाहन को साफ़ न करने से "बचे" समय में ज़्यादा शिपमेंट डिलीवर करके.
पार्किंग के उदाहरण में, देरी के लिए कम समय का इस्तेमाल किया गया है. यह समय, वाहन को पार्क करने के लिए ज़रूरी अतिरिक्त समय के बराबर है. अगर ड्राइवर किसी पार्किंग के लिए शुल्क लेता है, तो costs एट्रिब्यूट का इस्तेमाल, देरी की जानकारी देने वाले एट्रिब्यूट के साथ किया जा सकता है.
ऐसा ट्रांज़िशन एट्रिब्यूट जोड़ने का तरीका जो विज़िट के सभी अनुरोधों से मेल खाता हो
ऊपर दिए गए उदाहरणों में, ट्रांज़िशन एट्रिब्यूट का इस्तेमाल किया गया है. ये एट्रिब्यूट, उन जगहों से मेल खाते हैं जिनमें कोई टैग मौजूद है या उन जगहों से मेल खाते हैं जिनमें टैग मौजूद नहीं है. हालांकि, अगर आपको ऐसे ट्रांज़िशन एट्रिब्यूट जोड़ने हैं जो सभी ट्रांज़िशन पर लागू होते हैं, तो क्या होगा?
टैग को हटाया नहीं जा सकता, क्योंकि हर TransitionAttributes मैसेज में TransitionAttributes.src_tag और TransitionAttributes.excluded_src_tag में से कोई एक टैग होना चाहिए. साथ ही, TransitionAttributes.dst_tag और TransitionAttributes.excluded_dst_tag में से कोई एक टैग होना चाहिए.
हालांकि, मॉडल में कहीं भी इस्तेमाल न किए गए टैग को TransitionAttributes.excluded_src_tag या TransitionAttributes.excluded_dst_tag पर सेट करके, सभी टैग मैच किए जा सकते हैं. इससे उन सभी जगहों से मिलान किया जाएगा जिनमें यह टैग नहीं है. हालांकि, आपने जान-बूझकर ऐसा टैग चुना है जिसका इस्तेमाल किसी भी जगह के लिए नहीं किया जाता है. इसलिए, ट्रांज़िशन एट्रिब्यूट का मिलान सभी जगहों से किया जाएगा.