रूटिंग सॉल्वर, ट्रैक करने के लिए डाइमेंशन नाम के ऑब्जेक्ट का इस्तेमाल करता है वाहन के रूट में इकट्ठा होने वाली संख्या. जैसे, यात्रा में लगने वाला समय या अगर वाहन पिकअप और डिलीवरी कर रहा है, तो उसका कुल वज़न को अपनाएं. अगर रूटिंग संबंधी समस्या में इतनी मात्रा शामिल है, तो या तो कंस्ट्रेंट में या मकसद फ़ंक्शन का इस्तेमाल करते हैं, तो आपको उन्हें बताने के लिए एक डाइमेंशन तय करना होगा.
इस सेक्शन में, डाइमेंशन तय करने और उनका इस्तेमाल करने का तरीका बताया गया है.
डाइमेंशन के उदाहरण
यहां पिछले सेक्शन में डाइमेंशन के कुछ उदाहरण दिए गए हैं.
VRPTW उदाहरण, ट्रैक करने के लिए एक डाइमेंशन बनाता है हर वाहन से, यात्रा में लगने वाला कुल समय. समाधान करने वाला टूल, इस डाइमेंशन का इस्तेमाल करके कंस्ट्रेंट की वजह से, कोई वाहन सिर्फ़ उसी जगह पर जा सकता है जहां समय विंडो.
CVRP के उदाहरण से, मांग (उदाहरण के लिए, चुने जाने वाले पैकेज का वेट या वॉल्यूम), जो इन्हें ट्रैक करते हैं कुल लोड, जो वाहन के रास्ते पर चल रहा है. इस सॉल्वर में, वाहन के लोड होने की सीमा को तय करने के लिए, डाइमेंशन का इस्तेमाल किया जाता है इसकी क्षमता से ज़्यादा व्यक्ति नहीं हो सकता.
नीचे दिए गए उदाहरण इनका इस्तेमाल करके वीआरपीटीडब्ल्यू के लिए डाइमेंशन तय करते हैं
AddDimension
तरीका.
Python
routing.AddDimension(
callback_index,
slack_max,
capacity,
fix_start_cumul_to_zero,
dimension_name)
C++
routing.AddDimension(
callback_index,
slack_max,
capacity,
fix_start_cumul_to_zero,
dimension_name)
Java
routing.addDimension(
callbackIndex,
slackMax,
capacity,
fixStartCumulToZero,
dimensionName)
C#
routing.AddDimension(
callbackIndex,
slackMax,
capacity,
fixStartCumulToZero,
dimensionName)
AddDimension तरीके में ये इनपुट होते हैं:
callback_index: उस कॉलबैक का इंडेक्स जो संख्या दिखाता है. कॉन्टेंट बनाने इंडेक्स, जो कॉलबैक के लिए सॉल्वर का इंटरनल रेफ़रंस होता है. इसे बनाने का कामRegisterTransitCallbackयाRegisterUnitaryTransitCallbackजैसे तरीके इस्तेमाल करें.slack_max: स्लैक के लिए ज़्यादा से ज़्यादा, इंतज़ार दिखाने के लिए इस्तेमाल किया जाने वाला वैरिएबल जगहों पर समय. नीचे स्लैक वैरिएबल देखें विवरण. अगर समस्या में इंतज़ार का समय शामिल न हो, तो आम तौर परslack_maxसेट किया जा सकता है से 0 तक.capacity: हर रूट पर इकट्ठा की गई कुल संख्या के लिए ज़्यादा से ज़्यादा जानकारी.capacityका इस्तेमाल करके, सीवीआरपी. अगर आपकी समस्या में ऐसा नहीं है कंस्ट्रेंट के तौर पर, आपcapacityको ऐसी वैल्यू पर सेट कर सकते हैं जो रास्तों पर कोई पाबंदी नहीं लगाएं —उदाहरण के लिए, सभी कॉलबैक तय करने के लिए इस्तेमाल किए जाने वाले मैट्रिक्स या अरे की एंट्री.fix_start_cumulative_to_zero: बूलियन मान. अगर सही है, तो कुल वैल्यू मात्रा 0 से शुरू होती है. ज़्यादातर मामलों में, यहTrueपर सेट होना चाहिए. हालांकि, VRPTW या संसाधन की कमी, कुछ वाहन समय विंडो बाध्यता के कारण हो सकता है कि समय 0 के बाद शुरू हो, इसलिए आपको इन समस्याओं के लिए,fix_start_cumulative_to_zeroकोFalseपर सेट करें.dimension_name: डाइमेंशन के नाम के लिए स्ट्रिंग, जैसे कि'Distance', वैरिएबल को ऐक्सेस करने के लिए, प्रोग्राम में कहीं और इसका इस्तेमाल किया जा सकता है.
CVRP प्रोग्राम
AddDimensionWithVehicleCapacity
तरीका. इस तरीके में क्षमता की एक कैटगरी होती है. हर वाहन के लिए एक एंट्री होती है.
(इसके उलट, capacity के लिए AddDimension एक वैल्यू लेता है. इसलिए, सभी
माना जाता है कि वाहनों की क्षमता भी एक जैसी है.)
RoutingModel देखें
डाइमेंशन बनाने वाले दूसरे तरीकों के बारे में जानने के लिए, इस पेज का इस्तेमाल करें.
सेक्शन सॉल्यूशन टाइम विंडो को किसी सूची या अरे में सेव करना ऐसे फ़ंक्शन दिखाता है जो किसी डाइमेंशन में कुल डेटा को किसी सूची या अरे में सेव करते हैं.
Slack वैरिएबल
यहां एक उदाहरण दिया गया है, जिसमें समस्या को हल करने के लिए स्लैक वैरिएबल दिखाए गए हैं यात्रा में लगने वाला समय. मान लीजिए कि कोई वाहन अपने रूट के किसी एक चरण में, जगह i से जगह j तक जाता है और:
- वाहन का i पर यात्रा में लगने वाला कुल समय 100 मिनट है.
- j को वाहन की यात्रा में लगने वाला कुल समय 200 मिनट है.
- i से j तक की यात्रा में 75 मिनट का समय लगता है.
पहुंचने के तुरंत बाद, वाहन उस जगह को नहीं छोड़ सकता जहां से आपने उसे छोड़ा था जगह j पर समय 175 होगा. इसके बजाय, वाहन को जाने से पहले जगह i; दूसरे शब्दों में, स्थान i पर स्लैक 25 है.
आपको वीआरपीटीडब्ल्यू में स्लैक की अनुमति देनी होगी, क्योंकि वाहनों को पहले इंतज़ार करना पड़ सकता है
किसी जगह पर जाने के लिए कहा जा सकता है. इस तरह की समस्या में, यह सेट करें
वाहन को ज़्यादा से ज़्यादा जितने समय तक इंतज़ार करना है उतने समय तक इंतज़ार करने का समय: slack_max
अगली जगह पर जाने से पहले जगह. अगर इससे कोई फ़र्क़ नहीं पड़ता कि
वे इंतज़ार करते हैं, बस slack_max को एक बहुत बड़ी संख्या पर सेट करें.
दूसरी ओर, CVRP के लिए, इकट्ठा किए गए लोड में i से बदलकर
j हमेशा i पर मांग के बराबर होता है, इसलिए कोई ढीली नहीं है. इस तरह की समस्याओं के लिए
तो, slack_max को 0 पर सेट किया जा सकता है.
इसके बाद, हम स्लैक की औपचारिक परिभाषा देंगे. आंतरिक रूप से, डाइमेंशन रास्तों पर इकट्ठा होने वाली मात्राओं से जुड़े दो तरह के वैरिएबल:
- ट्रांज़िट वैरिएबल:
एक रास्ता.
अगर
i -> jकिसी रास्ते में एक कदम है, तो ट्रांज़िट वैरिएबल या तोiहोगा,jट्रांज़िट मैट्रिक्स की एंट्री (ट्रांज़िट कॉलबैक के लिए) या सिर्फ़ जगह i पर कॉलबैक वैल्यू (अगर कॉलबैक सिर्फ़ एक जगह पर निर्भर करता है). - कुल वैरिएबल: हर जगह पर इकट्ठा हुई कुल संख्या. आपने लोगों तक पहुंचाया मुफ़्त में
स्थान i पर संचयी चर को इसके अनुसार ऐक्सेस कर सकता है
dimension_name.CumulVar(i). उदाहरण के लिए, देखें कि टाइम विंडो कंस्ट्रेंट के लिए इस्तेमाल किया जाता है.
यह मानकर कि कोई वाहन एक ही चरण में जगह i से j जगह पर जाता है,
स्लैक इन वैरिएबल से इस तरह जुड़े होते हैं:
slack(i) = cumul(j) - cumul(i) - transit(i, j)
डाइमेंशन के बारे में ज़्यादा जानकारी के लिए, यहां देखें
RoutingDimension
पर जाएं.