InjectedSolutionConstraint

अनुरोध में डाला गया समाधान. इसमें यह जानकारी शामिल होती है कि किन विज़िट को सीमित करना है और उन्हें कैसे सीमित करना है.

JSON के काेड में दिखाना
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "constraintRelaxations": [
    {
      object (ConstraintRelaxation)
    }
  ]
}
फ़ील्ड
routes[]

object (ShipmentRoute)

इंजेक्ट किए जाने वाले समाधान के रास्ते. ऐसा हो सकता है कि ओरिजनल समाधान में कुछ रास्तों को शामिल न किया गया हो. रास्तों और स्किप किए गए शिपमेंट को, injectedFirstSolutionRoutes के लिए बताई गई बुनियादी मान्यताओं को पूरा करना होगा.

skippedShipments[]

object (SkippedShipment)

सॉल्यूशन को इंजेक्ट करने के लिए, शिपमेंट को स्किप किया गया. ऐसा हो सकता है कि कुछ को ओरिजनल समाधान से हटा दिया गया हो. routes फ़ील्ड देखें.

constraintRelaxations[]

object (ConstraintRelaxation)

यह बताता है कि वाहनों के शून्य या उससे ज़्यादा ग्रुप के लिए, पाबंदियों में कब और कितनी छूट दी जानी चाहिए. अगर यह फ़ील्ड खाली है, तो वाहन के सभी ऐसे रूट पर पूरी तरह से पाबंदी लगा दी जाती है जिनमें कोई भी स्टॉप शामिल नहीं है.

ConstraintRelaxation

वाहन के ग्रुप के लिए, यह बताता है कि विज़िट पर लगी पाबंदियों को किस थ्रेशोल्ड पर और किस लेवल तक कम किया जाएगा. skipped_shipment फ़ील्ड में लिस्ट किए गए शिपमेंट को स्किप करना ज़रूरी है. इसका मतलब है कि उन्हें पूरा नहीं किया जा सकता.

JSON के काेड में दिखाना
{
  "relaxations": [
    {
      object (Relaxation)
    }
  ],
  "vehicleIndices": [
    integer
  ]
}
फ़ील्ड
relaxations[]

object (Relaxation)

विज़िट से जुड़ी सभी पाबंदियों में ढील दी गई है. ये पाबंदियां, vehicleIndices में मौजूद वाहनों के रास्तों पर की गई विज़िट पर लागू होंगी.

vehicleIndices[]

integer

उन वाहनों के इंडेक्स के बारे में बताता है जिन पर यात्रा से जुड़ी पाबंदी relaxations लागू होती है. अगर यह खाली है, तो इसे डिफ़ॉल्ट माना जाता है. साथ ही, relaxations उन सभी वाहनों पर लागू होता है जिनके बारे में अन्य constraintRelaxations में नहीं बताया गया है. ज़्यादा से ज़्यादा एक डिफ़ॉल्ट हो सकता है. इसका मतलब है कि ज़्यादा से ज़्यादा एक कंस्ट्रेंट रिलैक्सेशन फ़ील्ड को खाली छोड़ा जा सकता है vehicleIndices. वाहन के इंडेक्स को सिर्फ़ एक बार लिस्ट किया जा सकता है. भले ही, वह कई constraintRelaxations में शामिल हो.

अगर interpretInjectedSolutionsUsingLabels सही है, तो वाहन के इंडेक्स को ShipmentRoute.vehicle_index की तरह मैप किया जाता है (fields टिप्पणी देखें).

सुकून देने वाले

अगर 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": string,
  "thresholdVisitCount": integer
}
फ़ील्ड
level

enum (Level)

thresholdTime और कम से कम thresholdVisitCount की शर्तों को पूरा करने पर, कंस्ट्रेंट रिलैक्सेशन का लेवल लागू होता है.

thresholdTime

string (Timestamp format)

वह समय जब level लागू किया जा सकता है.

यह आरएफ़सी 3339 का इस्तेमाल करता है. इसमें जनरेट किया गया आउटपुट हमेशा Z-नॉर्मलाइज़ किया जाएगा और इसमें 0, 3, 6 या 9 फ़्रैक्शनल अंक इस्तेमाल किए जाएंगे. "Z" के अलावा, अन्य ऑफ़सेट भी स्वीकार किए जाते हैं. उदाहरण: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" या "2014-10-02T15:01:23+05:30".

thresholdVisitCount

integer

विज़िट की वह संख्या जिसके बाद level छूट लागू की जा सकती है. अगर thresholdVisitCount की वैल्यू 0 है या इसे सेट नहीं किया गया है, तो level को सीधे तौर पर वाहन के शुरू होने पर लागू किया जा सकता है.

अगर यह route.visits_size() + 1 है, तो level सिर्फ़ वाहन के आखिर में लागू किया जा सकता है. अगर यह route.visits_size() + 1 से ज़्यादा है, तो उस रूट के लिए level लागू नहीं होता.

लेवल

यह कुकी, अलग-अलग तरह की पाबंदियों में ढील देने के लेवल के बारे में बताती है. ये लेवल, किसी विज़िट के लिए लागू होते हैं. साथ ही, थ्रेशोल्ड की शर्तों को पूरा करने पर, ये लेवल लागू होते हैं.

नीचे दी गई सूची में, नियमों के उल्लंघन को ठीक करने के लिए उपलब्ध विकल्पों को, उल्लंघन ठीक करने के लिए मिलने वाले समय के हिसाब से बढ़ते क्रम में दिखाया गया है.

Enums
LEVEL_UNSPECIFIED

डिफ़ॉल्ट रूप से, रिलैक्सेशन का लेवल: इसमें कोई भी शर्त पूरी नहीं की जाती. इसका मतलब है कि सभी विज़िट पर पूरी तरह से पाबंदी होती है.

इस वैल्यू का इस्तेमाल, level में साफ़ तौर पर नहीं किया जाना चाहिए.

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 के जैसा ही है, लेकिन इसमें वाहन को भी छूट मिलती है: थ्रेशोल्ड समय पर या उसके बाद विज़िट पूरी तरह से मुफ़्त होती हैं. साथ ही, ऐसा हो सकता है कि विज़िट पूरी न हो.