ShipmentModel

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

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

object (Shipment)

मॉडल में की जाने वाली शिपिंग का सेट.

vehicles[]

object (Vehicle)

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

globalStartTime

string (Timestamp format)

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

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

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

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

globalEndTime

string (Timestamp format)

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

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

globalDurationCostPerHour

number

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

durationDistanceMatrices[]

object (DurationDistanceMatrix)

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

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

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

string

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

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

durationDistanceMatrixDstTags[]

string

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

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

transitionAttributes[]

object (TransitionAttributes)

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

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

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

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

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

precedenceRules[]

object (PrecedenceRule)

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

maxActiveVehicles

integer

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

शिपमेंट

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

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

string

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

pickups[]

object (VisitRequest)

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

deliveries[]

object (VisitRequest)

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

loadDemands

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

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

एक ऑब्जेक्ट, जिसमें "key": value पेयर की सूची है. उदाहरण: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

allowedVehicleIndices[]

integer

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

costsPerVehicle[]

number

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

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

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

costsPerVehicleIndices[]

integer

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

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

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

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

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

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

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

pickupToDeliveryTimeLimit

string (Duration format)

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

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

shipmentType

string

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

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

label

string

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

ignore

boolean

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

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

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

penaltyCost

number

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

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

pickupToDeliveryRelativeDetourLimit

number

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

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

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

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

VisitRequest

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

JSON के काेड में दिखाना
{
  "arrivalLocation": {
    object (LatLng)
  },
  "arrivalWaypoint": {
    object (Waypoint)
  },
  "departureLocation": {
    object (LatLng)
  },
  "departureWaypoint": {
    object (Waypoint)
  },
  "tags": [
    string
  ],
  "timeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "duration": string,
  "cost": number,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "visitTypes": [
    string
  ],
  "label": string,
  "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 में दी गई मांगों में जोड़ दिया गया है.

ऐसा ऑब्जेक्ट जिसमें "key": value पेयर की सूची होती है. उदाहरण: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

visitTypes[]

string

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

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

label

string

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

avoidUTurns

boolean

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

LatLng

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

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

number

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

longitude

number

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

वेपॉइंट

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

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

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

boolean

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

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

object (Location)

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

placeId

string

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

जगह

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

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

object (LatLng)

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

heading

integer

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

TimeWindow

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

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

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

string (Timestamp format)

'रिलीज़ की समयसीमा' की शुरुआत का समय. अगर इसे सेट नहीं किया गया है, तो इसे ShipmentModel.global_start_time पर सेट कर दिया जाएगा.

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

endTime

string (Timestamp format)

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

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

softStartTime

string (Timestamp format)

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

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

softEndTime

string (Timestamp format)

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

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

costPerHourBeforeSoftStartTime

number

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

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

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

costPerHourAfterSoftEndTime

number

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

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

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

वाहन

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

JSON के काेड में दिखाना
{
  "displayName": string,
  "travelMode": enum (TravelMode),
  "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 भी देखें.

startLocation

object (LatLng)

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

startWaypoint

object (Waypoint)

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

endLocation

object (LatLng)

वह भौगोलिक जगह जहां वाहन, आखिरी VisitRequest पूरा करने के बाद पहुंचता है. अगर जानकारी नहीं दी जाती है, तो वाहन का आखिरी 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 फ़ील्ड की कुंजियों से मेल खाती हैं. अगर कोई कुंजी इस मैप में मौजूद नहीं है, तो इससे जुड़ी क्षमता की कोई सीमा नहीं मानी जाती है.

ऐसा ऑब्जेक्ट जिसमें "key": value पेयर की सूची होती है. उदाहरण: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

costPerHour

number

वाहन के लिए शुल्क: इसमें बताई गई कुल कीमत, Shipment.penalty_cost में होनी चाहिए.

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

costPerTraveledHour

number

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

costPerKilometer

number

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

fixedCost

number

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

usedIfRouteIsEmpty

boolean

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

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

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

routeDurationLimit

object (DurationLimit)

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

travelDurationLimit

object (DurationLimit)

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

routeDistanceLimit

object (DistanceLimit)

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

extraVisitDurationForVisitType

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

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

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

ऐसा ऑब्जेक्ट जिसमें "key": value पेयर की सूची होती है. उदाहरण: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

breakRule

object (BreakRule)

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

label

string

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

ignore

boolean

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

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

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

travelDurationMultiple

number

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

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

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

TravelMode

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

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

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

UnloadingPolicy

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

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

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

LoadLimit

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

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

string (int64 format)

लोड की एक सामान्य सीमा. costPerUnitAboveSoftMax देखें.

costPerUnitAboveSoftMax

number

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

startLoadInterval

object (Interval)

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

endLoadInterval

object (Interval)

रूट के अंत में वाहन का लोड होने का मंज़ूर किया जाने वाला इंटरवल.

maxLoad

string (int64 format)

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

इंटरवल

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

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

string (int64 format)

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

max

string (int64 format)

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

DurationLimit

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

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

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

string (Duration format)

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

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

softMaxDuration

string (Duration format)

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

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

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

quadraticSoftMaxDuration

string (Duration format)

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

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

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

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

costPerHourAfterSoftMax

number

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

  costPerHourAfterSoftMax * (duration - softMaxDuration)

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

costPerSquareHourAfterQuadraticSoftMax

number

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

अगर अवधि, थ्रेशोल्ड से कम है, तो अतिरिक्त लागत 0 होगी. ऐसा न होने पर, लागत इस तरह की अवधि पर निर्भर करती है:

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

लागत गैर-ऋणात्मक होनी चाहिए.

DistanceLimit

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

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

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

string (int64 format)

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

softMaxMeters

string (int64 format)

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

अगर softMaxMeters तय किया गया है, तो यह maxMeters से कम होना चाहिए और यह नॉन-नेगेटिव होना चाहिए.

costPerKilometerAboveSoftMax

number

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

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

लागत गैर-ऋणात्मक होनी चाहिए.

BreakRule

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

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

object (BreakRequest)

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

frequencyConstraints[]

object (FrequencyConstraint)

कई FrequencyConstraint लागू हो सकती हैं. उन सभी को इस BreakRule के BreakRequest से संतुष्ट होना चाहिए. FrequencyConstraint देखें.

BreakRequest

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

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

string (Timestamp format)

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

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

latestStartTime

string (Timestamp format)

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

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

minDuration

string (Duration format)

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

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

FrequencyConstraint

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

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

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

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

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

string (Duration format)

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

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

maxInterBreakDuration

string (Duration format)

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

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

DurationDistanceMatrix

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

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

object (Row)

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

vehicleStartTag

string

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

वाहन के हर स्टार्ट को सिर्फ़ एक मैट्रिक्स से मेल खाना चाहिए. इसका मतलब है कि startTags फ़ील्ड में से कोई एक, मैट्रिक्स (और सिर्फ़ उस मैट्रिक्स) के vehicleStartTag से मेल खाना चाहिए.

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

पंक्ति

यह समय और दूरी की मैट्रिक की लाइन तय करता है.

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

string (Duration format)

किसी लाइन के लिए, कुल समय की वैल्यू. इसमें ShipmentModel.duration_distance_matrix_dst_tags के बराबर एलिमेंट होने चाहिए.

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

meters[]

number

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

TransitionAttributes

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

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

string

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

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

excludedSrcTag

string

srcTag देखें. srcTag और excludedSrcTag में से कोई एक खाली नहीं होना चाहिए.

dstTag

string

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

excludedDstTag

string

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

cost

number

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

costPerKilometer

number

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

distanceLimit

object (DistanceLimit)

यह बदलाव करते समय तय की गई दूरी की जानकारी देता है.

2021/06 से, सिर्फ़ अस्थायी सीमाओं का इस्तेमाल किया जा सकता है.

delay

string (Duration format)

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

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

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

ShipmentTypeIncompatibility

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

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

string

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

incompatibilityMode

enum (IncompatibilityMode)

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

IncompatibilityMode

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

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

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

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

ShipmentTypeRequirement

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

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

string

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

dependentShipmentTypes[]

string

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

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

requirementMode

enum (RequirementMode)

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

RequirementMode

किसी रास्ते पर डिपेंडेंट शिपमेंट के दिखने के तरीके तय करने वाले मोड.

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

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

इसलिए, "डिपेंडेंट" शिपमेंट के लिए, इनमें से कोई एक शर्त पूरी होनी चाहिए:

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

PrecedenceRule

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

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

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

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

boolean

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

secondIsDelivery

boolean

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

offsetDuration

string (Duration format)

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

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

firstIndex

integer

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

secondIndex

integer

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