Package google.maps.routeoptimization.v1

इंडेक्स

RouteOptimization

वाहन के टूर को ऑप्टिमाइज़ करने की सेवा.

कुछ खास तरह के फ़ील्ड की वैधता:

  • google.protobuf.Timestamp
    • समय, Unix समय में है: 01-01-1970 से अब तक T00:00:00+00:00 सेकंड.
    • सेकंड [0, 253402300799] में होना चाहिए, मतलब [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00] में होना चाहिए.
    • नैनो को सेट नहीं करना चाहिए या 0 पर सेट करना चाहिए.
  • google.protobuf.Duration
    • सेकंड [0, 253402300799] में होना चाहिए, मतलब [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00] में होना चाहिए.
    • नैनो को सेट नहीं करना चाहिए या 0 पर सेट करना चाहिए.
  • google.type.LatLng
    • अक्षांश [-90.0, 90.0] में होना चाहिए.
    • देशांतर [-180.0, 180.0] में होना चाहिए.
    • कम से कम एक अक्षांश और देशांतर गैर-शून्य होना चाहिए.
BatchOptimizeTours

rpc BatchOptimizeTours(BatchOptimizeToursRequest) returns (Operation)

यह बैच के तौर पर, एक या उससे ज़्यादा OptimizeToursRequest मैसेज के लिए, वाहन की यात्राओं को ऑप्टिमाइज़ करता है.

यह तरीका लंबे समय तक चलने वाली ऑपरेशन (एलआरओ) है. ऑप्टिमाइज़ेशन के लिए (OptimizeToursRequest मैसेज) और आउटपुट (OptimizeToursResponse मैसेज) के इनपुट, उपयोगकर्ता के तय फ़ॉर्मैट में Cloud Storage से/में पढ़े/लिखे जाते हैं. OptimizeTours तरीके की तरह, हर OptimizeToursRequest में ShipmentModel होता है और ShipmentRoute वाले OptimizeToursResponse को दिखाता है, जो कुल लागत को कम करने वाले वाहनों से किए जाने वाले रास्तों के सेट होते हैं.

अनुमति के दायरे

नीचे दिए गए OAuth के लिंक की ज़रूरत हाेती है:

  • https://www.googleapis.com/auth/cloud-platform
OptimizeTours

rpc OptimizeTours(OptimizeToursRequest) returns (OptimizeToursResponse)

यह नीति, ShipmentModel वाला OptimizeToursRequest भेजता है. साथ ही, ShipmentRoute वाला OptimizeToursResponse दिखाता है. ये उन रास्तों के सेट होते हैं जिन पर वाहन इस्तेमाल करते हैं, जिससे कुल लागत कम होती है.

एक ShipmentModel मॉडल में मुख्य रूप से Shipments शामिल होते हैं, जिन्हें लागू करने की ज़रूरत होती है और Vehicle वे जिनका इस्तेमाल Shipment के ट्रांसपोर्ट के लिए किया जा सकता है. ShipmentRoute, Vehicle को Shipment असाइन करते हैं. खास तौर पर, वे हर वाहन के लिए Visit की एक सीरीज़ असाइन करते हैं, जिसमें Visit VisitRequest से जुड़ा होता है, जो Shipment के लिए पिक अप या डिलीवरी है.

इसका लक्ष्य Vehicle के लिए ShipmentRoute का एक असाइनमेंट उपलब्ध कराना है, जो ShipmentModel में तय की गई कुल लागत को कम करता है.

अनुमति के दायरे

नीचे दिए गए OAuth के लिंक की ज़रूरत हाेती है:

  • https://www.googleapis.com/auth/cloud-platform

AggregatedMetrics

ShipmentRoute के लिए एग्रीगेट की गई मेट्रिक (सभी Transition और/या Visit (सभी ShipmentRoute पर रिस्पॉन्स) के लिए, OptimizeToursResponse का रिस्पॉन्स.

फ़ील्ड
performed_shipment_count

int32

भेजे गए शिपमेंट की संख्या. ध्यान दें कि पिकअप और डिलीवरी की सुविधा को सिर्फ़ एक बार गिना जाता है.

travel_duration

Duration

किसी रास्ते या किसी समाधान के लिए, यात्रा में लगने वाला कुल समय.

wait_duration

Duration

किसी रास्ते या समाधान के लिए, इंतज़ार का कुल समय.

delay_duration

Duration

किसी रास्ते या समाधान के लिए, कुल देरी की अवधि.

break_duration

Duration

किसी रूट या समाधान के लिए ब्रेक की कुल अवधि.

visit_duration

Duration

किसी रास्ते या निजी समाधान के लिए, विज़िट में लगने वाला कुल समय.

total_duration

Duration

कुल अवधि, ऊपर दी गई सभी अवधियों के कुल योग के बराबर होनी चाहिए. रास्तों के लिए, यह इनसे भी जुड़ी होती है:

[ShipmentRoute.vehicle_end_time][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_end_time] - [ShipmentRoute.vehicle_start_time][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_start_time]
travel_distance_meters

double

किसी रास्ते या समाधान के लिए, यात्रा की कुल दूरी.

max_loads

map<string, VehicleLoad>

इस रूट पर हर मात्रा (रिस्पॉन्सर समाधान) के लिए, पूरे रूट (रिस्पॉन्सर समाधान) पर ज़्यादा से ज़्यादा लोड का आकलन किया गया है. इसका हिसाब, पूरे Transition.vehicle_loads (रिस्पॉन्सर किया गया रिज़ॉल्यूशन) की ज़्यादा से ज़्यादा वैल्यू के तौर पर लगाया जाता है. ShipmentRoute.metrics.max_loads.

BatchOptimizeToursMetadata

इस टाइप के लिए कोई फ़ील्ड नहीं है.

BatchOptimizeToursRequest कॉल के लिए ऑपरेशन मेटाडेटा.

BatchOptimizeToursRequest

यात्राओं को एसिंक्रोनस ऑपरेशन के तौर पर ऑप्टिमाइज़ करने के बैच का अनुरोध करें. हर इनपुट फ़ाइल में एक OptimizeToursRequest होना चाहिए और हर आउटपुट फ़ाइल में एक OptimizeToursResponse होगा. अनुरोध में फ़ाइलों को पढ़ने/लिखने और पार्स करने के लिए जानकारी शामिल है. सभी इनपुट और आउटपुट फ़ाइलें एक ही प्रोजेक्ट के तहत होनी चाहिए.

फ़ील्ड
parent

string

ज़रूरी है. कॉल करने के लिए, प्रोजेक्ट और जगह को टारगेट करें.

फ़ॉर्मैट: * projects/{project-id} * projects/{project-id}/locations/{location-id}

अगर कोई जगह तय नहीं की गई है, तो क्षेत्र अपने-आप चुन लिया जाएगा.

model_configs[]

AsyncModelConfig

ज़रूरी है. हर खरीदारी मॉडल, जैसे कि फ़ाइल पाथ और डेटा फ़ॉर्मैट की इनपुट/आउटपुट जानकारी.

AsyncModelConfig

एसिंक्रोनस तरीके से एक ऑप्टिमाइज़ेशन मॉडल को हल करने के लिए जानकारी.

फ़ील्ड
display_name

string

ज़रूरी नहीं. उपयोगकर्ता के तय किए गए मॉडल का नाम, जिसका इस्तेमाल उपयोगकर्ता, मॉडल पर नज़र रखने के लिए उपनाम के तौर पर किया जा सकता है.

input_config

InputConfig

ज़रूरी है. इनपुट मॉडल के बारे में जानकारी.

output_config

OutputConfig

ज़रूरी है. आउटपुट की जगह की जानकारी.

BatchOptimizeToursResponse

इस टाइप के लिए कोई फ़ील्ड नहीं है.

BatchOptimizeToursRequest पर दिया गया जवाब. कार्रवाई पूरी होने के बाद, इसे लंबे समय तक चलने वाली कार्रवाई में दिखाया जाता है.

BreakRule

वाहन के लिए टाइम ब्रेक जनरेट करने के नियम, जैसे कि लंच ब्रेक. ब्रेक, लगातार चलने वाली वह अवधि होती है जिसमें वाहन अपनी मौजूदा स्थिति में बंद रहता है और उस जगह पर कोई गतिविधि नहीं की जा सकती. इन वजहों से ब्रेक आ सकता है:

  • दो विज़िट के बीच की यात्रा के दौरान (जिसमें विज़िट के ठीक पहले या ठीक बाद का समय शामिल है, लेकिन विज़िट के बीच का समय शामिल नहीं है), जिस स्थिति में यह विज़िट के बीच संबंधित ट्रांज़िट समय को बढ़ाता है,
  • वाहन शुरू होने से पहले या ब्रेक के बीच में वाहन शुरू न हो. इस स्थिति में, वाहन के शुरू होने के समय पर इसका कोई असर नहीं पड़ता.
  • या वाहन खत्म होने के बाद (इसी तरह, वाहन के खत्म होने के समय के साथ).
फ़ील्ड
break_requests[]

BreakRequest

ब्रेक का क्रम. BreakRequest मैसेज देखें.

frequency_constraints[]

FrequencyConstraint

कई FrequencyConstraint लागू हो सकते हैं. यह ज़रूरी है कि वे सभी, इस BreakRule के BreakRequest से संतुष्ट हों. FrequencyConstraint देखें.

BreakRequest

हर वाहन पर लागू होने वाले ब्रेक का क्रम (जैसे, उनकी संख्या और क्रम) पहले से ही पता होना चाहिए. दोहराए गए BreakRequest उस क्रम को तय करते हैं जिस क्रम में वे होने चाहिए. उनकी टाइम विंडो (earliest_start_time / latest_start_time) ओवरलैप हो सकती हैं, लेकिन वे क्रम के हिसाब से होनी चाहिए (इसे चुना गया है).

फ़ील्ड
earliest_start_time

Timestamp

ज़रूरी है. ब्रेक की शुरुआत में लोअर बाउंड (शामिल).

latest_start_time

Timestamp

ज़रूरी है. ब्रेक की शुरुआत में अपर बाउंड (शामिल).

min_duration

Duration

ज़रूरी है. ब्रेक की कम से कम अवधि. पॉज़िटिव होना चाहिए.

FrequencyConstraint

कम से कम ब्रेक फ़्रीक्वेंसी लागू करके, ऊपर बताई गई ब्रेक की फ़्रीक्वेंसी और कुल समय को कम किया जा सकता है. जैसे, "हर 12 घंटे में कम से कम एक घंटे का ब्रेक होना चाहिए". यह मानते हुए कि "12 घंटे की किसी भी स्लाइडिंग टाइम विंडो में, कम से कम एक घंटे का कम से कम एक ब्रेक होना चाहिए" के तौर पर समझा जा सकता है, यह उदाहरण इन FrequencyConstraint के मुताबिक होगा:

{
   min_break_duration { seconds: 3600 }         # 1 hour.
   max_inter_break_duration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}

समाधान में ब्रेक के समय और अवधि, इन सभी पाबंदियों के मुताबिक होंगी. इसके अलावा, BreakRequest में पहले से तय टाइम विंडो और कम से कम अवधि के लिए भी यह तय किया जाएगा.

व्यावहारिक तौर पर, FrequencyConstraint लगातार ब्रेक लेने पर लागू हो सकता है. उदाहरण के लिए, नीचे दिए गए शेड्यूल में "हर 12 घंटे में 1 घंटा" का उदाहरण दिया गया है:

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
फ़ील्ड
min_break_duration

Duration

ज़रूरी है. इस कंस्ट्रेंट के लिए ब्रेक की कम से कम अवधि. नॉन-नेगेटिव. FrequencyConstraint की जानकारी देखें.

max_inter_break_duration

Duration

ज़रूरी है. इस रूट में समय के ऐसे अंतराल की ज़्यादा से ज़्यादा अनुमति है जिसमें duration >= min_break_duration का ब्रेक शामिल न हो. पॉज़िटिव होना चाहिए.

DataFormat

इनपुट और आउटपुट फ़ाइलों के लिए डेटा फ़ॉर्मैट.

Enums
DATA_FORMAT_UNSPECIFIED अमान्य मान, प्रारूप की जानकारी नहीं होनी चाहिए.
JSON JavaScript ऑब्जेक्ट नोटेशन.
PROTO_TEXT प्रोटोकॉल बफ़र टेक्स्ट फ़ॉर्मैट. https://protobuf.dev/reference/protobuf/textformat-spec/ पर जाएं

DistanceLimit

ज़्यादा से ज़्यादा दूरी तय करने वाली सीमा. यह मुश्किल या हल्का हो सकता है.

अगर सॉफ़्ट लिमिट तय की गई है, तो soft_max_meters और cost_per_kilometer_above_soft_max, दोनों वैल्यू नेगेटिव होनी चाहिए. साथ ही, ये नेगेटिव नहीं होनी चाहिए.

फ़ील्ड
max_meters

int64

दूरी को ज़्यादा से ज़्यादा max_meters पर सीमित करने वाली हार्ड सीमा. सीमा ऋणात्मक नहीं होनी चाहिए.

soft_max_meters

int64

नर्म सीमा, दूरी की सीमा को लागू नहीं करती. हालांकि, उल्लंघन होने पर लागत लगती है जो मॉडल में तय की गई अन्य सभी कीमतों को जोड़ देती है.

अगर सॉफ़्ट_max_meter का मान तय किया गया है, तो यह max_meter से कम होना चाहिए. साथ ही, यह शून्य से कम होना चाहिए.

cost_per_kilometer_above_soft_max

double

अगर दूरी soft_max_meters सीमा से ज़्यादा है, तो प्रति किलोमीटर की लागत. अगर दूरी, तय सीमा से कम है, तो अतिरिक्त कीमत 0 होगी. ऐसा न होने पर, लागत का हिसाब लगाने के लिए इस्तेमाल किया जाने वाला फ़ॉर्मूला इस तरह होगा:

  (distance_meters - soft_max_meters) / 1000.0 *
  cost_per_kilometer_above_soft_max.

लागत ऋणात्मक नहीं होनी चाहिए.

GcsDestination

Google Cloud Storage की वह जगह जहां आउटपुट फ़ाइल(फ़ाइलों) को लिखा जाएगा.

फ़ील्ड
uri

string

ज़रूरी है. Google Cloud Storage यूआरआई.

GcsSource

Google Cloud Storage जगह, जहां से इनपुट फ़ाइल पढ़ी जाएगी.

फ़ील्ड
uri

string

ज़रूरी है. gs://bucket/path/to/object फ़ॉर्मैट वाले Google Cloud Storage ऑब्जेक्ट का यूआरआई.

InjectedSolutionConstraint

अनुरोध में वह समाधान शामिल किया गया है जिसमें यह जानकारी शामिल है कि कौनसी विज़िट को सीमित करना चाहिए और उन्हें कैसे सीमित करना चाहिए.

फ़ील्ड
routes[]

ShipmentRoute

इंजेक्ट करने के लिए सलूशन के रूट. हो सकता है कि मूल समाधान से कुछ रास्ते हटा दिए जाएं. जिन रास्तों और स्किप किए गए शिपमेंट को, injected_first_solution_routes के लिए बताए गए बुनियादी मान्यताओं के हिसाब से तय करना होगा.

skipped_shipments[]

SkippedShipment

इंजेक्ट करने के लिए, सलूशन के शिपमेंट को स्किप किया गया. इनमें से कुछ को मूल समाधान से हटाया जा सकता है. routes फ़ील्ड देखें.

constraint_relaxations[]

ConstraintRelaxation

शून्य या उससे ज़्यादा गाड़ियों के ग्रुप के लिए, यह तय करें कि पाबंदियों को कब और कितनी बार कम करना है. अगर यह फ़ील्ड खाली है, तो वाहन के ऐसे सभी रास्ते पूरी तरह से प्रतिबंधित होंगे जो खाली नहीं हैं.

ConstraintRelaxation

वाहनों के ग्रुप के लिए, इससे यह तय होता है कि विज़िट पर लगने वाले थ्रेशोल्ड(सीमाओं) में किस हद तक छूट दी जाएगी और किस लेवल तक की छूट दी जाएगी. skipped_shipment फ़ील्ड में मौजूद शिपिंग को स्किप नहीं किया जा सकता; इसका मतलब है कि इन्हें पूरा नहीं किया जा सकता.

फ़ील्ड
relaxations[]

Relaxation

vehicle_indices में वाहनों से आने वाले रास्तों पर लागू होने वाली विज़िट से जुड़ी सभी पाबंदियां.

vehicle_indices[]

int32

उन वाहन के इंडेक्स के बारे में बताता है जिन पर विज़िट की सीमा relaxations लागू होती है. अगर कोई वाहन खाली है, तो इसे डिफ़ॉल्ट वैल्यू माना जाता है. साथ ही, relaxations उन सभी वाहनों पर लागू होता है जिनके बारे में constraint_relaxations में नहीं बताया गया है. ज़्यादा से ज़्यादा एक डिफ़ॉल्ट फ़ील्ड हो सकता है. इसका मतलब है कि ज़्यादा से ज़्यादा एक कंस्ट्रेंट के आराम वाले फ़ील्ड को vehicle_indices खाली छोड़ा जा सकता है. किसी वाहन के इंडेक्स को सिर्फ़ एक बार लिस्ट किया जा सकता है. वह कई constraint_relaxations में भी हो सकता है.

अगर interpret_injected_solutions_using_labels सही है, तो वाहन के इंडेक्स को ShipmentRoute.vehicle_index की तरह मैप किया जाता है (fields टिप्पणी देखें).

सुकून देने वाले

अगर relaxations खाली है, तो routes पर सभी विज़िट के शुरू होने का समय और क्रम पूरी तरह से सीमित हो जाएगा. साथ ही, उन रास्तों में कोई नई विज़िट नहीं डाली जाएगी और न ही उन्हें जोड़ा जा सकेगा. साथ ही, routes में वाहन के शुरू और खत्म होने का समय पूरी तरह सीमित होता है.ऐसा तब तक होता है, जब तक वाहन खाली न हो. इसका मतलब है कि वाहन में कोई विज़िट नहीं और मॉडल में used_if_route_is_empty को 'गलत' पर सेट किया गया है.

relaxations(i).level उस विज़िट पर लागू किए गए कंस्ट्रेंट के आराम के लेवल के बारे में बताता है जो #j को पूरा करती है:

  • route.visits(j).start_time >= relaxations(i).threshold_time और
  • j + 1 >= relaxations(i).threshold_visit_count

इसी तरह, वाहन के शुरू होने का समय relaxations(i).level तक आरामदेह होता है, अगर वह यहां बताई गई शर्तों के मुताबिक है:

  • vehicle_start_time >= relaxations(i).threshold_time और
  • relaxations(i).threshold_visit_count == 0 और वाहन का सिरा relaxations(i).level तक आरामदेह होगा, अगर:
  • vehicle_end_time >= relaxations(i).threshold_time और
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

अगर किसी विज़िट के लिए, threshold_visit_count से मिलती है या threshold_time एक ही level के साथ दो relaxations जोड़ता है: एक में सिर्फ़ threshold_visit_count सेट होने पर और दूसरा सिर्फ़ threshold_time सेट करने पर. अगर कोई विज़िट एक से ज़्यादा relaxations की शर्तों को पूरा करती है, तो सबसे ज़्यादा आरामदेह लेवल लागू होगा. इससे, वाहन शुरू होने से लेकर उसके आखिरी चरण तक जाने तक, आराम करने का लेवल और ज़्यादा आरामदेह हो जाता है. इसका मतलब है कि रास्ते के आगे बढ़ने के साथ-साथ आराम का लेवल कम नहीं होता.

उन मार्ग विज़िट का समय और अनुक्रम जो किसी भी relaxations की थ्रेशोल्ड शर्तों को पूरा नहीं करते हैं, पूरी तरह से सीमित हैं और इन अनुक्रमों में कोई विज़िट शामिल नहीं की जा सकती. इसके अलावा, अगर कोई वाहन शुरू या खत्म होने पर, आराम करने की शर्तों को पूरा नहीं करता है, तो गाड़ी के खाली न होने तक, उसका समय तय हो जाता है.

फ़ील्ड
level

Level

threshold_time पर या उसके बाद की शर्तों और कम से कम threshold_visit_count के पूरा होने पर लागू होने वाला कंस्ट्रेंट रिलैक्सेशन लेवल.

threshold_time

Timestamp

वह समय या उसके बाद, level छूट लागू की जा सकती है.

threshold_visit_count

int32

विज़िट की वह संख्या जिस पर या बाद में level की छूट लागू की जा सकती है. अगर threshold_visit_count की वैल्यू 0 है या इसे सेट नहीं किया गया है, तो level सीधे वाहन को शुरू करते समय लागू किया जा सकता है.

अगर यह route.visits_size() + 1 है, तो level को सिर्फ़ वाहन के आखिर में लागू किया जा सकता है. अगर यह route.visits_size() + 1 से ज़्यादा है, तो उस रास्ते के लिए level लागू नहीं होता है.

लेवल

कंस्ट्रेंट के अलग-अलग लेवल के बारे में बताता है. ये लेवल, विज़िट पर लागू होने वाले और थ्रेशोल्ड की शर्तों को पूरा करने के बाद लागू होते हैं.

नीचे दी गई सूची आपको सुकून देने के लिए दी गई है.

Enums
LEVEL_UNSPECIFIED

सुकून का डिफ़ॉल्ट लेवल: किसी भी सीमा में छूट नहीं मिलती, जैसे कि सभी विज़िट को पूरी तरह सीमित किया जाता है.

level में इस वैल्यू का इस्तेमाल साफ़ तौर पर नहीं किया जाना चाहिए.

RELAX_VISIT_TIMES_AFTER_THRESHOLD विज़िट के शुरू होने और खत्म होने के समय में छूट होगी. हालांकि, हर विज़िट एक ही वाहन में होगी. साथ ही, विज़िट का क्रम भी देखा जाना चाहिए. इन दोनों के बीच या इनसे पहले विज़िट को शामिल नहीं किया जा सकता.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD RELAX_VISIT_TIMES_AFTER_THRESHOLD की तरह, लेकिन विज़िट का क्रम भी आरामदेह होता है: विज़िट सिर्फ़ उनके वाहन से ही जुड़ी रहती हैं.
RELAX_ALL_AFTER_THRESHOLD RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD की तरह, लेकिन वाहन भी आरामदेह है: थ्रेशोल्ड समय पर या उसके बाद विज़िट पूरी तरह से मुफ़्त होती हैं और हो सकता है कि उनकी परफ़ॉर्मेंस बेहतर हो.

InputConfig

[BACKUPOptimizeTours][google.maps.route Optimization.v1.Route OptimizationService.BatchOptimizeTours] के लिए कोई इनपुट तय करें.

फ़ील्ड
data_format

DataFormat

ज़रूरी है. इनपुट डेटा फ़ॉर्मैट.

यूनियन फ़ील्ड source. ज़रूरी है. source इनमें से सिर्फ़ एक हो सकती है:
gcs_source

GcsSource

Google Cloud Storage की कोई जगह. यह एक ही ऑब्जेक्ट (फ़ाइल) होना चाहिए.

जगह

जगह (भौगोलिक बिंदु और वैकल्पिक शीर्षक) को इकट्ठा करता है.

फ़ील्ड
lat_lng

LatLng

वेपॉइंट के भौगोलिक निर्देशांक.

heading

int32

ट्रैफ़िक के फ़्लो की दिशा से जुड़ा कंपास हेडिंग. इस मान का इस्तेमाल पिकअप और ड्रॉप-ऑफ़ के लिए इस्तेमाल होने वाली सड़क के किनारे को तय करने के लिए किया जाता है. हेडिंग मान 0 से 360 तक हो सकते हैं, जहां 0 उत्तर उत्तर की ओर का शीर्षक, 90 देय पूर्व के शीर्षक को दिखाता है, वगैरह.

OptimizeToursRequest

टूर ऑप्टिमाइज़ेशन सॉल्वर को अनुरोध दिया जाता है. यह हल करने के लिए शिपमेंट मॉडल और ऑप्टिमाइज़ेशन पैरामीटर के बारे में बताता है.

फ़ील्ड
parent

string

ज़रूरी है. कॉल करने के लिए, प्रोजेक्ट या जगह को टारगेट करें.

फ़ॉर्मैट: * projects/{project-id} * projects/{project-id}/locations/{location-id}

अगर कोई जगह तय नहीं की गई है, तो क्षेत्र अपने-आप चुन लिया जाएगा.

timeout

Duration

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

एसिंक्रोनस अनुरोधों के लिए, अगर संभव हो, तो सर्वर टाइम आउट की अवधि खत्म होने से पहले समाधान जनरेट करेगा.

model

ShipmentModel

हल करने के लिए शिपमेंट मॉडल.

solving_mode

SolvingMode

डिफ़ॉल्ट रूप से, समाधान मोड DEFAULT_SOLVE (0) होता है.

search_mode

SearchMode

अनुरोध का जवाब देने के लिए, खोज मोड का इस्तेमाल किया जाता है.

injected_first_solution_routes[]

ShipmentRoute

पिछले सलूशन से मिलता-जुलता पहला सलूशन ढूंढने के लिए, ऑप्टिमाइज़ेशन एल्गोरिदम की मदद लें.

पहला सलूशन बनाते समय, मॉडल सीमित होता है. अगर किसी रास्ते पर शिपिंग नहीं की जाती है, तो पहले सलूशन में शिपिंग को छोड़ दिया जाता है. हालांकि, बाद के समाधान के तौर पर उन शिपमेंट को भी बार-बार इस्तेमाल किया जा सकता है.

समाधान को कुछ बुनियादी मान्यताओं के हिसाब से बनाया जाना चाहिए:

  • सभी रास्तों के लिए, vehicle_index रेंज में होना चाहिए और उसका डुप्लीकेट नहीं होना चाहिए.
  • सभी विज़िट के लिए, shipment_index और visit_request_index रेंज में होनी चाहिए.
  • शिपमेंट का संदर्भ सिर्फ़ एक रूट पर दिया जा सकता है.
  • पिकअप-डिलीवरी वाले शिपमेंट को, डिलीवरी से पहले ही पिकअप कर लिया जाना चाहिए.
  • किसी शिपमेंट को पिकअप करने के एक से ज़्यादा विकल्प या डिलीवरी नहीं की जा सकती.
  • सभी रास्तों के लिए, समय बढ़ रहा है (जैसे, vehicle_start_time <= visits[0].start_time <= visits[1].start_time ... <= vehicle_end_time).
  • शिपमेंट सिर्फ़ ऐसे वाहन पर ही परफ़ॉर्म किया जा सकता है जिसे अनुमति मिली हो. अगर Shipment.allowed_vehicle_indices खाली है या उसका vehicle_index Shipment.allowed_vehicle_indices में शामिल है, तो वाहन की अनुमति है.

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

injected_solution_constraint

InjectedSolutionConstraint

पिछले समाधान से मिलता-जुलता आखिरी हल खोजने के लिए, ऑप्टिमाइज़ेशन एल्गोरिदम पर पाबंदी लगाएं. उदाहरण के लिए, इसका इस्तेमाल उन रास्तों को फ़्रीज़ करने के लिए किया जा सकता है जो पहले ही पूरे हो चुके हैं या जिन्हें पूरा किया जाना है, लेकिन उनमें बदलाव नहीं किया गया है.

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

refresh_details_routes[]

ShipmentRoute

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

साल 2020/11 से, यह सिर्फ़ उन रास्तों की पॉलीलाइन भरता है जो खाली नहीं हैं और इसके लिए ज़रूरी है कि populate_polylines सही हो.

पास-इन रास्तों के route_polyline फ़ील्ड, रास्ते transitions से अलग हो सकते हैं.

इस फ़ील्ड का इस्तेमाल injected_first_solution_routes या injected_solution_constraint के साथ नहीं किया जाना चाहिए.

Shipment.ignore और Vehicle.ignore का व्यवहार पर कोई असर नहीं होता. सभी गैर-खाली रास्तों पर होने वाली सभी विज़िट के दौरान, पॉलीलाइन अपने-आप भर जाती है. इससे कोई फ़र्क़ नहीं पड़ता कि संबंधित शिपमेंट या वाहनों को अनदेखा किया गया है या नहीं.

interpret_injected_solutions_using_labels

bool

अगर सही है:

  • अनुरोध में वाहन के इंजेक्ट किए गए सॉल्यूशन में रूट का मिलान करने के लिए, vehicle_index के बजाय ShipmentRoute.vehicle_label का इस्तेमाल किया जाता है. अगर यह खाली नहीं है, तो ConstraintRelaxation.vehicle_indices को अपडेट करने के लिए मूल ShipmentRoute.vehicle_index की मैपिंग का फिर से इस्तेमाल किया जाता है. हालांकि, मैपिंग की जानकारी साफ़ तौर पर नहीं दी जानी चाहिए. इसका मतलब है कि एक से ज़्यादा ShipmentRoute के लिए मूल vehicle_index का इस्तेमाल नहीं किया जाना चाहिए.ShipmentRoute.vehicle_index
  • इंजेक्ट किए गए सॉल्यूशन में, अनुरोध वाले शिपमेंट के साथ विज़िट को मैच करने के लिए, shipment_index के बजाय ShipmentRoute.Visit.shipment_label का इस्तेमाल करता है;
  • इंजेक्ट किए गए सलूशन में, अनुरोध वाले शिपमेंट के साथ, स्किप किए गए शिपमेंट को मैच करने के लिए, SkippedShipment.index के बजाय SkippedShipment.label का इस्तेमाल किया जाता है.

यह जानकारी injected_first_solution_routes, injected_solution_constraint, और refresh_details_routes फ़ील्ड पर लागू होती है. इसका इस्तेमाल तब किया जा सकता है, जब समाधान बनाए जाने के बाद, अनुरोध में शिपमेंट या वाहन इंडेक्स में बदलाव किए गए हों. इसकी वजह यह हो सकती है कि शिपमेंट या वाहनों को अनुरोध से हटा दिया गया हो या जोड़ दिया गया हो.

सही होने पर, नीचे दी गई कैटगरी में मौजूद लेबल अपनी कैटगरी में ज़्यादा से ज़्यादा एक बार दिखने चाहिए:

अगर इंजेक्ट किए गए घोल में मौजूद vehicle_label, किसी वाहन के अनुरोध से मेल नहीं खाता, तो उस रूट को विज़िट के साथ सलूशन से हटा दिया जाता है. अगर इंजेक्ट किए गए सॉल्यूशन में मौजूद shipment_label, शिपमेंट के अनुरोध के हिसाब से नहीं है, तो उस सॉल्यूशन को उस सॉल्यूशन से हटा दिया जाता है. अगर इंजेक्ट किए गए घोल में मौजूद SkippedShipment.label, शिपमेंट के अनुरोध के मुताबिक नहीं है, तो SkippedShipment को सलूशन से हटा दिया जाता है.

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

ध्यान दें: कॉल करने वाले (कॉलर) को यह पक्का करना होगा कि हर Vehicle.label (resp. Shipment.label) खास तौर पर ऐसे वाहन (रिस्पेक्ट शिपमेंट) इकाई की पहचान करता है जिसका इस्तेमाल इन दो काम के अनुरोधों में किया गया था: पिछला अनुरोध जिसमें इंजेक्ट किए गए सॉल्यूशन में इस्तेमाल किया गया OptimizeToursResponse बनाया गया था और मौजूदा अनुरोध जिसमें इंजेक्ट किया गया सॉल्यूशन शामिल है. इस ज़रूरी शर्त को पूरा करने के लिए, ऊपर बताई गई यूनीक वैल्यू की जांच काफ़ी नहीं है.

consider_road_traffic

bool

ShipmentRoute फ़ील्ड Transition.travel_duration, Visit.start_time, और vehicle_end_time का हिसाब लगाने के दौरान, ShipmentRoute.has_traffic_infeasibilities फ़ील्ड की सेटिंग और OptimizeToursResponse.total_cost फ़ील्ड का हिसाब लगाने के दौरान, ट्रैफ़िक के अनुमान का इस्तेमाल करें.

populate_polylines

bool

सही होने पर, जवाब के तौर पर ShipmentRoute सेकंड में पॉलीलाइन अपने-आप भर जाएंगी.

populate_transition_polylines

bool

सही होने पर, जवाब ShipmentRoute.transitions में पॉलीलाइन अपने-आप भर जाएंगी.

allow_large_deadline_despite_interruption_risk

bool

अगर यह नीति सेट की जाती है, तो अनुरोध की समयसीमा 60 मिनट तक की हो सकती है. इस बारे में ज़्यादा जानने के लिए, https://grpc.io/blog/deadlines पर जाएं. अगर ऐसा नहीं है, तो समयसीमा सिर्फ़ 30 मिनट की है. ध्यान दें कि लंबे समय से चल रहे अनुरोधों में रुकावट आने का जोखिम काफ़ी ज़्यादा (लेकिन अब भी कम) होता है.

use_geodesic_distances

bool

सही होने पर, यात्रा की दूरी का हिसाब Google Maps की दूरी के बजाय, भौगोलिक दूरी का इस्तेमाल करके लगाया जाएगा. साथ ही, यात्रा में लगने वाले समय का हिसाब, geodesic_meters_per_second में तय की गई गति के साथ जियोडेसिक दूरी का इस्तेमाल करके लगाया जाएगा.

label

string

इस अनुरोध की पहचान करने के लिए इस्तेमाल किया जाने वाला लेबल. इसकी शिकायत OptimizeToursResponse.request_label में की गई है.

geodesic_meters_per_second

double

use_geodesic_distances के सही होने पर, इस फ़ील्ड को सेट करना ज़रूरी है. यह फ़ील्ड, यात्रा में लगने वाले समय की गणना करने के लिए लागू होने वाली गति की जानकारी देता है. इसकी वैल्यू कम से कम 1.0 मीटर/सेकंड होनी चाहिए.

max_validation_errors

int32

पुष्टि करने में हुई गड़बड़ियों की संख्या को छोटा करता है. आम तौर पर ये गड़बड़ियां BadRequest गड़बड़ी की जानकारी (https://cloud.google.com/apis/design/errors#error_details) के रूप में, INVALID_ बतौर गड़बड़ी पेलोड के साथ अटैच की जाती है. इस प्रक्रिया के दौरान, Solution_mode=पढ़ना, VerifiedATE_ONLY: OptimizeToursResponse.validation_errors फ़ील्ड देखें. यह डिफ़ॉल्ट रूप से 100 पर सेट होता है और 10,000 पर सीमित होता है.

SearchMode

खोज नतीजों में दिखने वाले तरीके की जानकारी देने वाला मोड. इसमें, खोज के नतीजों की क्वालिटी और इंतज़ार के समय की तुलना करके दिखाया जाता है. सभी मोड में, ग्लोबल अनुरोध की समयसीमा लागू होती है.

Enums
SEARCH_MODE_UNSPECIFIED RETURN_FAST के बराबर, खोज मोड तय नहीं है.
RETURN_FAST पहला अच्छा विकल्प मिलने के बाद खोज बंद करें.
CONSUME_ALL_AVAILABLE_TIME बेहतर समाधान खोजने के लिए पूरा समय दें.

SolvingMode

इससे तय होता है कि सॉल्वर को अनुरोध कैसे मैनेज करना चाहिए. VALIDATE_ONLY को छोड़कर, बाकी सभी मोड में अनुरोध अमान्य होने पर, आपको INVALID_REQUEST गड़बड़ी मिलेगी. दिखाई गई गड़बड़ियों की संख्या को तय करने के लिए, max_validation_errors देखें.

Enums
DEFAULT_SOLVE मॉडल को हल करें.
VALIDATE_ONLY मॉडल को ठीक किए बिना सिर्फ़ उसकी पुष्टि करता है: ज़्यादा से ज़्यादा OptimizeToursResponse.validation_errors की जानकारी अपने-आप भर जाती है.
DETECT_SOME_INFEASIBLE_SHIPMENTS

यह वैल्यू सिर्फ़ OptimizeToursResponse.validation_errors या OptimizeToursResponse.skipped_shipments में अपने-आप भर जाती है. इससे बाकी अनुरोध का समाधान नहीं होता. जवाब में status और routes को सेट नहीं किया जाता है. अगर injected_solution_constraint रूट में समस्याओं का पता चलता है, तो उन्हें OptimizeToursResponse.validation_errors फ़ील्ड में अपने-आप भर दिया जाता है और OptimizeToursResponse.skipped_shipments को खाली छोड़ दिया जाता है.

अहम जानकारी: यहां सभी ऐसे शिपमेंट लौटाए नहीं जाते जो मुमकिन नहीं हैं. हालांकि, सिर्फ़ वे शिपमेंट लौटाए जाते हैं जो प्री-प्रोसेसिंग के दौरान संभव नहीं होते हैं.

OptimizeToursResponse

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

फ़ील्ड
routes[]

ShipmentRoute

हर वाहन के लिए जिन रूट का इस्तेमाल किया गया है; i-th रूट, मॉडल के i-th वाहन से मेल खाता है.

request_label

string

OptimizeToursRequest.label की कॉपी, अगर अनुरोध में लेबल के बारे में बताया गया था.

skipped_shipments[]

SkippedShipment

छूटे हुए सभी शिपमेंट की सूची.

validation_errors[]

OptimizeToursValidationError

पुष्टि करने से जुड़ी उन सभी गड़बड़ियों की सूची जिनका हमने अलग से पता लगाया है. OptimizeToursValidationError मैसेज के लिए, "एक से ज़्यादा गड़बड़ियां" वाली जानकारी देखें.

metrics

Metrics

इस सलूशन के लिए अवधि, दूरी, और इस्तेमाल के मेट्रिक.

मेट्रिक

सभी रूट पर इकट्ठा की गई कुल मेट्रिक.

फ़ील्ड
aggregated_route_metrics

AggregatedMetrics

रूट के हिसाब से इकट्ठा किया गया डेटा. हर मेट्रिक, एक ही नाम के सभी ShipmentRoute.metrics फ़ील्ड का कुल योग (या लोड के लिए ज़्यादा से ज़्यादा) होती है.

skipped_mandatory_shipment_count

int32

स्किप किए गए ज़रूरी शिपमेंट की संख्या.

used_vehicle_count

int32

इस्तेमाल किए गए वाहनों की संख्या. ध्यान दें: अगर वाहन का रास्ता खाली है और Vehicle.used_if_route_is_empty सही है, तो वाहन को इस्तेमाल किया गया माना जाता है.

earliest_vehicle_start_time

Timestamp

इस्तेमाल किए गए वाहन के शुरू होने का सबसे पहला समय, इसका हिसाब, ShipmentRoute.vehicle_start_time में इस्तेमाल किए गए सभी वाहनों के मुकाबले कम से कम के तौर पर लगाया जाता है.

latest_vehicle_end_time

Timestamp

इस्तेमाल किए गए वाहन के खत्म होने का सबसे नया समय, जिसे ShipmentRoute.vehicle_end_time में इस्तेमाल किए गए सभी वाहनों के मुकाबले खत्म होने का ज़्यादा से ज़्यादा समय माना जाता है.

costs

map<string, double>

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

total_cost

double

समाधान की कुल लागत. लागत मैप में सभी वैल्यू का योग.

OptimizeToursValidationError

OptimizeToursRequest की पुष्टि करते समय हुई गड़बड़ी के बारे में बताता है.

फ़ील्ड
code

int32

पुष्टि करने से जुड़ी गड़बड़ी, जोड़े (code, display_name) से तय होती है. ये जोड़े हमेशा मौजूद रहते हैं.

नीचे दिए गए अन्य फ़ील्ड में, गड़बड़ी के बारे में ज़्यादा जानकारी दी गई है.

कई गड़बड़ियां: जब कई गड़बड़ियां होती हैं, तो पुष्टि करने की प्रोसेस उनमें से कई गड़बड़ियां होने की कोशिश करती है. किसी कंपाइलर की तरह, यह एक अपूर्ण प्रक्रिया है. पुष्टि करने से जुड़ी कुछ गड़बड़ियां "घातक" होंगी. इसका मतलब है कि वे पुष्टि की पूरी प्रक्रिया को रोक देती हैं. यह अन्य गड़बड़ियों के साथ-साथ, display_name="UNSPECIFIED" गड़बड़ियों के मामले में होता है. इनमें से कुछ समस्याओं की वजह से, पुष्टि करने की प्रक्रिया में अन्य गड़बड़ियां नहीं हो पाती हैं.

स्थिरता: code और display_name बहुत स्थिर होने चाहिए. हालांकि, समय-समय पर नए कोड और डिसप्ले नेम दिख सकते हैं. इस वजह से, (अमान्य) अनुरोध मिलने पर, (code, display_name) का दूसरा जोड़ा मिल सकता है, क्योंकि नई गड़बड़ी की वजह से पुराना जोड़ा छिप सकता है ("MULTIPLE ERRORS" देखें).

पहचान फ़ाइल: सभी (कोड, नाम) पेयर की सूची:

  • जानकारी उपलब्ध नहीं है = 0;
  • ValidationATION_TIMEOUT_ERROR = 10; पुष्टि की प्रक्रिया को तय समयसीमा के अंदर पूरा नहीं किया जा सका.
  • REQUEST_OPTIONS_ERROR = 12;

    • REQUEST_OPTIONS_INVALID_SOLVING_MODE = 1201;
    • REQUEST_OPTIONS_INVALID_MAX_VALIDATION_ERRORS = 1203;
    • REQUEST_OPTIONS_INVALID_GEODESIC_ रखता_PER_SECOND = 1204;
    • REQUEST_OPTIONS_GEODESIC_ रखता_PER_SECOND_TOO_! = 1205;
    • REQUEST_OPTIONS_MISSING_GEODESIC_ होंगी_PER_SECOND = 1206;
    • REQUEST_OPTIONS_POPULATE_PATHFOUNDER_TRIPS_AND_GEODESIC_DISTANCE = 1207;
    • REQUEST_OPTIONS_cost_MODEL_OPTIONS_AND_GEODESIC_DISTANCE = 1208;
    • REQUEST_OPTIONS_TRAVEL_MODE_INCOMPATIBLE_WITH_TRAFFIC = 1211;
    • REQUEST_OPTIONS_MULTIPLE_TRAFFIC_FLAVORS = 1212;
    • REQUEST_OPTIONS_INVALID_TRAFFIC_FLAVOR = 1213;
    • REQUEST_OPTIONS_TRAFFIC_ENABLED_WITHOUT_global_START_TIME = 1214;
    • REQUEST_OPTIONS_TRAFFIC_ENABLED_WITH_PRECEDENCES = 1215;
    • REQUEST_OPTIONS_TRAFFIC_PREFILL_MODE_INVALID = 1216;
    • REQUEST_OPTIONS_TRAFFIC_PREFILL_ENABLED_WITHOUT_TRAFFIC = 1217;
  • INJECTED_SOLUTION_ERROR = 20;
    • INJECTED_SOLUTION_MISSING_LABEL = 2000;
    • INJECTED_SOLUTION_लियन_LABEL = 2001;
    • INJECTED_SOLUTION_AMBIGUOUS_INDEX = 2002;
    • INJECTED_SOLUTION_INFEASIBLE_after_GETTING_TRAVEL_TIMES = 2003;
    • INJECTED_SOLUTION_transitION_INCONSISTENT_WITH_ मानते_TRAVEL = 2004;
    • INJECTED_SOLUTION_CONCURRENT_SOLUTION_TYPES = 2005;
    • INJECTED_SOLUTION_MORE_THAN_ONE_PER_TYPE = 2006;
    • INJECTED_SOLUTION_REFRESH_WITHOUT_POPULATE = 2008;
    • INJECTED_SOLUTION_CONSTRAINED_ROUTE_PORTION_INFEASIBLE = 2010;
  • SHIPMENT_MODEL_ERROR = 22;
    • SHIPMENT_MODEL_TOO_LARGE = 2200;
    • SHIPMENT_MODEL_TOO_MANY_CAPACITY_TYPES = 2201;
    • SHIPMENT_MODEL_ मॉडल_START_TIME_NEGATIVE_OR_NAN = 2202;
    • SHIPMENT_MODEL_global_END_TIME_TOO_LARGE_OR_NAN = 2203;
    • SHIPMENT_MODEL_ प्रॉम्प्ट
    • SHIPMENT_MODEL_ मॉडल_DURATION_TOO_ लेन-देन = 2205;
    • SHIPMENT_MODEL_MAX_ACTIVE_VEHICLES_NOT_POSITIVE = 2206;
    • SHIPMENT_MODEL_DURATION_MATRIX_TOO_LARGE = 2207;
  • INDEX_ERROR = 24;
  • TAG_ERROR = 26;
  • TIME_Windows_ERROR = 28;
    • टाइम_Windows_INVALID_START_TIME = 2800;
    • TIME_Windows_INVALID_END_TIME = 2801;
    • TIME_Windows_INVALID_SOFT_START_TIME = 2802;
    • TIME_Windows_INVALID_SOFT_END_TIME = 2803;
    • TIME_Windows_OUTSIDE_global_TIME_WINDOW = 2804;
    • TIME_Windows_START_TIME_After_END_TIME = 2805;
    • TIME_Windows_INVALID_cost_PER_HOUR_BEFORE_SOFT_START_TIME = 2806;
    • टाइम_Windows_INVALID_cost_PER_HOUR_after_SOFT_END_TIME = 2807;
    • टाइम_Windows_cost_BEFORE_SOFT_START_TIME_WITHOUT_SOFT_START_TIME = 2808;
    • TIME_Windows_cost_after_SOFT_END_TIME_WITHOUT_SOFT_END_TIME = 2809;
    • TIME_Windows_SOFT_START_TIME_WITHOUT_cost_BEFORE_SOFT_START_TIME = 2810;
    • टाइम_Windows_SOFT_END_TIME_WITHOUT_cost_after_SOFT_END_TIME = 2811;
    • TIME_Windows_OVERLAPPING_ADJACENT_OR_EARLIER_than_PREVIOUS = 2812;
    • टाइम_Windows_START_TIME_After_SOFT_START_TIME = 2813;
    • TIME_Windows_SOFT_START_TIME_after_END_TIME = 2814;
    • TIME_Windows_START_TIME_After_SOFT_END_TIME = 2815;
    • TIME_Windows_SOFT_END_TIME_After_END_TIME = 2816;
    • TIME_Windows_SPACE_BEFORE_SOFT_START_TIME_SET_AND_MULTIPLE_WINDOWS = 2817;
    • TIME_Windows_cost_बाद_SOFT_END_TIME_SET_AND_MULTIPLE_WINDOWS = 2818;
    • TransitION_ATTRIBUTES_ERROR = 30;
    • transitION_ATTRIBUTES_INVALID_cost = 3000;
    • TransitION_ATTRIBUTES_INVALID_cost_PER_KILOMETER = 3001;
    • TransitION_ATTRIBUTES_लियन_TAG_PAIR = 3002;
    • TransitION_ATTRIBUTES_DISTANCE_LIMIT_MAX_ ऐड-ऑन_UNSUPPORTED = 3003;
    • transitION_ATTRIBUTES_UNSPECIFIED_SOURCE_TAGS = 3004;
    • transitION_ATTRIBUTES_कॉन्फ़्लिक्टING_SOURCE_TAGS_FIELDS = 3005;
    • transitION_ATTRIBUTES_UNSPECIFIED_DESTINATION_TAGS = 3006;
    • transitION_ATTRIBUTES_कॉन्फ़्लिक्टING_DESTINATION_TAGS_FIELDS = 3007;
    • transitION_ATTRIBUTES_ चलाएं_DURATION_NEGATIVE_OR_NAN = 3008;
    • transitION_ATTRIBUTES_ चलाएं_DURATION_EXCEEDS_global_DURATION = 3009;
  • AMOUNT_ERROR = 31;
    • AMOUNT_NEGATIVE_VALUE = 3,100;
  • LOAD_LIMIT_ERROR = 33;
    • LOAD_LIMIT_INVALID_cost_ABOVE_SOFT_MAX = 3303;
    • LOAD_LIMIT_SOFT_MAX_WITHOUT_cost_ABOVE_SOFT_MAX = 3304;
    • LOAD_LIMIT_cost_ABOVE_SOFT_MAX_WITHOUT_SOFT_MAX = 3305;
    • LOAD_LIMIT_NEGATIVE_SOFT_MAX = 3306;
    • LOAD_LIMIT_MIXED_DEMAND_TYPE = 3307;
    • LOAD_LIMIT_MAX_LOAD_NEGATIVE_VALUE = 3308;
    • LOAD_LIMIT_SOFT_MAX_ABOVE_MAX = 3309;
  • INTERVAL_ERROR = 34;
    • INTERVAL_MIN_EXCEEDS_MAX = 3401;
    • INTERVAL_NEGATIVE_MIN = 3402;
    • INTERVAL_NEGATIVE_MAX = 3403;
    • INTERVAL_MIN_EXCEEDS_CAPACITY = 3404;
    • INTERVAL_MAX_EXCEEDS_CAPACITY = 3405;
  • DISTANCE_LIMIT_ERROR = 36;
    • DISTANCE_LIMIT_INVALID_cost_after_SOFT_MAX = 3601;
    • DISTANCE_LIMIT_SOFT_MAX_WITHOUT_cost_after_SOFT_MAX = 3602;
    • DISTANCE_LIMIT_cost_after_SOFT_MAX_WITHOUT_SOFT_MAX = 3603;
    • DISTANCE_LIMIT_NEGATIVE_MAX = 3604;
    • DISTANCE_LIMIT_NEGATIVE_SOFT_MAX = 3605;
    • DISTANCE_LIMIT_SOFT_MAX_LARGER_than_MAX = 3606;
  • DURATION_LIMIT_ERROR = 38;
    • DURATION_LIMIT_MAX_DURATION_NEGATIVE_OR_NAN = 3800;
    • DURATION_LIMIT_SOFT_MAX_DURATION_NEGATIVE_OR_NAN = 3801;
    • DURATION_LIMIT_INVALID_cost_PER_HOUR_after_SOFT_MAX = 3802;
    • DURATION_LIMIT_SOFT_MAX_WITHOUT_cost_after_SOFT_MAX = 3803;
    • DURATION_LIMIT_cost_after_SOFT_MAX_WITHOUT_SOFT_MAX = 3804;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_DURATION_NEGATIVE_OR_NAN = 3805;
    • DURATION_LIMIT_INVALID_cost_after_QUADRATIC_SOFT_MAX = 3806;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_WITHOUT_cost_PER_स्टोर_HOUR = 3807;
    • DURATION_LIMIT_cost_PER_स्कि_HOUR_WITHOUT_QUADRATIC_SOFT_MAX = 3808;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_WITHOUT_MAX = 3809;
    • DURATION_LIMIT_SOFT_MAX_LARGER_THAN_MAX = 3810;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_LARGER_THAN_MAX = 3811;
    • DURATION_LIMIT_DIFF_BETWEEN_MAX_AND_QUADRATIC_SOFT_MAX_TOO_LARGE = 3812;
    • DURATION_LIMIT_MAX_DURATION_EXCEEDS_global_DURATION = 3813;
    • DURATION_LIMIT_SOFT_MAX_DURATION_EXCEEDS_global_DURATION = 3814;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_DURATION_EXCEEDS_global_DURATION = 3815;
  • shipMENT_ERROR = 40;
    • shipMENT_PD_LIMIT_WITHOUT_PICKUP_AND_delivery = 4014;
    • shipMENT_PD_ABSOLUTE_DETOUR_LIMIT_DURATION_NEGATIVE_OR_NAN = 4000;
    • SHIPMENT_PD_ABSOLUTE_DETOUR_LIMIT_DURATION_EXCEEDS_Global_DURATION = 4001;
    • SHIPMENT_PD_RELATIVE_DETOUR_LIMIT_INVALID = 4015;
    • SHIPMENT_PD_DETOUR_LIMIT_AND_EXTRA_VISIT_DURATION = 4016;
    • SHIPMENT_PD_TIME_LIMIT_DURATION_NEGATIVE_OR_NAN = 4002;
    • SHIPMENT_PD_TIME_LIMIT_DURATION_EXCEEDS_global_DURATION = 4003;
    • SHIPMENT_EMPTY_SHIPMENT_TYPE = 4004;
    • SHIPMENT_NO_PICKUP_NO_delivery = 4005;
    • SHIPMENT_INVALID_PENALTY_cost = 4006;
    • SHIPMENT_ALLOWED_VEHICLE_INDEX_OUT_OF_BOUNDS = 4007;
    • shipMENT_CLIENT_ALLOWED_VEHICLE_INDEX = 4008;
    • SHIPMENT_INCONSISTENT_cost_FOR_VEHICLE_SIZE_WITHOUT_INDEX = 4009;
    • SHIPMENT_INCONSISTENT_cost_FOR_VEHICLE_SIZE_WITH_INDEX = 4010;
    • SHIPMENT_INVALID_cost_FOR_VEHICLE = 4011;
    • SHIPMENT_cost_FOR_VEHICLE_INDEX_OUT_OF_BOUNDS = 4012;
    • SHIPMENT_MATCH_cost_FOR_VEHICLE_INDEX = 4013;
  • VEHICLE_ERROR = 42;
    • VEHICLE_EMPTY_REQUIRED_OPERATOR_TYPE = 4200;
    • VEHICLE_लियन_REQUIRED_OPERATOR_TYPE = 4201;
    • VEHICLE_NO_OPERATOR_WITH_REQUIRED_OPERATOR_TYPE = 4202;
    • VEHICLE_EMPTY_START_TAG = 4203;
    • VEHICLE_लियन_START_TAG = 4204;
    • VEHICLE_EMPTY_END_TAG = 4205;
    • VEHICLE_ बजे_END_TAG = 4206;
    • VEHICLE_EXTRA_VISIT_DURATION_NEGATIVE_OR_NAN = 4207;
    • VEHICLE_EXTRA_VISIT_DURATION_EXCEEDS_global_DURATION = 4208;
    • VEHICLE_EXTRA_VISIT_DURATION_EMPTY_KEY = 4209;
    • VEHICLE_FIRST_SHIPMENT_INDEX_OUT_OF_BOUNDS = 4210;
    • VEHICLE_FIRST_SHIPMENT_IGNORED = 4211;
    • VEHICLE_FIRST_SHIPMENT_NOT_BOUND = 4212;
    • VEHICLE_LAST_SHIPMENT_INDEX_OUT_OF_BOUNDS = 4213;
    • VEHICLE_LAST_SHIPMENT_IGNORED = 4214;
    • VEHICLE_LAST_SHIPMENT_NOT_BOUND = 4215;
    • VEHICLE_IGNORED_WITH_USE_IF_ROUTE_IS_EMPTY = 4216;
    • VEHICLE_INVALID_cost_PER_KILOMETER = 4217;
    • VEHICLE_INVALID_cost_PER_HOUR = 4218;
    • VEHICLE_INVALID_cost_PER_TRAVELED_HOUR = 4219;
    • VEHICLE_INVALID_FIXED_cost = 4220;
    • VEHICLE_INVALID_TRAVEL_DURATION_MULTIPLE = 4221;
    • VEHICLE_TRAVEL_DURATION_MULTIPLE_WITH_SHIPMENT_PD_DETOUR_LIMITS = 4223;
    • VEHICLE_MATRIX_INDEX_WITH_SHIPMENT_PD_DETOUR_LIMITS = 4224;
    • VEHICLE_MINIMUM_DURATION_LongER_THAN_DURATION_LIMIT = 4222;
  • VISIT_REQUEST_ERROR = 44;
    • VISIT_REQUEST_EMPTY_TAG = 4400;
    • VISIT_REQUEST_ व्यवहार = 4401;
    • VISIT_REQUEST_DURATION_NEGATIVE_OR_NAN = 4404;
    • VISIT_REQUEST_DURATION_EXCEEDS_global_DURATION = 4405;
  • PRECEDENCE_ERROR = 46;
  • BREAK_ERROR = 48;
    • BREAK_LEFT_EMPTY = 4800;
    • BREAK_REQUEST_UNSPECIFIED_DURATION = 4801;
    • BREAK_REQUEST_UNSPECIFIED_EARLIEST_START_TIME = 4802;
    • BREAK_REQUEST_UNSPECIFIED_LATEST_START_TIME = 4803;
    • BREAK_REQUEST_DURATION_NEGATIVE_OR_NAN = 4804; = 4804;
    • BREAK_REQUEST_LATEST_START_TIME_BEFORE_EARLIEST_START_TIME = 4805;
    • BREAK_REQUEST_EARLIEST_START_TIME_BEFORE_वैश्विक_START_TIME = 4806;
    • BREAK_REQUEST_LATEST_END_TIME_After_global_END_TIME = 4807;
    • BREAK_REQUEST_NON_SCHEDULABLE = 4808;
    • BREAK_frequency_MAX_INTER_BREAK_DURATION_NEGATIVE_OR_NAN = 4809;
    • BREAK_frequency_MIN_BREAK_DURATION_NEGATIVE_OR_NAN = 4810;
    • BREAK_frequency_MIN_BREAK_DURATION_EXCEEDS_global_DURATION = 4811;
    • BREAK_frequency_MAX_INTER_BREAK_DURATION_EXCEEDS_global_DURATION = 4812;
    • BREAK_REQUEST_DURATION_EXCEEDS_global_DURATION = 4813;
    • BREAK_frequency_MISSING_MAX_INTER_BREAK_DURATION = 4814;
    • BREAK_frequency_MISSING_MIN_BREAK_DURATION = 4815;
  • SHIPMENT_TYPE_INCOMPATIBILITY_ERROR = 50;
    • SHIPMENT_TYPE_INCOMPATIBILITY_EMPTY_TYPE = 5001;
    • SHIPMENT_TYPE_INCOMPATIBILITY_less_THAN_TWO_TYPES = 5002;
    • SHIPMENT_TYPE_INCOMPATIBILITY_लियन_TYPE = 5003;
    • SHIPMENT_TYPE_INCOMPATIBILITY_INVALID_INCOMPATIBILITY_MODE = 5004;
    • SHIPMENT_TYPE_INCOMPATIBILITY_TOO_MANY_INCOMPATIBILITIES = 5005;
  • SHIPMENT_TYPE_REQUIREMENT_ERROR = 52;
    • SHIPMENT_TYPE_REQUIREMENT_NO_REQUIRED_TYPE = 52001;
    • SHIPMENT_TYPE_REQUIREMENT_NO_DEPENDENT_TYPE = 52002;
    • SHIPMENT_TYPE_REQUIREMENT_INVALID_REQUIREMENT_MODE = 52003;
    • SHIPMENT_TYPE_REQUIREMENT_TOO_MANY_REQUIREMENTS = 52004;
    • SHIPMENT_TYPE_REQUIREMENT_EMPTY_REQUIRED_TYPE = 52005;
    • shipMENT_TYPE_REQUIREMENT_लियन_REQUIRED_TYPE = 52006;
    • SHIPMENT_TYPE_REQUIREMENT_NO_REQUIRED_TYPE_FOUND = 52007;
    • SHIPMENT_TYPE_REQUIREMENT_EMPTY_DEPENDENT_TYPE = 52008;
    • SHIPMENT_TYPE_REQUIREMENT_लियन_DEPENDENT_TYPE = 52009;
    • SHIPMENT_TYPE_REQUIREMENT_SELF_DEPENDENT_TYPE = 52010;
    • SHIPMENT_TYPE_REQUIREMENT_GRAPH_HAS_CYCLES = 52011;
  • VEHICLE_OPERATOR_ERROR = 54;
    • VEHICLE_OPERATOR_EMPTY_TYPE = 5400;
    • VEHICLE_OPERATOR_MULTIPLE_START_TIME_WINDOWS = 5401;
    • VEHICLE_OPERATOR_SOFT_START_TIME_WINDOW = 5402;
    • VEHICLE_OPERATOR_MULTIPLE_END_TIME_WINDOWS = 5403;
    • VEHICLE_OPERATOR_SOFT_END_TIME_WINDOW = 5404;
  • DURATION_SECONDS_MATRIX_ERROR = 56;
    • DURATION_SECONDS_MATRIX_DURATION_NEGATIVE_OR_NAN = 5600;
    • DURATION_SECONDS_MATRIX_DURATION_EXCEEDS_global_DURATION = 5601;
display_name

string

गड़बड़ी का डिसप्ले नेम.

fields[]

FieldReference

गड़बड़ी वाले किसी कॉन्टेक्स्ट में 0, 1 (ज़्यादातर) या ज़्यादा फ़ील्ड शामिल हो सकते हैं. उदाहरण के लिए, वाहन #4 और शिपमेंट #2 के पहले पिकअप के बारे में इस तरह बताया जा सकता है:

fields { name: "vehicles" index: 4}
fields { name: "shipments" index: 2 sub_field {name: "pickups" index: 0} }

हालांकि, ध्यान दें कि किसी गड़बड़ी कोड के लिए, fields के एलिमेंट की संख्या नहीं बदलनी चाहिए.

error_message

string

इस स्ट्रिंग में गड़बड़ी के बारे में ऐसी जानकारी दी गई है जिसे कोई भी व्यक्ति आसानी से पढ़ सकता है. code और error_message के बीच 1:1 मैपिंग होती है (जब कोड != "जानकारी नहीं है").

स्थिरता: स्थिर नहीं: दिए गए code से जुड़ा गड़बड़ी का मैसेज समय के साथ बदल सकता है (उम्मीद है कि यह साफ़ हो जाएगा). इसके बजाय, कृपया display_name और code का इस्तेमाल करें.

offending_values

string

फ़ील्ड के मान शामिल हो सकते हैं. यह सुविधा हमेशा उपलब्ध नहीं होती. आपको इस पर पूरी तरह भरोसा नहीं करना चाहिए. इसका इस्तेमाल सिर्फ़ मैन्युअल मॉडल डीबग करने के लिए करना चाहिए.

FieldReference

इससे, पुष्टि करने में हुई गड़बड़ी के बारे में पता चलता है. FieldReference इस फ़ाइल में हमेशा किसी फ़ील्ड के बारे में बताता है और उसी हैरारकी वाले स्ट्रक्चर को फ़ॉलो करता है. उदाहरण के लिए, हम वाहन #5 के start_time_windows एलिमेंट #2 के बारे में बताने के लिए इनका इस्तेमाल कर सकते हैं:

name: "vehicles" index: 5 sub_field { name: "end_time_windows" index: 2 }

हालांकि, मैसेज को क्राउड करने से रोकने के लिए, हम OptimizeToursRequest या ShipmentModel जैसी टॉप लेवल इकाइयों को हटा देते हैं.

फ़ील्ड
name

string

फ़ील्ड का नाम, जैसे कि "वाहन".

sub_field

FieldReference

ज़रूरत पड़ने पर, बार-बार नेस्ट किए गए सब-फ़ील्ड.

यूनियन फ़ील्ड index_or_key.

index_or_key इनमें से सिर्फ़ एक हो सकती है:

index

int32

दोहराए जाने पर फ़ील्ड का इंडेक्स.

key

string

अगर फ़ील्ड कोई मैप है, तो कुंजी.

OutputConfig

[batOptimizeTours][google.maps.route Optimization.v1.Route OptimizationService.BatchOptimizeTours] नतीजों के लिए कोई डेस्टिनेशन तय करें.

फ़ील्ड
data_format

DataFormat

ज़रूरी है. आउटपुट डेटा फ़ॉर्मैट.

यूनियन फ़ील्ड destination. ज़रूरी है. destination इनमें से सिर्फ़ एक हो सकती है:
gcs_destination

GcsDestination

वह Google Cloud Storage जगह जिसमें आउटपुट लिखना है.

शिपमेंट

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

फ़ील्ड
display_name

string

शिपमेंट का उपयोगकर्ता की ओर से तय किया गया डिसप्ले नेम. इसमें ज़्यादा से ज़्यादा 63 वर्ण हो सकते हैं और इसमें UTF-8 वर्णों का इस्तेमाल किया जा सकता है.

pickups[]

VisitRequest

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

deliveries[]

VisitRequest

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

load_demands

map<string, Load>

शिपमेंट के लिए ज़रूरी चीज़ों की जानकारी लोड करना. जैसे, वज़न, वॉल्यूम, पैलेट की संख्या वगैरह. मैप में दी गई कुंजियों में ऐसे आइडेंटिफ़ायर होने चाहिए जो लोड के टाइप की जानकारी देते हों. खास तौर पर, इसमें यूनिट भी शामिल होनी चाहिए. उदाहरण के लिए: "weight_kg", "वॉल्यूम_गैलन", "पैलेट_count" वगैरह. अगर मैप में कोई कुंजी नहीं दिखती है, तो उससे जुड़े लोड को शून्य माना जाता है.

allowed_vehicle_indices[]

int32

वाहनों का सेट, जो इस शिपमेंट को कर सकते हैं. अगर यह जगह खाली है, तो सभी वाहन यह काम कर सकते हैं. वाहनों को ShipmentModel की vehicles सूची में उनके इंडेक्स के हिसाब से दिया जाता है.

costs_per_vehicle[]

double

हर वाहन को इस शिपमेंट को डिलीवर करने में आने वाली लागत की जानकारी देता है. अगर बताया गया है, तो इसमें इनमें से कोई एक होना चाहिए:

  • एलिमेंट की संख्या, costs_per_vehicle_indices के बराबर है. costs_per_vehicle[i], मॉडल के costs_per_vehicle_indices[i] वाहन से जुड़ा है.
  • एलिमेंट की संख्या उतनी ही होगी जितनी मॉडल में वाहन हैं. i-th एलिमेंट, मॉडल के वाहन #i से मेल खाता है.

ये लागतें penalty_cost वाली इकाई में ही होनी चाहिए और नेगेटिव नहीं होनी चाहिए. अगर ऐसी कोई लागत नहीं है, तो इस फ़ील्ड को खाली छोड़ दें.

costs_per_vehicle_indices[]

int32

उन वाहनों के इंडेक्स जिन पर costs_per_vehicle लागू होता है. अगर यह खाली नहीं है, तो इसमें एलिमेंट की संख्या costs_per_vehicle के बराबर होनी चाहिए. किसी वाहन इंडेक्स को एक से ज़्यादा बार तय नहीं किया जा सकता. अगर किसी वाहन को costs_per_vehicle_indices से बाहर रखा जाता है, तो उसकी लागत शून्य होगी.

pickup_to_delivery_absolute_detour_limit

Duration

इससे, पिक अप से लेकर डिलीवरी तक के सबसे कम पाथ की तुलना में, ज़्यादा से ज़्यादा कुल चक्कर लगाने में लगने वाले समय की जानकारी मिलती है. अगर बताया गया हो, तो यह नेगेटिव नहीं होना चाहिए. साथ ही, शिपमेंट में कम से कम पिकअप और डिलीवरी की सुविधा ज़रूर शामिल होनी चाहिए.

उदाहरण के लिए, पिकअप के चुने गए विकल्प से सीधे डिलीवरी के चुने गए विकल्प तक जाने में, कम से कम समय न लगेगा. इसके बाद, pickup_to_delivery_absolute_detour_limit को सेट करने पर यह लागू होता है:

start_time(delivery) - start_time(pickup) <=
t + pickup_to_delivery_absolute_detour_limit

अगर एक ही शिपमेंट पर, रिलेटिव और ऐब्सलूट, दोनों सीमाएं तय की जाती हैं, तो पिकअप/डिलीवरी के हर संभावित जोड़े के लिए, ज़्यादा सीमाएं लागू की जाती हैं. 2017/10 से, चक्करदार तरीके से सफ़र तभी किया जा सकता है, जब यात्रा में लगने वाला समय वाहनों पर निर्भर न हो.

pickup_to_delivery_time_limit

Duration

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

shipment_type

string

इस शिपमेंट के लिए "टाइप" वाली स्ट्रिंग खाली नहीं है. इस सुविधा का इस्तेमाल करके, यह तय किया जा सकता है कि shipment_types के बीच में क्या गड़बड़ियां या शर्तें हैं. ShipmentModel में shipment_type_incompatibilities और shipment_type_requirements देखें.

visit_types से अंतर है, जो एक बार वेबसाइट पर आने के लिए तय है: एक ही शिपमेंट से जुड़ी सभी पिकअप/डिलीवरी का shipment_type एक ही होता है.

label

string

इस शिपमेंट के लिए लेबल तय करता है. रिस्पॉन्स में इस लेबल की रिपोर्ट, इससे जुड़े ShipmentRoute.Visit के shipment_label में दी जाती है.

ignore

bool

अगर सही है, तो इस शिपमेंट को छोड़ दें, लेकिन penalty_cost लागू न करें.

मॉडल में shipment_type_requirements मौजूद होने पर, शिपमेंट को अनदेखा करने पर पुष्टि करने में गड़बड़ी होती है.

injected_first_solution_routes या injected_solution_constraint में किए जाने वाले शिपमेंट को अनदेखा करने की अनुमति होती है. सॉल्वर, पिक अप/डिलीवरी से जुड़ी उन विज़िट को परफ़ॉर्म करने वाले रूट से हटा देता है. ऐसे precedence_rules जो नज़रअंदाज़ किए गए शिपमेंट का रेफ़रंस देते हैं, उन्हें भी अनदेखा कर दिया जाएगा.

penalty_cost

double

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

अहम जानकारी: अगर इस जुर्माने के बारे में नहीं बताया गया है, तो इसे अनंत माना जाता है. इसका मतलब है कि शिपमेंट पूरा होना ज़रूरी है.

pickup_to_delivery_relative_detour_limit

double

इससे, पिक अप से लेकर डिलीवरी तक के सबसे छोटे पाथ की तुलना में, ज़्यादा से ज़्यादा रिलेटिव डिटूर समय की जानकारी मिलती है. अगर बताया गया हो, तो यह नेगेटिव नहीं होना चाहिए. साथ ही, शिपमेंट में कम से कम पिकअप और डिलीवरी की सुविधा ज़रूर शामिल होनी चाहिए.

उदाहरण के लिए, पिकअप के चुने गए विकल्प से सीधे डिलीवरी के चुने गए विकल्प तक जाने में, कम से कम समय न लगेगा. इसके बाद, pickup_to_delivery_relative_detour_limit को सेट करने पर यह लागू होता है:

start_time(delivery) - start_time(pickup) <=
std::ceil(t * (1.0 + pickup_to_delivery_relative_detour_limit))

अगर एक ही शिपमेंट पर, रिलेटिव और ऐब्सलूट, दोनों सीमाएं तय की जाती हैं, तो पिकअप/डिलीवरी के हर संभावित जोड़े के लिए, ज़्यादा सीमाएं लागू की जाती हैं. 2017/10 से, चक्करदार तरीके से सफ़र तभी किया जा सकता है, जब यात्रा में लगने वाला समय वाहनों पर निर्भर न हो.

लोड

विज़िट करते समय, पहले से तय की गई रकम को वाहन के लोड में जोड़ा जा सकता है. ऐसा तब होगा, जब वह पिकअप हो. वहीं, डिलीवरी होने पर उसे घटाया जा सकता है. इस मैसेज में ऐसी रकम के बारे में बताया गया है. load_demands देखें.

फ़ील्ड
amount

int64

वह मात्रा जिसके आधार पर यात्रा से जुड़े वाहन का लोड अलग-अलग होगा. यह एक पूर्णांक है. इसलिए, उपयोगकर्ताओं को सटीक यूनिट चुनने की सलाह दी जाती है, ताकि वे सटीक नतीजे न पा सकें. वैल्यू 0 या उससे ज़्यादा होनी चाहिए.

VisitRequest

ऐसी विज़िट के लिए अनुरोध करें जिस पर वाहन जा सकता है: इसकी एक भौगोलिक-जगह (या दो, नीचे देखें), खुलने और बंद होने का समय टाइम विंडो के रूप में दिखाया गया है और सेवा की अवधि (सामान लेने या छोड़ने के बाद वाहन द्वारा पहुंचने में लगा समय).

फ़ील्ड
arrival_location

LatLng

वह भौगोलिक-जगह जहां यह VisitRequest परफ़ॉर्म करते समय आता है. अगर शिपमेंट मॉडल में कुल दूरी के मैट्रिक्स हैं, तो arrival_location की जानकारी नहीं दी जानी चाहिए.

arrival_waypoint

Waypoint

वह वेपॉइंट जहां यह VisitRequest करते समय वाहन आता है. अगर शिपमेंट मॉडल में कुल दूरी के मैट्रिक्स हैं, तो arrival_waypoint की जानकारी नहीं दी जानी चाहिए.

departure_location

LatLng

वह भौगोलिक जगह जहां VisitRequest से यात्रा पूरी होने के बाद वाहन रवाना होता है. अगर यह संख्या arrival_location के बराबर है, तो इसे छोड़ा जा सकता है. अगर शिपमेंट मॉडल में कुल दूरी के मैट्रिक्स हैं, तो departure_location की जानकारी नहीं दी जानी चाहिए.

departure_waypoint

Waypoint

वह वेपॉइंट जहां इस VisitRequest को पूरा करने के बाद वाहन चलता है. अगर यह संख्या arrival_waypoint के बराबर है, तो इसे छोड़ा जा सकता है. अगर शिपमेंट मॉडल में कुल दूरी के मैट्रिक्स हैं, तो departure_waypoint की जानकारी नहीं दी जानी चाहिए.

tags[]

string

विज़िट अनुरोध से जुड़े टैग के बारे में बताता है. खाली या डुप्लीकेट स्ट्रिंग की अनुमति नहीं है.

time_windows[]

TimeWindow

टाइम विंडो, जो किसी विज़िट के दौरान पहुंचने के समय को सीमित करती हैं. ध्यान दें कि कोई वाहन, पहुंचने के समय से बाहर निकल सकता है. जैसे, पहुंचने का समय + कुल समय, यह ज़रूरी नहीं है कि वह पहुंचने की समयावधि के अंदर हो. इस वजह से, अगर कार TimeWindow.start_time से पहले पहुंच जाती है, तो आपको इंतज़ार करना पड़ सकता है.

TimeWindow न होने का मतलब है कि वाहन किसी भी समय इस पर जा सकता है.

टाइम विंडो अलग-अलग होनी चाहिए.इसका मतलब है कि कोई भी टाइम विंडो दूसरी विंडो के साथ ओवरलैप या उसके बगल में नहीं होनी चाहिए. साथ ही, वे बढ़ते क्रम में होनी चाहिए.

cost_per_hour_after_soft_end_time और soft_end_time को सिर्फ़ तब सेट किया जा सकता है, जब एक बार की विंडो हो.

duration

Duration

विज़िट की अवधि, यानी कि वाहन के पहुंचने और रवाना होने के बीच में लगने वाला समय (इंतज़ार में लगने वाले संभावित समय में जोड़ा जाने वाला समय; time_windows देखें).

cost

double

वाहन के रास्ते पर इस विज़िट अनुरोध को ठीक करने का शुल्क. इसका इस्तेमाल, किसी शिपमेंट को पिकअप करने या उसकी डिलीवरी के लिए, अलग-अलग शुल्क चुकाने के लिए किया जा सकता है. यह लागत Shipment.penalty_cost वाली इकाई में ही होनी चाहिए और नकारात्मक नहीं होनी चाहिए.

load_demands

map<string, Load>

इस विज़िट अनुरोध की मांग लोड करें. यह Shipment.load_demands फ़ील्ड की तरह है. हालांकि, यह पूरे Shipment के बजाय सिर्फ़ इस VisitRequest पर लागू होता है. यहां बताई गई मांगों को, Shipment.load_demands में बताई गई मांगों में जोड़ दिया जाता है.

visit_types[]

string

विज़िट के प्रकार बताता है. इसका इस्तेमाल, किसी वाहन को इस विज़िट को पूरा करने में लगने वाला अतिरिक्त समय देने के लिए किया जा सकता है (Vehicle.extra_visit_duration_for_visit_type देखें).

कोई टाइप सिर्फ़ एक बार दिख सकता है.

label

string

इस VisitRequest के लिए लेबल तय करता है. रिस्पॉन्स में इस लेबल को ShipmentRoute.Visit में visit_label के तौर पर रिपोर्ट किया गया है.

ShipmentModel

शिपमेंट मॉडल में शिपमेंट का एक ऐसा सेट होता है जिसे कुछ वाहनों को ही इस्तेमाल करना होता है. हालांकि, इससे कुल लागत कम होती है और इसमें ये चीज़ें शामिल होती हैं:

  • वाहनों को रूट करने की लागत (कुल समय की कुल लागत, हर यात्रा में लगने वाला खर्च, और सभी वाहनों की तय लागत).
  • खराब शिपिंग पर लगने वाले शुल्क.
  • शिपमेंट की ग्लोबल अवधि की लागत
फ़ील्ड
shipments[]

Shipment

शिपमेंट का सेट, जिसे मॉडल में इस्तेमाल किया जाना चाहिए.

vehicles[]

Vehicle

वाहनों का सेट, जिसका इस्तेमाल विज़िट करने के लिए किया जा सकता है.

global_start_time

Timestamp

मॉडल का ग्लोबल शुरू और खत्म होने का समय: इस रेंज के बाहर का कोई भी समय मान्य नहीं माना जा सकता.

मॉडल की समयावधि एक साल से कम होनी चाहिए. इसका मतलब है कि global_end_time और global_start_time एक-दूसरे से 31,536,000 सेकंड के अंदर होने चाहिए.

cost_per_*hour फ़ील्ड का इस्तेमाल करते समय, हो सकता है कि आप परफ़ॉर्मेंस को बेहतर बनाने के लिए इस विंडो को छोटे इंटरवल पर सेट करना चाहें (उदाहरण के लिए, अगर आप किसी एक दिन को मॉडल करते हैं, तो आपको उस दिन के लिए ग्लोबल टाइम सीमाएं सेट करनी चाहिए). अगर यह नीति सेट नहीं है, तो 1 जनवरी, 1970 को 00:00:00 यूटीसी, यानी सेकंड: 0, नैनोस: 0 का इस्तेमाल डिफ़ॉल्ट रूप से किया जाएगा.

global_end_time

Timestamp

अगर यह नीति सेट नहीं है, तो 1 जनवरी, 1971 को 00:00:00 यूटीसी, यानी सेकंड: 31536000, नैनोस: 0 का इस्तेमाल डिफ़ॉल्ट रूप से किया जाएगा.

global_duration_cost_per_hour

double

कुल प्लान की "ग्लोबल पीरियड", सभी वाहनों के खत्म होने का सबसे पहला समय और खत्म होने के सबसे नए समय के बीच का अंतर होती है. उदाहरण के लिए, उपयोगकर्ता उस मात्रा को हर घंटे की लागत के तौर पर असाइन कर सकते हैं, ताकि काम जल्दी पूरा करने के लिए उसे ऑप्टिमाइज़ किया जा सके. यह लागत Shipment.penalty_cost वाली इकाई में ही होनी चाहिए.

duration_distance_matrices[]

DurationDistanceMatrix

इस मॉडल में इस्तेमाल किए गए अवधि और दूरी के मैट्रिक्स को तय करता है. अगर यह फ़ील्ड खाली है, तो use_geodesic_distances फ़ील्ड की वैल्यू के आधार पर, Google Maps या जियोडिसिक दूरी का इस्तेमाल किया जाएगा. अगर यह खाली नहीं है, तो use_geodesic_distances सही नहीं हो सकता और न ही duration_distance_matrix_src_tags और न ही duration_distance_matrix_dst_tags खाली हो सकते हैं.

इस्तेमाल करने के उदाहरण:

  • यहां दो जगहें हैं: locA और locB.
  • 1 वाहन, locA पर अपना रास्ता शुरू करता है और उसे locA पर खत्म करता है.
  • locB पर 1 पिकअप विज़िट का अनुरोध.
model {
  vehicles { start_tags: "locA"  end_tags: "locA" }
  shipments { pickups { tags: "locB" } }
  duration_distance_matrix_src_tags: "locA"
  duration_distance_matrix_src_tags: "locB"
  duration_distance_matrix_dst_tags: "locA"
  duration_distance_matrix_dst_tags: "locB"
  duration_distance_matrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • यूआरएल की तीन लोकेशन होती हैं: locA, locB, और locC.
  • 1 वाहन, जो locA से शुरू होता है और locB पर खत्म होता है. इसमें, मैट्रिक्स "तेज़" का इस्तेमाल किया जाता है.
  • 1 वाहन locB से अपना रास्ता शुरू करता है और इसे locB पर खत्म करता है. इसमें मैट्रिक्स "धीमा" का इस्तेमाल किया गया है.
  • 1 वाहन locB से अपना रास्ता शुरू करता है और इसे locB पर खत्म करता है, जिसमें मैट्रिक्स "तेज़" है.
  • locC पर 1 पिकअप विज़िट का अनुरोध.
model {
  vehicles { start_tags: "locA" end_tags: "locB" start_tags: "fast" }
  vehicles { start_tags: "locB" end_tags: "locB" start_tags: "slow" }
  vehicles { start_tags: "locB" end_tags: "locB" start_tags: "fast" }
  shipments { pickups { tags: "locC" } }
  duration_distance_matrix_src_tags: "locA"
  duration_distance_matrix_src_tags: "locB"
  duration_distance_matrix_src_tags: "locC"
  duration_distance_matrix_dst_tags: "locB"
  duration_distance_matrix_dst_tags: "locC"
  duration_distance_matrices {
    vehicle_start_tag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  duration_distance_matrices {
    vehicle_start_tag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
duration_distance_matrix_src_tags[]

string

अवधि और दूरी के आव्यूहों के स्रोत बताने वाले टैग; duration_distance_matrices(i).rows(j) टैग duration_distance_matrix_src_tags(j) वाली विज़िट से लेकर मैट्रिक्स i में अन्य विज़िट की अवधि और दूरी तय करता है.

टैग VisitRequest.tags या Vehicle.start_tags से जुड़े हुए हैं. दिया गया VisitRequest या Vehicle, इस फ़ील्ड के एक टैग से पूरी तरह मेल खाना चाहिए. ध्यान दें कि Vehicle का सोर्स, डेस्टिनेशन, और मैट्रिक्स टैग एक जैसे हो सकते हैं. वैसे ही, VisitRequest का सोर्स और डेस्टिनेशन टैग एक जैसे हो सकते हैं. सभी टैग अलग-अलग होने चाहिए और वे खाली स्ट्रिंग नहीं होने चाहिए. अगर यह फ़ील्ड खाली नहीं है, तो duration_distance_matrices खाली नहीं होना चाहिए.

duration_distance_matrix_dst_tags[]

string

अवधि और दूरी के मैट्रिक्स के डेस्टिनेशन तय करने वाले टैग; duration_distance_matrices(i).rows(j).durations(k) (resp. duration_distance_matrices(i).rows(j).meters(k)), मैट्रिक्स i में टैग duration_distance_matrix_dst_tags(k) वाली विज़िट के लिए duration_distance_matrix_src_tags(j) टैग वाली विज़िट से यात्रा की अवधि (दूरी) तय करता है.

टैग VisitRequest.tags या Vehicle.start_tags से जुड़े हुए हैं. दिया गया VisitRequest या Vehicle, इस फ़ील्ड के एक टैग से पूरी तरह मेल खाना चाहिए. ध्यान दें कि Vehicle का सोर्स, डेस्टिनेशन, और मैट्रिक्स टैग एक जैसे हो सकते हैं. वैसे ही, VisitRequest का सोर्स और डेस्टिनेशन टैग एक जैसे हो सकते हैं. सभी टैग अलग-अलग होने चाहिए और वे खाली स्ट्रिंग नहीं होने चाहिए. अगर यह फ़ील्ड खाली नहीं है, तो duration_distance_matrices खाली नहीं होना चाहिए.

transition_attributes[]

TransitionAttributes

मॉडल में ट्रांज़िशन एट्रिब्यूट जोड़े गए.

shipment_type_incompatibilities[]

ShipmentTypeIncompatibility

ऐसे शिपमेंट_टाइप के सेट जिनका इस्तेमाल नहीं किया जा सकता (ShipmentTypeIncompatibility देखें).

shipment_type_requirements[]

ShipmentTypeRequirement

shipment_type ज़रूरी शर्तों का सेट (ShipmentTypeRequirement देखें).

precedence_rules[]

PrecedenceRule

प्राथमिकता के नियमों का सेट, जिसे इस मॉडल में लागू किया जाना चाहिए.

max_active_vehicles

int32

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

DurationDistanceMatrix

विज़िट की गई जगहों, वाहन के शुरू होने की जगहों, और वाहन के खत्म होने की जगहों से जुड़ी दूरी और दूरी के मैट्रिक्स की जानकारी देता है.

फ़ील्ड
rows[]

Row

अवधि और दूरी के मैट्रिक्स की पंक्तियों को तय करता है. इसमें ShipmentModel.duration_distance_matrix_src_tags तक ज़्यादा से ज़्यादा एलिमेंट होने चाहिए.

vehicle_start_tag

string

इस टैग से पता चलता है कि यह कुल समय और दूरी का मैट्रिक्स किन वाहनों पर लागू होता है. अगर खाली है, तो यह सभी गाड़ियों पर लागू होता है और सिर्फ़ एक आव्यूह हो सकता है.

हर वाहन के शुरू होने की वैल्यू, एक मैट्रिक्स से ही मैच होनी चाहिए. इसका मतलब है कि उसके start_tags फ़ील्ड में से कोई एक फ़ील्ड, किसी मैट्रिक्स (और सिर्फ़ उसी मैट्रिक्स के) के vehicle_start_tag से मेल खाना चाहिए.

सभी मैट्रिक्स में एक अलग vehicle_start_tag होना चाहिए.

पंक्ति

अवधि और दूरी के मैट्रिक्स की पंक्ति दिखाता है.

फ़ील्ड
durations[]

Duration

किसी पंक्ति के लिए अवधि की वैल्यू. इसमें ShipmentModel.duration_distance_matrix_dst_tags तक ज़्यादा से ज़्यादा एलिमेंट होने चाहिए.

meters[]

double

किसी पंक्ति के लिए दूरी की वैल्यू. अगर कोई लागत या सीमा इस मॉडल में दूरी को नहीं बताती है, तो इसे खाली छोड़ा जा सकता है. ऐसा न करने पर, इसमें durations तक ज़्यादा एलिमेंट होने चाहिए.

PrecedenceRule

दो इवेंट के बीच प्राथमिकता का नियम (हर इवेंट, किसी शिपमेंट के लिए पिक अप या डिलीवरी है): "पहला" इवेंट शुरू होने के बाद, "दूसरा" इवेंट कम से कम offset_duration से शुरू होना चाहिए.

कई प्राथमिकताएं एक ही (या मिलते-जुलते) इवेंट के बारे में बता सकती हैं, उदाहरण के लिए, "B का पिक अप, A की डिलीवरी के बाद होता है" और "C का पिक अप B को पिक अप करने के बाद होता है".

इसके अलावा, प्राथमिकताएं सिर्फ़ तब लागू होती हैं, जब दोनों शिपमेंट पूरे हो रहे हों या उन्हें अनदेखा कर दिया गया हो.

फ़ील्ड
first_is_delivery

bool

इससे पता चलता है कि "पहला" इवेंट, डिलीवरी की सुविधा वाला है या नहीं.

second_is_delivery

bool

इससे पता चलता है कि "दूसरा" इवेंट डिलीवरी वाला है या नहीं.

offset_duration

Duration

"पहले" और "दूसरे" इवेंट के बीच का ऑफ़सेट. यह नकारात्मक हो सकता है.

first_index

int32

"पहले" इवेंट का शिपमेंट इंडेक्स. इस फ़ील्ड के बारे में बताना ज़रूरी है.

second_index

int32

"दूसरे" इवेंट का शिपमेंट इंडेक्स. इस फ़ील्ड के बारे में बताना ज़रूरी है.

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     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
फ़ील्ड
vehicle_index

int32

वाहन, रास्ते की जानकारी देता है. इसकी पहचान, सोर्स ShipmentModel में मौजूद इंडेक्स से की गई है.

vehicle_label

string

इस रास्ते पर चल रहे वाहन का लेबल, अगर बताया गया हो, तो ShipmentModel.vehicles(vehicle_index).label के बराबर.

vehicle_start_time

Timestamp

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

vehicle_end_time

Timestamp

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

visits[]

Visit

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

transitions[]

Transition

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

has_traffic_infeasibilities

bool

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

  start_time(previous_visit) + duration(previous_visit) +
  travel_duration(previous_visit, next_visit) > start_time(next_visit)

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

route_polyline

EncodedPolyline

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

breaks[]

Break

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

metrics

AggregatedMetrics

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

route_costs

map<string, double>

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

route_total_cost

double

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

ब्रेक

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

फ़ील्ड
start_time

Timestamp

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

duration

Duration

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

EncodedPolyline

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

फ़ील्ड
points

string

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

ट्रांज़िशन

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

अगर वाहन के पास start_location और/या end_location नहीं है, तो यात्रा की उससे जुड़ी मेट्रिक 0 होगी.

फ़ील्ड
travel_duration

Duration

इस ट्रांज़िशन के दौरान यात्रा का कुल समय.

travel_distance_meters

double

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

traffic_info_unavailable

bool

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

delay_duration

Duration

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

break_duration

Duration

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

wait_duration

Duration

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

total_duration

Duration

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

  • अगली विज़िट start_time (या अगर यह आखिरी ट्रांज़िशन है, तो vehicle_end_time) - इस ट्रांज़िशन का start_time है;
  • अगर ShipmentRoute.has_traffic_infeasibilities गलत है, तो आगे दी गई वैल्यू में यह भी शामिल होता है: `total_duration = travel_duration + delay_duration"
  • ब्रेक_duration + इंतज़ार_duration`.
start_time

Timestamp

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

route_polyline

EncodedPolyline

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

vehicle_loads

map<string, VehicleLoad>

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

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

VehicleLoad

किसी दिए गए टाइप के लिए, रास्ते में कहीं पर वाहन के असल लोड की रिपोर्ट देता है (Transition.vehicle_loads देखें).

फ़ील्ड
amount

int64

दिए गए टाइप के लिए, वाहन पर लोड की मात्रा. लोड की इकाई उसके टाइप से जुड़ी होती है. Transition.vehicle_loads देखें.

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

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

फ़ील्ड
shipment_index

int32

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

is_pickup

bool

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

visit_request_index

int32

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

start_time

Timestamp

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

load_demands

map<string, Load>

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

detour

Duration

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

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

ऐसा न होने पर, start_location वाहन से इसकी गणना की जाती है और यह इसके बराबर होती है:

start_time - vehicle_start_time - travel duration from
the vehicle's `start_location` to the visit.
shipment_label

string

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

visit_label

string

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

ShipmentTypeIncompatibility

शिपमेंट के टाइप के आधार पर, शिपमेंट के बीच अंतर की जानकारी देता है. कार के साथ काम न करने वाले मोड की वजह से, एक ही रास्ते के लिए काम न करने वाले शिपमेंट दिखाने पर पाबंदी लगी है.

फ़ील्ड
types[]

string

काम न करने वाले टाइप की सूची. जिन शिपमेंट में shipment_types का नाम अलग-अलग है वे "काम नहीं करता" है.

incompatibility_mode

IncompatibilityMode

मोड, कार के साथ काम न करने वाले मोड पर लागू किया गया.

IncompatibilityMode

यह तय करने वाले मोड कि एक ही रूट पर, काम न करने वाले शिपमेंट किस तरह से दिखाए जा सकते हैं.

Enums
INCOMPATIBILITY_MODE_UNSPECIFIED कम्पैटबिलटी मोड की जानकारी नहीं है. इस वैल्यू का इस्तेमाल कभी नहीं किया जाना चाहिए.
NOT_PERFORMED_BY_SAME_VEHICLE इस मोड में, काम न करने वाले दो शिपमेंट के लिए, एक ही वाहन का इस्तेमाल नहीं किया जा सकता.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY के साथ काम न करने वाले मोड के साथ काम न करने वाले टाइप के दो शिपमेंट के लिए:

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

ShipmentTypeRequirement

शिपमेंट के लिए ज़रूरी शर्तों के बारे में बताता है. यह शर्त, उनके शिपमेंट_type के आधार पर तय होती है. ज़रूरी शर्तें, ज़रूरत मोड से तय होती हैं.

फ़ील्ड
required_shipment_type_alternatives[]

string

dependent_shipment_types के लिए ज़रूरी, दूसरी तरह के शिपमेंट टाइप की सूची.

dependent_shipment_types[]

string

dependent_shipment_types फ़ील्ड में मौजूद टाइप वाले सभी शिपमेंट के लिए, एक ही रूट से required_shipment_type_alternatives टाइप का कम से कम एक शिपमेंट भेजना ज़रूरी है.

ध्यान दें: ज़रूरी शर्तों की ऐसी चेन की अनुमति नहीं है जिसमें shipment_type खुद पर निर्भर हो.

requirement_mode

RequirementMode

मोड, ज़रूरी शर्त पर लागू किया गया.

RequirementMode

किसी रास्ते पर डिपेंडेंट शिपमेंट किस तरह दिखेगा, यह बताने वाले मोड.

Enums
REQUIREMENT_MODE_UNSPECIFIED ज़रूरी मोड की जानकारी नहीं है. इस वैल्यू का इस्तेमाल कभी नहीं किया जाना चाहिए.
PERFORMED_BY_SAME_VEHICLE इस मोड में, सभी "निर्भर" शिपमेंट के लिए एक ही वाहन की जानकारी, "ज़रूरी" वाले शिपमेंट में से कम से कम एक के साथ शेयर करना ज़रूरी है.
IN_SAME_VEHICLE_AT_PICKUP_TIME

IN_SAME_VEHICLE_AT_PICKUP_TIME मोड का इस्तेमाल करने पर, सभी "निर्भर" शिपमेंट के लिए, पिकअप के समय उनके वाहन के पास कम से कम एक "ज़रूरी" शिपमेंट होना ज़रूरी है.

इसलिए, "निर्भर" शिपमेंट पिकअप में इनमें से कोई एक शर्त पूरी होनी चाहिए:

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

SkippedShipment

किसी सलूशन में ठीक से काम न करने वाले शिपमेंट के बारे में जानकारी देता है. मामूली मामलों और/या अगर हमें स्किप करने की वजह पता चल जाती है, तो हम यहां उसकी जानकारी देते हैं.

फ़ील्ड
index

int32

यह इंडेक्स, सोर्स ShipmentModel में मौजूद शिपमेंट के इंडेक्स से मेल खाता है.

label

string

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

reasons[]

Reason

शिपमेंट को स्किप करने की वजहें बताने वाली सूची. Reason के ऊपर टिप्पणी देखें.

वजह

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

reasons {
  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
  example_vehicle_index: 1
  example_exceeded_capacity_type: "Apples"
}
reasons {
  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
  example_vehicle_index: 3
  example_exceeded_capacity_type: "Pears"
}
reasons {
  code: CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT
  example_vehicle_index: 1
}

स्किप किया गया शिपमेंट, सभी वाहनों के साथ काम नहीं करता. सभी वाहनों के लिए, ये वजहें अलग-अलग हो सकती हैं. हालांकि, कम से कम एक वाहन में "सेब" की क्षमता ज़्यादा हो जाएगी (इसमें वाहन 1 भी शामिल है), कम से कम एक वाहन "नाशपाती" की क्षमता से ज़्यादा हो सकता है (इसमें वाहन 3 भी शामिल है) और कम से कम एक वाहन की दूरी सीमा पार हो जाएगी (इसमें पहला वाहन भी शामिल है).

फ़ील्ड
code

Code

कोड की टिप्पणियां देखें.

example_exceeded_capacity_type

string

अगर वजह का कोड DEMAND_EXCEEDS_VEHICLE_CAPACITY है, तो दस्तावेज़ के लिए तय की गई सीमा पार हो जाती है.

example_vehicle_index

int32

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

कोड

गड़बड़ी की वजह बताने वाला कोड. यहां आदेश का कोई मतलब नहीं है. खास तौर पर, यह इस बात का कोई संकेत नहीं देता कि अगर दोनों लागू होते हैं, तो दी गई वजह, समाधान में दूसरी वजह से पहले दिखेगी या नहीं.

Enums
CODE_UNSPECIFIED इसका इस्तेमाल कभी नहीं किया जाना चाहिए. अगर हम यह समझ नहीं पाते हैं कि किसी शिपमेंट को क्यों नहीं किया गया था, तो हम सिर्फ़ वजहों का खाली सेट दिखाते हैं.
NO_VEHICLE मॉडल में ऐसा कोई वाहन नहीं है जो सभी शिपमेंट को संभव न बना सके.
DEMAND_EXCEEDS_VEHICLE_CAPACITY कुछ कपैसिटी टाइप के लिए, शिपमेंट की मांग वाहन की क्षमता से ज़्यादा है. इनमें से एक क्षमता example_exceeded_capacity_type है.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT

इस शिपमेंट को पूरा करने के लिए ज़रूरी कम से कम दूरी, वाहन की route_distance_limit से ज़्यादा है. जैसे, वाहन का start_location, शिपमेंट के पिकअप और/या डिलीवरी की जगह से और वाहन की आखिरी जगह तक.

ध्यान दें कि इस कैलकुलेशन के लिए, हम जियोडिसिक दूरी का इस्तेमाल करते हैं.

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT

इस शिपमेंट को पूरा करने में लगने वाला कम से कम समय, वाहन के route_duration_limit से ज़्यादा है. इसमें, यात्रा में लगने वाला समय, इंतज़ार का समय, और सेवा का समय शामिल है.

ध्यान दें: यात्रा में लगने वाले समय का हिसाब, सबसे बेहतर स्थितियों में लगाया जाता है. जैसे, ज्यामितीय दूरी x 36 मीटर/सेकंड. करीब 130 कि॰मी॰/घंटा.

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT जैसा कि ऊपर बताया गया है, हम सिर्फ़ यात्रा में लगने वाले कम से कम समय और वाहन के travel_duration_limit के हिसाब से तुलना करते हैं.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS अगर वाहन अपने शुरुआती समय में शुरू होता है, तो सबसे अच्छी स्थिति में (समय का हिसाब लगाने के लिए CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT देखें) इस शिपमेंट को पूरा नहीं कर सकता: अगर वाहन अपने आखिरी समय के बाद ही खत्म हो जाएगा, तो कुल समय दिखेगा.
VEHICLE_NOT_ALLOWED शिपमेंट का allowed_vehicle_indices फ़ील्ड खाली नहीं है और यह वाहन इस वाहन का नहीं है.

TimeWindow

टाइम विंडो, किसी इवेंट के समय को सीमित करती हैं. जैसे, किसी जगह पर पहुंचने का समय या वाहन के शुरू और खत्म होने का समय.

हार्ड टाइम विंडो की सीमाएं, start_time और end_time हैं. साथ ही, इवेंट के सबसे पुराने और सबसे नए समय को लागू किया जाता है, जैसे कि start_time <= event_time <= end_time. सॉफ़्ट टाइम विंडो की निचली सीमा, soft_start_time, इस बात को प्राथमिकता देती है कि इवेंट soft_start_time पर या उसके बाद होगा. इसके लिए, soft_start_time से पहले के समय के अनुपात में इवेंट की लागत तय की जाती है. सॉफ़्ट टाइम विंडो की ऊपरी सीमा soft_end_time, soft_end_time पर या उससे पहले होने वाले इवेंट के लिए प्राथमिकता तय करती है. इवेंट की लागत soft_end_time के बाद होने वाले समय के अनुपात में होती है. start_time, end_time, soft_start_time, और soft_end_time ग्लोबल समयसीमा के अंदर होने चाहिए (ShipmentModel.global_start_time और ShipmentModel.global_end_time देखें). साथ ही, इनका पालन करना चाहिए:

  0 <= `start_time` <= `soft_start_time` <= `end_time` and
  0 <= `start_time` <= `soft_end_time` <= `end_time`.
फ़ील्ड
start_time

Timestamp

मुश्किल समय विंडो के शुरू होने का समय. तय न होने पर, इसे ShipmentModel.global_start_time पर सेट कर दिया जाएगा.

end_time

Timestamp

मुश्किल समय विंडो के खत्म होने का समय. तय न होने पर, इसे ShipmentModel.global_end_time पर सेट कर दिया जाएगा.

soft_start_time

Timestamp

टाइम विंडो का सॉफ़्ट स्टार्ट समय.

soft_end_time

Timestamp

समय विंडो का सॉफ़्ट खत्म समय.

cost_per_hour_before_soft_start_time

double

अगर इवेंट soft_start_time से पहले होता है, तो मॉडल में अन्य लागतों में हर घंटे की लागत जोड़ी जाती है. इसकी गणना इस तरह की जाती है:

   max(0, soft_start_time - t.seconds)
                          * cost_per_hour_before_soft_start_time / 3600,
t being the time of the event.

यह लागत पॉज़िटिव होनी चाहिए. साथ ही, फ़ील्ड को सिर्फ़ तब सेट किया जा सकता है, जब soft_start_time सेट किया गया हो.

cost_per_hour_after_soft_end_time

double

अगर इवेंट soft_end_time के बाद होता है, तो मॉडल में अन्य लागतों में हर घंटे की लागत जोड़ दी जाती है. इसका हिसाब इस तरह से लगाया जाता है:

   max(0, t.seconds - soft_end_time.seconds)
                    * cost_per_hour_after_soft_end_time / 3600,
t being the time of the event.

यह लागत पॉज़िटिव होनी चाहिए. साथ ही, फ़ील्ड को सिर्फ़ तब सेट किया जा सकता है, जब soft_end_time सेट किया गया हो.

TransitionAttributes

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

फ़ील्ड
src_tag

string

(src->dst) ट्रांज़िशन के सेट को तय करने वाले टैग, इन पर लागू होते हैं.

सोर्स विज़िट या वाहन के शुरू होने की जानकारी, उसके VisitRequest.tags या Vehicle.start_tags से मेल खाती है. ऐसा तब होता है, जब या तो src_tag शामिल हो या उसमें excluded_src_tag न हो (इस आधार पर कि इन दोनों में से कौनसा फ़ील्ड खाली नहीं है).

excluded_src_tag

string

src_tag देखें. src_tag और excluded_src_tag में से कोई एक खाली नहीं होना चाहिए.

dst_tag

string

मंज़िल विज़िट या वाहन खत्म होने का समय, अगर इसके VisitRequest.tags या Vehicle.end_tags से मेल खाता है, तो इसमें dst_tag शामिल है या excluded_dst_tag नहीं है (इस आधार पर कि इन दोनों में से कौनसा फ़ील्ड खाली है).

excluded_dst_tag

string

dst_tag देखें. dst_tag और excluded_dst_tag में से कोई एक खाली नहीं होना चाहिए.

cost

double

इस ट्रांज़िशन की लागत के बारे में बताता है. यह मॉडल की अन्य सभी लागतों के समान इकाई में है और इसे नकारात्मक नहीं होना चाहिए. यह उसे अन्य सभी मौजूदा लागतों की तुलना में लागू किया जाता है.

cost_per_kilometer

double

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

distance_limit

DistanceLimit

इस ट्रांज़िशन के दौरान, तय की गई दूरी की सीमा तय करता है.

2021/06/06 से, सिर्फ़ सॉफ़्ट लिमिट का इस्तेमाल किया जा सकता है.

delay

Duration

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

यह देरी हमेशा स्रोत विज़िट खत्म होने के बाद और मंज़िल विज़िट शुरू करने से पहले होती है.

वाहन

शिपमेंट से जुड़ी समस्या वाले वाहन का मॉडल बनाना. शिपमेंट से जुड़ी समस्या हल करने पर, इस वाहन के लिए एक रूट बनाया जाएगा. यह रूट start_location से शुरू होगा और end_location पर खत्म होगा. रास्ता विज़िट का एक क्रम है (ShipmentRoute देखें).

फ़ील्ड
display_name

string

वाहन का उपयोगकर्ता की ओर से तय किया गया डिसप्ले नेम. इसमें ज़्यादा से ज़्यादा 63 वर्ण हो सकते हैं और इसमें UTF-8 वर्णों का इस्तेमाल किया जा सकता है.

travel_mode

TravelMode

यात्रा का मोड जो उन सड़कों पर असर डालता है जिन्हें वाहन इस्तेमाल कर सकता है और उसकी रफ़्तार क्या है. travel_duration_multiple भी देखें.

start_location

LatLng

वह जगह जहां से वाहन, शिपमेंट को पिक अप करने से पहले शुरू होता है. अगर इसके बारे में नहीं बताया गया है, तो वाहन पहले पिकअप पर शुरू होता है. अगर शिपमेंट मॉडल में अवधि और दूरी के मैट्रिक्स हैं, तो start_location की जानकारी नहीं दी जानी चाहिए.

start_waypoint

Waypoint

वेपॉइंट उस भौगोलिक जगह को दिखाता है जहां से वाहन, शिपमेंट को पिक अप करने से पहले शुरू होता है. अगर start_waypoint या start_location के बारे में जानकारी नहीं दी गई है, तो वाहन पहले पिकअप से शुरू होगा. अगर शिपमेंट मॉडल में अवधि और दूरी के मैट्रिक्स हैं, तो start_waypoint की जानकारी नहीं दी जानी चाहिए.

end_location

LatLng

वह जगह जहां वाहन आखिरी VisitRequest पूरा होने के बाद खत्म होता है. अगर वाहन के लिए कोई जानकारी नहीं दी जाती है, तो आखिरी VisitRequest के पूरा होते ही ShipmentRoute तुरंत बंद हो जाता है. अगर शिपमेंट मॉडल में अवधि और दूरी के मैट्रिक्स हैं, तो end_location की जानकारी नहीं दी जानी चाहिए.

end_waypoint

Waypoint

वेपॉइंट उस भौगोलिक जगह को दिखाता है जहां वाहन आखिरी VisitRequest पूरा होने के बाद खत्म होता है. अगर end_waypoint या end_location के बारे में जानकारी नहीं दी गई है, तो वाहन का ShipmentRoute, आखिरी VisitRequest पूरा होते ही तुरंत खत्म हो जाता है. अगर शिपमेंट मॉडल में अवधि और दूरी के मैट्रिक्स हैं, तो end_waypoint की जानकारी नहीं दी जानी चाहिए.

start_tags[]

string

वाहन के रास्ते की शुरुआत में जुड़े टैग के बारे में बताता है.

खाली या डुप्लीकेट स्ट्रिंग की अनुमति नहीं है.

end_tags[]

string

वाहन के रास्ते के आखिर में जुड़े टैग के बारे में बताता है.

खाली या डुप्लीकेट स्ट्रिंग की अनुमति नहीं है.

start_time_windows[]

TimeWindow

वे टाइम विंडो जिनके दौरान वाहन शुरू करने की जगह से रवाना हो सकता है. ये ग्लोबल समयसीमा के अंदर होने चाहिए (ShipmentModel.global_* फ़ील्ड देखें). अगर कोई भी सीमा तय नहीं की गई है, तो उसके अलावा कोई सीमा तय नहीं की जाएगी.

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

cost_per_hour_after_soft_end_time और soft_end_time को सिर्फ़ तब सेट किया जा सकता है, जब एक बार की विंडो हो.

end_time_windows[]

TimeWindow

वे टाइम विंडो जिनके दौरान वाहन अपनी आखिरी जगह पर पहुंच सकता है. ये ग्लोबल समयसीमा के अंदर होने चाहिए (ShipmentModel.global_* फ़ील्ड देखें). अगर कोई भी सीमा तय नहीं की गई है, तो उसके अलावा कोई सीमा तय नहीं की जाएगी.

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

cost_per_hour_after_soft_end_time और soft_end_time को सिर्फ़ तब सेट किया जा सकता है, जब एक बार की विंडो हो.

unloading_policy

UnloadingPolicy

वाहन पर अनलोडिंग की नीति लागू की गई.

load_limits

map<string, LoadLimit>

वाहन की क्षमता (उदाहरण के लिए, वज़न, वॉल्यूम, # पैलेट). मैप में दी गई कुंजियां, Shipment.load_demands फ़ील्ड की कुंजियों के मुताबिक लोड के टाइप के आइडेंटिफ़ायर हैं. अगर इस मैप पर कोई कुंजी मौजूद नहीं होती है, तो उस कुंजी के लिए उसकी सीमा की कोई सीमा नहीं मानी जाती.

cost_per_hour

double

वाहन की कीमत: कुल शुल्क को जोड़ा जाता है और यह Shipment.penalty_cost वाली यूनिट में ही होना चाहिए.

वाहन के रास्ते के हर घंटे की लागत. यह कीमत किसी रास्ते पर लगने वाले कुल समय पर लागू होती है. इसमें यात्रा में लगने वाला समय, इंतज़ार में लगने वाला समय, और विज़िट में लगने वाला समय शामिल है. सिर्फ़ cost_per_traveled_hour के बजाय cost_per_hour का इस्तेमाल करने से, इंतज़ार का समय बढ़ सकता है.

cost_per_traveled_hour

double

वाहन के रास्ते के हिसाब से, हर घंटे की यात्रा की लागत. यह लागत सिर्फ़ रास्ते से तय की गई यात्रा में लगने वाले समय पर लागू होती है (यानी कि ShipmentRoute.transitions में बताई गई है). इसमें इंतज़ार में लगने वाला समय और विज़िट में लगने वाला समय शामिल नहीं है.

cost_per_kilometer

double

वाहन के रास्ते के लिए, हर किलोमीटर की लागत. यह लागत, ShipmentRoute.transitions में बताई गई दूरी पर लागू होती है. हालांकि, यह VisitRequest में arrival_location से departure_location तक तय की गई दूरी पर लागू नहीं होती.

fixed_cost

double

अगर इस वाहन का इस्तेमाल किसी शिपमेंट को हैंडल करने के लिए किया जाता है, तो तय शुल्क लागू होता है.

used_if_route_is_empty

bool

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

सही होने पर, वाहन अपनी शुरुआत से लेकर खत्म होने की जगह तक जाता है, भले ही वह किसी भी शिपमेंट के लिए सेवा न देता हो. साथ ही, शुरू होने से लेकर खत्म होने तक की यात्रा में लगने वाले समय और दूरी की लागत को ध्यान में रखा जाता है.

ऐसा न करने पर, यह फ़्लाइट अपनी शुरू से खत्म होने की जगह तक नहीं जाएगी. साथ ही, इस वाहन के लिए break_rule या देरी (TransitionAttributes से) को शेड्यूल नहीं किया गया है. इस मामले में, वाहन के ShipmentRoute में, वाहन के इंडेक्स और लेबल के अलावा कोई और जानकारी नहीं होती.

route_duration_limit

DurationLimit

यह सीमा, वाहन के पूरे रास्ते पर लागू होती है. दिए गए OptimizeToursResponse में, वाहन की यात्रा का कुल समय, उसके vehicle_end_time और vehicle_start_time के बीच का अंतर है.

travel_duration_limit

DurationLimit

वाहन के रास्ते में चलने के दौरान यात्रा में लगने वाले समय पर लागू सीमा. दिए गए OptimizeToursResponse में, रास्ते की यात्रा में लगने वाला समय उसके सभी transitions.travel_duration का कुल योग है.

route_distance_limit

DistanceLimit

यह सीमा, वाहन के रास्ते की कुल दूरी पर लागू होती है. दिए गए OptimizeToursResponse में, रास्ते की दूरी इसके सभी transitions.travel_distance_meters का योग है.

extra_visit_duration_for_visit_type

map<string, Duration>

traffic_types स्ट्रिंग से लेकर अवधि तक का मैप तय करता है. दी गई visit_types पर विज़िट पर लिए जाने वाले VisitRequest.duration के अलावा अवधि को भी शामिल किया जाता है. अगर cost_per_hour बताया गया है, तो विज़िट की इस अतिरिक्त अवधि के लिए शुल्क जोड़ा जाता है. कुंजी (यानी visit_types) में खाली स्ट्रिंग नहीं हो सकतीं.

अगर विज़िट के कई अनुरोध हैं, तो मैप में हर टाइप के लिए एक अवधि जोड़ दी जाएगी.

break_rule

BreakRule

इस वाहन पर लागू होने वाले ब्रेक के शेड्यूल की जानकारी देता है. अगर कोई जगह खाली है, तो इस गाड़ी के लिए कोई ब्रेक शेड्यूल नहीं किया जाएगा.

label

string

इस वाहन के लिए लेबल के बारे में बताता है. रिस्पॉन्स में इस लेबल को, इससे जुड़े ShipmentRoute के vehicle_label के तौर पर रिपोर्ट किया जाता है.

ignore

bool

अगर सही है, तो used_if_route_is_empty गलत होना चाहिए. इस वाहन का इस्तेमाल नहीं किया जाएगा.

अगर injected_first_solution_routes में किसी ऐसे वाहन से शिपमेंट किया जाता है जिसे अनदेखा किया गया है, तो पहले सलूशन में उसे स्किप कर दिया जाता है. हालांकि, जवाब के तौर पर इसे मुफ़्त में इस्तेमाल किया जा सकता है.

अगर injected_solution_constraint में कोई ऐसा वाहन कर दिया गया है जिसे अनदेखा किया गया है और उससे जुड़े पिकअप/डिलीवरी को गाड़ी में ही रखा जाता है (यानी कि RELAX_ALL_AFTER_THRESHOLD लेवल तक छूट नहीं दी जाती), तो जवाब देते समय उसे छोड़ दिया जाता है. अगर किसी शिपमेंट में allowed_vehicle_indices फ़ील्ड खाली नहीं होता है और उन सभी वाहनों को अनदेखा कर दिया जाता है जिन्हें अनुमति दी गई है, तो उन्हें जवाब देने के लिए छोड़ दिया जाता है.

travel_duration_multiple

double

यह एक गुणन कारक है, जिसका इस्तेमाल इस वाहन की यात्रा में लगने वाले समय को बढ़ाने या घटाने के लिए किया जा सकता है. उदाहरण के लिए, इसे 2.0 पर सेट करने का मतलब है कि यह वाहन धीमा है और यहां तक पहुंचने में लगने वाला समय, सामान्य वाहनों के मुकाबले दोगुना है. इस मल्टीपल से विज़िट की अवधि पर कोई असर नहीं पड़ता है. अगर cost_per_hour या cost_per_traveled_hour के बारे में बताया गया हो, तो इससे लागत पर असर पड़ता है. यह [0.001, 1000.0] की रेंज में होना चाहिए. अगर यह नीति सेट नहीं है, तो वाहन को स्टैंडर्ड माना जाता है और इस मल्टीपल को 1.0 माना जाता है.

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

यहां extra_visit_duration_for_visit_type भी देखें.

DurationLimit

वाहन के रूट की ज़्यादा से ज़्यादा अवधि तय करने वाली सीमा. यह मुश्किल या हल्का हो सकता है.

जब सॉफ़्ट लिमिट फ़ील्ड तय किया जाता है, तो सॉफ़्ट मैक्स थ्रेशोल्ड और उससे जुड़ी लागत, दोनों को एक साथ तय किया जाना चाहिए.

फ़ील्ड
max_duration

Duration

अवधि को अधिकतम max_duration तक सीमित करने वाली हार्ड सीमा.

soft_max_duration

Duration

कम से कम अवधि की वजह से, यात्रा की ज़्यादा से ज़्यादा सीमा लागू नहीं होती. हालांकि, उल्लंघन होने पर रूट पर शुल्क लगता है. यह लागत, मॉडल में तय की गई इसी यूनिट में शामिल अन्य लागतों को जोड़ती है.

अगर तय किया गया है, तो soft_max_duration ऋणात्मक नहीं होना चाहिए. अगर max_duration भी तय किया गया है, तो soft_max_duration, max_duration से कम होना चाहिए.

quadratic_soft_max_duration

Duration

कम से कम अवधि की सीमा, जो लागू नहीं होती. हालांकि, उल्लंघन होने पर रूट पर शुल्क लगता है, जिसे समय के दौरान द्विघात या शुल्क देना पड़ता है. यह लागत, मॉडल में तय की गई इसी यूनिट में शामिल अन्य लागतों को जोड़ती है.

अगर तय किया गया है, तो quadratic_soft_max_duration ऋणात्मक नहीं होना चाहिए. अगर max_duration भी तय किया गया है, तो quadratic_soft_max_duration, max_duration से कम होना चाहिए. साथ ही, अंतर एक दिन से ज़्यादा नहीं होना चाहिए:

max_duration - quadratic_soft_max_duration <= 86400 seconds

cost_per_hour_after_soft_max

double

soft_max_duration थ्रेशोल्ड का उल्लंघन होने पर हर घंटे की लागत. अगर अवधि, थ्रेशोल्ड से कम है, तो अतिरिक्त शुल्क 0 होता है. अगर ऐसा नहीं होता है, तो लागत इस अवधि पर निर्भर करती है:

  cost_per_hour_after_soft_max * (duration - soft_max_duration)

लागत ऋणात्मक नहीं होनी चाहिए.

cost_per_square_hour_after_quadratic_soft_max

double

quadratic_soft_max_duration थ्रेशोल्ड का उल्लंघन होने पर, हर वर्ग घंटे की लागत.

अगर अवधि, थ्रेशोल्ड से कम है, तो अतिरिक्त शुल्क 0 होता है. अगर ऐसा नहीं होता है, तो लागत इस अवधि पर निर्भर करती है:

  cost_per_square_hour_after_quadratic_soft_max *
  (duration - quadratic_soft_max_duration)^2

लागत ऋणात्मक नहीं होनी चाहिए.

LoadLimit

वाहन पर लागू होने वाली लोड की सीमा के बारे में बताता है, उदाहरण के लिए, "इस ट्रक में ज़्यादा से ज़्यादा 3,500 किलोग्राम वज़न ढो सकते हैं". load_limits देखें.

फ़ील्ड
soft_max_load

int64

लोड की सीमित सीमा. cost_per_unit_above_soft_max देखें.

cost_per_unit_above_soft_max

double

अगर इस वाहन के रास्ते में लोड soft_max_load से ज़्यादा है, तो शुल्क के तौर पर नीचे दिया गया शुल्क लागू होगा (एक वाहन में सिर्फ़ एक बार): (लोड - soft_max_load) * cost_per_unit_above_soft_max. सभी शुल्क जुड़ जाते हैं और वे उसी इकाई में होने चाहिए जो Shipment.penalty_cost में है.

start_load_interval

Interval

रूट की शुरुआत में वाहन का लोड होने का स्वीकार किया जाने वाला इंटरवल.

end_load_interval

Interval

रास्ते के आखिर में वाहन का लोड होने का स्वीकार किया जाने वाला इंटरवल.

max_load

int64

लोड की ज़्यादा से ज़्यादा स्वीकार की जाने वाली संख्या.

इंटरवल

लोड की जाने वाली मान्य रकम का इंटरवल.

फ़ील्ड
min

int64

कम से कम स्वीकार किया जाने वाला लोड. वैल्यू 0 या उससे ज़्यादा होनी चाहिए. अगर ये दोनों बातें तय की गई हैं, तो min की वैल्यू max से कम होनी चाहिए.

max

int64

ज़्यादा से ज़्यादा स्वीकार किया जा सकने वाला लोड. वैल्यू 0 या उससे ज़्यादा होनी चाहिए. अगर इसकी जानकारी नहीं दी गई है, तो इस मैसेज से ज़्यादा से ज़्यादा लोड की अनुमति नहीं मिलेगी. अगर ये दोनों बातें तय की गई हैं, तो min की वैल्यू max से कम होनी चाहिए.

TravelMode

यात्रा के ऐसे मोड जिनका इस्तेमाल वाहन किया जा सकता है.

ये Google Maps Platform Routes Preferred API ट्रैवल मोड का सबसेट होना चाहिए, यहां देखें: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.

Enums
TRAVEL_MODE_UNSPECIFIED DRIVING के बराबर, यात्रा का ऐसा मोड जिसकी जानकारी नहीं है.
DRIVING ड्राइविंग दिशा निर्देशों के लिए यात्रा मोड (कार, ...).
WALKING पैदल जाने की जानकारी के हिसाब से यात्रा का मोड.

UnloadingPolicy

वाहन को अनलोड करने के तरीके के बारे में नीति. यह सुविधा सिर्फ़ उन शिपमेंट पर लागू होती है जिनमें पिकअप और डिलीवरी, दोनों की सुविधा होती है.

unloading_policy के अलावा, दूसरे शिपमेंट को रूट पर कहीं से भी भेजा जा सकता है.

Enums
UNLOADING_POLICY_UNSPECIFIED अनलोडिंग से जुड़ी नीति की जानकारी नहीं है. प्रॉडक्ट की डिलीवरी, उसी पिकअप के बाद ही होनी चाहिए.
LAST_IN_FIRST_OUT डिलीवरी, पिकअप के रिवर्स ऑर्डर में होनी चाहिए
FIRST_IN_FIRST_OUT डिलीवरी उसी क्रम में होनी चाहिए जिस क्रम में पिकअप करने की सुविधा मौजूद है

वेपॉइंट

वेपॉइंट को एनकैप्सुलेट करता है. वेपॉइंट, visitRequests के आने और जाने की जगह को मार्क करते हैं. साथ ही, वाहनों के शुरू और खत्म होने की जगह की जानकारी भी देते हैं.

फ़ील्ड
side_of_road

bool

ज़रूरी नहीं. इससे पता चलता है कि इस वेपॉइंट की जगह, वाहन को सड़क के किसी खास किनारे पर रोकने के लिए सेट की गई है. इस वैल्यू को सेट करने पर, रास्ता उस जगह से होकर गुज़रेगा, ताकि वाहन सड़क के उस किनारे पर रुक सके जहां जगह सड़क के बीच की ओर है. यह विकल्प 'वॉकिंग' यात्रा मोड के लिए काम नहीं करता.

यूनियन फ़ील्ड location_type. किसी जगह को दिखाने के अलग-अलग तरीके. location_type इनमें से सिर्फ़ एक हो सकती है:
location

Location

भौगोलिक निर्देशांक का इस्तेमाल करके तय किया गया पॉइंट. इसमें वैकल्पिक शीर्षक भी शामिल है.

place_id

string

वेपॉइंट से जुड़ा लोकप्रिय जगह का आईडी.