ShipmentModel

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

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

object (Shipment)

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

vehicles[]

object (Vehicle)

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

objectives[]

object (Objective)

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

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

globalStartTime

string (Timestamp format)

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

मॉडल की समयसीमा एक साल से कम होनी चाहिए. इसका मतलब है कि globalEndTime और globalStartTime के बीच 31,536,000 सेकंड से ज़्यादा का अंतर नहीं होना चाहिए.

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

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

globalEndTime

string (Timestamp format)

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

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

globalDurationCostPerHour

number

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

durationDistanceMatrices[]

object (DurationDistanceMatrix)

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

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

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

string

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

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

durationDistanceMatrixDstTags[]

string

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

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

transitionAttributes[]

object (TransitionAttributes)

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

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

शिपमेंट के टाइप ShipmentTypeIncompatibility के ऐसे सेट जो एक-दूसरे के साथ काम नहीं करते.

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

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

precedenceRules[]

object (PrecedenceRule)

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

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

maxActiveVehicles

integer

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

शिपमेंट

किसी एक आइटम की शिपिंग, उसके पिकअप से लेकर डिलीवरी तक. शिपमेंट को पूरा माना जाने के लिए, एक ही वाहन को पिकअप करने की किसी एक जगह पर जाना होगा. इससे वाहन की खाली जगह कम हो जाएगी. इसके बाद, उसे डिलीवरी की किसी एक जगह पर जाना होगा. इससे वाहन की खाली जगह फिर से बढ़ जाएगी.

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

string

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

pickups[]

object (VisitRequest)

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

deliveries[]

object (VisitRequest)

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

loadDemands

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

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

allowedVehicleIndices[]

integer

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

costsPerVehicle[]

number

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

  • में मौजूद एलिमेंट की संख्या के बराबर हो costsPerVehicleIndices. costsPerVehicle[i], मॉडल costsPerVehicleIndices[i] की गाड़ी से मेल खाता है.
  • मॉडल में मौजूद वाहनों की संख्या के बराबर हो. i-वां एलिमेंट, मॉडल की i-वीं गाड़ी से मेल खाता है.

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

costsPerVehicleIndices[]

integer

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

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

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

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

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

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

pickupToDeliveryTimeLimit

string (Duration format)

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

shipmentType

string

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

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

label

string

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

ignore

boolean

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

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

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

penaltyCost

number

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

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

pickupToDeliveryRelativeDetourLimit

number

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

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

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

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

VisitRequest

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

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

object (LatLng)

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

arrivalWaypoint

object (Waypoint)

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

departureLocation

object (LatLng)

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

departureWaypoint

object (Waypoint)

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

tags[]

string

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

timeWindows[]

object (TimeWindow)

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

TimeWindow के न होने का मतलब है कि वाहन को किसी भी समय सर्विस के लिए ले जाया जा सकता है.

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

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

duration

string (Duration format)

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

cost

number

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

loadDemands

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

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

visitTypes[]

string

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

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

label

string

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

avoidUTurns

boolean

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

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

LatLng

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

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

number

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

longitude

number

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

वेपॉइंट

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

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

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

boolean

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

vehicleStopover

boolean

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

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

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

object (Location)

ज्यामिति के हिसाब से तय किया गया कोई पॉइंट. इसमें वैकल्पिक हेडिंग भी शामिल होती है.

placeId

string

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

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

एक-दूसरे से अलग फ़ील्ड के आखिर में.

जगह

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

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

object (LatLng)

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

heading

integer

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

TimeWindow

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

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

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

string (Timestamp format)

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

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

endTime

string (Timestamp format)

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

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

softStartTime

string (Timestamp format)

टाइम विंडो के शुरू होने का समय.

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

softEndTime

string (Timestamp format)

टाइम विंडो के खत्म होने का समय.

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

costPerHourBeforeSoftStartTime

number

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

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

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

costPerHourAfterSoftEndTime

number

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

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

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

वाहन

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

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

string

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

travelMode

enum (TravelMode)

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

routeModifiers

object (RouteModifiers)

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

startLocation

object (LatLng)

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

startWaypoint

object (Waypoint)

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

endLocation

object (LatLng)

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

endWaypoint

object (Waypoint)

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

startTags[]

string

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

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

endTags[]

string

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

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

startTimeWindows[]

object (TimeWindow)

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

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

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

endTimeWindows[]

object (TimeWindow)

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

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

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

unloadingPolicy

enum (UnloadingPolicy)

वाहन पर सामान उतारने की नीति लागू की गई है.

loadLimits

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

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

costPerHour

number

वाहन की कीमत: सभी कीमतें जोड़ दी जाती हैं और वे Shipment.penalty_cost एट्रिब्यूट की वैल्यू के लिए इस्तेमाल की गई यूनिट में होनी चाहिए.

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

costPerTraveledHour

number

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

costPerKilometer

number

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

fixedCost

number

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

usedIfRouteIsEmpty

boolean

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

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

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

routeDurationLimit

object (DurationLimit)

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

travelDurationLimit

object (DurationLimit)

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

routeDistanceLimit

object (DistanceLimit)

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

extraVisitDurationForVisitType

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

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

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

breakRule

object (BreakRule)

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

label

string

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

ignore

boolean

अगर यह वैल्यू सही है, तो 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 API के यात्रा के मोड का सबसेट होना चाहिए. इसके लिए, यह देखें: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode

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

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)

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

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

costPerTraveledHour

object (LoadCost)

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

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

इंटरवल

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

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

string (int64 format)

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

max

string (int64 format)

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

LoadCost

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

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

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

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

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

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

तो इस LoadCost के लिए, (cost_below * load_below * kilometers + cost_above * load_above * kms) का शुल्क लगेगा

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

इसलिए, रास्ते के ऊपर LoadCost की वैल्यू 120.0 है.

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

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

तो इस LoadCost पर होने वाला खर्च यह है

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

यहां रास्ते पर LoadCost 40.0 है.

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

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

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

string (int64 format)

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

costPerUnitBelowThreshold

number

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

costPerUnitAboveThreshold

number

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

DurationLimit

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

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

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

string (Duration format)

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

softMaxDuration

string (Duration format)

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

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

quadraticSoftMaxDuration

string (Duration format)

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

अगर quadraticSoftMaxDuration की शर्तें तय हैं, तो इन्हें पूरा करना होगा:

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

number

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

  costPerHourAfterSoftMax * (duration - softMaxDuration)

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

costPerSquareHourAfterQuadraticSoftMax

number

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

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

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

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

DistanceLimit

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

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

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

string (int64 format)

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

softMaxMeters

string (int64 format)

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

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

costPerKilometerBelowSoftMax

number

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

  min(distanceMeters, softMaxMeters) / 1000.0 *
  costPerKilometerBelowSoftMax.

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

costPerKilometerAboveSoftMax

number

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

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

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

BreakRule

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

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

object (BreakRequest)

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

frequencyConstraints[]

object (FrequencyConstraint)

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

BreakRequest

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

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

string (Timestamp format)

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

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

latestStartTime

string (Timestamp format)

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

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

minDuration

string (Duration format)

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

FrequencyConstraint

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

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

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

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

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

string (Duration format)

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

maxInterBreakDuration

string (Duration format)

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

मकसद

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

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

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

enum (Type)

मकसद किस तरह का है.

weight

number

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

टाइप

मकसद का वह टाइप जिसे लागत के सेट के साथ मैप किया जाएगा.

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

DurationDistanceMatrix

यह कुकी, यात्रा शुरू करने और खत्म करने की जगहों के बीच की दूरी और समय की जानकारी देती है.

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

object (Row)

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

vehicleStartTag

string

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

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

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

पंक्ति

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

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

string (Duration format)

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

meters[]

number

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

TransitionAttributes

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

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

string

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

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

excludedSrcTag

string

srcTag देखें. srcTag और excludedSrcTag में से किसी एक की वैल्यू खाली नहीं होनी चाहिए.

dstTag

string

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

excludedDstTag

string

dstTag देखें. dstTag और excludedDstTag में से किसी एक की वैल्यू खाली नहीं होनी चाहिए.

cost

number

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

costPerKilometer

number

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

distanceLimit

object (DistanceLimit)

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

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

delay

string (Duration format)

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

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

ShipmentTypeIncompatibility

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

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

string

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

incompatibilityMode

enum (IncompatibilityMode)

मोड, जो काम न करने वाली सुविधा पर लागू होता है.

IncompatibilityMode

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

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

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

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

ShipmentTypeRequirement

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

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

string

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

dependentShipmentTypes[]

string

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

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

requirementMode

enum (RequirementMode)

ज़रूरत के हिसाब से लागू किया गया मोड.

RequirementMode

ये मोड, किसी रास्ते पर मौजूद डिपेंडेंट शिपमेंट के दिखने के तरीके के बारे में बताते हैं.

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

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

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

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

PrecedenceRule

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

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

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

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

boolean

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

secondIsDelivery

boolean

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

offsetDuration

string (Duration format)

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

firstIndex

integer

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

secondIndex

integer

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