ट्रांज़िशन एट्रिब्यूट की मदद से, कारोबारी नियमों को मॉडल करना

इस गाइड में, ट्रांज़िशन एट्रिब्यूट के इस्तेमाल के संभावित तरीके बताए गए हैं. इसमें आपको दो उदाहरणों की मदद से, असल दुनिया की स्थितियों को मॉडल करने का तरीका बताया जाएगा: ऑप्टिमाइज़ किए गए रूट में वाहन पार्क करने का समय शामिल करना और यह पक्का करना कि हर रूट किसी खास जगह पर खत्म हो.

शुरू करने से पहले

ट्रांज़िशन एट्रिब्यूट का इस्तेमाल करके, ऑप्टिमाइज़ किए गए रूट में कुछ ट्रांज़िशन के लिए, मॉडल के हिसाब से लागत और देरी को जोड़ा जा सकता है. ये लागत और देरी, ट्रांज़िशन की अवधि और मैप डेटा से कैलकुलेट की गई लागत के ऊपर जोड़ी जाती हैं. यह कैलकुलेशन, इस्तेमाल किए गए वाहन के पैरामीटर के आधार पर किया जाता है.

ट्रांज़िशन, रास्ते का वह सेगमेंट होता है जो एक जगह को दूसरी जगह से जोड़ता है.

जगह से मतलब, वाहन के रास्ते में मौजूद इनमें से किसी भी पॉइंट से है:

  • रास्ते की शुरुआत की जगह.
  • वह जगह जहां से सामान पिक अप या डिलीवर किया जाता है.
  • रास्ते का आखिरी पॉइंट.

मॉडल के लिए सभी ट्रांज़िशन एट्रिब्यूट तय किए जाते हैं. इसके लिए, उन्हें ShipmentModel.transition_attributes सूची में जोड़ा जाता है. सूची का हर एलिमेंट, ट्रांज़िशन एट्रिब्यूट का एक सेट तय करता है. इसे ट्रांज़िशन की शुरुआत और खत्म होने की जगह पर मौजूद टैग का इस्तेमाल करके, रास्तों में मौजूद ट्रांज़िशन से मैच किया जाता है. ट्रांज़िशन एट्रिब्यूट के बारे में ज़्यादा जानने के लिए, TransitionAttributes के लिए रेफ़रंस दस्तावेज़ देखें.

असल दुनिया की स्थितियों के मॉडल बनाना

इस सेक्शन में, ट्रांज़िशन एट्रिब्यूट का इस्तेमाल करके, कारोबार की असल सीमाओं को लागू करने के दो छोटे उदाहरण दिए गए हैं.

पार्किंग के लिए समय बुक करना

इस स्थिति में, ड्राइवर को जगह A पर जाने से पहले, वाहन को पार्क करना होगा. जगह B पास में है. इसलिए, ड्राइवर दोनों जगहों पर जाने के लिए एक ही पार्किंग स्पॉट का इस्तेमाल कर सकता है. अगर ड्राइवर, A के बाद सीधे B पर जाता है, तो उसका समय बचता है. ऐसा इसलिए, क्योंकि उसे पार्किंग की जगह से गाड़ी निकालने और उसे फिर से पार्क करने की ज़रूरत नहीं पड़ती. रूट ऑप्टिमाइज़ेशन एपीआई में, ट्रांज़िशन एट्रिब्यूट का इस्तेमाल किया जा सकता है. इससे, वाहन को पार्क करने के लिए अतिरिक्त समय जोड़ा जा सकता है. हालांकि, ऐसा सिर्फ़ तब किया जाता है, जब ड्राइवर एक पार्किंग स्पॉट से दूसरे पार्किंग स्पॉट पर जाता है.

विज़िट की अवधि से अलग पार्किंग के समय को मॉडल करने पर, आपको ऐसे रास्ते मिलते हैं जहां एक ही पार्किंग का इस्तेमाल करने वाली विज़िट को ग्रुप किया जाता है. इससे विज़िट में कम समय लगता है. इससे मॉडल ज़्यादा सटीक बनता है. साथ ही, ऑप्टिमाइज़र उन रास्तों को प्राथमिकता देता है जहां विज़िट को ग्रुप किया गया है.

Route Optimization API के अनुरोध में ऐसा करने के लिए, यह तरीका अपनाएं:

  1. VisitRequest.duration का इस्तेमाल सिर्फ़ तब करें, जब आपको वेबसाइट पर विज़िट करना हो. उदाहरण के लिए, पैकेज डिलीवर करने और ग्राहक से हस्ताक्षर लेने के लिए.

  2. मॉडल में इस्तेमाल किए गए हर पार्किंग स्पॉट के लिए, एक नया टैग इस्तेमाल करें. यह टैग मॉडल में किसी और चीज़ के लिए इस्तेमाल नहीं किया जाना चाहिए. उदाहरण के लिए, PARKING_123.

  3. इस टैग को यहां जोड़ें:

    1. VisitRequest.tags इस पार्किंग स्पॉट का इस्तेमाल करने वाले सभी विज़िट अनुरोधों में.

    2. Vehicle.start_tags अगर वाहन इस पार्किंग की जगह से अपना रास्ता शुरू करता है.

    3. Vehicle.end_tags अगर वाहन इस पार्किंग स्पॉट से अपना रास्ता शुरू करता है या खत्म करता है.

  4. हर नए पार्किंग टैग के लिए, ShipmentModel.transition_attributes में एक एंट्री जोड़ें. इससे, किसी दूसरी पार्किंग की जगह से आने पर पार्किंग में देरी हो जाएगी. इसके लिए, यह तरीका अपनाएं:

    1. TransitionAttributes.excluded_src_tag और TransitionAttributes.dst_tag को PARKING_123 पर सेट करें.

    2. वाहन पार्क करने में लगने वाले समय के हिसाब से, TransitionAttributes.delay एट्रिब्यूट की वैल्यू सेट करें.

    उदाहरण के लिए, अगर किसी जगह का टैग PARKING_123 है और वाहन को पार्क करने में 150 सेकंड लगते हैं, तो ShipmentModel.transition_attributes में यह एंट्री जोड़ें:

    {
      "excluded_src_tag": "PARKING_123",
      "dst_tag": "PARKING_123",
      "delay": "150s"
    }
    

रास्ते के आखिर में साफ़-सफ़ाई करना ज़रूरी है

इस स्थिति में, रूट के आखिर में वाहन को साफ़ करना ज़रूरी है. इसके लिए, ये अतिरिक्त शर्तें लागू होती हैं:

  • वाहन को डिपो में वापस भेजने से पहले, उसे साफ़-सफ़ाई के लिए खास तौर पर बनाई गई जगह पर साफ़ किया जाता है. ऑप्टिमाइज़ किए गए रूट में, वाहन की लोकेशन और उसके पिकअप और डिलीवरी की लोकेशन के आधार पर, सबसे अच्छी क्लीनिंग फ़ैसिलिटी का इस्तेमाल किया जाता है.
  • सफ़ाई के बाद, वाहन को कोई और पिकअप या डिलीवरी नहीं करनी चाहिए.
  • वाहन को चार्जिंग स्टेशन तक ले जाने और उसे साफ़ करने में लगने वाला समय, ड्राइवर के काम के घंटों में गिना जाता है. साथ ही, यह समय रूट की तय की गई ज़्यादा से ज़्यादा अवधि के अंदर होना चाहिए.

इस ज़रूरत को पूरा करने के लिए, सिर्फ़ उन रास्तों को अनुमति दें जो खाली हैं या जिन पर आखिरी बार सफाई की सुविधा का इस्तेमाल किया गया था. Route Optimization API में, ऐसा करने के लिए आपको रास्ते के आखिरी वेपॉइंट पर जाने से रोकना होगा. हालांकि, सफ़ाई की सुविधा या रास्ते के शुरुआती पॉइंट से जाने की अनुमति दी जा सकती है:

  1. ऐसे दो नए टैग चुनें जिनका इस्तेमाल मॉडल में कहीं भी न किया गया हो. उदाहरण के लिए, CLEANED और ROUTE_END. पहले वाले का इस्तेमाल उन जगहों के लिए किया जाता है जहां वाहन साफ़ है या साफ़ हो जाता है. वहीं, दूसरे का इस्तेमाल रास्ते के आखिर में किया जाता है.
  2. हर वाहन के लिए, सिर्फ़ डिलीवरी वाला एक नया शिपमेंट जोड़ें. इससे, वाहन को साफ़ करने की सुविधा वाली जगह पर ले जाने की जानकारी मिलती है. इसके लिए, इन एट्रिब्यूट का इस्तेमाल करें:
    1. सफ़ाई की हर सुविधा की जगह की जानकारी को, शिपमेंट के डिलीवरी विज़िट के अनुरोध के तौर पर दिखाया जाना चाहिए.
    2. सफ़ाई की सुविधा वाले शिपमेंट के लिए, विज़िट के हर अनुरोध के VisitRequest.tags में CLEANED जोड़ें. इससे पता चलता है कि इस जगह से निकलने वाली गाड़ी साफ़ है. मॉडल में विज़िट के अन्य अनुरोधों के लिए, इस टैग का इस्तेमाल नहीं किया जाना चाहिए. इससे, वाहन को छोड़ते समय उसे "साफ़ नहीं" माना जाएगा.
    3. अगर वाहन का इस्तेमाल नहीं किया जा रहा है, तो ऑप्टिमाइज़र को इस शिपमेंट को छोड़ने की अनुमति दें. इसके लिए, penalty_cost को कम संख्या पर सेट करें.
  3. हर वाहन के लिए, CLEANED को Vehicle.start_tags में जोड़ें. इस कुकी का इस्तेमाल, वाहन को साफ़ के तौर पर मार्क करने के लिए किया जाता है. ऐसा तब किया जाता है, जब वाहन को पिकअप या डिलीवरी करनी हो. इससे यह माना जाता है कि वाहन को पिछले कामकाजी दिन के आखिर में साफ़ किया गया था. साथ ही, इससे वाहन को शुरुआती वेपॉइंट से सीधे आखिरी वेपॉइंट तक जाने की अनुमति मिलती है. भले ही, असल में ऐसे रास्ते न हों, लेकिन इस स्थिति की अनुमति देने से ऑप्टिमाइज़र को ऑप्टिमाइज़ किए गए रास्तों को ज़्यादा बेहतर तरीके से खोजने में मदद मिलती है.

  4. हर वाहन के लिए, ROUTE_END को Vehicle.end_tags में जोड़ें.

  5. ShipmentModel.transition_attributes में एक नई एंट्री जोड़ें. इससे वाहनों को उनके आखिरी वेपॉइंट पर पहुंचने से रोका जा सकता है, अगर वे साफ़ नहीं हैं. इसके लिए, इन प्रॉपर्टी का इस्तेमाल करें:

    1. TransitionAttributes.excluded_src_tag को CLEANED पर सेट करें.

    2. TransitionAttributes.dst_tag को ROUTE_END पर सेट करें.

    3. TransitionAttributes.delay को बड़ी वैल्यू पर सेट करें. अगर देरी का समय, ज़्यादा से ज़्यादा यात्रा में लगने वाले समय से ज़्यादा है, तो इसका मतलब है कि आपने ऑप्टिमाइज़र को किसी रूट में इस ट्रांज़िशन का इस्तेमाल करने से रोक दिया है.

    उदाहरण के लिए, जब मॉडल का टाइम स्केल एक कामकाजी दिन होता है, तब 24 घंटे (86400 सेकंड) की देरी का इस्तेमाल किया जा सकता है. इससे, सफ़ाई की सुविधा और रूट की शुरुआत के अलावा, किसी भी जगह से रूट के आखिर तक ट्रांज़िशन को रोका जा सकता है:

    {
      "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 सेट करके, सभी टैग मैच किए जा सकते हैं. इससे उन सभी जगहों से मेल खाएगा जिनमें यह टैग नहीं है. हालांकि, आपने जान-बूझकर ऐसा टैग चुना है जिसका इस्तेमाल किसी भी जगह पर नहीं किया जाता. इसलिए, ट्रांज़िशन एट्रिब्यूट सभी जगहों से मेल खाएंगे.

इस बारे में और पढ़ें