Package google.maps.routeoptimization.v1

इंडेक्स

RouteOptimization

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

कुछ खास तरह के फ़ील्ड के मान्य होने की अवधि:

  • google.protobuf.Timestamp
    • समय, यूनिक्स समय के हिसाब से हैं: सेकंड 1970-01-01T00:00:00+00:00.
    • सेकंड [0, 253402300799] में होने चाहिए, जैसे कि [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00] में.
    • nanos को अनसेट या 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 की जानकारी देता है. इन रास्तों का एक सेट होता है, जिसमें वाहनों की कुल लागत को कम से कम करके पूरा किया जाता है.

उपयोगकर्ता, एलआरओ का स्टेटस देखने के लिए operations.get को पोल कर सकता है:

अगर एलआरओ का done फ़ील्ड गलत है, तो इसका मतलब है कि कम से कम एक अनुरोध को अब भी प्रोसेस किया जा रहा है. हो सकता है कि अन्य अनुरोध सफलतापूर्वक पूरे हो गए हों और उनके परिणाम GCS में उपलब्ध हों.

अगर एलआरओ का done फ़ील्ड सही है, तो इसका मतलब है कि सभी अनुरोधों को प्रोसेस कर दिया गया है. प्रोसेस हो चुके अनुरोध के नतीजे GCS (जीसीएस) में उपलब्ध होंगे. जो अनुरोध पूरे नहीं हो पाते उनके नतीजे GCS (जीसीएस) में उपलब्ध नहीं होंगे. अगर एलआरओ का error फ़ील्ड सेट है, तो इसमें फ़ेल हो चुके अनुरोधों में से किसी एक की गड़बड़ी शामिल होती है.

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

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

  • https://www.googleapis.com/auth/cloud-platform
IAM अनुमतियां

parent संसाधन पर, इस IAM अनुमति की ज़रूरत होती है:

  • routeoptimization.operations.create

ज़्यादा जानकारी के लिए, IAM दस्तावेज़ देखें.

OptimizeTours

rpc OptimizeTours(OptimizeToursRequest) returns (OptimizeToursResponse)

यह फ़ंक्शन, ShipmentModel वाला OptimizeToursRequest भेजता है और ShipmentRoute वाला OptimizeToursResponse दिखाता है. ShipmentRoute, वाहनों के लिए तय किए गए रास्तों का एक सेट होता है, ताकि कुल लागत को कम किया जा सके.

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

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

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

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

  • https://www.googleapis.com/auth/cloud-platform
IAM अनुमतियां

parent संसाधन पर, इस IAM अनुमति की ज़रूरत होती है:

  • routeoptimization.locations.use

ज़्यादा जानकारी के लिए, IAM दस्तावेज़ देखें.

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 (resp. समाधान) की ज़्यादा से ज़्यादा संख्या के तौर पर पर लगाया गया है. 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

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

अगर तय किया गया soft_max_meters max_meters से कम होना चाहिए, तो यह शून्य से कम होना चाहिए.

cost_per_kilometer_below_soft_max

double

खर्च की गई प्रति किलोमीटर, लागत soft_max_meters तक बढ़ रही है, इस फ़ॉर्मूला के साथ:

  min(distance_meters, soft_max_meters) / 1000.0 *
  cost_per_kilometer_below_soft_max.

route_distance_limit में यह कीमत काम नहीं करती.

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

[BatchOptimizeTours][google.maps.route बिज़नेस.v1.RouteOptimizeService.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

अगर इसे सेट किया जाता है, तो अनुरोध करने की समयसीमा (https://grpc.io/blog/deadlines देखें) में 60 मिनट तक हो सकती है. अगर ऐसा नहीं है, तो समयसीमा खत्म होने में सिर्फ़ 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_LANGUAGE गड़बड़ी के पेलोड के साथ जोड़ा जाता है, जब तक कि resolve_mode=VALIDATE_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 मॉडल को हल करें. [OptimizeToursResponse.validation_errors][google.cloud.optimization.v1.OptimizeToursResponse.validation_errors] में चेतावनियां जारी की जा सकती हैं.
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 मैसेज के बारे में जानकारी. गड़बड़ियों के बजाय, इसमें चेतावनियां शामिल होंगी, बशर्ते केस solving_mode, DEFAULT_SOLVE हो.

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" और वैल्यू की वैल्यू, उस लागत के फ़ील्ड से जनरेट हुई कुल लागत होती है जिसे पूरे समाधान में जोड़ा जाता है. दूसरे शब्दों में, costs["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" देखें).

REFERENCE: सभी (कोड, नाम) जोड़े की सूची:

  • जानकारी नहीं है = 0;
  • VALIDATION_TIMEOUT_ERROR = 10; पुष्टि की प्रक्रिया तय समयसीमा में पूरी नहीं हो सकी.
  • REQUEST_OPTIONS_ERROR = 12;

    • REQUEST_OPTIONS_INVALID_SOLVING_ मोड = 1201;
    • REQUEST_OPTIONS_INVALID_MAX_CLICKSATION_ERRORS = 1203;
    • REQUEST_OPTIONS_INVALID_GEODESIC_ {3}PER_ खरीदकर = 1204;
    • REQUEST_OPTIONS_GEODESIC_ बजाय_PER_TOTAL_TOO_small = 1205;
    • REQUEST_OPTIONS_MISSING_GEODESIC_ बजाय_PER_वें = 1206;
    • REQUEST_OPTIONS_POPULATE_PATHFINDER_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_ प्रमोशन_START_TIME = 1214;
    • REQUEST_OPTIONS_TRAFFIC_ENABLED_WITH_PRECEDENCES = 1215;
    • REQUEST_OPTIONS_TRAFFIC_PREFILL_मोड_INVALID = 1216;
    • REQUEST_OPTIONS_TRAFFIC_PREFILL_चालू_WITHOUT_TRAFFIC = 1217;
  • INJECTED_SOLUTION_ERROR = 20;
    • INJECTED_SOLUTION_MISSING_LABEL = 2000;
    • INJECTED_SOLUTION_DUPLICATE_LABEL = 2001;
    • INJECTED_SOLUTION_AMBIGUOUS_INDEX = 2002;
    • INJECTED_SOLUTION_INFEASIBLE_ ऊपर_GETTING_TRAVEL_TIMES = 2003;
    • INJECTED_SOLUTION_transitION_INCONSISTENT_WITH_ कमरों में रुकने की जानकारी = 2004;
    • INJECTED_SOLUTION_CONCURRENT_SOLUTION_TYPES = 2005;
    • INJECTED_SOLUTION_MORE_thank_ONE_PER_TYPE = 2006;
    • INJECTED_SOLUTION_REFRESH_WITHOUT_POPULATE = 2008;
    • INJECTED_SOLUTION_CONSTRAINED_ROUTE_PORTION_INFEASIBLE = 2010;
  • शिपMENT_MODEL_ERROR = 22;
    • SHIPMENT_MODEL_TOO_LARGE = 2200;
    • SHIPMENT_MODEL_TOO_MANY_CAPACITY_TYPES = 2201;
    • shipMENT_MODEL_ Global_START_TIME_NEGATIVE_OR_NAN = 2202;
    • SHIPMENT_MODEL_ Global_END_TIME_TOO_LARGE_OR_NAN = 2203;
    • shippingMENT_MODEL_NETWORK_START_TIME_/CHANNEL_END_TIME = 2204
    • shipMENT_MODEL_ Global_DURATION_TOO_LONG = 2205;
    • SHIPMENT_MODEL_MAX_ACTIVE_VEHICLES_NOT_POSITIVE = 2206;
    • SHIPMENT_MODEL_DURATION_MATRIX_TOO_LARGE = 2207;
  • INDEX_ERROR = 24;
  • TAG_ERROR = 26;
  • TIME_WINDOW_ERROR = 28;
    • TIME_WINDOW_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_WINDOW_OUTSIDE_NETWORK_TIME_WINDOW = 2804;
    • TIME_Windows_START_TIME_बाद_END_TIME = 2805;
    • TIME_Windows_INVALID_COST_PER_Hour_BEFORE_SOFT_START_TIME = 2806;
    • TIME_Windows_INVALID_COST_PER_hour_बाद_SOFT_END_TIME = 2807;
    • TIME_Windows_COST_BEFORE_SOFT_START_TIME_WITHOUT_SOFT_START_TIME = 2808;
    • TIME_WINDOW_COST_बाद_SOFT_END_TIME_WITHOUT_SOFT_END_TIME = 2809;
    • TIME_Windows_SOFT_START_TIME_WITHOUT_COST_BEFORE_SOFT_START_TIME = 2810;
    • TIME_Windows_SOFT_END_TIME_WITHOUT_COST_ ऐसा_SOFT_END_TIME = 2811;
    • TIME_Windows_OVERLAPPING_ADJACENT_OR_EARLIER_ क्यों_PREVIOUS = 2812;
    • TIME_WINDOW_START_TIME_बाद_SOFT_START_TIME = 2813;
    • TIME_Windows_SOFT_START_TIME_OUTSIDE_ अगली_TIME_WINDOW = 2819;
    • TIME_Windows_SOFT_END_TIME_OUTSIDE_ अगली_TIME_WINDOW = 2820;
    • TIME_WINDOW_SOFT_END_TIME_AFTER_END_TIME = 2816;
    • TIME_Windows_COST_BEFORE_SOFT_START_TIME_SET_AND_MULTIPLE_WINDOWS = 2817;
    • TIME_WINDOW_COST_AFTER_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_ {3}SUPPORTED = 3003;
    • transitION_ATTRIBUTES_UNSPECIFIED_SOURCE_TAGS = 3004;
    • TransitION_ATTRIBUTES_PARTYING_SOURCE_TAGS_FIELDS = 3005;
    • TRANSITION_ATTRIBUTES_UNSPECIFIED_DESTINATION_TAGS = 3006;
    • TRANSITION_ATTRIBUTES_CONFLICTING_DESTINATION_TAGS_FIELDS = 3007;
    • TransitION_ATTRIBUTES_MEDIA_DURATION_NEGATIVE_OR_NAN = 3008;
    • TransitION_ATTRIBUTES_MEDIA_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 = 3,306;
    • LOAD_LIMIT_MIXED_DEMAND_TYPE = 3307;
    • LOAD_LIMIT_MAX_LOAD_NEGATIVE_VALUE = 3308;
    • LOAD_LIMIT_SOFT_MAX_ABOVE_MAX = 3,309;
  • 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_ उसके बाद_SOFT_MAX = 3601;
    • DISTANCE_LIMIT_SOFT_MAX_WITHOUT_COST_बाद_SOFT_MAX = 3602;
    • DISTANCE_LIMIT_COST_बाद_SOFT_MAX_WITHOUT_SOFT_MAX = 3603;
    • DISTANCE_LIMIT_NEGATIVE_MAX = 3604;
    • DISTANCE_LIMIT_NEGATIVE_SOFT_MAX = 3605;
    • DISTANCE_LIMIT_SOFT_MAX_LARGER_thank_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_ ऊपर_SOFT_MAX = 3802;
    • DURATION_LIMIT_SOFT_MAX_WITHOUT_COST_बाद_SOFT_MAX = 3803;
    • DURATION_LIMIT_COST_बाद_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_SQUARE_Hour = 3807;
    • DURATION_LIMIT_COST_PER_SQUARE_SQUARE_WITHOUT_QUADRATIC_SOFT_MAX = 3808;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_WITHOUT_MAX = 3809;
    • DURATION_LIMIT_SOFT_MAX_LARGER_thank_MAX = 3810;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_LARGER_ मुलाकात_MAX = 3811;
    • DURATION_LIMIT_DIFF_BETWEEN_MAX_AND_QUADRATIC_SOFT_MAX_TOO_LARGE = 3812;
    • DURATION_LIMIT_MAX_DURATION_EXCEEDS_चरमपब्लिक_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_ स्ट्रीमिंग_DETOUR_LIMIT_DURATION_NEGATIVE_OR_NAN = 4,000
    • shippingMENT_PD_ABSOLUTE_DETOUR_LIMIT_DURATION_EXCEEDS_ Global_DURATION = 4,001;
    • SHIPMENT_PD_RELATIVE_DETOUR_LIMIT_INVALID = 4015;
    • shippingMENT_PD_DETOUR_LIMIT_AND__additional_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_DUPLICATE_ALLOWED_VEHICLE_INDEX = 4008;
    • SHIPMENT_INCONSISTENT_COST_FOR_VEHICLE_SIZE_WITHOUT_INDEX = 4009;
    • SHIPMENT_INCONSISTENT_COST_FOR_VEHICLE_SIZE_WITH_INDEX = 4010;
    • ATIONMENT_INVALID_COST_FOR_VEHICLE = 4011;
    • shipMENT_COST_FOR_VEHICLE_INDEX_OUT_OF_BOUNDS = 4012;
    • shipMENT_डुप्लीकेट_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_ दस्तावेज़ VISIT_DURATION_NEGATIVE_OR_NAN = 4207
    • VEHICLE_ अवसर_VISIT_DURATION_EXCEEDS_ प्रयोग_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_USED_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 = 4,400;
    • VISIT_REQUEST_डुप्लीकेट_TAG = 4401;
    • VISIT_REQUEST_DURATION_NEGATIVE_OR_NAN = 4404;
    • VISIT_REQUEST_DURATION_EXCEEDS_ Global_DURATION = 4405;
  • PRECEDENCE_ERROR = 46;
    • PRECEDENCE_Rule_MISSING_FIRST_INDEX = 4600;
    • PRECEDENCE_FULL_MISSING_TOTAL_INDEX = 4601;
    • PRECEDENCE_Rule_FIRST_INDEX_OUT_OF_BOUNDS = 4602;
    • PRECEDENCE_3_TOTAL_INDEX_OUT_OF_BOUNDS = 4603;
    • PRECEDENCE_ बिना तय किए बिडिंग के सोर्स के तौर पर पैसे चुकाने की सुविधा के साथ आने वाले रेवेन्यू का सोर्स = 4604
    • PRECEDENCE_Rule_INEXISTENT_FIRST_VISIT_REQUEST = 4605;
    • PRECEDENCE_RULE_INEXISTENT_SECOND_VISIT_REQUEST = 4606;
  • BREAK_ERROR = 48;
    • BREAK_RULE_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_GLOBAL_START_TIME = 4806;
    • BREAK_REQUEST_LATEST_END_TIME_बाद_ग्लोबल_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_ प्रयोग_DURATION = 4811;
    • BREAK_frequency_MAX_INTER_BREAK_DURATION_EXCEEDS_ नंबरों को 1802.65;
    • 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_क्ष_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;
    • शिपMENT_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;
  • चेतावनी = 9;
    • WARNING_INJECTED_FIRST_SOLUTION = 90;
      • WARNING_INJECTED_FIRST_SOLUTION_INFEASIBLE_SHIPMENTS_REMOVED = 9000;
      • WARNING_INJECTED_FIRST_SOLUTION_INFEASIBLE_AFTER_GETTING_TRAVEL_TIMES = 9001;
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 मैपिंग होती है (जब कोड != "UNSPECIFIED") होता है.

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

offending_values

string

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

फ़ील्ड रेफ़रंस

पुष्टि करने में हुई गड़बड़ी के लिए संदर्भ बताता है. 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

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

फ़ील्ड
data_format

DataFormat

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

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

GcsDestination

Google Cloud Storage में वह जगह जहां आउटपुट को सेव करना है.

RouteModifiers

यह नीति, वाहन के रास्तों का हिसाब लगाते समय, वैकल्पिक शर्तों के सेट को एनकैप्सुलेट करती है. यह जानकारी, Google Maps Platform Routes Preferred API में मौजूद RouteModifiers से मिलती-जुलती है; यहां देखें: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.

फ़ील्ड
avoid_tolls

bool

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

avoid_highways

bool

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

avoid_ferries

bool

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

avoid_indoor

bool

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

शिपमेंट

किसी एक आइटम को शिप करने से लेकर, किसी एक पिक अप से लेकर उसकी डिलीवरी तक का सफ़र. किसी वाहन को 'परफ़ॉर्मेंस' तब ही माना जाएगा, जब वह पिकअप की किसी जगह पर जाए (और ज़रूरत के हिसाब से उसकी अतिरिक्त क्षमता कम करे). इसके बाद, डिलीवरी की किसी एक जगह पर जाए. इसलिए, वाहन की अतिरिक्त कपैसिटी को फिर से बढ़ाएं.

फ़ील्ड
display_name

string

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

pickups[]

VisitRequest

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

deliveries[]

VisitRequest

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

load_demands

map<string, Load>

शिपमेंट से जुड़ी जानकारी लोड करना. उदाहरण के लिए, वज़न, वॉल्यूम, पैलेट की संख्या वगैरह. मैप में दी गई कुंजियों को ऐसे आइडेंटिफ़ायर होने चाहिए जो इससे जुड़े लोड के टाइप की जानकारी देते हों. खास तौर पर, इसमें इकाइयां भी शामिल होनी चाहिए. उदाहरण के लिए: "weight_kg", "quantity_gallons", "pallet_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 से, यात्रा में लगने वाला समय वाहनों पर निर्भर न होने पर ही, रास्ते में आने वाली रुकावटों की जानकारी दी जा सकती है.

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 यूटीसी (यानी, सेकंड: 31,536,000, नैनो सेकंड: 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.
  • एक वाहन, locA से अपना रास्ता शुरू करता है और locA पर खत्म करता है.
  • locB पर पिकअप के लिए एक अनुरोध.
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.
  • एक वाहन locA से शुरू होता है और "तेज़" मैट्रिक्स का इस्तेमाल करके locB पर खत्म होता है.
  • एक वाहन locB पर अपना रूट शुरू करता है और "धीमा" मैट्रिक्स का इस्तेमाल करके locB पर खत्म होता है.
  • एक वाहन locB से शुरू होता है और "तेज़" मैट्रिक्स का इस्तेमाल करके locB पर खत्म होता है.
  • locC में एक पिकअप विज़िट का अनुरोध.
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_src_tags(j) से टैग duration_distance_matrix_dst_tags(k) तक की यात्रा की अवधि (या दूरी) तय करता है.

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

transition_attributes[]

TransitionAttributes

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

shipment_type_incompatibilities[]

ShipmentTypeIncompatibility

ऐसे शिपमेंट_types के सेट जो काम नहीं करते हैं (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 पर शुरू होना चाहिए शुरू हो गया है.

कई प्राथमिकताएं एक ही (या मिलते-जुलते) इवेंट का रेफ़रंस दे सकती हैं. उदाहरण के लिए, "A की डिलीवरी के बाद, B का पिक अप किया जाएगा" और "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) से होती है.
  • वाहन के चालू होने के बाद, हमेशा ट्रांज़िशन #0 होता है.
  • वाहन की समाप्ति से पहले हमेशा #n होता है.

ज़ूम इन करने पर, Transition और Visit के दौरान क्या होता है, यहां बताया गया है:

---+-------------------------------------+-----------------------------+-->
   |           TRANSITION[i]             |           VISIT[i]          |
   |                                     |                             |
   |  * TRAVEL: the vehicle moves from   |      PERFORM the visit:     |
   |    VISIT[i-1].departure_location to |                             |
   |    VISIT[i].arrival_location, which |  * Spend some time:         |
   |    takes a given travel duration    |    the "visit duration".    |
   |    and distance                     |                             |
   |                                     |  * Load or unload           |
   |  * BREAKS: the driver may have      |    some quantities from the |
   |    breaks (e.g. lunch break).       |    vehicle: the "demand".   |
   |                                     |                             |
   |  * WAIT: the driver/vehicle does    |                             |
   |    nothing. This can happen for     |                             |
   |    many reasons, for example when   |                             |
   |    the vehicle reaches the next     |                             |
   |    event's destination before the   |                             |
   |    start of its time window         |                             |
   |                                     |                             |
   |  * DELAY: *right before* the next   |                             |
   |    arrival. E.g. the vehicle and/or |                             |
   |    driver spends time unloading.    |                             |
   |                                     |                             |
---+-------------------------------------+-----------------------------+-->
   ^                                     ^                             ^
V[i-1].end                           V[i].start                    V[i].end

आखिर में, यहां बताया गया है कि ट्रांज़िशन के दौरान TRAVEL, BREAKS, DELAY और WAIT को किस तरह व्यवस्थित किया जा सकता है.

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

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

                               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] रूट की पहली विज़िट है. अगर यह फ़ील्ड खाली है, तो वाहन को इस्तेमाल न किए जाने वाला माना जाता है.

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)

ट्रैफ़िक की वजह से, यात्रा में लगने वाले समय travel_duration(previous_visit, next_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 नहीं है, तो यात्रा से जुड़ी मेट्रिक शून्य होगी.

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

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

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

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

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

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

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

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 को या उसके बाद होने वाले इवेंट के तौर पर प्राथमिकता देती है. इसके लिए, इस अनुपात में उस इवेंट के सॉफ़्ट_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` <= `end_time` and
  0 <= `start_time` <= `soft_start_time` and
  0 <= `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 से, सिर्फ़ सॉफ्ट लिमिट का इस्तेमाल किया जा सकता है.

delay

Duration

इस ट्रांज़िशन के दौरान हुई देरी के बारे में बताता है.

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

वाहन

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

फ़ील्ड
display_name

string

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

travel_mode

TravelMode

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

route_modifiers

RouteModifiers

शर्तों का एक सेट, जो दिए गए वाहन के लिए रास्तों की गणना के तरीके को प्रभावित करती है.

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>

visit_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

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