InjectedSolutionConstraint

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

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

object (ShipmentRoute)

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

skippedShipments[]

object (SkippedShipment)

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

constraintRelaxations[]

object (ConstraintRelaxation)

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

ConstraintRelaxation

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

जेएसओएन के काेड में दिखाना
{
  "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 की थ्रेशोल्ड शर्तों को पूरा नहीं करते हैं, पूरी तरह से सीमित हैं और इन अनुक्रमों में कोई विज़िट शामिल नहीं की जा सकती. इसके अलावा, अगर कोई वाहन शुरू या खत्म होने पर, आराम करने की शर्तों को पूरा नहीं करता है, तो गाड़ी के खाली न होने तक, उसका समय तय हो जाता है.

जेएसओएन के काेड में दिखाना
{
  "level": enum (Level),
  "thresholdTime": string,
  "thresholdVisitCount": integer
}
फ़ील्ड
level

enum (Level)

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

thresholdTime

string (Timestamp format)

वह समय या उसके बाद, level छूट लागू की जा सकती है.

RFC3339 यूटीसी "ज़ुलु" फ़ॉर्मैट में एक टाइमस्टैंप, जिसमें नैनोसेकंड का रिज़ॉल्यूशन और नौ फ़्रैक्शनल अंक हो सकते हैं. उदाहरण: "2014-10-02T15:01:23Z" और "2014-10-02T15:01:23.045123456Z".

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