अनुरोध में डाला गया समाधान. इसमें यह जानकारी शामिल होती है कि किन विज़िट को सीमित करना है और उन्हें कैसे सीमित करना है.
| JSON के काेड में दिखाना |
|---|
{ "routes": [ { object ( |
| फ़ील्ड | |
|---|---|
routes[] |
इंजेक्ट किए जाने वाले समाधान के रास्ते. ऐसा हो सकता है कि ओरिजनल समाधान में कुछ रास्तों को शामिल न किया गया हो. रास्तों और स्किप किए गए शिपमेंट को, |
skippedShipments[] |
सॉल्यूशन को इंजेक्ट करने के लिए, शिपमेंट को स्किप किया गया. ऐसा हो सकता है कि कुछ को ओरिजनल समाधान से हटा दिया गया हो. |
constraintRelaxations[] |
यह बताता है कि वाहनों के शून्य या उससे ज़्यादा ग्रुप के लिए, पाबंदियों में कब और कितनी छूट दी जानी चाहिए. अगर यह फ़ील्ड खाली है, तो वाहन के सभी ऐसे रूट पर पूरी तरह से पाबंदी लगा दी जाती है जिनमें कोई भी स्टॉप शामिल नहीं है. |
ConstraintRelaxation
वाहन के ग्रुप के लिए, यह बताता है कि विज़िट पर लगी पाबंदियों को किस थ्रेशोल्ड पर और किस लेवल तक कम किया जाएगा. skipped_shipment फ़ील्ड में लिस्ट किए गए शिपमेंट को स्किप करना ज़रूरी है. इसका मतलब है कि उन्हें पूरा नहीं किया जा सकता.
| JSON के काेड में दिखाना |
|---|
{
"relaxations": [
{
object ( |
| फ़ील्ड | |
|---|---|
relaxations[] |
विज़िट से जुड़ी सभी पाबंदियों में ढील दी गई है. ये पाबंदियां, |
vehicleIndices[] |
उन वाहनों के इंडेक्स के बारे में बताता है जिन पर यात्रा से जुड़ी पाबंदी अगर |
सुकून देने वाले
अगर relaxations खाली है, तो routes पर मौजूद सभी विज़िट के शुरू होने का समय और क्रम पूरी तरह से तय होता है. साथ ही, उन रास्तों में कोई नई विज़िट नहीं जोड़ी जा सकती. इसके अलावा, routes में किसी वाहन के शुरू और खत्म होने का समय पूरी तरह से तय होता है. हालांकि, अगर वाहन खाली है (यानी कि कोई विज़िट नहीं है और मॉडल में usedIfRouteIsEmpty को फ़ॉल्स पर सेट किया गया है), तो ऐसा नहीं होता.
relaxations(i).level, किसी ऐसी यात्रा #j पर लागू होने वाले कंस्ट्रेंट रिलैक्सेशन लेवल के बारे में बताता है जो इन शर्तों को पूरा करती है:
route.visits(j).start_time >= relaxations(i).threshold_timeऔरj + 1 >= relaxations(i).threshold_visit_count
इसी तरह, अगर वाहन इन शर्तों को पूरा करता है, तो उसे relaxations(i).level तक स्टार्ट किया जा सकता है:
vehicleStartTime >= relaxations(i).threshold_timeऔर- अगर वाहन इन शर्तों को पूरा करता है, तो
relaxations(i).threshold_visit_count == 0और वाहन के आखिर मेंrelaxations(i).levelतक छूट दी जाती है: vehicleEndTime >= relaxations(i).threshold_timeऔरroute.visits_size() + 1 >= relaxations(i).threshold_visit_count
अगर कोई विज़िट thresholdVisitCount या thresholdTime की शर्तों को पूरा करती है, तो रिलैक्सेशन लेवल लागू करने के लिए, एक जैसे level वाले दो relaxations जोड़ें: एक में सिर्फ़ thresholdVisitCount सेट हो और दूसरे में सिर्फ़ thresholdTime सेट हो. अगर कोई विज़िट, एक से ज़्यादा relaxations की शर्तों को पूरा करती है, तो सबसे कम पाबंदी वाला लेवल लागू होता है. इस वजह से, वाहन के शुरू होने से लेकर रूट के हिसाब से विज़िट की गई जगहों तक और फिर वाहन के रुकने तक, समयसीमा में छूट का लेवल बढ़ता जाता है. इसका मतलब है कि रूट के आगे बढ़ने के साथ-साथ, समयसीमा में छूट का लेवल कम नहीं होता.
रास्ते के उन हिस्सों पर जाने का समय और क्रम पूरी तरह से तय होता है जो किसी भी relaxations की थ्रेशोल्ड की शर्तों को पूरा नहीं करते. इन क्रमों में कोई भी विज़िट नहीं जोड़ी जा सकती. इसके अलावा, अगर किसी वाहन के शुरू या खत्म होने का समय, किसी भी छूट की शर्तों को पूरा नहीं करता है, तो समय तय होता है. हालांकि, अगर वाहन खाली है, तो ऐसा नहीं होता.
| JSON के काेड में दिखाना |
|---|
{
"level": enum ( |
| फ़ील्ड | |
|---|---|
level |
|
thresholdTime |
वह समय जब यह आरएफ़सी 3339 का इस्तेमाल करता है. इसमें जनरेट किया गया आउटपुट हमेशा Z-नॉर्मलाइज़ किया जाएगा और इसमें 0, 3, 6 या 9 फ़्रैक्शनल अंक इस्तेमाल किए जाएंगे. "Z" के अलावा, अन्य ऑफ़सेट भी स्वीकार किए जाते हैं. उदाहरण: |
thresholdVisitCount |
विज़िट की वह संख्या जिसके बाद अगर यह |
लेवल
यह कुकी, अलग-अलग तरह की पाबंदियों में ढील देने के लेवल के बारे में बताती है. ये लेवल, किसी विज़िट के लिए लागू होते हैं. साथ ही, थ्रेशोल्ड की शर्तों को पूरा करने पर, ये लेवल लागू होते हैं.
नीचे दी गई सूची में, नियमों के उल्लंघन को ठीक करने के लिए उपलब्ध विकल्पों को, उल्लंघन ठीक करने के लिए मिलने वाले समय के हिसाब से बढ़ते क्रम में दिखाया गया है.
| Enums | |
|---|---|
LEVEL_UNSPECIFIED |
डिफ़ॉल्ट रूप से, रिलैक्सेशन का लेवल: इसमें कोई भी शर्त पूरी नहीं की जाती. इसका मतलब है कि सभी विज़िट पर पूरी तरह से पाबंदी होती है. इस वैल्यू का इस्तेमाल, |
RELAX_VISIT_TIMES_AFTER_THRESHOLD |
विज़िट शुरू होने के समय और वाहन के शुरू/बंद होने के समय में बदलाव किया जा सकता है. हालांकि, हर विज़िट एक ही वाहन से जुड़ी रहेगी. साथ ही, विज़िट के क्रम का पालन करना होगा: उनके बीच या उनसे पहले कोई विज़िट नहीं जोड़ी जा सकती. |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD |
यह RELAX_VISIT_TIMES_AFTER_THRESHOLD के जैसा ही है, लेकिन इसमें विज़िट के क्रम को भी आसान बनाया गया है: विज़िट सिर्फ़ इस वाहन से की जा सकती हैं. हालांकि, ऐसा हो सकता है कि विज़िट न हो पाए. |
RELAX_ALL_AFTER_THRESHOLD |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD के जैसा ही है, लेकिन इसमें वाहन को भी छूट मिलती है: थ्रेशोल्ड समय पर या उसके बाद विज़िट पूरी तरह से मुफ़्त होती हैं. साथ ही, ऐसा हो सकता है कि विज़िट पूरी न हो. |