ShipmentModel

शिपमेंट मॉडल में शिपमेंट का एक सेट होता है. इसे वाहनों के एक सेट से पूरा किया जाना चाहिए. साथ ही, कुल लागत को कम से कम किया जाना चाहिए. कुल लागत, इन चीज़ों का योग होती है:

  • वाहनों को रूट करने की लागत (कुल समय की लागत, यात्रा में लगने वाले समय की लागत, और सभी वाहनों की तय लागत का योग).
  • शिपमेंट न करने पर लगने वाले जुर्माने.
  • शिपमेंट की ग्लोबल अवधि की लागत
JSON के काेड में दिखाना
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "objectives": [
    {
      object (Objective)
    }
  ],
  "globalStartTime": string,
  "globalEndTime": string,
  "globalDurationCostPerHour": number,
  "durationDistanceMatrices": [
    {
      object (DurationDistanceMatrix)
    }
  ],
  "durationDistanceMatrixSrcTags": [
    string
  ],
  "durationDistanceMatrixDstTags": [
    string
  ],
  "transitionAttributes": [
    {
      object (TransitionAttributes)
    }
  ],
  "shipmentTypeIncompatibilities": [
    {
      object (ShipmentTypeIncompatibility)
    }
  ],
  "shipmentTypeRequirements": [
    {
      object (ShipmentTypeRequirement)
    }
  ],
  "precedenceRules": [
    {
      object (PrecedenceRule)
    }
  ],
  "maxActiveVehicles": integer
}
फ़ील्ड
shipments[]

object (Shipment)

शिपमेंट का ऐसा सेट जिसे मॉडल में शामिल करना ज़रूरी है.

vehicles[]

object (Vehicle)

वाहनों का सेट, जिनका इस्तेमाल विज़िट के लिए किया जा सकता है.

objectives[]

object (Objective)

इस मॉडल के लिए तय किए गए मकसद, जिन्हें हम लागत में बदलेंगे. अगर इनपुट मॉडल खाली नहीं है, तो यह मुफ़्त होना चाहिए. बदला हुआ अनुरोध पाने के लिए, कृपया solvingMode = TRANSFORM_AND_RETURN_REQUEST का इस्तेमाल करें. ध्यान दें कि इस मामले में अनुरोध को हल नहीं किया जाएगा. इससे जुड़ा दस्तावेज़ देखें.

एक्सपेरिमेंटल: ज़्यादा जानकारी के लिए, https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request पर जाएं.

globalStartTime

string (Timestamp format)

मॉडल के शुरू और खत्म होने का ग्लोबल समय: इस रेंज से बाहर का कोई भी समय मान्य नहीं माना जा सकता.

मॉडल की समयसीमा एक साल से कम होनी चाहिए. इसका मतलब है कि globalEndTime और globalStartTime के बीच का अंतर 3,15,36,000 सेकंड से कम होना चाहिए.

cost_per_*hour फ़ील्ड का इस्तेमाल करते समय, परफ़ॉर्मेंस को बेहतर बनाने के लिए, इस विंडो को कम समय के लिए सेट किया जा सकता है. उदाहरण के लिए, अगर आपको एक दिन का मॉडल बनाना है, तो आपको ग्लोबल टाइम लिमिट को उस दिन के लिए सेट करना चाहिए. अगर इसे सेट नहीं किया जाता है, तो डिफ़ॉल्ट रूप से 1 जनवरी, 1970 को 00:00:00 यूटीसी (यानी सेकंड: 0, नैनो: 0) का इस्तेमाल किया जाता है.

यह आरएफ़सी 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".

globalEndTime

string (Timestamp format)

अगर इसे सेट नहीं किया जाता है, तो डिफ़ॉल्ट रूप से 1 जनवरी, 1971 को 00:00:00 यूटीसी (यानी सेकंड: 31536000, नैनो: 0) का इस्तेमाल किया जाता है.

यह आरएफ़सी 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".

globalDurationCostPerHour

number

पूरे प्लान की "ग्लोबल अवधि", सभी वाहनों के शुरू होने के सबसे शुरुआती समय और खत्म होने के सबसे आखिरी समय के बीच का अंतर होती है. उपयोगकर्ता, उस संख्या के लिए हर घंटे की लागत असाइन कर सकते हैं. उदाहरण के लिए, इससे यह कोशिश की जा सकती है कि काम जल्द से जल्द पूरा हो जाए. यह लागत, Shipment.penalty_cost की यूनिट में ही होनी चाहिए.

durationDistanceMatrices[]

object (DurationDistanceMatrix)

मॉडल में इस्तेमाल किए गए अवधि और दूरी के मैट्रिक्स के बारे में बताता है. अगर यह फ़ील्ड खाली है, तो Google Maps या जियोडेसिक दूरी का इस्तेमाल किया जाएगा. यह useGeodesicDistances फ़ील्ड की वैल्यू पर निर्भर करता है. अगर यह खाली नहीं है, तो useGeodesicDistances की वैल्यू 'सही है' नहीं हो सकती. साथ ही, durationDistanceMatrixSrcTags और durationDistanceMatrixDstTags को खाली नहीं छोड़ा जा सकता.

इस्तेमाल करने के उदाहरण:

  • दो जगहें हैं: locA और locB.
  • एक वाहन, जो locA से शुरू होकर locA पर खत्म होता है.
  • locB पर पिकअप के लिए, 1 विज़िट का अनुरोध.
model {
  vehicles { startTags: "locA"  endTags: "locA" }
  shipments { pickups { tags: "locB" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixDstTags: "locA"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • तीन जगहें हैं: locA, locB, और locC.
  • एक वाहन, locA से अपना रास्ता शुरू करता है और locB पर खत्म करता है. इसके लिए, वह "तेज़" मैट्रिक्स का इस्तेमाल करता है.
  • एक वाहन, locB से अपना रूट शुरू करता है और locB पर ही खत्म करता है. इसके लिए, "slow" मैट्रिक्स का इस्तेमाल किया जाता है.
  • एक वाहन, locB से अपना रूट शुरू करता है और locB पर ही खत्म करता है. इसके लिए, "fast" मैट्रिक्स का इस्तेमाल किया जाता है.
  • locC पर पिकअप के लिए एक अनुरोध.
model {
  vehicles { startTags: "locA" endTags: "locB" startTags: "fast" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "slow" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "fast" }
  shipments { pickups { tags: "locC" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixSrcTags: "locC"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrixDstTags: "locC"
  durationDistanceMatrices {
    vehicleStartTag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  durationDistanceMatrices {
    vehicleStartTag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
durationDistanceMatrixSrcTags[]

string

अवधि और दूरी के मैट्रिक्स के सोर्स तय करने वाले टैग; durationDistanceMatrices(i).rows(j), टैग durationDistanceMatrixSrcTags(j) वाली विज़िट से मैट्रिक्स i में मौजूद अन्य विज़िट की अवधि और दूरी तय करता है.

टैग, VisitRequest.tags या Vehicle.start_tags से मेल खाते हैं. दिया गया VisitRequest या Vehicle, इस फ़ील्ड में मौजूद किसी एक टैग से पूरी तरह मैच होना चाहिए. ध्यान दें कि Vehicle के सोर्स, डेस्टिनेशन, और मैट्रिक्स टैग एक जैसे हो सकते हैं. इसी तरह, VisitRequest के सोर्स और डेस्टिनेशन टैग भी एक जैसे हो सकते हैं. सभी टैग अलग-अलग होने चाहिए और खाली स्ट्रिंग नहीं होने चाहिए. अगर यह फ़ील्ड खाली नहीं है, तो durationDistanceMatrices भी खाली नहीं होना चाहिए.

durationDistanceMatrixDstTags[]

string

अवधि और दूरी के मैट्रिक्स के डेस्टिनेशन तय करने वाले टैग; durationDistanceMatrices(i).rows(j).durations(k) (resp. durationDistanceMatrices(i).rows(j).meters(k)), मैट्रिक्स i में टैग durationDistanceMatrixSrcTags(j) वाली विज़िट से टैग durationDistanceMatrixDstTags(k) वाली विज़िट तक की यात्रा की अवधि (या दूरी) तय करता है.

टैग, VisitRequest.tags या Vehicle.start_tags से मेल खाते हैं. दिया गया VisitRequest या Vehicle, इस फ़ील्ड में मौजूद किसी एक टैग से पूरी तरह मैच होना चाहिए. ध्यान दें कि Vehicle के सोर्स, डेस्टिनेशन, और मैट्रिक्स टैग एक जैसे हो सकते हैं. इसी तरह, VisitRequest के सोर्स और डेस्टिनेशन टैग भी एक जैसे हो सकते हैं. सभी टैग अलग-अलग होने चाहिए और खाली स्ट्रिंग नहीं होने चाहिए. अगर यह फ़ील्ड खाली नहीं है, तो durationDistanceMatrices भी खाली नहीं होना चाहिए.

transitionAttributes[]

object (TransitionAttributes)

मॉडल में ट्रांज़िशन एट्रिब्यूट जोड़े गए.

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

शिपमेंट के टाइप के ऐसे सेट जो काम नहीं करते (ShipmentTypeIncompatibility देखें).

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

shipmentType की ज़रूरी शर्तों के सेट (ShipmentTypeRequirement देखें).

precedenceRules[]

object (PrecedenceRule)

प्राथमिकता के नियमों का सेट, जिन्हें मॉडल में लागू करना ज़रूरी है.

अहम जानकारी: प्राथमिकता के नियमों का इस्तेमाल करने से, ऑप्टिमाइज़ की जा सकने वाली समस्या का साइज़ सीमित हो जाता है. प्राथमिकता के नियमों का इस्तेमाल करके किए गए ऐसे अनुरोध अस्वीकार किए जा सकते हैं जिनमें कई शिपमेंट शामिल हों.

maxActiveVehicles

integer

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

शिपमेंट

किसी एक आइटम को पिकअप करने से लेकर उसकी डिलीवरी तक का शिपमेंट. शिपमेंट को पूरा हुआ तब माना जाता है, जब कोई यूनीक वाहन, पिकअप की जगहों में से किसी एक जगह पर जाता है (और अपनी खाली क्षमता को उसी हिसाब से कम करता है). इसके बाद, वह डिलीवरी की जगहों में से किसी एक जगह पर जाता है (और अपनी खाली क्षमता को उसी हिसाब से फिर से बढ़ाता है).

JSON के काेड में दिखाना
{
  "displayName": string,
  "pickups": [
    {
      object (VisitRequest)
    }
  ],
  "deliveries": [
    {
      object (VisitRequest)
    }
  ],
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "allowedVehicleIndices": [
    integer
  ],
  "costsPerVehicle": [
    number
  ],
  "costsPerVehicleIndices": [
    integer
  ],
  "pickupToDeliveryAbsoluteDetourLimit": string,
  "pickupToDeliveryTimeLimit": string,
  "shipmentType": string,
  "label": string,
  "ignore": boolean,
  "penaltyCost": number,
  "pickupToDeliveryRelativeDetourLimit": number
}
फ़ील्ड
displayName

string

शिपमेंट का डिसप्ले नेम, जिसे उपयोगकर्ता ने तय किया है. यह ज़्यादा से ज़्यादा 63 वर्णों का हो सकता है. इसमें UTF-8 वर्णों का इस्तेमाल किया जा सकता है.

pickups[]

object (VisitRequest)

शिपमेंट के लिए, पिकअप के अन्य विकल्पों का सेट. अगर कोई जगह नहीं बताई गई है, तो वाहन को सिर्फ़ डिलीवरी की जगह पर जाना होगा.

deliveries[]

object (VisitRequest)

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

loadDemands

map (key: string, value: object (Load))

शिपमेंट के लोड की ज़रूरतें. जैसे, वज़न, वॉल्यूम, पैलेट की संख्या वगैरह. मैप में मौजूद कुंजियां, आइडेंटिफ़ायर होनी चाहिए. इनसे संबंधित लोड के टाइप के बारे में पता चलना चाहिए. इनमें इकाइयां भी शामिल होनी चाहिए. उदाहरण के लिए: "weight_kg", "volume_gallons", "pallet_count" वगैरह. अगर मैप में कोई कुंजी नहीं दिखती है, तो उससे जुड़े लोड को शून्य माना जाता है.

allowedVehicleIndices[]

integer

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

costsPerVehicle[]

number

इससे उस लागत का पता चलता है जो हर वाहन से इस शिपमेंट को डिलीवर करने पर आती है. अगर यह प्रॉपर्टी दी गई है, तो इसमें इनमें से कोई एक वैल्यू होनी चाहिए:

  • costsPerVehicleIndices के बराबर एलिमेंट होने चाहिए. costsPerVehicle[i], मॉडल के वाहन costsPerVehicleIndices[i] से मेल खाता है.
  • एलिमेंट की संख्या उतनी ही होनी चाहिए जितनी मॉडल में वाहनों की संख्या है. i-th एलिमेंट, मॉडल के वाहन #i से जुड़ा होता है.

ये लागतें penaltyCost की तरह ही एक ही यूनिट में होनी चाहिए और नेगेटिव नहीं होनी चाहिए. अगर ऐसी कोई लागत नहीं है, तो इस फ़ील्ड को खाली छोड़ दें.

costsPerVehicleIndices[]

integer

उन वाहनों के इंडेक्स जिन पर costsPerVehicle लागू होता है. अगर यह खाली नहीं है, तो इसमें एलिमेंट की संख्या costsPerVehicle के बराबर होनी चाहिए. वाहन के इंडेक्स को एक से ज़्यादा बार नहीं बताया जा सकता. अगर किसी वाहन को costsPerVehicleIndices से बाहर रखा गया है, तो उसकी कीमत शून्य होगी.

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

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

उदाहरण के लिए, मान लें कि t, चुने गए पिकअप विकल्प से सीधे चुने गए डिलीवरी विकल्प तक जाने में लगने वाला सबसे कम समय है. इसके बाद, pickupToDeliveryAbsoluteDetourLimit सेटिंग लागू होती है:

startTime(delivery) - startTime(pickup) <=
t + pickupToDeliveryAbsoluteDetourLimit

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

pickupToDeliveryTimeLimit

string (Duration format)

इससे यह पता चलता है कि शिपमेंट को पिकअप करने से लेकर उसकी डिलीवरी शुरू होने तक, ज़्यादा से ज़्यादा कितना समय लगेगा. अगर इसकी वैल्यू दी गई है, तो वह शून्य या उससे ज़्यादा होनी चाहिए. साथ ही, शिपमेंट में कम से कम एक पिकअप और एक डिलीवरी शामिल होनी चाहिए. यह इस बात पर निर्भर नहीं करता कि पिकअप और डिलीवरी के लिए कौनसे विकल्प चुने गए हैं. साथ ही, यह वाहन की स्पीड पर भी निर्भर नहीं करता. इसे ज़्यादा से ज़्यादा चक्कर लगाने की सीमाओं के साथ तय किया जा सकता है: समाधान में दोनों शर्तों का पालन किया जाएगा.

shipmentType

string

इस शिपमेंट के "टाइप" के बारे में बताने वाली स्ट्रिंग, जो खाली नहीं है. इस सुविधा का इस्तेमाल, shipment_types के बीच की ज़रूरी शर्तों या काम न करने की वजहों के बारे में बताने के लिए किया जा सकता है. इसके बारे में ज़्यादा जानने के लिए, ShipmentModel में shipmentTypeIncompatibilities और shipmentTypeRequirements देखें.

यह visitTypes से अलग है, जो सिर्फ़ एक विज़िट के लिए तय किया जाता है: एक ही शिपमेंट के सभी पिकअप/डिलीवरी के लिए, एक ही shipmentType शेयर किया जाता है.

label

string

इससे इस शिपमेंट के लिए लेबल तय होता है. इस लेबल की जानकारी, जवाब में उससे जुड़े ShipmentRoute.Visit के shipmentLabel में दी जाती है.

ignore

boolean

अगर यह वैल्यू true पर सेट है, तो इस शिपमेंट को छोड़ दें. हालांकि, penaltyCost लागू न करें.

अगर मॉडल में कोई shipmentTypeRequirements है, तो शिपमेंट को अनदेखा करने पर, पुष्टि करने से जुड़ी गड़बड़ी होती है.

injectedFirstSolutionRoutes या injectedSolutionConstraint में किए जाने वाले शिपमेंट को अनदेखा करने की अनुमति है. सॉल्वर, शिपमेंट के रूट से पिकअप/डिलीवरी की विज़िट हटा देता है. precedenceRules, जो अनदेखा किए गए शिपमेंट का रेफ़रंस देते हैं उन्हें भी अनदेखा कर दिया जाएगा.

penaltyCost

number

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

अहम जानकारी: अगर इस जुर्माने की जानकारी नहीं दी जाती है, तो इसे अनंत माना जाता है. इसका मतलब है कि शिपमेंट को पूरा करना ज़रूरी है.

pickupToDeliveryRelativeDetourLimit

number

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

उदाहरण के लिए, मान लें कि t, चुने गए पिकअप विकल्प से सीधे चुने गए डिलीवरी विकल्प तक जाने में लगने वाला सबसे कम समय है. इसके बाद, pickupToDeliveryRelativeDetourLimit सेटिंग लागू होती है:

startTime(delivery) - startTime(pickup) <=
std::ceil(t * (1.0 + pickupToDeliveryRelativeDetourLimit))

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

VisitRequest

किसी वाहन से विज़िट करने का अनुरोध: इसमें एक या दो भौगोलिक जगहें (नीचे देखें), टाइम विंडो के हिसाब से खुलने और बंद होने का समय, और सेवा की अवधि (सामान पिकअप या ड्रॉप करने के लिए वाहन के पहुंचने के बाद लगने वाला समय) शामिल होती है.

JSON के काेड में दिखाना
{
  "arrivalLocation": {
    object (LatLng)
  },
  "arrivalWaypoint": {
    object (Waypoint)
  },
  "departureLocation": {
    object (LatLng)
  },
  "departureWaypoint": {
    object (Waypoint)
  },
  "tags": [
    string
  ],
  "timeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "duration": string,
  "cost": number,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "visitTypes": [
    string
  ],
  "label": string,
  "avoidUTurns": boolean
}
फ़ील्ड
arrivalLocation

object (LatLng)

वह जगह जहां वाहन इस VisitRequest को पूरा करने के लिए पहुंचता है. अगर शिपमेंट मॉडल में अवधि और दूरी के मैट्रिक्स हैं, तो arrivalLocation की वैल्यू नहीं दी जानी चाहिए.

arrivalWaypoint

object (Waypoint)

वह वेपॉइंट जहां वाहन इस VisitRequest को पूरा करने के बाद पहुंचता है. अगर शिपमेंट मॉडल में अवधि और दूरी के मैट्रिक्स हैं, तो arrivalWaypoint की वैल्यू नहीं दी जानी चाहिए.

departureLocation

object (LatLng)

इस VisitRequest को पूरा करने के बाद, वाहन जिस जगह से रवाना होता है उसकी भौगोलिक जगह की जानकारी. अगर यह arrivalLocation के जैसा है, तो इसे हटाया जा सकता है. अगर शिपमेंट मॉडल में अवधि और दूरी के मैट्रिक्स हैं, तो departureLocation की वैल्यू नहीं दी जानी चाहिए.

departureWaypoint

object (Waypoint)

वह वेपॉइंट जहां से वाहन, इस VisitRequest को पूरा करने के बाद रवाना होता है. अगर यह arrivalWaypoint के जैसा है, तो इसे हटाया जा सकता है. अगर शिपमेंट मॉडल में अवधि और दूरी के मैट्रिक्स हैं, तो departureWaypoint की वैल्यू नहीं दी जानी चाहिए.

tags[]

string

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

timeWindows[]

object (TimeWindow)

टाइम विंडो, जो किसी विज़िट पर पहुंचने के समय को सीमित करती हैं. ध्यान दें कि कोई वाहन, पहुंचने के समय की विंडो के बाहर भी रवाना हो सकता है. इसका मतलब है कि पहुंचने का समय और अवधि, समय की विंडो के अंदर होना ज़रूरी नहीं है. अगर वाहन TimeWindow.start_time से पहले पहुंचता है, तो आपको इंतज़ार करना पड़ सकता है.

TimeWindow न होने का मतलब है कि वाहन किसी भी समय इस विज़िट को पूरा कर सकता है.

टाइम विंडो अलग-अलग होनी चाहिए.इसका मतलब है कि कोई भी टाइम विंडो, किसी दूसरी टाइम विंडो को ओवरलैप न करे या उसके बगल में न हो. साथ ही, वे बढ़ते क्रम में होनी चाहिए.

costPerHourAfterSoftEndTime और softEndTime को सिर्फ़ तब सेट किया जा सकता है, जब एक ही टाइम विंडो हो.

duration

string (Duration format)

विज़िट की अवधि, यानी कि वाहन के आने और जाने के बीच का समय. इसे इंतज़ार के संभावित समय में जोड़ा जाएगा; timeWindows देखें.

cost

number

वाहन के रास्ते में इस विज़िट के अनुरोध को पूरा करने की लागत. इसका इस्तेमाल, शिपमेंट के पिकअप या डिलीवरी के हर विकल्प के लिए अलग-अलग शुल्क चुकाने के लिए किया जा सकता है. यह लागत, Shipment.penalty_cost की यूनिट में होनी चाहिए और शून्य से कम नहीं होनी चाहिए.

loadDemands

map (key: string, value: object (Load))

इस विज़िट के अनुरोध की मांगें लोड करें. यह Shipment.load_demands फ़ील्ड की तरह ही है. हालांकि, यह पूरे Shipment के बजाय सिर्फ़ इस VisitRequest पर लागू होता है. यहां दी गई मांगें, Shipment.load_demands में दी गई मांगों में जोड़ दी जाती हैं.

visitTypes[]

string

इससे विज़िट के टाइप के बारे में पता चलता है. इसका इस्तेमाल, किसी वाहन को इस विज़िट को पूरा करने के लिए ज़रूरी अतिरिक्त समय देने के लिए किया जा सकता है (Vehicle.extra_visit_duration_for_visit_type देखें).

किसी टाइप को सिर्फ़ एक बार दिखाया जा सकता है.

label

string

इस VisitRequest के लिए लेबल तय करता है. इस लेबल को जवाब में, ShipmentRoute.Visit में visitLabel के तौर पर रिपोर्ट किया जाता है.

avoidUTurns

boolean

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

एक्सपेरिमेंट के तौर पर उपलब्ध: ज़्यादा जानकारी के लिए, https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request पर जाएं.

LatLng

अक्षांश/देशांतर के जोड़े को दिखाने वाला ऑब्जेक्ट. इसे अक्षांश और देशांतर की डिग्री दिखाने के लिए, डबल के पेयर के तौर पर दिखाया जाता है. जब तक कोई और जानकारी न दी जाए, तब तक यह ऑब्जेक्ट WGS84 स्टैंडर्ड के मुताबिक होना चाहिए. वैल्यू, सामान्य रेंज में होनी चाहिए.

JSON के काेड में दिखाना
{
  "latitude": number,
  "longitude": number
}
फ़ील्ड
latitude

number

डिग्री में अक्षांश. यह [-90.0, +90.0] की रेंज में होना चाहिए.

longitude

number

डिग्री में देशांतर. यह [-180.0, +180.0] की रेंज में होना चाहिए.

वेपॉइंट

यह वेपॉइंट को एनकैप्सुलेट करता है. वेपॉइंट, VisitRequest के पहुंचने और रवाना होने की जगहों के साथ-साथ, वाहनों के शुरुआती और आखिरी जगहों को मार्क करते हैं.

JSON के काेड में दिखाना
{
  "sideOfRoad": boolean,
  "vehicleStopover": boolean,

  // The following is a list of mutually exclusive fields. At most one of the
  // fields will be set in a response:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of mutually exclusive fields.
}
फ़ील्ड
sideOfRoad

boolean

ज़रूरी नहीं. इससे पता चलता है कि इस वेपॉइंट की जगह की जानकारी का मकसद, वाहन को सड़क के किसी खास हिस्से पर रोकना है. यह वैल्यू सेट करने पर, रास्ता उस जगह से होकर गुज़रेगा, ताकि वाहन सड़क के उस किनारे पर रुक सके जिस तरफ़ वह जगह मौजूद है. यह विकल्प, 'पैदल' यात्रा मोड के लिए काम नहीं करता.

vehicleStopover

boolean

इससे पता चलता है कि वेपॉइंट, वाहनों के रुकने के लिए है. इसका मकसद, यात्रियों को पिक अप या ड्रॉप करना है. यह विकल्प सिर्फ़ 'DRIVING' ट्रैवल मोड के लिए काम करता है. साथ ही, 'locationType' की वैल्यू 'location' होने पर ही काम करता है.

एक्सपेरिमेंट के तौर पर: इस फ़ील्ड के काम करने के तरीके या मौजूदगी में आने वाले समय में बदलाव हो सकता है.

किसी जगह को दिखाने के अलग-अलग तरीके. यहां ऐसे फ़ील्ड की सूची दी गई है जो एक-दूसरे से अलग हैं. जवाब में, ज़्यादा से ज़्यादा एक फ़ील्ड सेट किया जाएगा:
location

object (Location)

भौगोलिक निर्देशांकों का इस्तेमाल करके तय की गई जगह. इसमें वैकल्पिक हेडिंग भी शामिल है.

placeId

string

वेपॉइंट से जुड़ा, लोकप्रिय जगह का आईडी.

VisitRequest में, आने या जाने की जगह की जानकारी देने के लिए, जगह के आईडी का इस्तेमाल करें. इसके लिए, ऐसा आईडी इस्तेमाल करें जिससे जगह की जानकारी देने के लिए, अक्षांश और देशांतर की जानकारी मिल सके. उदाहरण के लिए, किसी इमारत को दिखाने वाली जगह का आईडी सही है. हालांकि, किसी सड़क को दिखाने वाली जगह का आईडी इस्तेमाल करने का सुझाव नहीं दिया जाता.

एक-दूसरे से अलग फ़ील्ड का अंत.

जगह

यह किसी जगह की जानकारी को एन्कैप्सुलेट करता है. इसमें भौगोलिक पॉइंट और हेडिंग शामिल होती है. हालांकि, हेडिंग देना ज़रूरी नहीं है.

JSON के काेड में दिखाना
{
  "latLng": {
    object (LatLng)
  },
  "heading": integer
}
फ़ील्ड
latLng

object (LatLng)

वेपॉइंट के भौगोलिक निर्देशांक.

heading

integer

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

TimeWindow

टाइम विंडो, किसी इवेंट के समय को सीमित करती हैं. जैसे, किसी विज़िट पर पहुंचने का समय या किसी वाहन के शुरू होने और खत्म होने का समय.

समयसीमा की तय सीमाएं, startTime और endTime, इवेंट के शुरू होने और खत्म होने के समय को लागू करती हैं, जैसे कि startTime <= event_time <= endTime. सॉफ़्ट टाइम विंडो की निचली सीमा, softStartTime, यह बताती है कि इवेंट को softStartTime पर या उसके बाद होना चाहिए. इसके लिए, इवेंट के softStartTime से पहले होने के समय के अनुपात में लागत तय की जाती है. सॉफ़्ट टाइम विंडो की ऊपरी सीमा, softEndTime, यह बताती है कि इवेंट को softEndTime पर या उससे पहले होना चाहिए. अगर इवेंट के बाद होता है, तो उसके लिए लागत चुकानी होगी. यह लागत इस बात पर निर्भर करती है कि इवेंट softEndTime के कितने समय बाद हुआ. startTime, endTime, softStartTime, और softEndTime, ग्लोबल टाइम लिमिट के अंदर होने चाहिए (ShipmentModel.global_start_time और ShipmentModel.global_end_time देखें). साथ ही, इनका पालन करना चाहिए:

  0 <= `startTime` <= `endTime` and
  0 <= `startTime` <= `softStartTime` and
  0 <= `softEndTime` <= `endTime`.
JSON के काेड में दिखाना
{
  "startTime": string,
  "endTime": string,
  "softStartTime": string,
  "softEndTime": string,
  "costPerHourBeforeSoftStartTime": number,
  "costPerHourAfterSoftEndTime": number
}
फ़ील्ड
startTime

string (Timestamp format)

हार्ड टाइम विंडो शुरू होने का समय. अगर इसे तय नहीं किया जाता है, तो इसे ShipmentModel.global_start_time पर सेट कर दिया जाएगा.

यह आरएफ़सी 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".

endTime

string (Timestamp format)

हार्ड टाइम विंडो के खत्म होने का समय. अगर इसे तय नहीं किया जाता है, तो इसे ShipmentModel.global_end_time पर सेट कर दिया जाएगा.

यह आरएफ़सी 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".

softStartTime

string (Timestamp format)

समयसीमा शुरू होने का सॉफ़्ट टाइम.

यह आरएफ़सी 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".

softEndTime

string (Timestamp format)

समयसीमा खत्म होने का सॉफ़्ट एंड टाइम.

यह आरएफ़सी 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".

costPerHourBeforeSoftStartTime

number

अगर इवेंट, softStartTime से पहले होता है, तो मॉडल में अन्य लागतों में हर घंटे की लागत जोड़ी जाती है. इसका हिसाब इस तरह लगाया जाता है:

   max(0, softStartTime - t.seconds)
                          * costPerHourBeforeSoftStartTime / 3600,
t being the time of the event.

यह लागत पॉज़िटिव होनी चाहिए. साथ ही, इस फ़ील्ड को सिर्फ़ तब सेट किया जा सकता है, जब softStartTime सेट किया गया हो.

costPerHourAfterSoftEndTime

number

अगर इवेंट softEndTime के बाद होता है, तो मॉडल में अन्य लागतों में हर घंटे की लागत जोड़ी जाती है. इसका हिसाब इस तरह लगाया जाता है:

   max(0, t.seconds - softEndTime.seconds)
                    * costPerHourAfterSoftEndTime / 3600,
t being the time of the event.

यह लागत पॉज़िटिव होनी चाहिए. साथ ही, इस फ़ील्ड को सिर्फ़ तब सेट किया जा सकता है, जब softEndTime को सेट किया गया हो.

वाहन

शिपमेंट की समस्या में किसी वाहन को मॉडल करता है. शिपमेंट की समस्या हल करने से, इस वाहन के लिए startLocation से शुरू होकर endLocation पर खत्म होने वाला रास्ता बन जाएगा. रूट, विज़िट का क्रम होता है (ShipmentRoute देखें).

JSON के काेड में दिखाना
{
  "displayName": string,
  "travelMode": enum (TravelMode),
  "routeModifiers": {
    object (RouteModifiers)
  },
  "startLocation": {
    object (LatLng)
  },
  "startWaypoint": {
    object (Waypoint)
  },
  "endLocation": {
    object (LatLng)
  },
  "endWaypoint": {
    object (Waypoint)
  },
  "startTags": [
    string
  ],
  "endTags": [
    string
  ],
  "startTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "endTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "unloadingPolicy": enum (UnloadingPolicy),
  "loadLimits": {
    string: {
      object (LoadLimit)
    },
    ...
  },
  "costPerHour": number,
  "costPerTraveledHour": number,
  "costPerKilometer": number,
  "fixedCost": number,
  "usedIfRouteIsEmpty": boolean,
  "routeDurationLimit": {
    object (DurationLimit)
  },
  "travelDurationLimit": {
    object (DurationLimit)
  },
  "routeDistanceLimit": {
    object (DistanceLimit)
  },
  "extraVisitDurationForVisitType": {
    string: string,
    ...
  },
  "breakRule": {
    object (BreakRule)
  },
  "label": string,
  "ignore": boolean,
  "travelDurationMultiple": number
}
फ़ील्ड
displayName

string

वाहन का डिसप्ले नेम, जिसे उपयोगकर्ता ने तय किया है. यह ज़्यादा से ज़्यादा 63 वर्णों का हो सकता है. इसमें UTF-8 वर्णों का इस्तेमाल किया जा सकता है.

travelMode

enum (TravelMode)

यात्रा का मोड, जिससे वाहन के इस्तेमाल की जा सकने वाली सड़कों और उसकी स्पीड पर असर पड़ता है. travelDurationMultiple भी देखें.

routeModifiers

object (RouteModifiers)

शर्तों का एक सेट, जो किसी वाहन के लिए रास्ते का हिसाब लगाने के तरीके पर असर डालता है.

startLocation

object (LatLng)

वह भौगोलिक जगह जहां से वाहन, शिपमेंट को पिक अप करने के लिए रवाना होता है. अगर यह जानकारी नहीं दी जाती है, तो वाहन अपने पहले पिकअप से शुरू होता है. अगर शिपमेंट मॉडल में अवधि और दूरी के मैट्रिक्स हैं, तो startLocation की वैल्यू नहीं दी जानी चाहिए.

startWaypoint

object (Waypoint)

यह वेपॉइंट, उस भौगोलिक जगह को दिखाता है जहां से वाहन किसी शिपमेंट को पिक अप करने के लिए निकलता है. अगर startWaypoint और startLocation, दोनों में से कोई भी वैल्यू तय नहीं की गई है, तो वाहन अपनी पहली पिकअप लोकेशन से शुरू होता है. अगर शिपमेंट मॉडल में अवधि और दूरी के मैट्रिक्स हैं, तो startWaypoint की वैल्यू नहीं दी जानी चाहिए.

endLocation

object (LatLng)

वह भौगोलिक जगह जहां वाहन अपनी आखिरी VisitRequest पूरी करने के बाद रुकता है. अगर यह जानकारी नहीं दी जाती है, तो वाहन की ShipmentRoute, आखिरी VisitRequest पूरी होने के तुरंत बाद खत्म हो जाती है. अगर शिपमेंट मॉडल में अवधि और दूरी के मैट्रिक्स हैं, तो endLocation की वैल्यू नहीं दी जानी चाहिए.

endWaypoint

object (Waypoint)

वेपॉइंट, उस भौगोलिक जगह को दिखाता है जहां वाहन अपनी आखिरी VisitRequest पूरी करने के बाद रुकता है. अगर endWaypoint या endLocation में से कोई भी वैल्यू नहीं दी गई है, तो वाहन की ShipmentRoute, आखिरी VisitRequest पूरी होने के तुरंत बाद खत्म हो जाती है. अगर शिपमेंट मॉडल में अवधि और दूरी के मैट्रिक्स हैं, तो endWaypoint की वैल्यू नहीं दी जानी चाहिए.

startTags[]

string

इससे वाहन के रास्ते की शुरुआत में अटैच किए गए टैग के बारे में पता चलता है.

खाली या डुप्लीकेट स्ट्रिंग इस्तेमाल करने की अनुमति नहीं है.

endTags[]

string

इससे वाहन के रास्ते के आखिर में अटैच किए गए टैग के बारे में पता चलता है.

खाली या डुप्लीकेट स्ट्रिंग इस्तेमाल करने की अनुमति नहीं है.

startTimeWindows[]

object (TimeWindow)

वह समयावधि जिसके दौरान वाहन अपनी शुरुआती जगह से रवाना हो सकता है. वे ग्लोबल टाइम लिमिट के अंदर होने चाहिए. इसके लिए, ShipmentModel.global_* फ़ील्ड देखें. अगर कोई समयसीमा तय नहीं की गई है, तो दुनिया भर में लागू होने वाली समयसीमाओं के अलावा कोई और सीमा नहीं है.

एक ही दोहराए गए फ़ील्ड से जुड़ी समयावधियां अलग-अलग होनी चाहिए.इसका मतलब है कि कोई भी समयावधि, किसी दूसरी समयावधि के साथ ओवरलैप नहीं होनी चाहिए या उसके बगल में नहीं होनी चाहिए. साथ ही, वे समयावधियां समय के क्रम में होनी चाहिए.

costPerHourAfterSoftEndTime और softEndTime को सिर्फ़ तब सेट किया जा सकता है, जब एक ही टाइम विंडो हो.

endTimeWindows[]

object (TimeWindow)

वह समयावधि जिसमें वाहन अपनी मंज़िल पर पहुंच सकता है. वे ग्लोबल टाइम लिमिट के अंदर होने चाहिए. इसके लिए, ShipmentModel.global_* फ़ील्ड देखें. अगर कोई समयसीमा तय नहीं की गई है, तो दुनिया भर में लागू होने वाली समयसीमाओं के अलावा कोई और सीमा नहीं है.

एक ही दोहराए गए फ़ील्ड से जुड़ी समयावधियां अलग-अलग होनी चाहिए.इसका मतलब है कि कोई भी समयावधि, किसी दूसरी समयावधि के साथ ओवरलैप नहीं होनी चाहिए या उसके बगल में नहीं होनी चाहिए. साथ ही, वे समयावधियां समय के क्रम में होनी चाहिए.

costPerHourAfterSoftEndTime और softEndTime को सिर्फ़ तब सेट किया जा सकता है, जब एक ही टाइम विंडो हो.

unloadingPolicy

enum (UnloadingPolicy)

वाहन पर अनलोडिंग की नीति लागू की गई.

loadLimits

map (key: string, value: object (LoadLimit))

वाहन की क्षमताएं (उदाहरण के लिए, वज़न, वॉल्यूम, पैलेट की संख्या). मैप में मौजूद कुंजियां, लोड के टाइप के आइडेंटिफ़ायर होती हैं. ये Shipment.load_demands फ़ील्ड की कुंजियों के मुताबिक होती हैं. अगर इस मैप में कोई कुंजी मौजूद नहीं है, तो उससे जुड़ी क्षमता को असीमित माना जाता है.

costPerHour

number

वाहन की कीमत: सभी कीमतों को जोड़कर, Shipment.penalty_cost वाली यूनिट में ही दिखाना चाहिए.

वाहन के रास्ते के लिए हर घंटे की लागत. यह लागत, रास्ते को पूरा करने में लगने वाले कुल समय पर लागू होती है. इसमें यात्रा में लगने वाला समय, इंतज़ार करने का समय, और विज़िट करने का समय शामिल है. सिर्फ़ costPerTraveledHour के बजाय costPerHour का इस्तेमाल करने से, इंतज़ार का समय बढ़ सकता है.

costPerTraveledHour

number

वाहन के रूट पर यात्रा के हर घंटे की लागत. यह लागत सिर्फ़ उस रास्ते से यात्रा करने में लगने वाले समय पर लागू होती है जो ShipmentRoute.transitions में बताया गया है. इसमें इंतज़ार करने और विज़िट करने में लगने वाला समय शामिल नहीं है.

costPerKilometer

number

वाहन के रूट के हिसाब से, हर किलोमीटर की लागत. यह शुल्क, ShipmentRoute.transitions में बताई गई दूरी पर लागू होता है. यह शुल्क, किसी एक VisitRequest के arrivalLocation से departureLocation तक की दूरी पर लागू नहीं होता.

fixedCost

number

अगर इस वाहन का इस्तेमाल शिपमेंट को हैंडल करने के लिए किया जाता है, तो तय की गई कीमत लागू होगी.

usedIfRouteIsEmpty

boolean

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

अगर यह वैल्यू true पर सेट है, तो वाहन अपनी शुरुआती जगह से आखिरी जगह तक जाता है. भले ही, वह कोई शिपमेंट डिलीवर न करे. साथ ही, शुरुआती जगह से आखिरी जगह तक की यात्रा में लगने वाले समय और दूरी की लागत को ध्यान में रखा जाता है.

ऐसा न होने पर, यह वाहन अपनी यात्रा के शुरुआती स्टॉप से आखिरी स्टॉप तक नहीं जाता. साथ ही, इस वाहन के लिए कोई breakRule या देरी (TransitionAttributes से) शेड्यूल नहीं की गई है. इस मामले में, वाहन के ShipmentRoute में वाहन के इंडेक्स और लेबल के अलावा कोई जानकारी नहीं होती.

routeDurationLimit

object (DurationLimit)

वाहन के रूट की कुल अवधि पर लागू की गई सीमा. किसी OptimizeToursResponse में, वाहन के रूट की अवधि, उसके vehicleEndTime और vehicleStartTime के बीच का अंतर होती है.

travelDurationLimit

object (DurationLimit)

वाहन के रास्ते की यात्रा की अवधि पर लागू सीमा. किसी OptimizeToursResponse में, रूट पर यात्रा करने में लगने वाला समय, उसके सभी transitions.travel_duration का योग होता है.

routeDistanceLimit

object (DistanceLimit)

वाहन के रूट की कुल दूरी पर सीमा लागू की गई है. किसी OptimizeToursResponse में, रास्ते की दूरी उसके सभी transitions.travel_distance_meters का योग होती है.

extraVisitDurationForVisitType

map (key: string, value: string (Duration format))

इससे visitTypes स्ट्रिंग से लेकर समयावधि तक का मैप तय होता है. यह समयावधि, VisitRequest.duration के अलावा वह समय है जो तय किए गए visitTypes के साथ विज़िट के दौरान लिया जाएगा. अगर costPerHour की वैल्यू दी गई है, तो इस अतिरिक्त समय के लिए शुल्क लिया जाता है. कुंजी (जैसे, visitTypes) खाली स्ट्रिंग नहीं हो सकती.

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

breakRule

object (BreakRule)

इस वाहन पर लागू होने वाले ब्रेक शेड्यूल के बारे में बताता है. अगर यह फ़ील्ड खाली है, तो इस वाहन के लिए कोई ब्रेक शेड्यूल नहीं किया जाएगा.

label

string

इससे इस वाहन के लिए लेबल तय होता है. इस लेबल को रिस्पॉन्स में, उससे जुड़े ShipmentRoute के vehicleLabel के तौर पर रिपोर्ट किया जाता है.

ignore

boolean

अगर इसकी वैल्यू true है, तो usedIfRouteIsEmpty की वैल्यू false होनी चाहिए. साथ ही, इस वाहन का इस्तेमाल नहीं किया जाएगा.

अगर injectedFirstSolutionRoutes में किसी शिपमेंट को अनदेखा किए गए वाहन से किया जाता है, तो उसे पहले समाधान में छोड़ दिया जाता है. हालांकि, जवाब में उसे शामिल किया जा सकता है.

अगर injectedSolutionConstraint में किसी शिपमेंट को अनदेखा किए गए वाहन से किया जाता है और उससे जुड़े किसी पिकअप/डिलीवरी को वाहन पर ही रहने के लिए मजबूर किया जाता है (यानी कि RELAX_ALL_AFTER_THRESHOLD लेवल पर छूट नहीं दी जाती है), तो उसे जवाब में छोड़ दिया जाता है. अगर किसी शिपमेंट के लिए allowedVehicleIndices फ़ील्ड खाली नहीं है और अनुमति वाले सभी वाहनों को अनदेखा कर दिया जाता है, तो उसे जवाब में शामिल नहीं किया जाता.

travelDurationMultiple

number

इससे, गुणा करने वाले ऐसे फ़ैक्टर के बारे में पता चलता है जिसका इस्तेमाल, इस वाहन की यात्रा में लगने वाले समय को बढ़ाने या घटाने के लिए किया जा सकता है. उदाहरण के लिए, इसे 2.0 पर सेट करने का मतलब है कि यह वाहन धीमा है और इसे यात्रा करने में स्टैंडर्ड वाहनों की तुलना में दोगुना समय लगता है. इस मल्टीपल से, विज़िट की अवधि पर कोई असर नहीं पड़ता. अगर costPerHour या costPerTraveledHour तय किया गया है, तो इससे लागत पर असर पड़ता है. यह वैल्यू, [0.001, 1000.0] की रेंज में होनी चाहिए. अगर इसे सेट नहीं किया जाता है, तो वाहन को स्टैंडर्ड माना जाता है और इस मल्टीपल को 1.0 माना जाता है.

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

नीचे extraVisitDurationForVisitType भी देखें.

TravelMode

यात्रा के ऐसे मोड जिनका इस्तेमाल वाहन कर सकते हैं.

ये Google Maps Platform के Routes API के यात्रा के मोड का सबसेट होने चाहिए. ज़्यादा जानकारी के लिए, यहां जाएं: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode

ध्यान दें: WALKING के रास्ते बीटा वर्शन में हैं. ऐसा हो सकता है कि कभी-कभी इनमें साफ़ फ़ुटपाथ या पैदल चलने वालों के लिए रास्ते न दिखें. आपको अपने ऐप्लिकेशन में दिखाए जाने वाले पैदल चलने के सभी रास्तों के लिए, उपयोगकर्ता को यह चेतावनी दिखानी होगी.

Enums
TRAVEL_MODE_UNSPECIFIED यात्रा के मोड की जानकारी नहीं दी गई है. यह DRIVING के बराबर है.
DRIVING ड्राइविंग के लिए रास्ते के निर्देशों (कार, ...) के हिसाब से यात्रा का मोड.
WALKING पैदल रास्ते की जानकारी के लिए यात्रा का मोड.
TWO_WHEELER दोपहिया, मोटर वाला वाहन. उदाहरण के लिए, मोटरसाइकिल. यात्रा का यह मोड सिर्फ़ उन देशों में काम करता है जिनकी सूची दो पहिया वाहनों के लिए उपलब्ध देश और इलाके में दी गई है.

RouteModifiers

वाहन के रूट का हिसाब लगाते समय, ज़रूरी शर्तों के सेट को शामिल करता है. यह Google Maps Platform Routes Preferred API में RouteModifiers जैसा ही है; देखें: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.

JSON के काेड में दिखाना
{
  "avoidTolls": boolean,
  "avoidHighways": boolean,
  "avoidFerries": boolean,
  "avoidIndoor": boolean
}
फ़ील्ड
avoidTolls

boolean

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

avoidHighways

boolean

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

avoidFerries

boolean

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

avoidIndoor

boolean

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

UnloadingPolicy

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

अन्य शिपमेंट, unloadingPolicy से अलग, रास्ते में कहीं भी हो सकते हैं.

Enums
UNLOADING_POLICY_UNSPECIFIED अनलोडिंग की नीति के बारे में नहीं बताया गया है; डिलीवरी, पिकअप के बाद ही होनी चाहिए.
LAST_IN_FIRST_OUT डिलीवरी, पिकअप के उल्टे क्रम में होनी चाहिए
FIRST_IN_FIRST_OUT डिलीवरी उसी क्रम में होनी चाहिए जिस क्रम में पिकअप किए गए हैं

LoadLimit

इससे किसी वाहन पर लोड की जाने वाली चीज़ों की सीमा तय होती है. उदाहरण के लिए, "इस ट्रक में सिर्फ़ 3,500 किलोग्राम तक का सामान ले जाया जा सकता है". loadLimits देखें.

JSON के काेड में दिखाना
{
  "softMaxLoad": string,
  "costPerUnitAboveSoftMax": number,
  "startLoadInterval": {
    object (Interval)
  },
  "endLoadInterval": {
    object (Interval)
  },
  "maxLoad": string,
  "costPerKilometer": {
    object (LoadCost)
  },
  "costPerTraveledHour": {
    object (LoadCost)
  }
}
फ़ील्ड
softMaxLoad

string (int64 format)

लोड की सॉफ़्ट लिमिट. costPerUnitAboveSoftMax देखें.

costPerUnitAboveSoftMax

number

अगर इस वाहन के रूट पर लोड कभी भी softMaxLoad से ज़्यादा हो जाता है, तो लागत पर यह जुर्माना लागू होता है (हर वाहन के लिए सिर्फ़ एक बार): (लोड - softMaxLoad) * costPerUnitAboveSoftMax. सभी लागतें जुड़ती हैं और Shipment.penalty_cost की तरह ही एक ही यूनिट में होनी चाहिए. सॉफ़्ट लिमिट सिर्फ़ उन टाइप पर तय की जा सकती हैं जो पूरे मॉडल में, सिर्फ़ पिकअप या सिर्फ़ डिलीवरी पर लागू होते हैं.

startLoadInterval

object (Interval)

रूट की शुरुआत में, वाहन में लोड किए जाने वाले सामान की तय सीमा.

endLoadInterval

object (Interval)

रूट के आखिर में, वाहन में लोड किए जाने वाले सामान की तय सीमा.

maxLoad

string (int64 format)

लोड की ज़्यादा से ज़्यादा स्वीकार्य मात्रा.

costPerKilometer

object (LoadCost)

इस वाहन के लिए, एक यूनिट लोड को एक किलोमीटर तक ले जाने की लागत. इसका इस्तेमाल, ईंधन की खपत के लिए प्रॉक्सी के तौर पर किया जा सकता है: अगर लोड, वज़न (न्यूटन में) है, तो लोड*किलोमीटर में ऊर्जा का डाइमेंशन होता है.

एक्सपेरिमेंट के तौर पर उपलब्ध: ज़्यादा जानकारी के लिए, https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request पर जाएं.

costPerTraveledHour

object (LoadCost)

इस वाहन के लिए, एक घंटे में एक यूनिट लोड के साथ यात्रा करने की लागत.

एक्सपेरिमेंट के तौर पर उपलब्ध: ज़्यादा जानकारी के लिए, https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request पर जाएं.

इंटरवल

लोड की जा सकने वाली रकम का इंटरवल.

JSON के काेड में दिखाना
{
  "min": string,
  "max": string
}
फ़ील्ड
min

string (int64 format)

कम से कम स्वीकार किया जाने वाला लोड. यह 0 से ज़्यादा या इसके बराबर होनी चाहिए. अगर दोनों एट्रिब्यूट की वैल्यू दी गई हैं, तो min की वैल्यू, max की वैल्यू से कम या उसके बराबर होनी चाहिए.

max

string (int64 format)

ज़्यादा से ज़्यादा स्वीकार किया जाने वाला लोड. यह 0 से ज़्यादा या इसके बराबर होनी चाहिए. अगर इस एट्रिब्यूट की वैल्यू सबमिट नहीं की जाती है, तो इस मैसेज के ज़रिए ज़्यादा से ज़्यादा लोड पर कोई पाबंदी नहीं लगाई जाती. अगर दोनों एट्रिब्यूट की वैल्यू दी गई हैं, तो min की वैल्यू, max की वैल्यू से कम या उसके बराबर होनी चाहिए.

LoadCost

Transition के दौरान, लोड की एक यूनिट को मूव करने की लागत. किसी लोड के लिए, लागत को दो हिस्सों में बांटा जाता है:

  • min(load, loadThreshold) * costPerUnitBelowThreshold
  • max(0, load - loadThreshold) * costPerUnitAboveThreshold

इस लागत के साथ, समाधानों में ज़्यादा मांग वाले ऑर्डर को पहले डिलीवर करने या ज़्यादा मांग वाले ऑर्डर को आखिर में पिकअप करने को प्राथमिकता दी जाती है. उदाहरण के लिए, अगर किसी वाहन में

load_limit {
  key: "weight"
  value {
    costPerKilometer {
      loadThreshold: 15
      costPerUnitBelowThreshold: 2.0
      costPerUnitAboveThreshold: 10.0
    }
  }
}

और इसका रूट start,pickup,pickup,delivery,delivery,end है. इसमें ये ट्रांज़िशन हैं:

transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }

तो इस LoadCost की लागत (cost_below * load_below * kilometers + cost_above * load_above * kms) होगी

  • ट्रांज़िशन 0: 0.0
  • ट्रांज़िशन 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • ट्रांज़िशन 2: 2.0 * 15 * 1.0 + 10.0 * (20 - 15) * 1.0 = 80.0
  • ट्रांज़िशन 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • ट्रांज़िशन 4: 0.0

इसलिए, इस रूट पर LoadCost की वैल्यू 120.0 है.

हालांकि, अगर रूट की शुरुआत, पिकअप, डिलीवरी, पिकअप, डिलीवरी, और ट्रांज़िशन के साथ खत्म होती है, तो:

transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }

तो इस LoadCost की लागत

  • ट्रांज़िशन 0: 0.0
  • ट्रांज़िशन 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • ट्रांज़िशन 2: 0.0
  • ट्रांज़िशन 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • ट्रांज़िशन 4: 0.0

यहां रूट पर LoadCost की वैल्यू 40.0 है.

LoadCost की वजह से, ज़्यादा ट्रांज़िशन वाले समाधानों की कीमत बढ़ जाती है.

एक्सपेरिमेंट के तौर पर उपलब्ध: ज़्यादा जानकारी के लिए, https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request पर जाएं.

JSON के काेड में दिखाना
{
  "loadThreshold": string,
  "costPerUnitBelowThreshold": number,
  "costPerUnitAboveThreshold": number
}
फ़ील्ड
loadThreshold

string (int64 format)

लोड की वह मात्रा जिसके बाद, लोड की एक यूनिट को भेजने की लागत, costPerUnitBelowThreshold से बदलकर costPerUnitAboveThreshold हो जाती है. यह 0 से ज़्यादा या इसके बराबर होनी चाहिए.

costPerUnitBelowThreshold

number

0 और थ्रेशोल्ड के बीच की हर यूनिट के लिए, लोड की एक यूनिट को मूव करने की लागत. यह एक सीमित वैल्यू होनी चाहिए और >= 0 होनी चाहिए.

costPerUnitAboveThreshold

number

थ्रेशोल्ड से ज़्यादा हर यूनिट के लिए, लोड की एक यूनिट को मूव करने की लागत. थ्रेशोल्ड = 0 होने पर, यह हर यूनिट के लिए तय की गई लागत होती है. यह एक सीमित वैल्यू होनी चाहिए और >= 0 होनी चाहिए.

DurationLimit

वाहन के रास्ते की ज़्यादा से ज़्यादा अवधि तय करने वाली सीमा. यह हार्ड या सॉफ़्ट हो सकता है.

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

JSON के काेड में दिखाना
{
  "maxDuration": string,
  "softMaxDuration": string,
  "quadraticSoftMaxDuration": string,
  "costPerHourAfterSoftMax": number,
  "costPerSquareHourAfterQuadraticSoftMax": number
}
फ़ील्ड
maxDuration

string (Duration format)

एक तय सीमा, जो अवधि को ज़्यादा से ज़्यादा maxDuration तक सीमित करती है.

softMaxDuration

string (Duration format)

यह एक सॉफ़्ट लिमिट है, जो ज़्यादा से ज़्यादा अवधि की सीमा लागू नहीं करती. हालांकि, इसका उल्लंघन करने पर रूट की लागत बढ़ जाती है. यह लागत, मॉडल में तय की गई अन्य लागतों में जुड़ जाती है. इन सभी लागतों की यूनिट एक ही होती है.

अगर softMaxDuration तय किया गया है, तो यह शून्य से कम नहीं होना चाहिए. अगर maxDuration भी तय किया गया है, तो softMaxDuration की वैल्यू maxDuration से कम होनी चाहिए.

quadraticSoftMaxDuration

string (Duration format)

यह एक सॉफ़्ट लिमिट है, जो ज़्यादा से ज़्यादा अवधि की सीमा लागू नहीं करती. हालांकि, इसका उल्लंघन करने पर, रास्ते की लागत बढ़ जाती है. यह लागत, अवधि के हिसाब से बढ़ती है. यह लागत, मॉडल में तय की गई अन्य लागतों में जुड़ जाती है. इन सभी लागतों की यूनिट एक ही होती है.

अगर quadraticSoftMaxDuration सेट है, तो ये शर्तें पूरी होनी चाहिए:

  • यह शून्य या इससे ज़्यादा होना चाहिए.
  • maxDuration को तय करना ज़रूरी है.
  • quadraticSoftMaxDuration की वैल्यू, maxDuration से कम होनी चाहिए.
  • दोनों तारीखों के बीच एक दिन से ज़्यादा का अंतर नहीं होना चाहिए: maxDuration - quadraticSoftMaxDuration <= 86400 seconds
costPerHourAfterSoftMax

number

softMaxDuration थ्रेशोल्ड का उल्लंघन होने पर, हर घंटे के हिसाब से लगने वाला शुल्क. अगर कॉल की अवधि थ्रेशोल्ड से कम है, तो कोई अतिरिक्त शुल्क नहीं लिया जाता. हालांकि, अगर कॉल की अवधि थ्रेशोल्ड से ज़्यादा है, तो इस तरह से शुल्क लिया जाता है:

  costPerHourAfterSoftMax * (duration - softMaxDuration)

लागत शून्य से ज़्यादा होनी चाहिए.

costPerSquareHourAfterQuadraticSoftMax

number

quadraticSoftMaxDuration थ्रेशोल्ड का उल्लंघन होने पर, हर स्क्वेयर घंटे के हिसाब से लगने वाली लागत.

अगर कॉल की अवधि थ्रेशोल्ड से कम है, तो कोई अतिरिक्त शुल्क नहीं लिया जाता. हालांकि, अगर कॉल की अवधि थ्रेशोल्ड से ज़्यादा है, तो इस तरह से शुल्क लिया जाता है:

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

लागत शून्य से ज़्यादा होनी चाहिए.

DistanceLimit

यह सीमा, तय की जा सकने वाली ज़्यादा से ज़्यादा दूरी तय करती है. यह हार्ड या सॉफ़्ट हो सकता है.

अगर सॉफ़्ट लिमिट तय की गई है, तो softMaxMeters और costPerKilometerAboveSoftMax, दोनों को तय करना ज़रूरी है. साथ ही, इनकी वैल्यू शून्य या उससे ज़्यादा होनी चाहिए.

JSON के काेड में दिखाना
{
  "maxMeters": string,
  "softMaxMeters": string,
  "costPerKilometerBelowSoftMax": number,
  "costPerKilometerAboveSoftMax": number
}
फ़ील्ड
maxMeters

string (int64 format)

यह एक ऐसी सीमा है जो दूरी को ज़्यादा से ज़्यादा maxMeters तक सीमित करती है. सीमा, शून्य से ज़्यादा होनी चाहिए.

softMaxMeters

string (int64 format)

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

अगर softMaxMeters की वैल्यू तय की गई है, तो यह maxMeters की वैल्यू से कम होनी चाहिए. साथ ही, यह वैल्यू शून्य या उससे ज़्यादा होनी चाहिए.

costPerKilometerBelowSoftMax

number

हर किलोमीटर के लिए तय की गई लागत, softMaxMeters तक बढ़ाई जा सकती है. इसके लिए, यह फ़ॉर्मूला इस्तेमाल किया जाता है:

  min(distanceMeters, softMaxMeters) / 1000.0 *
  costPerKilometerBelowSoftMax.

routeDistanceLimit में इस कीमत का इस्तेमाल नहीं किया जा सकता.

costPerKilometerAboveSoftMax

number

अगर दूरी softMaxMeters से ज़्यादा है, तो हर किलोमीटर के हिसाब से लगने वाला शुल्क. अगर दूरी तय की गई सीमा से कम है, तो अतिरिक्त शुल्क 0 होगा. ऐसा न होने पर, शुल्क का हिसाब लगाने के लिए इस फ़ॉर्मूला का इस्तेमाल किया जाता है:

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

लागत शून्य से ज़्यादा होनी चाहिए.

BreakRule

किसी वाहन के लिए टाइम ब्रेक जनरेट करने के नियम. जैसे, लंच ब्रेक. ब्रेक, समय की वह अवधि होती है जिसमें वाहन अपनी मौजूदा जगह पर रुका रहता है और कोई विज़िट नहीं कर सकता. ब्रेक तब हो सकता है, जब:

  • दो विज़िट के बीच यात्रा के दौरान (इसमें विज़िट से ठीक पहले या ठीक बाद का समय शामिल है, लेकिन विज़िट के बीच का समय शामिल नहीं है). इस मामले में, यह विज़िट के बीच के ट्रांज़िट समय को बढ़ा देता है,
  • या वाहन के शुरू होने से पहले (हो सकता है कि वाहन ब्रेक के बीच में शुरू न हो), ऐसे मामले में इससे वाहन के शुरू होने के समय पर कोई असर नहीं पड़ता.
  • या वाहन के बंद होने के बाद (वाहन के बंद होने के समय के साथ).
JSON के काेड में दिखाना
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
फ़ील्ड
breakRequests[]

object (BreakRequest)

ब्रेक का क्रम. BreakRequest मैसेज देखें.

frequencyConstraints[]

object (FrequencyConstraint)

कई FrequencyConstraint लागू हो सकते हैं. इस BreakRule के BreakRequest को इन सभी शर्तों को पूरा करना होगा. FrequencyConstraint देखें.

BreakRequest

हर वाहन पर लागू होने वाले ब्रेक के क्रम (यानी, उनकी संख्या और क्रम) के बारे में पहले से पता होना चाहिए. बार-बार आने वाले BreakRequest, उस क्रम को तय करते हैं जिसमें उन्हें होना चाहिए. उनकी टाइम विंडो (earliestStartTime / latestStartTime) ओवरलैप हो सकती हैं. हालांकि, वे ऑर्डर के साथ काम करती हों (इसकी जांच की जाती है).

JSON के काेड में दिखाना
{
  "earliestStartTime": string,
  "latestStartTime": string,
  "minDuration": string
}
फ़ील्ड
earliestStartTime

string (Timestamp format)

ज़रूरी है. ब्रेक शुरू होने का समय (शामिल है).

यह आरएफ़सी 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".

latestStartTime

string (Timestamp format)

ज़रूरी है. ब्रेक शुरू होने की ऊपरी सीमा (शामिल है).

यह आरएफ़सी 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".

minDuration

string (Duration format)

ज़रूरी है. ब्रेक की कम से कम अवधि. वैल्यू का पॉज़िटिव होना ज़रूरी है.

FrequencyConstraint

ऊपर बताए गए ब्रेक की फ़्रीक्वेंसी और अवधि को और सीमित किया जा सकता है. इसके लिए, ब्रेक की कम से कम फ़्रीक्वेंसी लागू की जा सकती है. जैसे, "हर 12 घंटे में कम से कम 1 घंटे का ब्रेक होना चाहिए". मान लें कि इसे इस तरह समझा जा सकता है, "12 घंटे की किसी भी स्लाइडिंग टाइम विंडो में, कम से कम एक घंटे का एक ब्रेक होना चाहिए". इस उदाहरण को इस तरह से FrequencyConstraint में बदला जाएगा:

{
   minBreakDuration { seconds: 3600 }         # 1 hour.
   maxInterBreakDuration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}

समाधान में ब्रेक का समय और अवधि, इन सभी पाबंदियों के मुताबिक होगी. साथ ही, BreakRequest में पहले से तय की गई समयसीमा और कम से कम अवधि का भी ध्यान रखा जाएगा.

FrequencyConstraint को लगातार न लिए जाने वाले ब्रेक पर लागू किया जा सकता है. उदाहरण के लिए, यहां दिया गया शेड्यूल "हर 12 घंटे में एक घंटा" के उदाहरण का पालन करता है:

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
JSON के काेड में दिखाना
{
  "minBreakDuration": string,
  "maxInterBreakDuration": string
}
फ़ील्ड
minBreakDuration

string (Duration format)

ज़रूरी है. इस शर्त के लिए, ब्रेक की कम से कम अवधि. नॉन-नेगेटिव. FrequencyConstraint के बारे में जानकारी देखें.

maxInterBreakDuration

string (Duration format)

ज़रूरी है. रास्ते में किसी भी समयावधि के लिए, ज़्यादा से ज़्यादा अनुमति वाली अवधि. इसमें कम से कम duration >= minBreakDuration का ब्रेक शामिल नहीं है. वैल्यू का पॉज़िटिव होना ज़रूरी है.

मकसद

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

एक्सपेरिमेंटल: ज़्यादा जानकारी के लिए, https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request पर जाएं.

JSON के काेड में दिखाना
{
  "type": enum (Type),
  "weight": number
}
फ़ील्ड
type

enum (Type)

मकसद का टाइप.

weight

number

अन्य लक्ष्यों की तुलना में, इस लक्ष्य को कितनी अहमियत दी जानी चाहिए. यह कोई भी नॉन-नेगेटिव नंबर हो सकता है. यह ज़रूरी नहीं है कि वेट का योग 1 हो. वज़न की डिफ़ॉल्ट वैल्यू 1.0 होती है.

टाइप

मकसद का टाइप, जिसे लागतों के सेट से मैप किया जाएगा.

Enums
DEFAULT लागतों के डिफ़ॉल्ट सेट का इस्तेमाल किया जाएगा, ताकि सही समाधान मिल सके. ध्यान दें: इस मकसद का इस्तेमाल अपने-आप किया जा सकता है. हालांकि, अगर यह पहले से मौजूद नहीं है, तो इसे उपयोगकर्ता के तय किए गए मकसद में, बेसलाइन के तौर पर 1.0 वेट के साथ भी जोड़ा जाएगा.
MIN_DISTANCE "MIN" ऑब्जेक्टिव. तय की गई कुल दूरी को कम करना.
MIN_WORKING_TIME सभी वाहनों के लिए, काम करने के कुल समय को कम करना.
MIN_TRAVEL_TIME यह ऊपर दिए गए उदाहरण की तरह ही है. हालांकि, इसमें सिर्फ़ यात्रा में लगने वाले समय पर फ़ोकस किया गया है.
MIN_NUM_VEHICLES इस्तेमाल किए जाने वाले वाहनों की संख्या कम करना.

DurationDistanceMatrix

यह विज़िट और वाहन के शुरुआती जगहों से लेकर, विज़िट और वाहन के आखिरी जगहों तक की अवधि और दूरी का मैट्रिक्स तय करता है.

JSON के काेड में दिखाना
{
  "rows": [
    {
      object (Row)
    }
  ],
  "vehicleStartTag": string
}
फ़ील्ड
rows[]

object (Row)

इससे अवधि और दूरी के मैट्रिक्स की पंक्तियों के बारे में पता चलता है. इसमें ShipmentModel.duration_distance_matrix_src_tags जितने एलिमेंट होने चाहिए.

vehicleStartTag

string

यह टैग बताता है कि समय और दूरी का यह मैट्रिक्स किन वाहनों पर लागू होता है. अगर यह फ़ील्ड खाली है, तो यह सभी वाहनों पर लागू होता है. साथ ही, सिर्फ़ एक मैट्रिक्स हो सकता है.

हर वाहन की शुरुआत, सिर्फ़ एक मैट्रिक्स से मैच होनी चाहिए.इसका मतलब है कि उनके startTags फ़ील्ड में से सिर्फ़ एक फ़ील्ड, किसी मैट्रिक्स के vehicleStartTag से मैच होना चाहिए. साथ ही, वह सिर्फ़ उसी मैट्रिक्स से मैच होना चाहिए.

सभी मैट्रिक्स में अलग-अलग vehicleStartTag होने चाहिए.

पंक्ति

इससे अवधि और दूरी के मैट्रिक्स की पंक्ति के बारे में पता चलता है.

JSON के काेड में दिखाना
{
  "durations": [
    string
  ],
  "meters": [
    number
  ]
}
फ़ील्ड
durations[]

string (Duration format)

किसी पंक्ति के लिए अवधि की वैल्यू. इसमें ShipmentModel.duration_distance_matrix_dst_tags जितने एलिमेंट होने चाहिए.

meters[]

number

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

TransitionAttributes

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

JSON के काेड में दिखाना
{
  "srcTag": string,
  "excludedSrcTag": string,
  "dstTag": string,
  "excludedDstTag": string,
  "cost": number,
  "costPerKilometer": number,
  "distanceLimit": {
    object (DistanceLimit)
  },
  "delay": string
}
फ़ील्ड
srcTag

string

ये टैग, (src->dst) ट्रांज़िशन के सेट को तय करते हैं जिन पर ये एट्रिब्यूट लागू होते हैं.

सोर्स विज़िट या वाहन के चलने की शुरुआत तब मैच होती है, जब उसके VisitRequest.tags या Vehicle.start_tags में srcTag शामिल हो या excludedSrcTag शामिल न हो. यह इस बात पर निर्भर करता है कि इन दोनों फ़ील्ड में से कौनसा फ़ील्ड खाली नहीं है.

excludedSrcTag

string

srcTag देखें. srcTag और excludedSrcTag में से किसी एक को खाली नहीं छोड़ा जा सकता.

dstTag

string

डेस्टिनेशन विज़िट या वाहन की यात्रा का आखिरी पड़ाव सिर्फ़ तब मैच होता है, जब उसके VisitRequest.tags या Vehicle.end_tags में dstTag शामिल हो या excludedDstTag शामिल न हो. यह इस बात पर निर्भर करता है कि इन दोनों फ़ील्ड में से कौनसा फ़ील्ड खाली नहीं है.

excludedDstTag

string

dstTag देखें. dstTag और excludedDstTag में से किसी एक को खाली नहीं छोड़ा जा सकता.

cost

number

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

costPerKilometer

number

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

distanceLimit

object (DistanceLimit)

इससे यह तय होता है कि इस ट्रांज़िशन के दौरान, कर्सर को कितनी दूरी तक मूव किया जा सकता है.

जून 2021 से, सिर्फ़ सॉफ़्ट लिमिट का इस्तेमाल किया जा सकता है.

delay

string (Duration format)

इससे पता चलता है कि इस ट्रांज़िशन को पूरा करने में कितनी देरी हुई.

यह देरी हमेशा सोर्स विज़िट खत्म होने के बाद और डेस्टिनेशन विज़िट शुरू होने से पहले होती है.

ShipmentTypeIncompatibility

इससे शिपमेंट के टाइप के आधार पर, शिपमेंट के बीच की असंगतताओं के बारे में पता चलता है. एक ही रास्ते पर, साथ में डिलीवर न किए जा सकने वाले शिपमेंट को दिखाने पर पाबंदी होती है. यह पाबंदी, साथ में डिलीवर न किए जा सकने वाले शिपमेंट के मोड के आधार पर लगाई जाती है.

JSON के काेड में दिखाना
{
  "types": [
    string
  ],
  "incompatibilityMode": enum (IncompatibilityMode)
}
फ़ील्ड
types[]

string

काम न करने वाले टाइप की सूची. सूची में शामिल शिपमेंट में से, दो शिपमेंट के लिए shipment_types की वैल्यू अलग-अलग होने पर, उन्हें "असंगत" माना जाता है.

incompatibilityMode

enum (IncompatibilityMode)

काम न करने की समस्या पर लागू किया गया मोड.

IncompatibilityMode

ऐसे मोड जो यह तय करते हैं कि एक ही रूट पर, एक-दूसरे के साथ न भेजे जा सकने वाले शिपमेंट को कैसे रोका जाए.

Enums
INCOMPATIBILITY_MODE_UNSPECIFIED इनकंपैटिबिलिटी मोड के बारे में नहीं बताया गया है. इस वैल्यू का इस्तेमाल कभी नहीं किया जाना चाहिए.
NOT_PERFORMED_BY_SAME_VEHICLE इस मोड में, एक-दूसरे के साथ न रखे जा सकने वाले दो शिपमेंट को एक ही वाहन में नहीं रखा जा सकता.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

इस मोड में, एक-दूसरे के साथ काम न करने वाले दो शिपमेंट को एक ही समय पर एक ही वाहन में नहीं रखा जा सकता:

  • वे एक ही वाहन को सिर्फ़ तब शेयर कर सकते हैं, जब एक ऑर्डर की डिलीवरी, दूसरे ऑर्डर को पिक अप करने से पहले हो जाए.
  • जब दोनों शिपमेंट सिर्फ़ पिकअप (कोई डिलीवरी नहीं) या सिर्फ़ डिलीवरी (कोई पिकअप नहीं) के लिए हों, तो उन्हें एक ही वाहन से नहीं भेजा जा सकता.

ShipmentTypeRequirement

शिपमेंट के टाइप के आधार पर, शिपमेंट के बीच की ज़रूरी शर्तें तय करता है. ज़रूरी शर्त के मोड से, ज़रूरी शर्त की जानकारी तय होती है.

JSON के काेड में दिखाना
{
  "requiredShipmentTypeAlternatives": [
    string
  ],
  "dependentShipmentTypes": [
    string
  ],
  "requirementMode": enum (RequirementMode)
}
फ़ील्ड
requiredShipmentTypeAlternatives[]

string

dependentShipmentTypes के लिए ज़रूरी शिपमेंट के अन्य टाइप की सूची.

dependentShipmentTypes[]

string

dependentShipmentTypes फ़ील्ड में मौजूद टाइप वाले सभी शिपमेंट के लिए, उसी रूट पर requiredShipmentTypeAlternatives टाइप का कम से कम एक शिपमेंट डिलीवर करना ज़रूरी है.

ध्यान दें: ज़रूरी शर्तों की ऐसी चेन बनाने की अनुमति नहीं है जिसमें कोई shipmentType खुद पर निर्भर हो.

requirementMode

enum (RequirementMode)

ज़रूरी शर्त पर लागू किया गया मोड.

RequirementMode

किसी रूट पर, एक-दूसरे पर निर्भर शिपमेंट के दिखने के तरीके.

Enums
REQUIREMENT_MODE_UNSPECIFIED ज़रूरी शर्त का मोड नहीं बताया गया है. इस वैल्यू का इस्तेमाल कभी नहीं किया जाना चाहिए.
PERFORMED_BY_SAME_VEHICLE इस मोड में, "निर्भर" शिपमेंट को कम से कम एक "ज़रूरी" शिपमेंट के साथ एक ही वाहन में भेजना ज़रूरी है.
IN_SAME_VEHICLE_AT_PICKUP_TIME

IN_SAME_VEHICLE_AT_PICKUP_TIME मोड में, "निर्भर" शिपमेंट को पिकअप करते समय, वाहन में कम से कम एक "ज़रूरी" शिपमेंट होना चाहिए.

इसलिए, "डिपेंडेंट" शिपमेंट पिकअप में इनमें से कोई एक होना चाहिए:

  • डिलीवरी के लिए "ज़रूरी" शिपमेंट, तय समय के बाद डिलीवर किया गया हो या
  • "ज़रूरी" शिपमेंट को उससे पहले के रास्ते पर पिक अप किया गया हो. साथ ही, अगर "ज़रूरी" शिपमेंट की डिलीवरी करनी है, तो यह डिलीवरी "निर्भर" शिपमेंट के पिकअप के बाद की जानी चाहिए.
IN_SAME_VEHICLE_AT_DELIVERY_TIME यह पहले जैसा ही है. हालांकि, "निर्भर" शिपमेंट की डिलीवरी के समय, उनके वाहन में "ज़रूरी" शिपमेंट होना चाहिए.

PrecedenceRule

दो इवेंट के बीच प्राथमिकता का नियम (हर इवेंट, शिपमेंट का पिकअप या डिलीवरी है): "दूसरा" इवेंट, "पहले" इवेंट के शुरू होने के कम से कम offsetDuration बाद शुरू होना चाहिए.

एक ही (या मिलते-जुलते) इवेंट के लिए, कई प्राथमिकताएं हो सकती हैं. उदाहरण के लिए, "A की डिलीवरी के बाद B को पिकअप किया जाता है" और "B के पिकअप के बाद C को पिकअप किया जाता है".

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

JSON के काेड में दिखाना
{
  "firstIsDelivery": boolean,
  "secondIsDelivery": boolean,
  "offsetDuration": string,
  "firstIndex": integer,
  "secondIndex": integer
}
फ़ील्ड
firstIsDelivery

boolean

इससे पता चलता है कि "पहला" इवेंट, डिलीवरी है या नहीं.

secondIsDelivery

boolean

इससे पता चलता है कि "दूसरा" इवेंट, डिलीवरी है या नहीं.

offsetDuration

string (Duration format)

"पहले" और "दूसरे" इवेंट के बीच का ऑफ़सेट. यह नेगेटिव हो सकता है.

firstIndex

integer

"पहले" इवेंट का शिपमेंट इंडेक्स. इस फ़ील्ड में जानकारी देना ज़रूरी है.

secondIndex

integer

"दूसरे" इवेंट का शिपमेंट इंडेक्स. इस फ़ील्ड में जानकारी देना ज़रूरी है.