इस उदाहरण में, ट्रांज़िशन एट्रिब्यूट का इस्तेमाल करके, उन रास्तों को प्राथमिकता देने का तरीका बताया गया है जहां एक ही समयावधि में, आस-पास के पिकअप और डिलीवरी एक ही वाहन से की जाती हैं. ट्रांज़िशन एट्रिब्यूट के बारे में ज़्यादा जानने के लिए, ट्रांज़िशन एट्रिब्यूट की मदद से कारोबार का लॉजिक मॉडल करना लेख पढ़ें.
इस उदाहरण में:
- शिपमेंट A, B, और C की डिलीवरी एक ही सड़क पर एक-दूसरे के करीब हैं.
- आने वाले समय में, अन्य डिलीवरी भी उपलब्ध होंगी.
- डिलीवरी में लगने वाले समय की जानकारी नहीं दी गई है.
- विज़िट के शेड्यूल के बावजूद, वाहन को इस सड़क पर दो बार जाना होगा: सुबह डिपो से और शाम को वापस आते समय.
- यात्रा की कुल दूरी और रास्ते में लगने वाला समय हमेशा एक जैसा रहता है. इससे कोई फ़र्क़ नहीं पड़ता कि A, B, और C को कब पूरा किया जाता है.
इस स्थिति में, और सिर्फ़ हर घंटे की लागत और हर किलोमीटर की लागत का इस्तेमाल करने वाले अनुरोध के लिए, ऑप्टिमाइज़ किए गए रास्ते में सुबह A और B को और शाम को C को मैनेज किया जा सकता है. साथ ही, समाधान की लागत वही होगी जो तीनों को एक ही समय पर मैनेज करने पर होगी.
थ्रेशोल्ड के साथ हर किलोमीटर की लागत
आस-पास की विज़िट को ग्रुप में बांटने के लिए, आपको पहले थ्रेशोल्ड की दूरी चुननी होगी. यह, दो ऐसी विज़िट के बीच की ज़्यादा से ज़्यादा दूरी है जिन्हें आपने आस-पास के तौर पर सेट किया है. इस उदाहरण में, 100 मीटर के थ्रेशोल्ड का इस्तेमाल किया गया है. यह थ्रेशोल्ड, शहरी इलाके के एक ब्लॉक के बराबर होता है. अपने कारोबार की ज़रूरतों और ड्राइवर की प्राथमिकताओं के हिसाब से, थ्रेशोल्ड को बढ़ाया या घटाया जा सकता है.
एक-दूसरे से 100 मीटर के दायरे में आने वाली विज़िट को ग्रुप करने के लिए, हर ट्रांज़िशन के पहले 100 मीटर के लिए ज़्यादा कीमत और ट्रांज़िशन के बाकी मीटर के लिए कम कीमत सेट की जाती है. शुरुआती 100 मीटर सबसे ज़्यादा महंगे होते हैं. इसलिए, ऑप्टिमाइज़र 100 मीटर के थ्रेशोल्ड से छोटे ट्रांज़िशन का इस्तेमाल करके सबसे ज़्यादा बचत करता है. भले ही, इसका मतलब रास्ते की कुल लंबाई बढ़ाना हो.
शुल्क सेट अप करने के लिए, ShipmentModel.transition_attributes
में एक नई एंट्री जोड़ें. साथ ही, इन प्रॉपर्टी का इस्तेमाल करें:
- सभी संभावित ट्रांज़िशन से मैच करने के लिए, ऐसा टैग चुनें जिसका इस्तेमाल मॉडल में कहीं भी न किया गया हो. उदाहरण के लिए,
UNUSED_TAG
. इस टैग में,TransitionAttributes.excluded_src_tag
औरTransitionAttributes.excluded_dst_tag
को सेट करें. - थ्रेशोल्ड की दूरी और कीमतों के साथ
TransitionAttributes.distance_limit
को सेट अप करें:- चुने गए थ्रेशोल्ड पर
DistanceLimit.soft_max_meters
सेट करें. DistanceLimit.cost_per_kilometer_below_soft_max
को थ्रेशोल्ड से कम हर किलोमीटर की लागत पर सेट करें.DistanceLimit.cost_per_kilometer_above_soft_max
को थ्रेशोल्ड से ज़्यादा हर किलोमीटर की लागत पर सेट करें.
- चुने गए थ्रेशोल्ड पर
{
"model": {
"transitionAttributes": [
{
"excluded_dst_tag": "UNUSED_TAG ",
"excluded_src_tag": "UNUSED_TAG ",
"distanceLimit": {
"softMaxMeters": 100,
"costPerKilometerBelowSoftMax": 50,
"costPerKilometerAboveSoftMax": 1,
}
}
]
}
}
सभी संभावित ट्रांज़िशन से मैच करने के लिए, टैग #unused_tag#
का इस्तेमाल किसी भी शिपमेंट या वाहन के लिए नहीं किया जाना चाहिए. ज़्यादा जानकारी के लिए, सभी विज़िट के अनुरोधों को मैच करने का तरीका देखें.
थ्रेशोल्ड से कम कीमत पर ज़्यादा खर्च करने की सुविधा कैसे काम करती है
इस सेक्शन में दिखाया गया है कि थ्रेशोल्ड से कम और ज़्यादा की लागत, उदाहरण के तौर पर बताई गई स्थिति के अलग-अलग समाधानों की कुल लागत पर कैसे असर डालती है.
पहला समाधान: वहां जाने के लिए A और B, और वापस आने के लिए C
इस समाधान में, शिपमेंट को इस सड़क के दो हिस्सों में बांटा जाता है. इनमें से दो एलिमेंट, पहले ट्रैवर्स पर डिलीवर किए जाते हैं और बाकी एक एलिमेंट, दूसरे ट्रैवर्स पर डिलीवर किया जाता है. पांच ट्रांज़िशन हैं:
ट्रांज़िशन | दूरी | मान तय सीमा से कम है | थ्रेशोल्ड से ज़्यादा | ||
---|---|---|---|---|---|
दूरी | लागत | दूरी | लागत | ||
डिपो →A | 1,000 मीटर | 100 मीटर | 5 | 900 मीटर | 0.9 |
A→B | 50 मीटर | 50 मीटर | 2.5 | 0 मीटर | 0 |
B→अन्य | 1030 मीटर | 100 मीटर | 5 | 930 मीटर | 0.93 |
अन्य→C | 1,000 मीटर | 100 मीटर | 5 | 900 मीटर | 0.9 |
C→depot | 1080 मीटर | 100 मीटर | 5 | 980 मीटर | 0.98 |
कुल | 450 मीटर | 22.5 | 3710 मीटर | 3.71 |
कुल लागत का हिसाब, हर किलोमीटर की इन दो लागतों के जोड़ से लगाया जाता है:
- थ्रेशोल्ड से कम कीमत वाले हर किलोमीटर की लागत (50) को, थ्रेशोल्ड से कम कीमत वाली कुल दूरी (450 मीटर = 0.45 किलोमीटर) से गुणा करें,
- थ्रेशोल्ड से ज़्यादा कीमत (1) के हिसाब से, थ्रेशोल्ड से ज़्यादा की गई कुल दूरी (3710 मीटर = 3.71 किलोमीटर).
इसलिए, कुल कीमत 0.45 * 50 + 3.71 * 1 = 22.5 + 3.71 = 26.21 होगी.
दूसरा समाधान: वहां जाने के रास्ते पर A, B, C करें, वापस आने के रास्ते पर कुछ न करें
इस समाधान में, पहले समाधान के उलट, तीनों शिपमेंट को "एक ग्रुप के तौर पर" डिलीवर किया जाता है. दूसरी यात्रा में, वाहन बिल्कुल नहीं रुकता. फिर से, पांच ट्रांज़िशन हैं, लेकिन उनकी लंबाई और कॉम्पोज़िशन अलग-अलग हैं:
ट्रांज़िशन | दूरी | मान तय सीमा से कम है | थ्रेशोल्ड से ज़्यादा | ||
---|---|---|---|---|---|
दूरी | लागत | दूरी | लागत | ||
डिपो →A | 1,000 मीटर | 100 मीटर | 5 | 900 मीटर | 0.9 |
A→B | 50 मीटर | 50 मीटर | 2.5 | 0 मीटर | 0 |
B→C | 30 मीटर | 30 मीटर | 1.5 | 0 मीटर | 0 |
C→अन्य | 1,000 मीटर | 100 मीटर | 5 | 900 मीटर | 0.9 |
other→depot | 2080 मीटर | 100 मीटर | 5 | 1980 मीटर | 1.98 |
कुल | 380 मीटर | 19 | 3780 मीटर | 3.78 |
पहले तरीके की तरह ही कैलकुलेशन करने पर, कुल लागत 0.38 * 50 +
3.78 * 1 = 19 + 3.78 = 22.78 होगी. साथ ही, सभी विज़िट को एक टाइम ब्लॉक में करने की लागत, दो ग्रुप में करने की लागत से कम होगी. DistanceLimit.cost_per_kilometer_below_soft_max
को बढ़ाकर, इस इफ़ेक्ट को बेहतर बनाया जा सकता है.
थ्रेशोल्ड से कम कीमत पर हर किलोमीटर की कम कीमत क्यों काम नहीं करती
आपको लंबी दूरी के ट्रांज़िशन के बजाय, कम दूरी के ट्रांज़िशन को प्राथमिकता देनी है. इसलिए, हो सकता है कि आप लंबी दूरी के ट्रांज़िशन के लिए, हर किलोमीटर की ज़्यादा कीमत तय करें और कम दूरी के ट्रांज़िशन के लिए, हर किलोमीटर की कम कीमत तय करें. हालांकि, इसका असर उलटा पड़ता है: ट्रांज़िशन के पहले 100 मीटर सबसे सस्ते होते हैं. इसलिए, ऑप्टिमाइज़र इन "सस्ते" मीटर का ज़्यादा से ज़्यादा फ़ायदा पाने के लिए, 100 मीटर के आस-पास या उससे ज़्यादा के ट्रांज़िशन को प्राथमिकता देता है.
इस असर को, समस्या हल करने के दो उदाहरणों में देखा जा सकता है. अगर हर किलोमीटर की लागत को थ्रेशोल्ड से नीचे और ऊपर स्वैप किया जाता है, तो रास्ते की लागत बदल जाती है:
थ्रेशोल्ड से ज़्यादा कीमत | थ्रेशोल्ड से कम कीमत पर ज़्यादा खर्च | |||
---|---|---|---|---|
पहला समाधान | दूसरा तरीका | पहला समाधान | दूसरा तरीका | |
थ्रेशोल्ड से कम कि॰मी॰ | 0.45 | 0.38 | 0.45 | 0.38 |
हर कि॰मी॰ की लागत, थ्रेशोल्ड से कम है | 1.00 | 1.00 | 50.00 | 50.00 |
थ्रेशोल्ड से ज़्यादा कि॰मी॰ | 3.71 | 3.78 | 3.71 | 3.78 |
थ्रेशोल्ड से ज़्यादा हर कि॰मी॰ की लागत | 50.00 | 50.00 | 1.00 | 1.00 |
कुल कीमत | 185.95 | 189.38 | 26.21 | 22.78 |
हर वर्शन के लिए, दो समाधानों की कुल लागत में से कम लागत को बोल्ड में हाइलाइट किया जाता है. इस इमेज से पता चलता है कि थ्रेशोल्ड से ज़्यादा कीमत का इस्तेमाल करने पर, अब उस रूट के लिए कुल लागत ज़्यादा हो गई है जहां विज़िट को ग्रुप किया गया है. यह उस चीज़ से बिलकुल उलट है जिसे आपको हासिल करना था.