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