ShipmentModel

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

  • वाहनों को रूट करने की लागत (कुल समय के हिसाब से लागत, यात्रा के समय के हिसाब से लागत, और सभी वाहनों के लिए तय लागत का योग).
  • शिपमेंट न करने पर लगने वाले जुर्माने.
  • शिपमेंट की पूरी अवधि के लिए खरीदार से लिया जाने वाला शुल्क
JSON के काेड में दिखाना
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "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)

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

globalStartTime

string (Timestamp format)

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

मॉडल का टाइम स्पैन एक साल से कम होना चाहिए. इसका मतलब है कि globalEndTime और globalStartTime, दोनों एक-दूसरे से 31,536,000 सेकंड के अंदर होने चाहिए.

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

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

globalEndTime

string (Timestamp format)

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

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

globalDurationCostPerHour

number

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

durationDistanceMatrices[]

object (DurationDistanceMatrix)

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

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

  • दो जगहें हैं: locA और locB.
  • एक वाहन, locA से अपना रास्ता शुरू करता है और locA पर खत्म करता है.
  • locB पर पिकअप के लिए एक अनुरोध.
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 तक का रास्ता तय करता है. इसके लिए, मैट्रिक "fast" का इस्तेमाल किया जाता है.
  • एक वाहन, 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), मैट्रिक i में टैग durationDistanceMatrixSrcTags(j) वाली विज़िट से अन्य विज़िट तक के कुल समय और दूरी की जानकारी देता है.

टैग, 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)

shipment_types के ऐसे सेट जो साथ काम नहीं करते (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-वां एलिमेंट, मॉडल के वाहन #i से जुड़ा होता है.

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

costsPerVehicleIndices[]

integer

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

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

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

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

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

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

सेकंड में कुल अवधि, जिसमें दशमलव के बाद नौ अंक हो सकते हैं. यह अवधि 's' पर खत्म होती है. उदाहरण: "3.5s".

pickupToDeliveryTimeLimit

string (Duration format)

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

सेकंड में कुल अवधि, जिसमें दशमलव के बाद नौ अंक हो सकते हैं. यह अवधि 's' पर खत्म होती है. उदाहरण: "3.5s".

shipmentType

string

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

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

label

string

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

ignore

boolean

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

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

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

penaltyCost

number

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

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

pickupToDeliveryRelativeDetourLimit

number

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

उदाहरण के लिए, मान लें कि 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
}
फ़ील्ड
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 देखें.

सेकंड में कुल अवधि, जिसमें दशमलव के बाद नौ अंक हो सकते हैं. यह अवधि 's' पर खत्म होती है. उदाहरण: "3.5s".

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 के तौर पर रिपोर्ट किया जाता है.

LatLng

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

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

number

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

longitude

number

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

वेपॉइंट

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

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

  // Union field location_type can be only one of the following:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of list of possible types for union field location_type.
}
फ़ील्ड
sideOfRoad

boolean

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

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

object (Location)

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

placeId

string

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

जगह

किसी जगह (भौगोलिक पॉइंट और वैकल्पिक हेडिंग) को एन्कैप्सुलेट करता है.

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

object (LatLng)

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

heading

integer

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

TimeWindow

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

टाइम विंडो की सीमाएं, startTime और endTime, इवेंट के शुरू और खत्म होने के समय को तय करती हैं, जैसे कि startTime <= event_time <= endTime. सॉफ्ट टाइम विंडो की निचली सीमा, softStartTime, यह बताती है कि इवेंट softStartTime पर या उसके बाद होना चाहिए. इसके लिए, इवेंट के शुरू होने से सॉफ्टStartTime के बीच के समय के हिसाब से लागत लगाई जाती है. सॉफ़्ट टाइम विंडो की ऊपरी सीमा, 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 यूटीसी के "Zulu" फ़ॉर्मैट में एक टाइमस्टैंप, नैनोसेकंड रिज़ॉल्यूशन और नौ दशमलव अंकों के साथ. उदाहरण के लिए: "2014-10-02T15:01:23Z" और "2014-10-02T15:01:23.045123456Z".

endTime

string (Timestamp format)

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

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

softStartTime

string (Timestamp format)

समयावधि के शुरू होने का समय.

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

softEndTime

string (Timestamp format)

समयसीमा खत्म होने का अनुमानित समय.

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

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

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

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

ऐसा न करने पर, यह वाहन अपनी शुरुआती लोकेशन से आखिरी लोकेशन तक नहीं जाता और इस वाहन के लिए कोई 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 स्ट्रिंग से लेकर अवधि तक के मैप की जानकारी देता है. यह समय, visitTypes के साथ विज़िट के दौरान लिए जाने वाले VisitRequest.duration के अलावा का समय होता है. अगर costPerHour की वैल्यू दी गई है, तो विज़िट की इस अतिरिक्त अवधि के लिए शुल्क जोड़ा जाता है. कुंजियां (जैसे, visitTypes) खाली स्ट्रिंग नहीं हो सकतीं.

अगर विज़िट के अनुरोध के कई टाइप हैं, तो मैप में हर टाइप के लिए एक अवधि जोड़ी जाएगी.

breakRule

object (BreakRule)

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

label

string

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

ignore

boolean

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

अगर 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 Preferred API के यात्रा के मोड के सबसेट होने चाहिए. ज़्यादा जानकारी के लिए, https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode पर जाएं.

Enums
TRAVEL_MODE_UNSPECIFIED यात्रा के मोड की जानकारी नहीं दी गई है. यह DRIVING के बराबर है.
DRIVING ड्राइविंग निर्देशों से जुड़ा यात्रा मोड (कार, ...).
WALKING पैदल चलने के निर्देशों से जुड़ा यात्रा मोड.

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
}
फ़ील्ड
softMaxLoad

string (int64 format)

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

costPerUnitAboveSoftMax

number

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

startLoadInterval

object (Interval)

रास्ते की शुरुआत में, वाहन के लोड इंटरवल की तय सीमा.

endLoadInterval

object (Interval)

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

maxLoad

string (int64 format)

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

इंटरवल

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

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

string (int64 format)

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

max

string (int64 format)

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

DurationLimit

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

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

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

string (Duration format)

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

सेकंड में कुल अवधि, जिसमें दशमलव के बाद नौ अंक हो सकते हैं. यह अवधि 's' पर खत्म होती है. उदाहरण: "3.5s".

softMaxDuration

string (Duration format)

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

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

सेकंड में कुल अवधि, जिसमें दशमलव के बाद नौ अंक हो सकते हैं. यह अवधि 's' पर खत्म होती है. उदाहरण: "3.5s".

quadraticSoftMaxDuration

string (Duration format)

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

अगर quadraticSoftMaxDuration की वैल्यू दी गई है, तो यह शून्य से बड़ी होनी चाहिए. अगर maxDuration की वैल्यू भी दी गई है, तो quadraticSoftMaxDuration की वैल्यू maxDuration से कम होनी चाहिए. साथ ही, दोनों वैल्यू के बीच का अंतर एक दिन से ज़्यादा नहीं होना चाहिए:

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

सेकंड में कुल अवधि, जिसमें दशमलव के बाद नौ अंक हो सकते हैं. यह अवधि 's' पर खत्म होती है. उदाहरण: "3.5s".

costPerHourAfterSoftMax

number

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

  costPerHourAfterSoftMax * (duration - softMaxDuration)

कीमत नेगेटिव नहीं होनी चाहिए.

costPerSquareHourAfterQuadraticSoftMax

number

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

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

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

कीमत नेगेटिव नहीं होनी चाहिए.

DistanceLimit

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

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

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 यूटीसी के "Zulu" फ़ॉर्मैट में एक टाइमस्टैंप, नैनोसेकंड रिज़ॉल्यूशन और नौ दशमलव अंकों के साथ. उदाहरण के लिए: "2014-10-02T15:01:23Z" और "2014-10-02T15:01:23.045123456Z".

latestStartTime

string (Timestamp format)

ज़रूरी है. ब्रेक की शुरुआत का ऊपरी बाउंड (शामिल).

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

minDuration

string (Duration format)

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

सेकंड में कुल अवधि, जिसमें दशमलव के बाद नौ अंक हो सकते हैं. यह अवधि 's' पर खत्म होती है. उदाहरण: "3.5s".

FrequencyConstraint

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

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

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

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

  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 की जानकारी देखें.

सेकंड में कुल अवधि, जिसमें दशमलव के बाद नौ अंक हो सकते हैं. यह अवधि 's' पर खत्म होती है. उदाहरण: "3.5s".

maxInterBreakDuration

string (Duration format)

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

सेकंड में कुल अवधि, जिसमें दशमलव के बाद नौ अंक हो सकते हैं. यह अवधि 's' पर खत्म होती है. उदाहरण: "3.5s".

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 के बराबर एलिमेंट होने चाहिए.

सेकंड में कुल अवधि, जिसमें दशमलव के बाद नौ अंक हो सकते हैं. यह अवधि 's' पर खत्म होती है. उदाहरण: "3.5s".

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)

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

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

सेकंड में कुल अवधि, जिसमें दशमलव के बाद नौ अंक हो सकते हैं. यह अवधि 's' पर खत्म होती है. उदाहरण: "3.5s".

ShipmentTypeIncompatibility

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

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

NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY के साथ काम न करने वाले मोड में, दो शिपमेंट के लिए:

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

ShipmentTypeRequirement

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

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)

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

सेकंड में कुल अवधि, जिसमें दशमलव के बाद नौ अंक हो सकते हैं. यह अवधि 's' पर खत्म होती है. उदाहरण: "3.5s".

firstIndex

integer

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

secondIndex

integer

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