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 के बीच का अंतर 31536000 सेकंड से ज़्यादा नहीं होना चाहिए.

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

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

globalEndTime

string (Timestamp format)

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

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

globalDurationCostPerHour

number

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

durationDistanceMatrices[]

object (DurationDistanceMatrix)

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

यह अवधि को सेकंड में दिखाता है. इसमें नौ दशमलव अंक तक हो सकते हैं. इसके आखिर में 's' होता है. उदाहरण: "3.5s".

pickupToDeliveryTimeLimit

string (Duration format)

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

यह अवधि को सेकंड में दिखाता है. इसमें नौ दशमलव अंक तक हो सकते हैं. इसके आखिर में '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

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

उदाहरण के लिए, मान लें कि चुने गए पिकअप के विकल्प से सीधे चुने गए डिलीवरी के विकल्प तक जाने में लगने वाला सबसे कम समय 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 देखें.

यह अवधि को सेकंड में दिखाता है. इसमें नौ दशमलव अंक तक हो सकते हैं. इसके आखिर में '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 के तौर पर रिपोर्ट किया जाता है. यह ShipmentRoute.Visit में मौजूद होता है.visitLabel

avoidUTurns

boolean

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

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

LatLng

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

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

number

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

longitude

number

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

वेपॉइंट

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

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

  // 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

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

vehicleStopover

boolean

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

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

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

object (Location)

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

placeId

string

रास्ते के किसी पॉइंट से जुड़ा POI प्लेस आईडी.

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 के बाद होता है, तो उसकी लागत 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 पूरा होने के तुरंत बाद, ShipmentRoute खत्म हो जाता है. अगर शिपमेंट मॉडल में अवधि और दूरी की मैट्रिक्स मौजूद हैं, तो 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))

यह विज़िट टाइप की स्ट्रिंग से अवधि तक का मैप तय करता है. समयावधि, 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, load - loadThreshold) * costPerUnitAboveThreshold

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

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

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

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

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

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

इसलिए, रास्ते पर LoadCost 120.0 है.

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

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

तो इस LoadCost पर खर्च की गई लागत यह है

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

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

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

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

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

string (int64 format)

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

costPerUnitBelowThreshold

number

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

costPerUnitAboveThreshold

number

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

DurationLimit

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

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

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

string (Duration format)

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

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

  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 सीमा से ज़्यादा है, तो प्रति किलोमीटर का किराया. अगर दूरी तय सीमा से कम है, तो अतिरिक्त शुल्क नहीं लिया जाता. अगर दूरी तय सीमा से ज़्यादा है, तो शुल्क का हिसाब लगाने के लिए इस फ़ॉर्मूले का इस्तेमाल किया जाता है:

  (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)

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

यह अवधि को सेकंड में दिखाता है. इसमें नौ दशमलव अंक तक हो सकते हैं. इसके आखिर में '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".

मकसद

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

एक्सपेरिमेंट के तौर पर उपलब्ध: ज़्यादा जानकारी के लिए, 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 जितने एलिमेंट होने चाहिए.

यह अवधि को सेकंड में दिखाता है. इसमें नौ दशमलव अंक तक हो सकते हैं. इसके आखिर में '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

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

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 की डिलीवरी के बाद पिकअप किया जाता है" और "C को B के पिकअप के बाद पिकअप किया जाता है".

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

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

boolean

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

secondIsDelivery

boolean

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

offsetDuration

string (Duration format)

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

यह अवधि को सेकंड में दिखाता है. इसमें नौ दशमलव अंक तक हो सकते हैं. इसके आखिर में 's' होता है. उदाहरण: "3.5s".

firstIndex

integer

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

secondIndex

integer

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