ShipmentRoute

समय अक्ष के साथ, वाहन के रास्ते को इस तरह से अलग-अलग किया जा सकता है (हम मानते हैं कि n विज़िट हैं):

  |            |            |          |       |  T[2], |        |      |
  | Transition |  Visit #0  |          |       |  V[2], |        |      |
  |     #0     |    aka     |   T[1]   |  V[1] |  ...   | V[n-1] | T[n] |
  |  aka T[0]  |    V[0]    |          |       | V[n-2],|        |      |
  |            |            |          |       | T[n-1] |        |      |
  ^            ^            ^          ^       ^        ^        ^      ^
vehicle    V[0].start   V[0].end     V[1].   V[1].    V[n].    V[n]. vehicle
 start     (arrival)   (departure)   start   end      start    end     end

ध्यान दें कि हम इन बीच अंतर करते हैं:

  • "समय के साथ होने वाले इवेंट", जैसे कि वाहन के शुरू और खत्म होने के साथ-साथ, हर विज़िट के शुरू और खत्म होने (जैसे कि आने और जाने का समय). यह घटना, एक सेकंड में पूरी हो जाती है.
  • "समय के अंतराल", जैसे कि विज़िट और विज़िट के बीच का ट्रांज़िशन. हालांकि, टाइम इंटरवल की अवधि कभी-कभी शून्य हो सकती है.जैसे, एक ही सेकंड पर शुरू और खत्म होना. हालांकि, अक्सर उनकी अवधि पॉज़िटिव होती है.

इनवैरिएंट:

  • अगर n विज़िट हैं, तो n+1 ट्रांज़िशन हैं.
  • किसी विज़िट से पहले (एक ही इंडेक्स) और उसके बाद (इंडेक्स + 1) हमेशा एक ट्रांज़िशन होता है.
  • वाहन के स्टार्ट होने के बाद, हमेशा #0 ट्रांज़िशन होता है.
  • वाहन के खत्म होने से पहले, हमेशा ट्रांज़िशन #n होता है.

ज़ूम इन करने पर, Transition और Visit के दौरान होने वाली कार्रवाई यहां दी गई है:

---+-------------------------------------+-----------------------------+-->
   |           TRANSITION[i]             |           VISIT[i]          |
   |                                     |                             |
   |  * TRAVEL: the vehicle moves from   |      PERFORM the visit:     |
   |    VISIT[i-1].departure_location to |                             |
   |    VISIT[i].arrival_location, which |  * Spend some time:         |
   |    takes a given travel duration    |    the "visit duration".    |
   |    and distance                     |                             |
   |                                     |  * Load or unload           |
   |  * BREAKS: the driver may have      |    some quantities from the |
   |    breaks (e.g. lunch break).       |    vehicle: the "demand".   |
   |                                     |                             |
   |  * WAIT: the driver/vehicle does    |                             |
   |    nothing. This can happen for     |                             |
   |    many reasons, for example when   |                             |
   |    the vehicle reaches the next     |                             |
   |    event's destination before the   |                             |
   |    start of its time window         |                             |
   |                                     |                             |
   |  * DELAY: *right before* the next   |                             |
   |    arrival. E.g. the vehicle and/or |                             |
   |    driver spends time unloading.    |                             |
   |                                     |                             |
---+-------------------------------------+-----------------------------+-->
   ^                                     ^                             ^
V[i-1].end                           V[i].start                    V[i].end

आखिर में, यहां बताया गया है कि ट्रांज़िशन के दौरान TRAVEL, BREAKS, DELAY और WAIT को किस तरह व्यवस्थित किया जा सकता है.

  • वे ओवरलैप नहीं होते हैं.
  • देरी यूनीक है और अगली विज़िट (या वाहन के खत्म होने) से ठीक पहले की अवधि ज़रूरी है. इसलिए, देरी के शुरू और खत्म होने के समय की जानकारी होना काफ़ी है.
  • ब्रेक, एक-दूसरे से जुड़ी अवधियां होती हैं, जो ओवरलैप नहीं होतीं. जवाब में, हर ब्रेक के शुरू होने का समय और उसकी अवधि की जानकारी दी जाती है.
  • TRAVEL और WAIT "प्रीएमप्ट किए जा सकते हैं": इस ट्रांज़िशन के दौरान, इनमें कई बार रुकावट आ सकती है. क्लाइंट यह मान सकते हैं कि यात्रा "जल्द से जल्द" हो सकती है और "इंतज़ार" से बाकी समय पूरा हो जाता है.

एक (जटिल) उदाहरण:

                               TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
  ||     |       |           |       |           |         |         ||
  ||  T  |   B   |     T     |       |     B     |         |    D    ||
  ||  r  |   r   |     r     |   W   |     r     |    W    |    e    ||
  ||  a  |   e   |     a     |   a   |     e     |    a    |    l    ||
  ||  v  |   a   |     v     |   i   |     a     |    i    |    a    ||
  ||  e  |   k   |     e     |   t   |     k     |    t    |    y    ||
  ||  l  |       |     l     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
JSON के काेड में दिखाना
{
  "vehicleIndex": integer,
  "vehicleLabel": string,
  "vehicleStartTime": string,
  "vehicleEndTime": string,
  "visits": [
    {
      object (Visit)
    }
  ],
  "transitions": [
    {
      object (Transition)
    }
  ],
  "hasTrafficInfeasibilities": boolean,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "breaks": [
    {
      object (Break)
    }
  ],
  "metrics": {
    object (AggregatedMetrics)
  },
  "routeCosts": {
    string: number,
    ...
  },
  "routeTotalCost": number
}
फ़ील्ड
vehicleIndex

integer

रूट पर चलने वाला वाहन, जिसकी पहचान सोर्स ShipmentModel में उसके इंडेक्स से की जाती है.

vehicleLabel

string

इस रास्ते पर चलने वाले वाहन का लेबल. अगर यह जानकारी दी गई है, तो यह ShipmentModel.vehicles(vehicleIndex).label के बराबर होना चाहिए.

vehicleStartTime

string (Timestamp format)

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

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

vehicleEndTime

string (Timestamp format)

वह समय जब वाहन अपना रास्ता पूरा कर लेता है.

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

visits[]

object (Visit)

किसी रास्ते को दिखाने वाली विज़िट का क्रम. visits[i] रास्ते में i-वी विज़िट है. अगर यह फ़ील्ड खाली है, तो वाहन को इस्तेमाल न किए जाने वाला माना जाता है.

transitions[]

object (Transition)

रूट के लिए ट्रांज़िशन की क्रम वाली सूची.

hasTrafficInfeasibilities

boolean

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

  startTime(previous_visit) + duration(previous_visit) +
  travelDuration(previous_visit, next_visit) > startTime(next_visit)

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

routePolyline

object (EncodedPolyline)

रूट की कोड में बदली गई पॉलीलाइन. यह फ़ील्ड सिर्फ़ तब पॉप्युलेट होता है, जब OptimizeToursRequest.populate_polylines को 'सही है' पर सेट किया गया हो.

breaks[]

object (Break)

इस रास्ते पर चलने वाले वाहन के लिए ब्रेक का शेड्यूल. breaks क्रम, समय के अंतराल दिखाता है. हर अंतराल, startTime से शुरू होता है और duration सेकंड तक चलता है.

metrics

object (AggregatedMetrics)

इस रूट की अवधि, दूरी, और लोड की मेट्रिक. कॉन्टेक्स्ट के आधार पर, AggregatedMetrics के फ़ील्ड को सभी ShipmentRoute.transitions या ShipmentRoute.visits में जोड़ दिया जाता है.

routeCosts

map (key: string, value: number)

रास्ते की कीमत, जिसे कीमत से जुड़े अनुरोध फ़ील्ड के हिसाब से बांटा गया है. कुंजियां, इनपुट OptimizeToursRequest, जैसे कि "model.shipments.pickups.cost" के मुताबिक प्रोटो पाथ होती हैं और वैल्यू पूरे रूट में एग्रीगेट की गई संबंधित लागत फ़ील्ड से जनरेट की गई कुल लागत होती हैं. दूसरे शब्दों में, costs["model.shipments.pickups.cost"] का मतलब है, रास्ते पर पिकअप करने की सभी लागतों का कुल योग. मॉडल में तय की गई सभी लागतों की जानकारी यहां दी गई है. हालांकि, TransitionAttributes से जुड़ी लागतों की जानकारी 01/2022 से सिर्फ़ एग्रीगेट किए गए तरीके से दी जाती है.

routeTotalCost

number

रास्ते की कुल कीमत. लागत मैप में सभी लागतों का योग.

यहां जाएं

किसी रूट के दौरान की गई विज़िट. यह विज़िट, किसी Shipment के पिकअप या डिलीवरी से जुड़ी है.

JSON के काेड में दिखाना
{
  "shipmentIndex": integer,
  "isPickup": boolean,
  "visitRequestIndex": integer,
  "startTime": string,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "detour": string,
  "shipmentLabel": string,
  "visitLabel": string
}
फ़ील्ड
shipmentIndex

integer

सोर्स ShipmentModel में shipments फ़ील्ड का इंडेक्स.

isPickup

boolean

अगर यह वैल्यू 'सही' है, तो यह विज़िट किसी Shipment के पिकअप से जुड़ी है. अगर ऐसा नहीं होता है, तो यह डिलीवरी से जुड़ा होता है.

visitRequestIndex

integer

Shipment के पिकअप या डिलीवरी फ़ील्ड में VisitRequest का इंडेक्स (isPickup देखें).

startTime

string (Timestamp format)

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

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

loadDemands

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

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

detour

string (Duration format)

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

startTime(delivery) - startTime(pickup)
- (duration(pickup) + travel duration from the pickup location
to the delivery location).

अगर ऐसा नहीं है, तो इसका हिसाब वाहन startLocation से लगाया जाता है और यह इसकी बराबर होता है:

startTime - vehicleStartTime - travel duration from
the vehicle's `startLocation` to the visit.

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

shipmentLabel

string

अगर Shipment में बताया गया है, तो उससे जुड़े Shipment.label की कॉपी.

visitLabel

string

अगर VisitRequest में बताया गया है, तो उससे जुड़े VisitRequest.label की कॉपी.

ट्रांज़िशन

रूट पर दो इवेंट के बीच ट्रांज़िशन. ShipmentRoute का ब्यौरा देखें.

अगर वाहन में startLocation और/या endLocation नहीं है, तो यात्रा से जुड़ी मेट्रिक की वैल्यू 0 होगी.

JSON के काेड में दिखाना
{
  "travelDuration": string,
  "travelDistanceMeters": number,
  "trafficInfoUnavailable": boolean,
  "delayDuration": string,
  "breakDuration": string,
  "waitDuration": string,
  "totalDuration": string,
  "startTime": string,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "routeToken": string,
  "vehicleLoads": {
    string: {
      object (VehicleLoad)
    },
    ...
  }
}
फ़ील्ड
travelDuration

string (Duration format)

इस ट्रांज़िशन के दौरान यात्रा की अवधि.

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

travelDistanceMeters

number

ट्रांज़िशन के दौरान तय की गई दूरी.

trafficInfoUnavailable

boolean

जब OptimizeToursRequest.consider_road_traffic के ज़रिए ट्रैफ़िक का अनुरोध किया जाता है और Transition के लिए ट्रैफ़िक की जानकारी वापस नहीं मिल पाती, तो इस बूलियन को 'सही' पर सेट किया जाता है. ऐसा कुछ समय के लिए हो सकता है (रीयल टाइम ट्रैफ़िक सर्वर में कभी-कभी रुकावट आ सकती है) या हमेशा के लिए हो सकता है (इस जगह के लिए कोई डेटा नहीं है).

delayDuration

string (Duration format)

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

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

breakDuration

string (Duration format)

इस बदलाव के दौरान होने वाले ब्रेक की कुल अवधि, अगर कोई हो. हर ब्रेक के शुरू होने का समय और अवधि की जानकारी, ShipmentRoute.breaks में सेव है.

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

waitDuration

string (Duration format)

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

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

totalDuration

string (Duration format)

सुविधा के लिए, ट्रांज़िशन की कुल अवधि. यह इसके बराबर है:

  • अगली विज़िट startTime (या अगर यह आखिरी ट्रांज़िशन है, तो vehicleEndTime) - इस ट्रांज़िशन का startTime;
  • अगर ShipmentRoute.has_traffic_infeasibilities गलत है, तो इसमें भी यह शामिल होता है: `कुल अवधि = यात्रा की अवधि + देरी में लगने वाला समय
  • breakDuration + waitDuration`.

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

startTime

string (Timestamp format)

इस बदलाव के शुरू होने का समय.

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

routePolyline

object (EncodedPolyline)

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

routeToken

string

सिर्फ़ आउटपुट के लिए. यह एक ऐसा टोक़न है जिसे नेविगेशन के दौरान रास्ते को फिर से बनाने के लिए, Navigation SDK को पास किया जा सकता है. साथ ही, रास्ते को फिर से बनाने की स्थिति में, रास्ता बनाने के मूल मकसद का सम्मान किया जाता है. इस टोकन को एक ओपेक ब्लॉब के तौर पर इस्तेमाल करें. अलग-अलग अनुरोधों में इसकी वैल्यू की तुलना न करें. ऐसा इसलिए, क्योंकि सेवा का वही रास्ता दिखाने पर भी इसकी वैल्यू बदल सकती है. यह फ़ील्ड सिर्फ़ तब पॉप्युलेट होता है, जब populateTransitionPolylines को 'सही है' पर सेट किया गया हो.

vehicleLoads

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

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

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

EncodedPolyline

पॉलीलाइन का एन्कोडेड निरूपण. पॉलीलाइन को कोड में बदलने के बारे में ज़्यादा जानकारी यहां मिल सकती है: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.

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

string

पॉलीलाइन के कोड में बदले गए पॉइंट दिखाने वाली स्ट्रिंग.

ब्रेक

ब्रेक के लागू होने की जानकारी देने वाला डेटा.

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

string (Timestamp format)

ब्रेक शुरू होने का समय.

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

duration

string (Duration format)

ब्रेक की अवधि.

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