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) से पहले और उसके बाद ट्रांज़िशन (इंडेक्स + 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 और AGE की व्यवस्था कैसे की जा सकती है.

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

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

                               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     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
जेएसओएन के काेड में दिखाना
{
  "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)

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

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

vehicleEndTime

string (Timestamp format)

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

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

visits[]

object (Visit)

किसी रास्ते को दिखाने वाली विज़िट का ऑर्डर दिया गया क्रम. विज़िट[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)

Next_visit पर पहुंचने पर, हो सकता है कि वह मौजूदा समय के बाद पहुंच जाए. ऐसा इसलिए है, क्योंकि ट्रैफ़िक की वजह से, यात्रा में लगने वाले समय का अनुमान travelDuration(previous_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" और वैल्यू, संबंधित लागत फ़ील्ड से जनरेट होने वाली कुल लागत होती है, जिसे पूरे रास्ते के लिए एग्रीगेट किया जाता है. दूसरे शब्दों में, किसी रूट के लिए पिक अप के कुल शुल्क का योग ["model.shipments.pickups.cost"] होता है. मॉडल में बताई गई सभी कीमतों की पूरी जानकारी यहां दी गई है. हालांकि, ट्रांज़िशन एट्रिब्यूट से जुड़ी उन लागतों की जानकारी नहीं दी गई है जिन्हें 2022/01 तक सिर्फ़ एग्रीगेट करके रिपोर्ट किया जाता है.

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

routeTotalCost

number

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

इस लिंक पर जाएँ

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

जेएसओएन के काेड में दिखाना
{
  "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 के हिसाब से सही है.

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

loadDemands

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

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

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

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 होगी.

जेएसओएन के काेड में दिखाना
{
  "travelDuration": string,
  "travelDistanceMeters": number,
  "trafficInfoUnavailable": boolean,
  "delayDuration": string,
  "breakDuration": string,
  "waitDuration": string,
  "totalDuration": string,
  "startTime": string,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "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 गलत है, तो नीचे दी गई वैल्यू भी साथ ही रहती है: `कुल अवधि = यात्रा की अवधि + देरी अवधि
  • ब्रेक अवधि + वैट की अवधि`.

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

startTime

string (Timestamp format)

इस ट्रांज़िशन के शुरू होने का समय.

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

routePolyline

object (EncodedPolyline)

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

vehicleLoads

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

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

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

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

EncodedPolyline

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

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

string

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

ब्रेक

ब्रेक की प्रोसेस से जुड़ा डेटा.

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

string (Timestamp format)

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

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

duration

string (Duration format)

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

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