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 यूटीसी के "ज़ुलू" फ़ॉर्मैट में एक टाइमस्टैंप, जिसमें नैनोसेकंड रिज़ॉल्यूशन और ज़्यादा से ज़्यादा नौ फ़्रैक्शनल अंक हैं. उदाहरण: "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 यूटीसी के "ज़ुलू" फ़ॉर्मैट में एक टाइमस्टैंप, जिसमें नैनोसेकंड रिज़ॉल्यूशन और ज़्यादा से ज़्यादा नौ फ़्रैक्शनल अंक हैं. उदाहरण: "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 पर खत्म होता है.
  • एक वाहन, locB से अपना रास्ता शुरू करता है और locB पर खत्म करता है. इसके लिए, मैट्रिक "slow" का इस्तेमाल किया जाता है.
  • एक वाहन locB से शुरू होता है और "तेज़" मैट्रिक्स का इस्तेमाल करके locB पर खत्म होता है.
  • 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)

ऐसे शिपमेंट_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-th एलिमेंट, मॉडल के वाहन #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/10 से, चक्कर लगाने की सुविधा सिर्फ़ तब काम करती है, जब यात्रा का समय वाहनों पर निर्भर न हो.

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] की रेंज में होना चाहिए.

वेपॉइंट

वेपॉइंट को एनकैप्सुलेट करता है. वेपॉइंट, visitRequests के आने और जाने की जगहों को मार्क करते हैं. साथ ही, वाहनों के शुरू और खत्म होने की जगह की जानकारी भी देते हैं.

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 यूटीसी के "ज़ुलू" फ़ॉर्मैट में एक टाइमस्टैंप, जिसमें नैनोसेकंड रिज़ॉल्यूशन और ज़्यादा से ज़्यादा नौ फ़्रैक्शनल अंक हैं. उदाहरण के लिए: "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 के लिए सुझाए गए एपीआई यात्रा मोड का एक सबसेट होना चाहिए. इसे देखें: 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,
  "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)

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

costPerTraveledHour

object (LoadCost)

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

इंटरवल

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

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

string (int64 format)

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

max

string (int64 format)

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

LoadCost

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

  • कम से कम(लोड, loadThreshold) * costPerUnitBelowThreshold
  • अधिकतम(0, लोड - loadThreshold) * costPerUnitAboveThreshold

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

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

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

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
  • पहला ट्रांज़िशन: 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 की वजह से, ज़्यादा लोड वाले ट्रांज़िशन वाले समाधानों की कीमत ज़्यादा होती है.

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)

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

सेकंड में एक अवधि, जिसमें ज़्यादा से ज़्यादा नौ दशमलव अंक होते हैं और जो '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 यूटीसी के "ज़ुलू" फ़ॉर्मैट में एक टाइमस्टैंप, जिसमें नैनोसेकंड रिज़ॉल्यूशन और ज़्यादा से ज़्यादा नौ फ़्रैक्शनल अंक हैं. उदाहरण: "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 घंटे में एक घंटे" के उदाहरण के मुताबिक है:

  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

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