इस उदाहरण में, ट्रांज़िशन एट्रिब्यूट का इस्तेमाल करने का तरीका बताया गया है. इससे उन रास्तों को प्राथमिकता दी जा सकती है जहां एक ही वाहन से, एक ही समय में आस-पास के पिकअप और डिलीवरी की जाती हैं. ट्रांज़िशन एट्रिब्यूट के बारे में ज़्यादा जानने के लिए, Model Business Logic with Transition Attributes लेख पढ़ें.
इस उदाहरण में:
- शिपमेंट 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 | 1000 मीटर | 100 मीटर | 5 | 900 मीटर | 0.9 |
A→B | 50 मीटर | 50 मीटर | 2.5 | 0 मि॰ | 0 |
B→other | 1030 मीटर | 100 मीटर | 5 | 930 मीटर | 0.93 |
other→C | 1000 मीटर | 100 मीटर | 5 | 900 मीटर | 0.9 |
C→डिपो | 1080 मीटर | 100 मीटर | 5 | 980 मीटर | 0.98 |
कुल | 450 मीटर | 22.5 | 3710 मीटर | 3.71 |
कुल लागत का हिसाब लगाने के लिए, प्रति किलोमीटर के हिसाब से लगने वाले दोनों शुल्कों को जोड़ा जाता है:
- थ्रेशोल्ड से कम दूरी (450 मीटर = 0.45 कि॰मी॰) तय करने पर, प्रति किलोमीटर के हिसाब से लगने वाला शुल्क (50 रुपये) गुणा थ्रेशोल्ड से कम दूरी (450 मीटर = 0.45 कि॰मी॰),
- थ्रेशोल्ड से ज़्यादा दूरी तय करने पर, प्रति किलोमीटर के हिसाब से लगने वाला शुल्क (1) गुणा थ्रेशोल्ड से ज़्यादा तय की गई कुल दूरी (3,710 मीटर = 3.71 कि॰मी॰).
इसलिए, कुल लागत 0.45 * 50 + 3.71 * 1 = 22.5 + 3.71 = 26.21 है.
दूसरा समाधान: जाते समय A, B, C को पूरा करें. लौटते समय कुछ न करें
इस समाधान में, पहले समाधान के उलट, सड़क पर एक बार में ही तीनों शिपमेंट "एक ग्रुप के तौर पर" डिलीवर किए जाते हैं. दूसरे ट्रैवर्सल में, वाहन कहीं नहीं रुकता. यहां भी पांच ट्रांज़िशन हैं, लेकिन इनकी अवधि और कंपोज़िशन अलग-अलग हैं:
ट्रांज़िशन | दूरी | मान तय सीमा से कम है | थ्रेशोल्ड से ज़्यादा | ||
---|---|---|---|---|---|
दूरी | लागत | दूरी | लागत | ||
डिपो →A | 1000 मीटर | 100 मीटर | 5 | 900 मीटर | 0.9 |
A→B | 50 मीटर | 50 मीटर | 2.5 | 0 मि॰ | 0 |
B→C | 30 मीटर | 30 मीटर | 1.5 | 0 मि॰ | 0 |
C→other | 1000 मीटर | 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 |
हर वर्शन के लिए, दोनों समाधानों की कुल लागत में से कम लागत को बोल्ड करके हाइलाइट किया गया है. यहां देखा जा सकता है कि थ्रेशोल्ड से ज़्यादा कीमत का इस्तेमाल करने पर, अब उस रूट की कुल कीमत ज़्यादा है जहां विज़िट को ग्रुप किया गया है. यह आपकी उम्मीद के उलट है.