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 "प्रीएमप्ट किए जा सकते हैं": इस ट्रांज़िशन के दौरान, इनमें कई बार रुकावट आ सकती है. क्लाइंट यह मान सकते हैं कि यात्रा "जल्द से जल्द" हो सकती है और "इंतज़ार" से बाकी समय पूरा हो जाता है.

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

vehicleEndTime

string (Timestamp format)

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

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

integer

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

isPickup

boolean

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

visitRequestIndex

integer

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

startTime

string (Timestamp format)

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

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

injectedSolutionLocationToken

integer

विज़िट की जगह की जानकारी दिखाने वाला ओपेक टोकन.

यह फ़ील्ड, नतीजों के रास्तों की विज़िट में तब पॉप्युलेट हो सकता है, जब इस विज़िट के लिए VisitRequest.avoid_u_turns को 'सही' पर सेट किया गया हो या अनुरोध OptimizeToursRequest में ShipmentModel.avoid_u_turns को 'सही' पर सेट किया गया हो.

ट्रांज़िशन

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

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

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 गलत है, तो इसमें भी यह शामिल होता है: `कुल अवधि = यात्रा की अवधि + देरी में लगने वाला समय
  • 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 को 'सही है' पर सेट किया गया हो.

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".