किसी वाहन के रास्ते को समय के हिसाब से इस तरह से बांटा जा सकता है (हम मानते हैं कि 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 को कैसे व्यवस्थित किया जा सकता है.
- ये ओवरलैप नहीं होते.
- DELAY यूनीक होता है और यह ज़रूरी है कि यह अगले विज़िट (या वाहन के बंद होने) से ठीक पहले की अवधि हो. इसलिए, इसके शुरू और खत्म होने का समय जानने के लिए, देरी की अवधि की जानकारी होना ज़रूरी है.
- ब्रेक, लगातार और बिना ओवरलैप वाले समय के अंतराल होते हैं. जवाब में, हर ब्रेक के शुरू होने का समय और उसकी अवधि के बारे में बताया जाता है.
- 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 ( |
| फ़ील्ड | |
|---|---|
vehicleIndex |
रास्ते पर चलने वाला वाहन, जिसकी पहचान सोर्स |
vehicleLabel |
इस रास्ते पर चलने वाले वाहन का लेबल. अगर यह जानकारी दी गई है, तो यह |
vehicleStartTime |
वह समय जब वाहन अपना रास्ता शुरू करता है. यह आरएफ़सी 3339 का इस्तेमाल करता है. इसमें जनरेट किया गया आउटपुट हमेशा Z-नॉर्मलाइज़ किया जाएगा और इसमें 0, 3, 6 या 9 फ़्रैक्शनल अंक इस्तेमाल किए जाएंगे. "Z" के अलावा, अन्य ऑफ़सेट भी स्वीकार किए जाते हैं. उदाहरण: |
vehicleEndTime |
वह समय जब वाहन अपने रास्ते पर पहुंच जाता है. यह आरएफ़सी 3339 का इस्तेमाल करता है. इसमें जनरेट किया गया आउटपुट हमेशा Z-नॉर्मलाइज़ किया जाएगा और इसमें 0, 3, 6 या 9 फ़्रैक्शनल अंक इस्तेमाल किए जाएंगे. "Z" के अलावा, अन्य ऑफ़सेट भी स्वीकार किए जाते हैं. उदाहरण: |
visits[] |
विज़िट का क्रम, जो किसी रास्ते को दिखाता है. visits[i] रास्ते में i-th विज़िट है. अगर यह फ़ील्ड खाली है, तो इसका मतलब है कि वाहन का इस्तेमाल नहीं किया गया है. |
transitions[] |
रास्ते के लिए ट्रांज़िशन की क्रम से लगाई गई सूची. |
hasTrafficInfeasibilities |
ट्रैफ़िक की वजह से, यात्रा में लगने वाले समय |
routePolyline |
रास्ते की एन्कोड की गई पॉलीलाइन. इस फ़ील्ड में जानकारी सिर्फ़ तब भरी जाती है, जब |
breaks[] |
इस रास्ते पर चलने वाले वाहन के लिए तय किए गए ब्रेक. |
metrics |
इस रूट के लिए, अवधि, दूरी, और लोड मेट्रिक. कॉन्टेक्स्ट के हिसाब से, |
vehicleFullness |
एक्सपेरिमेंट के तौर पर उपलब्ध: ऐसा हो सकता है कि आने वाले समय में इस फ़ील्ड के काम करने के तरीके में बदलाव हो या यह फ़ील्ड उपलब्ध न रहे. |
routeCosts |
रास्ते का किराया, जिसे कीमत से जुड़े अनुरोध फ़ील्ड के हिसाब से बांटा गया है. कुंजियां, OptimizeToursRequest के हिसाब से प्रोटो पाथ होती हैं. उदाहरण के लिए, "model.shipments.pickups.cost". वैल्यू, लागत वाले फ़ील्ड से जनरेट की गई कुल लागत होती है. इसे पूरे रास्ते के हिसाब से एग्रीगेट किया जाता है. दूसरे शब्दों में, costs["model.shipments.pickups.cost"] का मतलब, रास्ते में पिकअप करने की सभी लागतों का योग होता है. मॉडल में तय की गई सभी लागतों की जानकारी यहां दी गई है. हालांकि, TransitionAttributes से जुड़ी लागतों की जानकारी सिर्फ़ एग्रीगेट किए गए तरीके से दी जाती है. यह जानकारी 2022/01 से उपलब्ध है. |
routeTotalCost |
रास्ते की कुल लागत. लागत के मैप में मौजूद सभी लागतों का योग. |
यहां जाएं
किसी रास्ते पर की गई विज़िट. यह विज़िट, Shipment को पिकअप करने या डिलीवर करने से जुड़ी है.
| JSON के काेड में दिखाना |
|---|
{ "shipmentIndex": integer, "isPickup": boolean, "visitRequestIndex": integer, "startTime": string, "loadDemands": { string: { object ( |
| फ़ील्ड | |
|---|---|
shipmentIndex |
सोर्स |
isPickup |
अगर वैल्यू सही है, तो इसका मतलब है कि विज़िट, |
visitRequestIndex |
|
startTime |
विज़िट शुरू होने का समय. ध्यान दें कि वाहन, विज़िट की जगह पर इस समय से पहले भी पहुंच सकता है. समय, यह आरएफ़सी 3339 का इस्तेमाल करता है. इसमें जनरेट किया गया आउटपुट हमेशा Z-नॉर्मलाइज़ किया जाएगा और इसमें 0, 3, 6 या 9 फ़्रैक्शनल अंक इस्तेमाल किए जाएंगे. "Z" के अलावा, अन्य ऑफ़सेट भी स्वीकार किए जाते हैं. उदाहरण: |
loadDemands |
शिपमेंट और विज़िट के अनुरोध |
detour |
विज़िट से पहले रास्ते में मौजूद शिपमेंट की वजह से, तय किए गए रास्ते पर ज़्यादा समय लगता है. साथ ही, समयसीमा की वजह से इंतज़ार करने में भी ज़्यादा समय लग सकता है. अगर विज़िट डिलीवरी के लिए है, तो रास्ते में बदलाव की दूरी का हिसाब, पिकअप के लिए की गई विज़िट से लगाया जाता है. यह दूरी इस तरह से तय की जाती है: अगर ऐसा नहीं है, तो इसकी गिनती वाहन |
shipmentLabel |
अगर |
visitLabel |
अगर |
visitType |
ज़रूरी नहीं. इससे विज़िट का टाइप पता चलता है. |
injectedSolutionLocationToken |
यह एक ओपेक टोकन है. यह किसी जगह पर जाने की जानकारी दिखाता है. इस फ़ील्ड में, नतीजे के रास्तों की विज़िट की जानकारी भरी जा सकती है. ऐसा तब होता है, जब इस विज़िट के लिए एक्सपेरिमेंट के तौर पर उपलब्ध: ज़्यादा जानकारी के लिए, https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request पर जाएं. |
VisitType
इससे पता चलता है कि विज़िट, पिकअप, डिलीवरी या Stop के लिए की गई थी. किसी स्टॉप पर विज़िट करने की जानकारी का इस्तेमाल सिर्फ़ तब किया जाता है, जब अलग-अलग मोड के हिसाब से ऑप्टिमाइज़ेशन की सुविधा चालू हो.
| Enums | |
|---|---|
VISIT_TYPE_UNSPECIFIED |
विज़िट के टाइप की जानकारी नहीं दी गई है. |
PICKUP_SHIPMENT |
विज़िट, शिपमेंट पिकअप करने से जुड़ी होती है. |
DELIVER_SHIPMENT |
यह विज़िट, शिपमेंट की डिलीवरी से जुड़ी होती है. |
ट्रांज़िशन
रास्ते में मौजूद दो इवेंट के बीच ट्रांज़िशन. ShipmentRoute का ब्यौरा देखें.
अगर वाहन में startLocation और/या endLocation नहीं है, तो यात्रा से जुड़ी मेट्रिक की वैल्यू 0 होती है.
| JSON के काेड में दिखाना |
|---|
{ "travelDuration": string, "travelDistanceMeters": number, "trafficInfoUnavailable": boolean, "delayDuration": string, "breakDuration": string, "waitDuration": string, "totalDuration": string, "startTime": string, "routePolyline": { object ( |
| फ़ील्ड | |
|---|---|
travelDuration |
इस ट्रांज़िशन के दौरान यात्रा की अवधि. |
travelDistanceMeters |
ट्रांज़िशन के दौरान तय की गई दूरी. |
trafficInfoUnavailable |
जब |
delayDuration |
इस ट्रांज़िशन पर लागू किए गए डिले की अवधि का योग. अगर कोई देरी होती है, तो वह अगले इवेंट (विज़िट या वाहन के रुकने) से ठीक |
breakDuration |
अगर इस ट्रांज़िशन के दौरान कोई ब्रेक होता है, तो उसकी कुल अवधि. हर ब्रेक के शुरू होने के समय और अवधि की जानकारी, |
waitDuration |
इस ट्रांज़िशन के दौरान इंतज़ार में बिताया गया समय. इंतज़ार की अवधि, काम न करने के समय के हिसाब से होती है. इसमें ब्रेक का समय शामिल नहीं होता. यह भी ध्यान दें कि इंतज़ार करने का यह समय, कई अलग-अलग समय अंतराल में बंटा हो सकता है. |
totalDuration |
ट्रांज़िशन की कुल अवधि, आपकी सुविधा के लिए दी गई है. यह इसके बराबर है:
|
startTime |
इस ट्रांज़िशन के शुरू होने का समय. यह आरएफ़सी 3339 का इस्तेमाल करता है. इसमें जनरेट किया गया आउटपुट हमेशा Z-नॉर्मलाइज़ किया जाएगा और इसमें 0, 3, 6 या 9 फ़्रैक्शनल अंक इस्तेमाल किए जाएंगे. "Z" के अलावा, अन्य ऑफ़सेट भी स्वीकार किए जाते हैं. उदाहरण: |
routePolyline |
ट्रांज़िशन के दौरान फ़ॉलो किए गए रास्ते का, कोड में बदला गया पॉलीलाइन प्रज़ेंटेशन. इस फ़ील्ड में जानकारी सिर्फ़ तब भरी जाती है, जब |
routeToken |
सिर्फ़ आउटपुट के लिए. यह एक ओपेक टोकन है. इसे Navigation SDK को पास किया जा सकता है. इससे नेविगेशन के दौरान रास्ते को फिर से बनाया जा सकता है. साथ ही, रास्ता बदलने पर, रास्ते को बनाते समय तय किए गए मूल मकसद को पूरा किया जा सकता है. इस टोकन को ओपेक ब्लोब के तौर पर इस्तेमाल करें. इसकी वैल्यू की तुलना अलग-अलग अनुरोधों से न करें, क्योंकि सेवा से एक ही रूट की जानकारी मिलने पर भी इसकी वैल्यू बदल सकती है. इस फ़ील्ड में जानकारी सिर्फ़ तब भरी जाती है, जब |
vehicleLoads |
इस ट्रांज़िशन के दौरान, वाहन में मौजूद सामान का वज़न. यह वज़न, हर उस सामान के लिए होता है जो इस वाहन के पहले ट्रांज़िशन के दौरान लोड किए गए सामान को वाहन के रास्ते में लोड किया जाने वाला शुरुआती सामान माना जाता है. इसके बाद, हर बार आने वाले व्यक्ति के हिसाब से, |
EncodedPolyline
पॉलीलाइन का कोड में बदला गया वर्शन. पॉलीलाइन एन्कोडिंग के बारे में ज़्यादा जानकारी यहां दी गई है: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.
| JSON के काेड में दिखाना |
|---|
{ "points": string } |
| फ़ील्ड | |
|---|---|
points |
यह स्ट्रिंग, पॉलीलाइन के एन्कोड किए गए पॉइंट दिखाती है. |
ब्रेक
ब्रेक के लागू होने की जानकारी देने वाला डेटा.
| JSON के काेड में दिखाना |
|---|
{ "startTime": string, "duration": string } |
| फ़ील्ड | |
|---|---|
startTime |
ब्रेक शुरू होने का समय. यह आरएफ़सी 3339 का इस्तेमाल करता है. इसमें जनरेट किया गया आउटपुट हमेशा Z-नॉर्मलाइज़ किया जाएगा और इसमें 0, 3, 6 या 9 फ़्रैक्शनल अंक इस्तेमाल किए जाएंगे. "Z" के अलावा, अन्य ऑफ़सेट भी स्वीकार किए जाते हैं. उदाहरण: |
duration |
ब्रेक की अवधि. |
VehicleFullness
VehicleFullness एक मेट्रिक है. इससे पता चलता है कि वाहन में कितनी जगह खाली है. हर VehicleFullness फ़ील्ड की वैल्यू 0 से 1 के बीच होती है. इसे कैप की गई मेट्रिक फ़ील्ड (जैसे, AggregatedMetrics.travel_distance_meters) और उससे जुड़ी वाहन की सीमा (जैसे, Vehicle.route_distance_limit) के अनुपात के तौर पर कैलकुलेट किया जाता है. हालांकि, ऐसा तब होता है, जब वाहन की सीमा मौजूद हो. अन्यथा फ़ुलनेस अनुपात सेट नहीं रहता. अगर सीमा 0 है, तो फ़ील्ड को 1 पर सेट किया जाता है. ध्यान दें: अगर किसी रास्ते पर ट्रैफ़िक की वजह से यात्रा करना मुश्किल हो, तो कुछ मामलों में, फ़ुलनेस रेशियो 1.0 से ज़्यादा हो सकता है. उदाहरण के लिए, ऐसा हो सकता है कि वाहन तय की गई दूरी की सीमा से ज़्यादा दूरी तय कर ले. ऐसे मामलों में, हम फ़ुलनेस की वैल्यू को 1.0 पर सेट कर देते हैं.
| JSON के काेड में दिखाना |
|---|
{ "maxFullness": number, "distance": number, "travelDuration": number, "activeDuration": number, "maxLoad": number, "activeSpan": number } |
| फ़ील्ड | |
|---|---|
maxFullness |
इस मैसेज में मौजूद अन्य सभी फ़ील्ड की ज़्यादा से ज़्यादा वैल्यू. |
distance |
|
travelDuration |
[AggregatedMetrics.travel_duration_seconds][] और |
activeDuration |
[AggregatedMetrics.total_duration_seconds][] और |
maxLoad |
सभी तरह के [AggregatedMetrics.max_load][] और उनके |
activeSpan |
किसी वाहन के लिए, (vehicleEndTime - vehicleStartTime) / (latestVehicleEndTime - earliestVehicleStartTime) का अनुपात. अगर डिनॉमिनेटर मौजूद नहीं है, तो इसके बजाय ( |