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 को किस तरह व्यवस्थित किया जा सकता है.

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

A (मुश्किल) का उदाहरण:

                               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 यूटीसी "ज़ुलु" में टाइमस्टैंप फ़ॉर्मैट, नैनोसेकंड रिज़ॉल्यूशन और ज़्यादा से ज़्यादा नौ फ़्रैक्शनल अंकों के साथ हो सकता है. उदाहरण: "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)

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

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

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 की तरह ही मांग को भी रिपोर्ट किया जाता है (यह फ़ील्ड देखें).

एक ऑब्जेक्ट, जिसमें "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 नहीं है, तो यात्रा से जुड़ी मेट्रिक शून्य होगी.

JSON के काेड में दिखाना
{
  "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)

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

आरएफ़सी3339 यूटीसी "ज़ुलु" में टाइमस्टैंप फ़ॉर्मैट, नैनोसेकंड रिज़ॉल्यूशन और ज़्यादा से ज़्यादा नौ फ़्रैक्शनल अंकों के साथ हो सकता है. उदाहरण: "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.

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

string

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

ब्रेक

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

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

string (Timestamp format)

ब्रेक लेने का समय.

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

duration

string (Duration format)

ब्रेक का कुल समय.

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