Package google.maps.routeoptimization.v1

সূচক

রুট অপ্টিমাইজেশান

যানবাহন ট্যুর অপ্টিমাইজ করার জন্য একটি পরিষেবা।

নির্দিষ্ট ধরণের ক্ষেত্রের বৈধতা:

  • 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]-এ হতে হবে।
    • nanos আনসেট বা 0 এ সেট করা আবশ্যক।
  • google.type.LatLng
    • অক্ষাংশ অবশ্যই [-90.0, 90.0]-এ হতে হবে।
    • দ্রাঘিমাংশ অবশ্যই [-180.0, 180.0]-এর মধ্যে হতে হবে।
    • অক্ষাংশ এবং দ্রাঘিমাংশের অন্তত একটি অ-শূন্য হতে হবে।
ব্যাচঅপ্টিমাইজ ট্যুরস

rpc BatchOptimizeTours( BatchOptimizeToursRequest ) returns ( Operation )

একটি ব্যাচ হিসাবে এক বা একাধিক OptimizeToursRequest বার্তাগুলির জন্য গাড়ির ট্যুর অপ্টিমাইজ করে৷

এই পদ্ধতিটি একটি লং রানিং অপারেশন (LRO)। অপ্টিমাইজেশনের জন্য ইনপুট ( OptimizeToursRequest বার্তা) এবং আউটপুট ( OptimizeToursResponse বার্তা) ক্লাউড স্টোরেজ থেকে/এ ব্যবহারকারী-নির্দিষ্ট বিন্যাসে পড়া/লেখা হয়। OptimizeTours পদ্ধতির মতো, প্রতিটি OptimizeToursRequest একটি ShipmentModel থাকে এবং ShipmentRoute s সম্বলিত একটি OptimizeToursResponse প্রদান করে, যা সামগ্রিক খরচ কমিয়ে যানবাহনের দ্বারা সঞ্চালিত রুটের একটি সেট।

ব্যবহারকারী ভোট operations.get করতে পারেন।

যদি LRO এর done ক্ষেত্রটি মিথ্যা হয়, তাহলে অন্তত একটি অনুরোধ এখনও প্রক্রিয়া করা হচ্ছে৷ অন্যান্য অনুরোধ সফলভাবে সম্পন্ন হতে পারে এবং তাদের ফলাফল GCS-এ উপলব্ধ।

যদি LRO এর done ক্ষেত্রটি সত্য হয়, তাহলে সমস্ত অনুরোধ প্রক্রিয়া করা হয়েছে। যেকোনো সফলভাবে প্রক্রিয়াকৃত অনুরোধের ফলাফল GCS-এ পাওয়া যাবে। ব্যর্থ হওয়া যেকোনো অনুরোধের ফলাফল GCS-এ পাওয়া যাবে না। যদি LRO এর error ক্ষেত্রটি সেট করা থাকে, তাহলে এতে ব্যর্থ অনুরোধগুলির একটি থেকে ত্রুটি রয়েছে৷

অনুমোদনের সুযোগ

নিম্নলিখিত OAuth সুযোগ প্রয়োজন:

  • https://www.googleapis.com/auth/cloud-platform
আইএএম অনুমতি

parent রিসোর্সে নিম্নলিখিত IAM অনুমতির প্রয়োজন:

  • routeoptimization.operations.create

আরও তথ্যের জন্য, IAM ডকুমেন্টেশন দেখুন।

অপটিমাইজ ট্যুরস

rpc OptimizeTours( OptimizeToursRequest ) returns ( OptimizeToursResponse )

একটি ShipmentModel সম্বলিত একটি OptimizeToursRequest পাঠায় এবং ShipmentRoute s সম্বলিত একটি OptimizeToursResponse ফেরত দেয়, যা সামগ্রিক খরচ কমিয়ে যানবাহনের দ্বারা সম্পাদিত রুটের একটি সেট।

একটি ShipmentModel মডেল প্রধানত Shipment নিয়ে গঠিত যা চালাতে হবে এবং Vehicle যা Shipment পরিবহনের জন্য ব্যবহার করা যেতে পারে৷ ShipmentRoute Vehicle Shipment বরাদ্দ করে৷ আরও নির্দিষ্টভাবে, তারা প্রতিটি গাড়ির জন্য একটি সিরিজ Visit নির্ধারণ করে, যেখানে একটি Visit একটি VisitRequest সাথে মিলে যায়, যা একটি Shipment জন্য একটি পিকআপ বা ডেলিভারি।

লক্ষ্য হল Vehicle ShipmentRoute একটি অ্যাসাইনমেন্ট প্রদান করা যা মোট খরচ কমিয়ে দেয় যেখানে খরচের অনেকগুলি উপাদান ShipmentModel সংজ্ঞায়িত করা হয়েছে৷

অনুমোদনের সুযোগ

নিম্নলিখিত OAuth সুযোগ প্রয়োজন:

  • https://www.googleapis.com/auth/cloud-platform
আইএএম অনুমতি

parent রিসোর্সে নিম্নলিখিত IAM অনুমতির প্রয়োজন:

  • routeoptimization.locations.use

আরও তথ্যের জন্য, IAM ডকুমেন্টেশন দেখুন।

সমষ্টিগত মেট্রিক্স

ShipmentRoute এর জন্য সমষ্টিগত মেট্রিক্স ( OptimizeToursResponse জন্য সমস্ত Transition এবং/অথবা Visit (সমস্ত ShipmentRoute উপর রেসপন্স) উপাদান।

ক্ষেত্র
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 >

এই রুটের প্রতিটি পরিমাণের জন্য (resp. সমাধান) সমগ্র রুটে অর্জিত সর্বাধিক লোড (resp. solution), সমস্ত 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 s দ্বারা তাদের সকলকে অবশ্যই সন্তুষ্ট হতে হবে। FrequencyConstraint দেখুন।

ব্রেক রিকোয়েস্ট

বিরতির ক্রম (অর্থাৎ তাদের সংখ্যা এবং ক্রম) যা প্রতিটি গাড়ির জন্য প্রযোজ্য তা অবশ্যই আগে থেকেই জানা উচিত। পুনরাবৃত্ত BreakRequest গুলি সেই ক্রমটিকে সংজ্ঞায়িত করে, যে ক্রমে সেগুলি ঘটতে হবে৷ তাদের সময় উইন্ডো ( earliest_start_time / latest_start_time ) ওভারল্যাপ হতে পারে, কিন্তু সেগুলি অবশ্যই অর্ডারের সাথে সামঞ্জস্যপূর্ণ হতে হবে (এটি চেক করা হয়েছে)।

ক্ষেত্র
earliest_start_time

Timestamp

প্রয়োজন। বিরতির শুরুতে লোয়ার বাউন্ড (অন্তর্ভুক্ত)।

latest_start_time

Timestamp

প্রয়োজন। বিরতির শুরুতে আপার বাউন্ড (ইনক্লুসিভ)।

min_duration

Duration

প্রয়োজন। বিরতির ন্যূনতম সময়কাল। ইতিবাচক হতে হবে।

ফ্রিকোয়েন্সি সীমাবদ্ধতা

একটি ন্যূনতম বিরতির ফ্রিকোয়েন্সি প্রয়োগ করে উপরে উল্লেখিত বিরতির ফ্রিকোয়েন্সি এবং সময়কালকে আরও সীমাবদ্ধ করতে পারে, যেমন "প্রতি 12 ঘন্টায় কমপক্ষে 1 ঘন্টা বিরতি থাকতে হবে"। ধরে নিলাম যে এটিকে "12 ঘন্টার যেকোনো স্লাইডিং টাইম উইন্ডোর মধ্যে, কমপক্ষে এক ঘন্টার একটি বিরতি থাকতে হবে" হিসাবে ব্যাখ্যা করা যেতে পারে, এই উদাহরণটি নিম্নলিখিত FrequencyConstraint অনুবাদ করবে:

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

সমাধানে বিরতির সময় এবং সময়কাল এই ধরনের সমস্ত সীমাবদ্ধতাকে সম্মান করবে, BreakRequest এ ইতিমধ্যে নির্দিষ্ট করা সময় উইন্ডো এবং ন্যূনতম সময়কাল ছাড়াও।

একটি FrequencyConstraint অনুশীলনে অ-পরপর বিরতিতে প্রযোজ্য হতে পারে। উদাহরণস্বরূপ, নিম্নলিখিত সময়সূচী "প্রতি 12 ঘন্টা" উদাহরণকে সম্মান করে:

  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 । ইতিবাচক হতে হবে।

ডেটা ফরম্যাট

ইনপুট এবং আউটপুট ফাইলের জন্য ডেটা বিন্যাস।

এনামস
DATA_FORMAT_UNSPECIFIED অবৈধ মান, বিন্যাস অবশ্যই অনির্দিষ্ট হওয়া উচিত নয়৷
JSON জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন।
PROTO_TEXT প্রোটোকল বাফার টেক্সট ফরম্যাট। https://protobuf.dev/reference/protobuf/textformat-spec/ দেখুন

দূরত্বসীমা

ভ্রমণ করা যেতে পারে এমন একটি সর্বোচ্চ দূরত্ব সংজ্ঞায়িত করে। এটা শক্ত বা নরম হতে পারে।

যদি একটি নরম সীমা সংজ্ঞায়িত করা হয়, তাহলে soft_max_meters এবং cost_per_kilometer_above_soft_max উভয়কেই সংজ্ঞায়িত করতে হবে এবং অঋণাত্মক হতে হবে।

ক্ষেত্র
max_meters

int64

একটি কঠিন সীমা যা দূরত্বকে সর্বাধিক max_meters হতে বাধা দেয়৷ সীমাটি অবশ্যই নেতিবাচক হতে হবে।

soft_max_meters

int64

একটি নরম সীমা সর্বোচ্চ দূরত্বের সীমা বলবৎ করে না, কিন্তু লঙ্ঘন করলে একটি খরচ হয় যা একই ইউনিটের সাথে মডেলে সংজ্ঞায়িত অন্যান্য খরচের সাথে যোগ করে।

যদি সংজ্ঞায়িত করা হয় soft_max_meters অবশ্যই max_meters এর থেকে কম হতে হবে এবং অবশ্যই nonnegative হতে হবে।

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.

খরচ nonnegative হতে হবে.

Gcs গন্তব্য

Google ক্লাউড স্টোরেজের অবস্থান যেখানে আউটপুট ফাইল(গুলি) লেখা হবে৷

ক্ষেত্র
uri

string

প্রয়োজন। Google ক্লাউড স্টোরেজ ইউআরআই।

GcsSource

Google ক্লাউড স্টোরেজ অবস্থান যেখান থেকে ইনপুট ফাইল পড়া হবে।

ক্ষেত্র
uri

string

প্রয়োজন। gs://bucket/path/to/object ফর্ম্যাট সহ একটি Google ক্লাউড স্টোরেজ অবজেক্টের URI।

Injected Solution Constraint

কোন ভিজিটগুলিকে সীমাবদ্ধ করা উচিত এবং কীভাবে সেগুলিকে সীমাবদ্ধ করা উচিত সে সম্পর্কে তথ্য সহ অনুরোধে সমাধান ইনজেকশন করা হয়েছে৷

ক্ষেত্র
routes[]

ShipmentRoute

ইনজেকশন সমাধানের রুট। মূল সমাধান থেকে কিছু রুট বাদ দেওয়া যেতে পারে। রুট এবং এড়িয়ে যাওয়া শিপমেন্টগুলিকে অবশ্যই injected_first_solution_routes এর জন্য তালিকাভুক্ত মৌলিক বৈধতা অনুমানগুলি পূরণ করতে হবে৷

skipped_shipments[]

SkippedShipment

ইনজেকশনের সমাধানের চালান এড়িয়ে গেছে। মূল সমাধান থেকে কিছু বাদ দেওয়া যেতে পারে। routes ক্ষেত্র দেখুন.

constraint_relaxations[]

ConstraintRelaxation

যানবাহনের শূন্য বা তার বেশি গ্রুপের জন্য, কখন এবং কতটা সীমাবদ্ধতা শিথিল করতে হবে তা নির্দিষ্ট করে। যদি এই ক্ষেত্রটি খালি থাকে, সমস্ত অ-খালি যানবাহন রুট সম্পূর্ণরূপে সীমাবদ্ধ।

সীমাবদ্ধতা শিথিলকরণ

যানবাহনের একটি গ্রুপের জন্য, পরিদর্শনে কোন প্রান্তিক (গুলি) সীমাবদ্ধতা শিথিল করা হবে এবং কোন স্তরে তা নির্দিষ্ট করে৷ skipped_shipment ক্ষেত্রে তালিকাভুক্ত শিপমেন্টগুলি এড়ানোর জন্য সীমাবদ্ধ; অর্থাৎ, তারা সঞ্চালিত করা যাবে না.

ক্ষেত্র
relaxations[]

Relaxation

সমস্ত ভিজিট সীমাবদ্ধতা শিথিলতা যা vehicle_indices যানবাহন সহ রুটে পরিদর্শনের ক্ষেত্রে প্রযোজ্য হবে।

vehicle_indices[]

int32

যানবাহনের সূচকগুলি নির্দিষ্ট করে যেখানে পরিদর্শন সীমাবদ্ধতা relaxations প্রযোজ্য। খালি থাকলে, এটি ডিফল্ট হিসাবে বিবেচিত হয় এবং relaxations সমস্ত যানবাহনের ক্ষেত্রে প্রযোজ্য হয় যেগুলি অন্যান্য constraint_relaxations নির্দিষ্ট করা হয়নি। সর্বাধিক একটি ডিফল্ট থাকতে পারে, অর্থাৎ, সর্বাধিক একটি সীমাবদ্ধতা শিথিলকরণ ক্ষেত্রে খালি vehicle_indices অনুমোদিত। একটি যানবাহন সূচক শুধুমাত্র একবার তালিকাভুক্ত করা যেতে পারে, এমনকি বেশ কয়েকটি constraint_relaxations মধ্যেও।

একটি গাড়ির সূচী ShipmentRoute.vehicle_index এর মতই ম্যাপ করা হয়, যদি interpret_injected_solutions_using_labels সত্য হয় ( fields মন্তব্য দেখুন)।

শিথিলতা

relaxations খালি থাকলে, routes সমস্ত দর্শনের শুরুর সময় এবং ক্রম সম্পূর্ণরূপে সীমাবদ্ধ থাকে এবং সেই রুটে কোনও নতুন ভিজিট সন্নিবেশ করা বা যোগ করা যাবে না। এছাড়াও, routes একটি গাড়ির শুরু এবং শেষের সময় সম্পূর্ণরূপে সীমাবদ্ধ, যতক্ষণ না গাড়িটি খালি থাকে (অর্থাৎ, কোনও ভিজিট নেই এবং মডেলটিতে মিথ্যা সেট used_if_route_is_empty করা হয়েছে)।

relaxations(i).level একটি পরিদর্শন #j-এ প্রয়োগ করা সীমাবদ্ধতা শিথিলকরণ স্তর নির্দিষ্ট করে যা সন্তুষ্ট করে:

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

একইভাবে, গাড়ির স্টার্ট relaxations(i).level শিথিল করা হয় যদি এটি সন্তুষ্ট করে:

  • vehicle_start_time >= relaxations(i).threshold_time AND
  • 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 মোটেও প্রয়োগ করা হয় না।

স্তর

বিভিন্ন সীমাবদ্ধতা শিথিলকরণ স্তরগুলি প্রকাশ করে, যা একটি পরিদর্শনের জন্য প্রয়োগ করা হয় এবং যেগুলি থ্রেশহোল্ড শর্তগুলিকে সন্তুষ্ট করার সময় অনুসরণ করে৷

নীচের গণনাটি শিথিলকরণ বৃদ্ধির ক্রম অনুসারে।

এনামস
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 এর মতোই, তবে গাড়িটিও শিথিল: থ্রেশহোল্ডের সময় বা তার পরে পরিদর্শন সম্পূর্ণ বিনামূল্যে এবং সম্ভাব্যভাবে অকার্যকর হয়ে যেতে পারে।

ইনপুট কনফিগারেশন

[BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours]-এর জন্য একটি ইনপুট নির্দিষ্ট করুন।

ক্ষেত্র
data_format

DataFormat

প্রয়োজন। ইনপুট তথ্য বিন্যাস.

ইউনিয়ন ক্ষেত্র source । প্রয়োজন। source নিম্নলিখিতগুলির মধ্যে একটি হতে পারে:
gcs_source

GcsSource

একটি Google ক্লাউড স্টোরেজ অবস্থান। এটি একটি একক বস্তু (ফাইল) হতে হবে।

অবস্থান

একটি অবস্থান (একটি ভৌগলিক বিন্দু, এবং একটি ঐচ্ছিক শিরোনাম) এনক্যাপসুলেট করে।

ক্ষেত্র
lat_lng

LatLng

ওয়েপয়েন্টের ভৌগলিক স্থানাঙ্ক।

heading

int32

কম্পাস শিরোনাম ট্র্যাফিক প্রবাহের দিকের সাথে যুক্ত। পিকআপ এবং ড্রপ-অফের জন্য ব্যবহার করার জন্য রাস্তার পাশে নির্দিষ্ট করতে এই মানটি ব্যবহার করা হয়। শিরোনামের মান 0 থেকে 360 পর্যন্ত হতে পারে, যেখানে 0 সঠিক উত্তরের শিরোনাম নির্দিষ্ট করে, 90 নির্ধারিত পূর্বের শিরোনাম উল্লেখ করে ইত্যাদি।

অপটিমাইজ ট্যুর রিকোয়েস্ট

একটি ট্যুর অপ্টিমাইজেশান সমাধানকারীকে দেওয়ার অনুরোধ যা সমাধানের জন্য শিপমেন্ট মডেলের পাশাপাশি অপ্টিমাইজেশন প্যারামিটারগুলিকে সংজ্ঞায়িত করে৷

ক্ষেত্র
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 s একই মূল 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 ) দুটি প্রাসঙ্গিক অনুরোধ জুড়ে ব্যবহৃত একটি যানবাহন (resp. শিপমেন্ট) সত্তাকে স্বতন্ত্রভাবে সনাক্ত করে: অতীতের অনুরোধ যা ইনজেকশনের সমাধানে ব্যবহৃত OptimizeToursResponse তৈরি করেছিল এবং বর্তমান অনুরোধ যাতে ইনজেকশনের সমাধান অন্তর্ভুক্ত থাকে। উপরে বর্ণিত স্বতন্ত্রতা পরীক্ষাগুলি এই প্রয়োজনীয়তার গ্যারান্টি দেওয়ার জন্য যথেষ্ট নয়।

consider_road_traffic

bool

ShipmentRoute , Visit.start_time , এবং vehicle_end_time Transition.travel_duration ShipmentRoute.has_traffic_infeasibilities ক্ষেত্র সেট করতে এবং OptimizeToursResponse.total_cost ফিল্ড গণনা করতে।

populate_polylines

bool

সত্য হলে, ShipmentRoute s এর প্রতিক্রিয়ায় পলিলাইনগুলি পপুলেট করা হবে।

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 মানচিত্রের দূরত্বের পরিবর্তে জিওডেসিক দূরত্ব ব্যবহার করে গণনা করা হবে, এবং ভ্রমণের সময়গুলি জিওডেসিক দূরত্ব ব্যবহার করে গণনা করা হবে geodesic_meters_per_second দ্বারা সংজ্ঞায়িত গতির সাথে।

label

string

এই অনুরোধ শনাক্ত করতে ব্যবহার করা হতে পারে এমন লেবেল, OptimizeToursResponse.request_label এ আবার রিপোর্ট করা হয়েছে।

geodesic_meters_per_second

double

যখন use_geodesic_distances সত্য হয়, তখন এই ক্ষেত্রটি অবশ্যই সেট করতে হবে এবং ভ্রমণের সময় গণনা করার জন্য প্রয়োগ করা গতি সংজ্ঞায়িত করতে হবে। এর মান কমপক্ষে 1.0 মিটার/সেকেন্ড হতে হবে।

max_validation_errors

int32

প্রত্যাবর্তিত বৈধতা ত্রুটির সংখ্যা ছেঁটে ফেলে৷ এই ত্রুটিগুলি সাধারণত একটি INVALID_ARGUMENT ত্রুটির পেলোডের সাথে একটি BadRequest ত্রুটি বিশদ বিবরণ ( https://cloud.google.com/apis/design/errors#error_details ) হিসাবে সংযুক্ত থাকে, যদি না solving_mode=VALIDATE_ONLY: OptimizeToursResponse.validation_errors field_validation দেখুন৷ এটি ডিফল্ট 100 এবং 10,000 এ সীমাবদ্ধ।

অনুসন্ধান মোড

মোড অনুসন্ধানের আচরণকে সংজ্ঞায়িত করে, ট্রেডিং অফ লেটেন্সি বনাম সমাধানের গুণমান। সমস্ত মোডে, বিশ্বব্যাপী অনুরোধের সময়সীমা কার্যকর করা হয়।

এনামস
SEARCH_MODE_UNSPECIFIED অনির্দিষ্ট অনুসন্ধান মোড, RETURN_FAST এর সমতুল্য।
RETURN_FAST প্রথম ভাল সমাধান খুঁজে পাওয়ার পরে অনুসন্ধান বন্ধ করুন।
CONSUME_ALL_AVAILABLE_TIME আরও ভাল সমাধান অনুসন্ধান করার জন্য সমস্ত উপলব্ধ সময় ব্যয় করুন।

সমাধান মোড

সমাধানকারীর অনুরোধটি কীভাবে পরিচালনা করা উচিত তা সংজ্ঞায়িত করে। সমস্ত মোডে VALIDATE_ONLY , যদি অনুরোধটি অবৈধ হয়, আপনি একটি INVALID_REQUEST ত্রুটি পাবেন৷ ফিরে আসা ত্রুটির সংখ্যা ক্যাপ করতে max_validation_errors দেখুন।

এনামস
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 বার্তাটির জন্য "একাধিক ত্রুটি" ব্যাখ্যাটি দেখুন৷ ত্রুটির পরিবর্তে, এটি DEFAULT_SOLVE হল solving_mode ক্ষেত্রে সতর্কতা অন্তর্ভুক্ত করবে।

metrics

Metrics

এই সমাধানের জন্য সময়কাল, দূরত্ব এবং ব্যবহারের মেট্রিক্স।

মেট্রিক্স

সামগ্রিক মেট্রিক্স, সমস্ত রুটে একত্রিত।

ক্ষেত্র
aggregated_route_metrics

AggregatedMetrics

রুট উপর একত্রিত. প্রতিটি মেট্রিক হল একই নামের সমস্ত ShipmentRoute.metrics ক্ষেত্রের যোগফল (বা সর্বোচ্চ, লোডের জন্য)।

skipped_mandatory_shipment_count

int32

এড়িয়ে যাওয়া বাধ্যতামূলক চালানের সংখ্যা।

used_vehicle_count

int32

ব্যবহৃত যানবাহনের সংখ্যা। দ্রষ্টব্য: যদি একটি যানবাহনের রুট খালি থাকে এবং Vehicle.used_if_route_is_empty সত্য হয়, তাহলে গাড়িটিকে ব্যবহৃত বলে গণ্য করা হবে।

earliest_vehicle_start_time

Timestamp

একটি ব্যবহৃত গাড়ির জন্য প্রথম দিকের শুরুর সময়, ShipmentRoute.vehicle_start_time এর সমস্ত ব্যবহৃত যানবাহনের ন্যূনতম হিসাবে গণনা করা হয়।

latest_vehicle_end_time

Timestamp

একটি ব্যবহৃত গাড়ির সর্বশেষ শেষ সময়, ShipmentRoute.vehicle_end_time এর সমস্ত ব্যবহৃত যানবাহনের উপর সর্বাধিক হিসাবে গণনা করা হয়।

costs

map<string, double>

সমাধানের খরচ, খরচ-সম্পর্কিত অনুরোধ ক্ষেত্র দ্বারা বিভক্ত। কীগুলি হল প্রোটো পাথ, ইনপুট OptimizeToursRequest-এর সাপেক্ষে, যেমন "model.shipments.pickups.cost", এবং মানগুলি হল সংশ্লিষ্ট খরচ ক্ষেত্রের দ্বারা উত্পন্ন মোট খরচ, সমগ্র সমাধানের উপর একত্রিত৷ অন্য কথায়, খরচ ["model.shipments.pickups.cost"] হল সমাধানের সমস্ত পিকআপ খরচের সমষ্টি। মডেলে সংজ্ঞায়িত সমস্ত খরচ এখানে বিস্তারিতভাবে রিপোর্ট করা হয়েছে ট্রানজিশন অ্যাট্রিবিউটের সাথে সম্পর্কিত খরচগুলি বাদ দিয়ে যেগুলি শুধুমাত্র 2022/01 হিসাবে সমষ্টিগতভাবে রিপোর্ট করা হয়েছে।

total_cost

double

সমাধানের মোট খরচ। খরচ ম্যাপে সমস্ত মানের সমষ্টি।

OptimizeToursValidationError

একটি OptimizeToursRequest যাচাই করার সময় একটি ত্রুটি বা সতর্কতা দেখা দেয়।

ক্ষেত্র
code

int32

একটি বৈধতা ত্রুটি জোড়া ( code , display_name ) দ্বারা সংজ্ঞায়িত করা হয় যা সর্বদা উপস্থিত থাকে।

অন্যান্য ক্ষেত্র (নীচে) ত্রুটি সম্পর্কে আরও প্রসঙ্গ প্রদান করে।

একাধিক ত্রুটি : যখন একাধিক ত্রুটি থাকে, তখন যাচাইকরণ প্রক্রিয়া তাদের মধ্যে কয়েকটি আউটপুট করার চেষ্টা করে। অনেকটা কম্পাইলারের মতো, এটি একটি অপূর্ণ প্রক্রিয়া। কিছু বৈধতা ত্রুটি "মারাত্মক" হবে, যার অর্থ তারা পুরো বৈধতা প্রক্রিয়া বন্ধ করে দেয়। অন্যদের মধ্যে display_name="UNSPECIFIED" ত্রুটির ক্ষেত্রে এটি হয়৷ কিছু অন্য ত্রুটিগুলি এড়িয়ে যেতে বৈধকরণ প্রক্রিয়ার কারণ হতে পারে।

স্থিতিশীলতা : code এবং display_name খুব স্থিতিশীল হওয়া উচিত। কিন্তু সময়ের সাথে সাথে নতুন কোড এবং ডিসপ্লে নামগুলি উপস্থিত হতে পারে, যা একটি ভিন্ন ( code , display_name ) জোড়া দেওয়ার জন্য একটি প্রদত্ত (অবৈধ) অনুরোধের কারণ হতে পারে কারণ নতুন ত্রুটিটি পুরানোটিকে লুকিয়ে রেখেছে ("একাধিক ত্রুটি" দেখুন)৷

রেফারেন্স : সমস্ত (কোড, নাম) জোড়ার একটি তালিকা:

  • অনির্দিষ্ট = 0;
  • VALIDATION_TIMEOUT_ERROR = 10; সময়সীমার মধ্যে বৈধতা সম্পন্ন করা যায়নি।
  • REQUEST_OPTIONS_ERROR = 12;

    • REQUEST_OPTIONS_INVALID_SOLVING_MODE = 1201;
    • REQUEST_OPTIONS_INVALID_MAX_VALIDATION_ERRORS = 1203;
    • REQUEST_OPTIONS_INVALID_GEODESIC_METERS_PER_SECOND = 1204;
    • REQUEST_OPTIONS_GEODESIC_METERS_PER_SECOND_TOO_SMALL = 1205;
    • REQUEST_OPTIONS_MISSING_GEODESIC_METERS_PER_SECOND = 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_GLOBAL_START_TIME = 1214;
    • REQUEST_OPTIONS_TRAFFIC_ENABLED_WITH_PRECEDENCES = 1215;
    • REQUEST_OPTIONS_TRAFFIC_PREFILL_MODE_INVALID = 1216;
    • REQUEST_OPTIONS_TRAFFIC_PREFILL_ENABLED_WITHOUT_TRAFFIC = 1217;
  • INJECTED_SOLUTION_ERROR = 20;
    • INJECTED_SOLUTION_MISSING_LABEL = 2000;
    • INJECTED_SOLUTION_DUPLICATE_LABEL = 2001;
    • INJECTED_SOLUTION_AMBIGUOUS_INDEX = 2002;
    • INJECTED_SOLUTION_INFEASIBLE_AFTER_GETTING_TRAVEL_TIMES = 2003;
    • INJECTED_SOLUTION_TRANSITION_INCONSISTENT_WITH_ACTUAL_TRAVEL = 2004;
    • INJECTED_SOLUTION_CONCURRENT_SOLUTION_TYPES = 2005;
    • INJECTED_SOLUTION_MORE_THAN_ONE_PER_TYPE = 2006;
    • INJECTED_SOLUTION_REFRESH_WITHOUT_POPULATE = 2008;
    • INJECTED_SOLUTION_CONSTRAINED_ROUTE_PORTION_INFEASIBLE = 2010;
  • SHIPMENT_MODEL_ERROR = 22;
    • SHIPMENT_MODEL_TOO_LARGE = 2200;
    • SHIPMENT_MODEL_TOO_MANY_CAPACITY_TYPES = 2201;
    • SHIPMENT_MODEL_GLOBAL_START_TIME_NEGATIVE_OR_NAN = 2202;
    • SHIPMENT_MODEL_GLOBAL_END_TIME_TOO_LARGE_OR_NAN = 2203;
    • SHIPMENT_MODEL_GLOBAL_START_TIME_AFTER_GLOBAL_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_WINDOW_INVALID_END_TIME = 2801;
    • TIME_WINDOW_INVALID_SOFT_START_TIME = 2802;
    • TIME_WINDOW_INVALID_SOFT_END_TIME = 2803;
    • TIME_WINDOW_OUTSIDE_GLOBAL_TIME_WINDOW = 2804;
    • TIME_WINDOW_START_TIME_AFTER_END_TIME = 2805;
    • TIME_WINDOW_INVALID_COST_PER_HOUR_BEFORE_SOFT_START_TIME = 2806;
    • TIME_WINDOW_INVALID_COST_PER_HOUR_AFTER_SOFT_END_TIME = 2807;
    • TIME_WINDOW_COST_BEFORE_SOFT_START_TIME_WITHOUT_SOFT_START_TIME = 2808;
    • TIME_WINDOW_COST_AFTER_SOFT_END_TIME_WITHOUT_SOFT_END_TIME = 2809;
    • TIME_WINDOW_SOFT_START_TIME_WITHOUT_COST_BEFORE_SOFT_START_TIME = 2810;
    • TIME_WINDOW_SOFT_END_TIME_WITHOUT_COST_AFTER_SOFT_END_TIME = 2811;
    • TIME_WINDOW_OVERLAPPING_ADJACENT_OR_EARLIER_THAN_PREVIOUS = 2812;
    • TIME_WINDOW_START_TIME_AFTER_SOFT_START_TIME = 2813;
    • TIME_WINDOW_SOFT_START_TIME_OUTSIDE_GLOBAL_TIME_WINDOW = 2819;
    • TIME_WINDOW_SOFT_END_TIME_OUTSIDE_GLOBAL_TIME_WINDOW = 2820;
    • TIME_WINDOW_SOFT_END_TIME_AFTER_END_TIME = 2816;
    • TIME_WINDOW_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_DUPLICATE_TAG_PAIR = 3002;
    • TRANSITION_ATTRIBUTES_DISTANCE_LIMIT_MAX_METERS_UNSUPPORTED = 3003;
    • TRANSITION_ATTRIBUTES_UNSPECIFIED_SOURCE_TAGS = 3004;
    • TRANSITION_ATTRIBUTES_CONFLICTING_SOURCE_TAGS_FIELDS = 3005;
    • TRANSITION_ATTRIBUTES_UNSPECIFIED_DESTINATION_TAGS = 3006;
    • TRANSITION_ATTRIBUTES_CONFLICTING_DESTINATION_TAGS_FIELDS = 3007;
    • TRANSITION_ATTRIBUTES_DELAY_DURATION_NEGATIVE_OR_NAN = 3008;
    • TRANSITION_ATTRIBUTES_DELAY_DURATION_EXCEEDS_GLOBAL_DURATION = 3009;
  • AMOUNT_ERROR = 31;
    • AMOUNT_NEGATIVE_VALUE = 3100;
  • LOAD_LIMIT_ERROR = 33;
    • LOAD_LIMIT_INVALID_COST_ABOVE_SOFT_MAX = 3303;
    • LOAD_LIMIT_SOFT_MAX_WITHOUT_COST_ABOVE_SOFT_MAX = 3304;
    • LOAD_LIMIT_COST_ABOVE_SOFT_MAX_WITHOUT_SOFT_MAX = 3305;
    • LOAD_LIMIT_NEGATIVE_SOFT_MAX = 3306;
    • LOAD_LIMIT_MIXED_DEMAND_TYPE = 3307;
    • LOAD_LIMIT_MAX_LOAD_NEGATIVE_VALUE = 3308;
    • LOAD_LIMIT_SOFT_MAX_ABOVE_MAX = 3309;
  • INTERVAL_ERROR = 34;
    • INTERVAL_MIN_EXCEEDS_MAX = 3401;
    • INTERVAL_NEGATIVE_MIN = 3402;
    • INTERVAL_NEGATIVE_MAX = 3403;
    • INTERVAL_MIN_EXCEEDS_CAPACITY = 3404;
    • INTERVAL_MAX_EXCEEDS_CAPACITY = 3405;
  • DISTANCE_LIMIT_ERROR = 36;
    • DISTANCE_LIMIT_INVALID_COST_AFTER_SOFT_MAX = 3601;
    • DISTANCE_LIMIT_SOFT_MAX_WITHOUT_COST_AFTER_SOFT_MAX = 3602;
    • DISTANCE_LIMIT_COST_AFTER_SOFT_MAX_WITHOUT_SOFT_MAX = 3603;
    • DISTANCE_LIMIT_NEGATIVE_MAX = 3604;
    • DISTANCE_LIMIT_NEGATIVE_SOFT_MAX = 3605;
    • DISTANCE_LIMIT_SOFT_MAX_LARGER_THAN_MAX = 3606;
  • DURATION_LIMIT_ERROR = 38;
    • DURATION_LIMIT_MAX_DURATION_NEGATIVE_OR_NAN = 3800;
    • DURATION_LIMIT_SOFT_MAX_DURATION_NEGATIVE_OR_NAN = 3801;
    • DURATION_LIMIT_INVALID_COST_PER_HOUR_AFTER_SOFT_MAX = 3802;
    • DURATION_LIMIT_SOFT_MAX_WITHOUT_COST_AFTER_SOFT_MAX = 3803;
    • DURATION_LIMIT_COST_AFTER_SOFT_MAX_WITHOUT_SOFT_MAX = 3804;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_DURATION_NEGATIVE_OR_NAN = 3805;
    • DURATION_LIMIT_INVALID_COST_AFTER_QUADRATIC_SOFT_MAX = 3806;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_WITHOUT_COST_PER_SQUARE_HOUR = 3807;
    • DURATION_LIMIT_COST_PER_SQUARE_HOUR_WITHOUT_QUADRATIC_SOFT_MAX = 3808;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_WITHOUT_MAX = 3809;
    • DURATION_LIMIT_SOFT_MAX_LARGER_THAN_MAX = 3810;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_LARGER_THAN_MAX = 3811;
    • DURATION_LIMIT_DIFF_BETWEEN_MAX_AND_QUADRATIC_SOFT_MAX_TOO_LARGE = 3812;
    • DURATION_LIMIT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3813;
    • DURATION_LIMIT_SOFT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3814;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3815;
  • SHIPMENT_ERROR = 40;
    • SHIPMENT_PD_LIMIT_WITHOUT_PICKUP_AND_DELIVERY = 4014;
    • SHIPMENT_PD_ABSOLUTE_DETOUR_LIMIT_DURATION_NEGATIVE_OR_NAN = 4000;
    • SHIPMENT_PD_ABSOLUTE_DETOUR_LIMIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4001;
    • SHIPMENT_PD_RELATIVE_DETOUR_LIMIT_INVALID = 4015;
    • SHIPMENT_PD_DETOUR_LIMIT_AND_EXTRA_VISIT_DURATION = 4016;
    • SHIPMENT_PD_TIME_LIMIT_DURATION_NEGATIVE_OR_NAN = 4002;
    • SHIPMENT_PD_TIME_LIMIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4003;
    • SHIPMENT_EMPTY_SHIPMENT_TYPE = 4004;
    • SHIPMENT_NO_PICKUP_NO_DELIVERY = 4005;
    • SHIPMENT_INVALID_PENALTY_COST = 4006;
    • SHIPMENT_ALLOWED_VEHICLE_INDEX_OUT_OF_BOUNDS = 4007;
    • SHIPMENT_DUPLICATE_ALLOWED_VEHICLE_INDEX = 4008;
    • SHIPMENT_INCONSISTENT_COST_FOR_VEHICLE_SIZE_WITHOUT_INDEX = 4009;
    • SHIPMENT_INCONSISTENT_COST_FOR_VEHICLE_SIZE_WITH_INDEX = 4010;
    • SHIPMENT_INVALID_COST_FOR_VEHICLE = 4011;
    • SHIPMENT_COST_FOR_VEHICLE_INDEX_OUT_OF_BOUNDS = 4012;
    • SHIPMENT_DUPLICATE_COST_FOR_VEHICLE_INDEX = 4013;
  • VEHICLE_ERROR = 42;
    • VEHICLE_EMPTY_REQUIRED_OPERATOR_TYPE = 4200;
    • VEHICLE_DUPLICATE_REQUIRED_OPERATOR_TYPE = 4201;
    • VEHICLE_NO_OPERATOR_WITH_REQUIRED_OPERATOR_TYPE = 4202;
    • VEHICLE_EMPTY_START_TAG = 4203;
    • VEHICLE_DUPLICATE_START_TAG = 4204;
    • VEHICLE_EMPTY_END_TAG = 4205;
    • VEHICLE_DUPLICATE_END_TAG = 4206;
    • VEHICLE_EXTRA_VISIT_DURATION_NEGATIVE_OR_NAN = 4207;
    • VEHICLE_EXTRA_VISIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4208;
    • VEHICLE_EXTRA_VISIT_DURATION_EMPTY_KEY = 4209;
    • VEHICLE_FIRST_SHIPMENT_INDEX_OUT_OF_BOUNDS = 4210;
    • VEHICLE_FIRST_SHIPMENT_IGNORED = 4211;
    • VEHICLE_FIRST_SHIPMENT_NOT_BOUND = 4212;
    • VEHICLE_LAST_SHIPMENT_INDEX_OUT_OF_BOUNDS = 4213;
    • VEHICLE_LAST_SHIPMENT_IGNORED = 4214;
    • VEHICLE_LAST_SHIPMENT_NOT_BOUND = 4215;
    • VEHICLE_IGNORED_WITH_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 = 4400;
    • VISIT_REQUEST_DUPLICATE_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_RULE_MISSING_SECOND_INDEX = 4601;
    • PRECEDENCE_RULE_FIRST_INDEX_OUT_OF_BOUNDS = 4602;
    • PRECEDENCE_RULE_SECOND_INDEX_OUT_OF_BOUNDS = 4603;
    • PRECEDENCE_RULE_DUPLICATE_INDEX = 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_AFTER_GLOBAL_END_TIME = 4807;
    • BREAK_REQUEST_NON_SCHEDULABLE = 4808;
    • BREAK_FREQUENCY_MAX_INTER_BREAK_DURATION_NEGATIVE_OR_NAN = 4809;
    • BREAK_FREQUENCY_MIN_BREAK_DURATION_NEGATIVE_OR_NAN = 4810;
    • BREAK_FREQUENCY_MIN_BREAK_DURATION_EXCEEDS_GLOBAL_DURATION = 4811;
    • BREAK_FREQUENCY_MAX_INTER_BREAK_DURATION_EXCEEDS_GLOBAL_DURATION = 4812;
    • BREAK_REQUEST_DURATION_EXCEEDS_GLOBAL_DURATION = 4813;
    • BREAK_FREQUENCY_MISSING_MAX_INTER_BREAK_DURATION = 4814;
    • BREAK_FREQUENCY_MISSING_MIN_BREAK_DURATION = 4815;
  • SHIPMENT_TYPE_INCOMPATIBILITY_ERROR = 50;
    • SHIPMENT_TYPE_INCOMPATIBILITY_EMPTY_TYPE = 5001;
    • SHIPMENT_TYPE_INCOMPATIBILITY_LESS_THAN_TWO_TYPES = 5002;
    • SHIPMENT_TYPE_INCOMPATIBILITY_DUPLICATE_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_DUPLICATE_REQUIRED_TYPE = 52006;
    • SHIPMENT_TYPE_REQUIREMENT_NO_REQUIRED_TYPE_FOUND = 52007;
    • SHIPMENT_TYPE_REQUIREMENT_EMPTY_DEPENDENT_TYPE = 52008;
    • SHIPMENT_TYPE_REQUIREMENT_DUPLICATE_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 ম্যাপিং আছে (when code!= "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

ক্ষেত্রটি একটি মানচিত্র হলে কী।

আউটপুট কনফিগারেশন

[BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours] ফলাফলের জন্য একটি গন্তব্য নির্দিষ্ট করুন।

ক্ষেত্র
data_format

DataFormat

প্রয়োজন। আউটপুট ডেটা বিন্যাস।

ইউনিয়ন ক্ষেত্রের destination । প্রয়োজন। destination নিম্নলিখিতগুলির মধ্যে একটি হতে পারে:
gcs_destination

GcsDestination

আউটপুট লিখতে Google ক্লাউড স্টোরেজ অবস্থান।

রুট মডিফায়ার

যানবাহনের রুট গণনা করার সময় সন্তুষ্ট করার জন্য ঐচ্ছিক অবস্থার একটি সেট এনক্যাপসুলেট করে। এটি 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 >

চালানের লোড চাহিদা (উদাহরণস্বরূপ ওজন, আয়তন, প্যালেটের সংখ্যা ইত্যাদি)। মানচিত্রের কীগুলি অনুরূপ লোডের ধরণ বর্ণনাকারী শনাক্তকারী হওয়া উচিত, আদর্শভাবে ইউনিটগুলিও সহ। উদাহরণস্বরূপ: "ওজন_কেজি", "ভলিউম_গ্যালন", "প্যালেট_কাউন্ট", ইত্যাদি। যদি একটি প্রদত্ত কী মানচিত্রে উপস্থিত না হয়, তাহলে সংশ্লিষ্ট লোডটিকে শূন্য হিসাবে বিবেচনা করা হয়।

allowed_vehicle_indices[]

int32

এই চালান সঞ্চালন করতে পারে যে যানবাহন সেট. খালি থাকলে, সমস্ত যানবাহন এটি সম্পাদন করতে পারে। ShipmentModel vehicles তালিকায় যানবাহনগুলি তাদের সূচক দ্বারা দেওয়া হয়।

costs_per_vehicle[]

double

প্রতিটি যানবাহন দ্বারা এই চালানটি বিতরণ করার সময় যে খরচ হয় তা নির্দিষ্ট করে৷ যদি নির্দিষ্ট করা থাকে, তবে এটি অবশ্যই থাকতে হবে:

  • costs_per_vehicle_indices হিসাবে একই সংখ্যক উপাদান। costs_per_vehicle[i] মডেলের গাড়ির_প্রতি_গাড়ির_সূচক costs_per_vehicle_indices[i] এর সাথে মিলে যায়।
  • মডেলের যানবাহন হিসাবে উপাদান একই সংখ্যা. i-th উপাদানটি মডেলের যানবাহন #i-এর সাথে মিলে যায়।

এই খরচ অবশ্যই penalty_cost মতো একই ইউনিটে হতে হবে এবং নেতিবাচক হতে হবে না। এই ক্ষেত্রটি খালি রাখুন, যদি এমন কোন খরচ না থাকে।

costs_per_vehicle_indices[]

int32

যানবাহনের সূচকগুলি যেগুলির costs_per_vehicle প্রযোজ্য। যদি খালি না থাকে, তাহলে এটিতে অবশ্যই costs_per_vehicle এর সমান সংখ্যক উপাদান থাকতে হবে। একটি গাড়ির সূচক একাধিকবার নির্দিষ্ট করা যাবে না। একটি যানবাহনকে costs_per_vehicle_indices থেকে বাদ দেওয়া হলে, তার খরচ শূন্য।

pickup_to_delivery_absolute_detour_limit

Duration

পিকআপ থেকে ডেলিভারি পর্যন্ত সংক্ষিপ্ততম পথের তুলনায় সর্বাধিক নিখুঁত চক্কর সময় নির্দিষ্ট করে। যদি নির্দিষ্ট করা থাকে, এটি অবশ্যই নেতিবাচক হতে হবে এবং চালানে কমপক্ষে একটি পিকআপ এবং একটি ডেলিভারি থাকতে হবে।

উদাহরণস্বরূপ, নির্বাচিত পিকআপ বিকল্প থেকে সরাসরি নির্বাচিত ডেলিভারি বিকল্পে যেতে সবচেয়ে কম সময় নেওয়া যাক। তারপরে pickup_to_delivery_absolute_detour_limit সেট করে বলবৎ করে:

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

যদি একই চালানে আপেক্ষিক এবং পরম উভয় সীমা নির্দিষ্ট করা হয়, তবে প্রতিটি সম্ভাব্য পিকআপ/ডেলিভারি জোড়ার জন্য আরও সীমাবদ্ধ সীমা ব্যবহার করা হয়। 2017/10 অনুযায়ী, পথচলাগুলি শুধুমাত্র তখনই সমর্থিত হয় যখন ভ্রমণের সময়কাল যানবাহনের উপর নির্ভর করে না।

pickup_to_delivery_time_limit

Duration

পিকআপের শুরু থেকে চালানের ডেলিভারি শুরু পর্যন্ত সর্বোচ্চ সময়কাল নির্দিষ্ট করে। যদি নির্দিষ্ট করা থাকে, এটি অবশ্যই নেতিবাচক হতে হবে এবং চালানে কমপক্ষে একটি পিকআপ এবং একটি ডেলিভারি থাকতে হবে। এটি পিকআপ এবং ডেলিভারির জন্য কোন বিকল্পগুলি বেছে নেওয়া হয়েছে বা গাড়ির গতির উপর নির্ভর করে না। এটি সর্বাধিক চক্কর সীমাবদ্ধতার পাশাপাশি নির্দিষ্ট করা যেতে পারে: সমাধান উভয় নির্দিষ্টকরণকে সম্মান করবে।

shipment_type

string

এই চালানের জন্য একটি "প্রকার" নির্দিষ্ট করে অ-খালি স্ট্রিং। এই বৈশিষ্ট্যটি shipment_types এর মধ্যে অসঙ্গতি বা প্রয়োজনীয়তা নির্ধারণ করতে ব্যবহার করা যেতে পারে ( ShipmentModelshipment_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 হতে হবে।

ভিজিট রিকোয়েস্ট

একটি ভিজিটের জন্য অনুরোধ যা একটি যানবাহন দ্বারা করা যেতে পারে: এটির একটি ভূ-অবস্থান রয়েছে (বা দুটি, নীচে দেখুন), খোলার এবং বন্ধের সময়গুলি টাইম উইন্ডো দ্বারা উপস্থাপিত হয় এবং একটি পরিষেবার সময়কাল (যান একবার গাড়িটি পৌঁছানোর পরে তার দ্বারা ব্যয় করা সময়) পণ্য তোলা বা নামানোর জন্য)।

ক্ষেত্র
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 হিসাবে প্রতিক্রিয়াতে রিপোর্ট করা হয়েছে।

শিপমেন্ট মডেল

একটি চালান মডেলে চালানের একটি সেট থাকে যা যানবাহনের একটি সেট দ্বারা সঞ্চালিত হতে হবে, সামগ্রিক খরচ কমিয়ে, যার সমষ্টি:

  • যানবাহন রুট করার খরচ (মোট সময় প্রতি খরচের যোগফল, ভ্রমণের সময় প্রতি খরচ, এবং সমস্ত যানবাহনের উপর নির্দিষ্ট খরচ)।
  • অকার্যকর চালান জরিমানা.
  • চালানের বিশ্বব্যাপী সময়কালের খরচ
ক্ষেত্র
shipments[]

Shipment

চালানের সেট যা অবশ্যই মডেলটিতে সম্পাদন করা উচিত।

vehicles[]

Vehicle

যানবাহনের সেট যা পরিদর্শন করতে ব্যবহার করা যেতে পারে।

global_start_time

Timestamp

মডেলের বিশ্বব্যাপী শুরু এবং শেষ সময়: এই পরিসরের বাইরে কোনো সময় বৈধ বলে বিবেচিত হবে না৷

মডেলের সময়কাল অবশ্যই এক বছরের কম হতে হবে, অর্থাৎ global_end_time এবং global_start_time একে অপরের থেকে 31536000 সেকেন্ডের মধ্যে হতে হবে।

cost_per_*hour ক্ষেত্রগুলি ব্যবহার করার সময়, আপনি কার্যক্ষমতা বাড়াতে এই উইন্ডোটিকে একটি ছোট ব্যবধানে সেট করতে চাইতে পারেন (যেমন, যদি আপনি একটি একক দিনের মডেল করেন, তাহলে আপনাকে সেই দিনে বিশ্বব্যাপী সময় সীমা নির্ধারণ করা উচিত)। সেট না থাকলে, 00:00:00 UTC, জানুয়ারী 1, 1970 (অর্থাৎ সেকেন্ড: 0, ন্যানো: 0) ডিফল্ট হিসাবে ব্যবহৃত হয়।

global_end_time

Timestamp

সেট না থাকলে, 00:00:00 UTC, জানুয়ারী 1, 1971 (অর্থাৎ সেকেন্ড: 31536000, nanos: 0) ডিফল্ট হিসাবে ব্যবহৃত হয়।

global_duration_cost_per_hour

double

সামগ্রিক পরিকল্পনার "গ্লোবাল সময়কাল" হল প্রথমতম কার্যকর শুরুর সময় এবং সমস্ত যানবাহনের সর্বশেষ কার্যকরী শেষ সময়ের মধ্যে পার্থক্য। ব্যবহারকারীরা সেই পরিমাণে প্রতি ঘন্টায় একটি খরচ নির্ধারণ করতে পারে এবং প্রথম দিকে কাজ শেষ করার জন্য অপ্টিমাইজ করার জন্য, উদাহরণস্বরূপ। এই খরচ Shipment.penalty_cost হিসাবে একই ইউনিটে হতে হবে।

duration_distance_matrices[]

DurationDistanceMatrix

মডেলে ব্যবহৃত সময়কাল এবং দূরত্ব ম্যাট্রিক্স নির্দিষ্ট করে। এই ক্ষেত্রটি খালি থাকলে, use_geodesic_distances ক্ষেত্রের মানের উপর নির্ভর করে এর পরিবর্তে Google Maps বা জিওডেসিক দূরত্ব ব্যবহার করা হবে। এটি খালি না হলে, use_geodesic_distances সত্য হতে পারে না এবং duration_distance_matrix_src_tags বা duration_distance_matrix_dst_tags খালি হতে পারে না।

ব্যবহারের উদাহরণ:

  • দুটি অবস্থান আছে: locA এবং locB.
  • 1টি গাড়ি locA তে তার রুট শুরু করে এবং locA এ শেষ করে৷
  • locB এ 1 পিকআপ ভিজিট অনুরোধ।
model {
  vehicles { start_tags: "locA"  end_tags: "locA" }
  shipments { pickups { tags: "locB" } }
  duration_distance_matrix_src_tags: "locA"
  duration_distance_matrix_src_tags: "locB"
  duration_distance_matrix_dst_tags: "locA"
  duration_distance_matrix_dst_tags: "locB"
  duration_distance_matrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • তিনটি অবস্থান রয়েছে: locA, locB এবং locC।
  • ম্যাট্রিক্স "দ্রুত" ব্যবহার করে 1টি গাড়ি locA-তে তার রুট শুরু করে এবং locB-এ শেষ করে।
  • ম্যাট্রিক্স "স্লো" ব্যবহার করে 1টি গাড়ি locB-তে তার রুট শুরু করে এবং locB-এ শেষ করে।
  • ম্যাট্রিক্স "দ্রুত" ব্যবহার করে 1টি গাড়ি locB-তে তার রুট শুরু করে এবং locB-এ শেষ করে।
  • 1 পিকআপ ভিজিট অনুরোধ 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) ম্যাট্রিক্স i-তে অন্যান্য ভিজিট পর্যন্ত duration_distance_matrix_src_tags(j) ট্যাগ সহ ভিজিট থেকে সময়কাল এবং দূরত্ব নির্ধারণ করে।

ট্যাগ 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)) duration_distance_matrix_src_tags(j) ট্যাগ সহ পরিদর্শন থেকে ভ্রমণের সময়কাল (দূরত্ব) সংজ্ঞায়িত করে duration_distance_matrix_src_tags(j) ম্যাট্রিক্সে duration_distance_matrix_dst_tags(k) ট্যাগ সহ ভিজিট করতে i.

ট্যাগ VisitRequest.tags বা Vehicle.start_tags এর সাথে মিলে যায়। একটি প্রদত্ত VisitRequest বা Vehicle অবশ্যই এই ক্ষেত্রের একটি ট্যাগের সাথে মিলবে। মনে রাখবেন যে একটি Vehicle উৎস, গন্তব্য এবং ম্যাট্রিক্স ট্যাগ একই হতে পারে; একইভাবে একটি VisitRequest এর উৎস এবং গন্তব্য ট্যাগ একই হতে পারে। সমস্ত ট্যাগ আলাদা হতে হবে এবং খালি স্ট্রিং হতে পারে না। যদি এই ক্ষেত্রটি খালি না থাকে, তাহলে duration_distance_matrices অবশ্যই খালি থাকবে না।

transition_attributes[]

TransitionAttributes

রূপান্তর বৈশিষ্ট্য মডেল যোগ করা হয়েছে.

shipment_type_incompatibilities[]

ShipmentTypeIncompatibility

বেমানান শিপমেন্ট_টাইপের সেট ( ShipmentTypeIncompatibility দেখুন)।

shipment_type_requirements[]

ShipmentTypeRequirement

shipment_type প্রয়োজনীয়তার সেট ( ShipmentTypeRequirement দেখুন)।

precedence_rules[]

PrecedenceRule

অগ্রাধিকার বিধিগুলির সেট যা মডেলে প্রয়োগ করা আবশ্যক৷

max_active_vehicles

int32

সক্রিয় যানবাহনের সর্বাধিক সংখ্যা সীমাবদ্ধ করে। একটি যানবাহন সক্রিয় থাকে যদি এর রুটটি কমপক্ষে একটি চালান সম্পাদন করে। যেখানে যানবাহনের তুলনায় কম চালক আছে এবং যানবাহনের বহর ভিন্নধর্মী এমন ক্ষেত্রে রুটের সংখ্যা সীমিত করতে এটি ব্যবহার করা যেতে পারে। অপ্টিমাইজেশন তারপর ব্যবহার করার জন্য যানবাহনের সেরা উপসেট নির্বাচন করবে। কঠোরভাবে ইতিবাচক হতে হবে।

সময়কাল দূরত্ব ম্যাট্রিক্স

পরিদর্শন এবং যানবাহন শুরুর অবস্থানগুলি এবং যানবাহনের শেষ অবস্থানগুলি থেকে একটি সময়কাল এবং দূরত্বের ম্যাট্রিক্স নির্দিষ্ট করে৷

ক্ষেত্র
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 মতো অনেকগুলি উপাদান থাকতে হবে।

অগ্রাধিকার নিয়ম

দুটি ইভেন্টের মধ্যে একটি অগ্রাধিকার নিয়ম (প্রতিটি ইভেন্ট হল পিকআপ বা একটি চালানের ডেলিভারি): "দ্বিতীয়" ইভেন্টটি "প্রথম" শুরু হওয়ার পরে কমপক্ষে offset_duration শুরু করতে হবে।

একই (বা সম্পর্কিত) ঘটনাগুলিকে উল্লেখ করতে পারে বেশ কিছু পূর্বসূর্য, যেমন, "A-এর ডেলিভারির পরে B-এর পিকআপ হয়" এবং "B-এর পিক-আপের পরে C-এর পিকআপ ঘটে"।

তদ্ব্যতীত, অগ্রাধিকার শুধুমাত্র তখনই প্রযোজ্য যখন উভয় চালান সঞ্চালিত হয় এবং অন্যথায় উপেক্ষা করা হয়।

ক্ষেত্র
first_is_delivery

bool

"প্রথম" ইভেন্টটি একটি ডেলিভারি কিনা তা নির্দেশ করে৷

second_is_delivery

bool

"দ্বিতীয়" ইভেন্টটি একটি ডেলিভারি কিনা তা নির্দেশ করে৷

offset_duration

Duration

"প্রথম" এবং "দ্বিতীয়" ইভেন্টের মধ্যে অফসেট। এটা নেতিবাচক হতে পারে.

first_index

int32

"প্রথম" ইভেন্টের চালান সূচক। এই ক্ষেত্র নির্দিষ্ট করা আবশ্যক.

second_index

int32

"দ্বিতীয়" ইভেন্টের চালান সূচক। এই ক্ষেত্র নির্দিষ্ট করা আবশ্যক.

শিপমেন্ট রুট

একটি যানবাহনের রুট সময় অক্ষ বরাবর পচনশীল হতে পারে, এভাবে (আমরা অনুমান করি সেখানে 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

পরিশেষে, এখানে ট্রানজিশনের সময় ট্রাভেল, ব্রেক, বিলম্ব এবং অপেক্ষার ব্যবস্থা করা যেতে পারে।

  • তারা ওভারল্যাপ না.
  • বিলম্বটি অনন্য এবং পরের দর্শনের (বা গাড়ির সমাপ্তি) ঠিক আগে একটি সংলগ্ন সময় হতে হবে । সুতরাং, এটির শুরু এবং শেষ সময় জানার জন্য বিলম্বের সময়কাল জানা যথেষ্ট।
  • BREAKS হল সংলগ্ন, অ-ওভারল্যাপিং সময়কাল। প্রতিক্রিয়া প্রতিটি বিরতির শুরুর সময় এবং সময়কাল নির্দিষ্ট করে।
  • ট্রাভেল এবং ওয়েট হল "প্রিম্পটেবল": এই ট্রানজিশনের সময় এগুলি বেশ কয়েকবার ব্যাহত হতে পারে৷ ক্লায়েন্টরা ধরে নিতে পারেন যে ভ্রমণ "যত তাড়াতাড়ি সম্ভব" হয় এবং "অপেক্ষা" বাকি সময় পূরণ করে।

একটি (জটিল) উদাহরণ:

                               TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
  ||     |       |           |       |           |         |         ||
  ||  T  |   B   |     T     |       |     B     |         |    D    ||
  ||  r  |   r   |     r     |   W   |     r     |    W    |    e    ||
  ||  a  |   e   |     a     |   a   |     e     |    a    |    l    ||
  ||  v  |   a   |     v     |   i   |     a     |    i    |    a    ||
  ||  e  |   k   |     e     |   t   |     k     |    t    |    y    ||
  ||  l  |       |     l     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
ক্ষেত্র
vehicle_index

int32

যানবাহন রুট সম্পাদন করছে, ShipmentModel উৎসে তার সূচক দ্বারা চিহ্নিত করা হয়েছে।

vehicle_label

string

এই রুটটি সম্পাদনকারী গাড়ির লেবেল, ShipmentModel.vehicles(vehicle_index).label , যদি নির্দিষ্ট করা থাকে।

vehicle_start_time

Timestamp

গাড়িটি তার রুট শুরু করার সময়।

vehicle_end_time

Timestamp

গাড়িটি তার রুট শেষ করার সময়।

visits[]

Visit

একটি রুট প্রতিনিধিত্ব করে ভিজিট ক্রম আদেশ. ভিজিট[i] হল রুটের i-তম ভিজিট। এই ক্ষেত্রটি খালি থাকলে, গাড়িটিকে অব্যবহৃত হিসাবে বিবেচনা করা হয়।

transitions[]

Transition

রুটের জন্য ট্রানজিশনের অর্ডার করা তালিকা।

has_traffic_infeasibilities

bool

যখন OptimizeToursRequest.consider_road_traffic , সত্যে সেট করা হয়, তখন এই ক্ষেত্রটি নির্দেশ করে যে ট্র্যাফিক-ভিত্তিক ভ্রমণের সময়কালের অনুমান ব্যবহার করে রুটের সময়ের অসঙ্গতিগুলি পূর্বাভাস দেওয়া হয়৷ ট্রাফিক-সামঞ্জস্যপূর্ণ ভ্রমণ সম্পূর্ণ করার জন্য অপর্যাপ্ত সময় থাকতে পারে, বিলম্ব এবং ভিজিটের মধ্যে বিরতি, প্রথম দর্শনের আগে, বা শেষ দর্শনের পরে, যদিও এখনও পরিদর্শন এবং গাড়ির সময় জানালাকে সন্তুষ্ট করে। যেমন,

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

ট্রাফিকের কারণে ট্রাভেল টাইম travel_duration(previous_visit, next_visit) এর অনুমান বৃদ্ধির কারণে নেক্সট_ভিসিটে আগমন সম্ভবত বর্তমান সময় উইন্ডোর চেয়ে পরে ঘটবে। এছাড়াও, ভ্রমণের সময় অনুমান বৃদ্ধি এবং পরিদর্শন বা বিরতির সময় উইন্ডো সীমাবদ্ধতার কারণে একটি বিরতি একটি দর্শনের সাথে ওভারল্যাপ করতে বাধ্য হতে পারে।

route_polyline

EncodedPolyline

রুটের এনকোড করা পলিলাইন উপস্থাপনা। OptimizeToursRequest.populate_polylines সত্যে সেট করা থাকলেই এই ক্ষেত্রটি পপুলেট করা হয়।

breaks[]

Break

এই রুটে চলা গাড়ির জন্য নির্ধারিত বিরতি। breaks ক্রমটি সময়ের ব্যবধানের প্রতিনিধিত্ব করে, প্রতিটি সংশ্লিষ্ট start_time থেকে শুরু হয় এবং স্থায়ী duration সেকেন্ড।

metrics

AggregatedMetrics

এই রুটের সময়কাল, দূরত্ব এবং লোড মেট্রিক্স। AggregatedMetrics এর ক্ষেত্রগুলি সমস্ত ShipmentRoute.transitions বা ShipmentRoute.visits এর উপর নির্ভর করে, প্রসঙ্গের উপর নির্ভর করে।

route_costs

map<string, double>

রুটের খরচ, খরচ-সম্পর্কিত অনুরোধ ক্ষেত্র দ্বারা বিভক্ত। কীগুলি হল প্রোটো পাথ, ইনপুট OptimizeToursRequest-এর সাপেক্ষে, যেমন "model.shipments.pickups.cost", এবং মানগুলি হল সংশ্লিষ্ট খরচ ক্ষেত্রের দ্বারা উত্পন্ন মোট খরচ, সমগ্র রুট জুড়ে একত্রিত৷ অন্য কথায়, খরচ ["model.shipments.pickups.cost"] হল রুটের সমস্ত পিকআপ খরচের সমষ্টি৷ মডেলে সংজ্ঞায়িত সমস্ত খরচ এখানে বিস্তারিতভাবে রিপোর্ট করা হয়েছে ট্রানজিশন অ্যাট্রিবিউটের সাথে সম্পর্কিত খরচগুলি বাদ দিয়ে যেগুলি শুধুমাত্র 2022/01 হিসাবে সমষ্টিগতভাবে রিপোর্ট করা হয়েছে।

route_total_cost

double

রুটের মোট খরচ। খরচ ম্যাপে সমস্ত খরচের যোগফল।

বিরতি

একটি বিরতির সম্পাদন প্রতিনিধিত্বকারী ডেটা।

ক্ষেত্র
start_time

Timestamp

বিরতির শুরুর সময়।

duration

Duration

বিরতির সময়কাল।

এনকোডেড পলিলাইন

একটি পলিলাইনের এনকোড করা উপস্থাপনা। পলিলাইন এনকোডিং সম্পর্কে আরও তথ্য এখানে পাওয়া যাবে: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding

ক্ষেত্র
points

string

পলিলাইনের এনকোডেড পয়েন্ট প্রতিনিধিত্বকারী স্ট্রিং।

উত্তরণ

রুটে দুটি ইভেন্টের মধ্যে স্থানান্তর। ShipmentRoute বর্ণনা দেখুন।

যদি গাড়ির একটি start_location এবং/অথবা end_location না থাকে, তাহলে সংশ্লিষ্ট ভ্রমণের মেট্রিক্স 0 হয়।

ক্ষেত্র
travel_duration

Duration

এই পরিবর্তনের সময় ভ্রমণের সময়কাল।

travel_distance_meters

double

স্থানান্তরের সময় দূরত্ব ভ্রমণ।

traffic_info_unavailable

bool

যখন OptimizeToursRequest.consider_road_traffic এর মাধ্যমে ট্রাফিকের অনুরোধ করা হয়, এবং Transition জন্য ট্র্যাফিক তথ্য পুনরুদ্ধার করা যায় না, তখন এই বুলিয়ান সত্যে সেট করা হয়। এটি অস্থায়ী হতে পারে (রিয়েলটাইম ট্র্যাফিক সার্ভারে বিরল হিক্কা) বা স্থায়ী (এই অবস্থানের জন্য কোনও ডেটা নেই)।

delay_duration

Duration

এই ট্রানজিশনে প্রযোজ্য বিলম্বের সময়কালের যোগফল। যদি থাকে, বিলম্বটি পরবর্তী ইভেন্টের (ভিজিট বা গাড়ির সমাপ্তি) আগে ঠিক delay_duration শুরু হয়। TransitionAttributes.delay দেখুন।

break_duration

Duration

এই পরিবর্তনের সময় বিরতির সময়কালের যোগফল, যদি থাকে। প্রতিটি বিরতির শুরুর সময় এবং সময়কাল সম্পর্কে বিশদ বিবরণ ShipmentRoute.breaks এ সংরক্ষণ করা হয়।

wait_duration

Duration

এই ট্রানজিশনের সময় অপেক্ষায় কেটেছে। অপেক্ষার সময়কাল অলস সময়ের সাথে মিলে যায় এবং বিরতির সময় অন্তর্ভুক্ত করে না। এছাড়াও মনে রাখবেন যে এই অপেক্ষার সময়টিকে কয়েকটি অ-সংলগ্ন বিরতিতে বিভক্ত করা যেতে পারে।

total_duration

Duration

ট্রানজিশনের মোট সময়কাল, সুবিধার জন্য প্রদত্ত। এটি সমান:

  • পরবর্তী ভিজিট start_time (বা vehicle_end_time যদি এটি শেষ ট্রানজিশন হয়) - এই ট্রানজিশনের start_time ;
  • ShipmentRoute.has_traffic_infeasibilities মিথ্যা হলে, নিম্নলিখিতগুলি অতিরিক্ত ধারণ করে: `total_duration = ভ্রমণ_সময়কাল + বিলম্ব_সময়কাল
  • বিরতি_কাল + অপেক্ষার_কাল'।
start_time

Timestamp

এই রূপান্তরের শুরুর সময়।

route_polyline

EncodedPolyline

রূপান্তরের সময় অনুসরণ করা রুটের এনকোডেড পলিলাইন উপস্থাপনা। populate_transition_polylines সত্যে সেট করা থাকলেই এই ক্ষেত্রটি পপুলেট করা হয়।

vehicle_loads

map<string, VehicleLoad >

এই ট্রানজিশনের সময় যানবাহন লোড হয়, প্রতিটি প্রকারের জন্য যা হয় এই গাড়ির Vehicle.load_limits তে প্রদর্শিত হয়, অথবা এই রুটে সম্পাদিত কিছু চালানে নন-জিরো Shipment.load_demands আছে৷

প্রথম স্থানান্তরের সময় লোডগুলি হল গাড়ির রুটের শুরুর লোড। তারপর, প্রতিটি ভিজিটের পরে, ভিজিটটি পিকআপ বা ডেলিভারি ছিল কিনা তার উপর নির্ভর করে, পরবর্তী ট্রানজিশনের লোড পেতে ভিজিটের load_demands হয় যোগ করা হয় বা বিয়োগ করা হয়।

যানবাহন লোড

একটি প্রদত্ত প্রকারের জন্য রুট বরাবর কিছু সময়ে গাড়ির প্রকৃত লোড রিপোর্ট করে ( 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.label এর কপি, যদি Shipment উল্লেখ করা থাকে।

visit_label

string

সংশ্লিষ্ট VisitRequest.label এর অনুলিপি, যদি VisitRequest এ উল্লেখ করা থাকে।

শিপমেন্ট টাইপ অসঙ্গতি

তাদের শিপমেন্ট_টাইপের উপর নির্ভর করে চালানের মধ্যে অসঙ্গতিগুলি নির্দিষ্ট করে৷ অসঙ্গতি মোডের উপর ভিত্তি করে একই রুটে অসামঞ্জস্যপূর্ণ চালানের উপস্থিতি সীমাবদ্ধ।

ক্ষেত্র
types[]

string

বেমানান প্রকারের তালিকা। তালিকাভুক্তদের মধ্যে বিভিন্ন shipment_types থাকা দুটি চালান হল "বেমানান"৷

incompatibility_mode

IncompatibilityMode

অসঙ্গতিতে মোড প্রয়োগ করা হয়েছে।

অসঙ্গতি মোড

একই রুটে অসামঞ্জস্যপূর্ণ চালানের উপস্থিতি কীভাবে সীমাবদ্ধ থাকে তা নির্ধারণ করে।

এনামস
INCOMPATIBILITY_MODE_UNSPECIFIED অনির্দিষ্ট অসঙ্গতি মোড। এই মান ব্যবহার করা উচিত নয়.
NOT_PERFORMED_BY_SAME_VEHICLE এই মোডে, অসামঞ্জস্যপূর্ণ ধরনের দুটি চালান একই যানবাহন ভাগ করতে পারে না।
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY অসঙ্গতি মোডের সাথে বেমানান প্রকারের দুটি চালানের জন্য:

  • যদি উভয়ই শুধুমাত্র পিকআপ হয় (কোনও ডেলিভারি নেই) বা শুধুমাত্র ডেলিভারি (কোন পিকআপ নেই), তবে তারা একই গাড়ি শেয়ার করতে পারবে না।
  • যদি একটি চালানের একটি ডেলিভারি এবং অন্যটি একটি পিকআপ থাকে, তবে দুটি চালান একই গাড়ি ভাগ করতে পারে যদি পূর্ববর্তী চালানটি পরবর্তীটি তোলার আগে বিতরণ করা হয়।

চালানের প্রকারের প্রয়োজনীয়তা

শিপমেন্ট_টাইপের উপর ভিত্তি করে চালানের মধ্যে প্রয়োজনীয়তা নির্দিষ্ট করে। প্রয়োজনীয়তার স্পেসিফিকেশন প্রয়োজন মোড দ্বারা সংজ্ঞায়িত করা হয়.

ক্ষেত্র
required_shipment_type_alternatives[]

string

dependent_shipment_types দ্বারা প্রয়োজনীয় বিকল্প চালানের প্রকারের তালিকা।

dependent_shipment_types[]

string

dependent_shipment_types ফিল্ডে একটি টাইপ সহ সমস্ত চালানের জন্য একই রুটে পরিদর্শন করার জন্য required_shipment_type_alternatives টাইপের কমপক্ষে একটি চালান প্রয়োজন।

দ্রষ্টব্য: প্রয়োজনীয়তার চেইন যেমন একটি shipment_type নিজের উপর নির্ভর করে অনুমোদিত নয়।

requirement_mode

RequirementMode

প্রয়োজনে মোড প্রয়োগ করা হয়েছে।

প্রয়োজন মোড

একটি রুটে নির্ভরশীল শিপমেন্টের উপস্থিতি সংজ্ঞায়িত করে।

এনামস
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 আগের মতোই, "নির্ভরশীল" চালানগুলি ছাড়া তাদের ডেলিভারির সময় তাদের গাড়িতে একটি "প্রয়োজনীয়" চালান থাকতে হবে৷

স্কিপড শিপমেন্ট

একটি সমাধানে অকার্যকর চালানের বিবরণ নির্দিষ্ট করে। তুচ্ছ ক্ষেত্রে এবং/অথবা যদি আমরা এড়িয়ে যাওয়ার কারণ শনাক্ত করতে পারি, আমরা এখানে কারণটি প্রতিবেদন করি৷

ক্ষেত্র
index

int32

সূচকটি ShipmentModel উৎসে চালানের সূচকের সাথে মিলে যায়।

label

string

সংশ্লিষ্ট Shipment.label এর কপি, যদি Shipment উল্লেখ করা থাকে।

reasons[]

Reason

কারণগুলির একটি তালিকা যা ব্যাখ্যা করে যে কেন চালানটি এড়ানো হয়েছিল৷ Reason উপরে মন্তব্য দেখুন. যদি আমরা বুঝতে না পারি যে কেন একটি চালান এড়িয়ে গেছে, কারণগুলি সেট করা হবে না।

কারণ

যদি আমরা ব্যাখ্যা করতে পারি যে কেন চালানটি এড়িয়ে গেছে, কারণগুলি এখানে তালিকাভুক্ত করা হবে৷ সব যানবাহনের জন্য কারণ একই না হলে, reason 1টির বেশি উপাদান থাকবে। একটি এড়িয়ে যাওয়া চালানের ডুপ্লিকেট কারণ থাকতে পারে না, যেমন example_vehicle_index ছাড়া সব ক্ষেত্র একই। উদাহরণ:

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

এড়িয়ে যাওয়া চালানটি সমস্ত যানবাহনের সাথে বেমানান৷ কারণগুলি সমস্ত যানবাহনের জন্য আলাদা হতে পারে তবে কমপক্ষে একটি গাড়ির "অ্যাপল" ক্ষমতা অতিক্রম করবে (যান 1 সহ), কমপক্ষে একটি গাড়ির "পিয়ার্স" ক্ষমতা অতিক্রম করবে (যান 3 সহ) এবং কমপক্ষে একটি গাড়ির দূরত্ব সীমা হবে অতিক্রম করা (যান 1 সহ)

ক্ষেত্র
code

Code

কোডের মন্তব্য পড়ুন।

example_exceeded_capacity_type

string

যদি কারণ কোডটি হয় DEMAND_EXCEEDS_VEHICLE_CAPACITY , নথিভুক্ত একটি ক্ষমতা প্রকার যা অতিক্রম করেছে৷

example_vehicle_index

int32

যদি কারণটি চালান-গাড়ির অসঙ্গতির সাথে সম্পর্কিত হয়, তাহলে এই ক্ষেত্রটি একটি প্রাসঙ্গিক গাড়ির সূচক প্রদান করে।

কোড

কারণের ধরন সনাক্তকারী কোড। এখানে আদেশ অর্থহীন। বিশেষ করে, এটি কোন ইঙ্গিত দেয় না যে একটি প্রদত্ত কারণ সমাধানে অন্যটির সামনে উপস্থিত হবে কিনা, যদি উভয়ই প্রযোজ্য হয়।

এনামস
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 m/s (প্রায় 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 ক্ষেত্রটি খালি নয় এবং এই যানটি এর অন্তর্গত নয়।

টাইম উইন্ডো

সময় জানালা একটি ইভেন্টের সময়কে সীমাবদ্ধ করে, যেমন একটি পরিদর্শনে আগমনের সময়, বা একটি গাড়ির শুরু এবং শেষের সময়৷

হার্ড টাইম উইন্ডো বাউন্ড, start_time এবং end_time , ইভেন্টের প্রথম এবং সর্বশেষ সময় প্রয়োগ করে, যেমন start_time <= event_time <= end_time । সফ্ট টাইম উইন্ডো লোয়ার বাউন্ড, soft_start_time , soft_start_time এর কতক্ষণ আগে ইভেন্টটি ঘটে তার সমানুপাতিক খরচ বহন করে soft_start_time এ বা তার পরে ঘটতে ইভেন্টের জন্য একটি পছন্দ প্রকাশ করে। সফ্ট টাইম উইন্ডো আপার বাউন্ড, soft_end_time , soft_end_time এর কতক্ষণ পরে ইভেন্টটি ঘটবে তার সমানুপাতিক খরচ বহন করে soft_end_time এ বা তার আগে ঘটনা ঘটার জন্য একটি পছন্দ প্রকাশ করে। start_time , end_time , soft_start_time এবং soft_end_time বিশ্বব্যাপী সময় সীমার মধ্যে হওয়া উচিত ( ShipmentModel.global_start_time এবং ShipmentModel.global_end_time দেখুন) এবং সম্মান করা উচিত:

  0 <= `start_time` <= `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 প্রযোজ্য হতে পারে: সেই ক্ষেত্রে, সমস্ত অতিরিক্ত খরচ যোগ হয় এবং কঠোরতম সীমাবদ্ধতা বা সীমা প্রযোজ্য হয় (প্রাকৃতিক "AND" শব্দার্থবিদ্যা অনুসরণ করে)।

ক্ষেত্র
src_tag

string

ট্যাগগুলি (src->dst) ট্রানজিশনের সেট সংজ্ঞায়িত করে এই বৈশিষ্ট্যগুলি প্রযোজ্য৷

একটি উৎস পরিদর্শন বা গাড়ির স্টার্ট মিলছে যদি এর VisitRequest.tags বা Vehicle.start_tags হয় src_tag থাকে বা excluded_src_tag থাকে না (এই দুটি ক্ষেত্রের মধ্যে কোনটি খালি নয় তার উপর নির্ভর করে)।

excluded_src_tag

string

src_tag দেখুন। সঠিকভাবে src_tag এবং excluded_src_tag এর মধ্যে একটি অবশ্যই খালি নয়।

dst_tag

string

একটি গন্তব্য ভিজিট বা যানবাহনের সমাপ্তি মিলছে যদি এর VisitRequest.tags বা Vehicle.end_tags হয় dst_tag থাকে বা excluded_dst_tag থাকে না (এই দুটি ক্ষেত্রের কোনটি খালি নয় তার উপর নির্ভর করে)।

excluded_dst_tag

string

dst_tag দেখুন। ঠিক dst_tag এবং excluded_dst_tag মধ্যে একটি অবশ্যই খালি নয়।

cost

double

এই রূপান্তর সম্পাদনের জন্য একটি খরচ নির্দিষ্ট করে৷ এটি মডেলের অন্যান্য সমস্ত খরচের মতো একই ইউনিটে এবং নেতিবাচক হওয়া উচিত নয়৷ এটি অন্যান্য সমস্ত বিদ্যমান খরচের উপরে প্রয়োগ করা হয়।

cost_per_kilometer

double

এই স্থানান্তরটি সম্পাদন করার সময় ভ্রমণ করা দূরত্বের জন্য প্রযোজ্য প্রতি কিলোমিটার খরচ নির্দিষ্ট করে৷ এটি যানবাহনে নির্দিষ্ট করা যেকোনো Vehicle.cost_per_kilometer পর্যন্ত যোগ করে।

distance_limit

DistanceLimit

এই রূপান্তরটি সম্পাদন করার সময় ভ্রমণ করা দূরত্বের একটি সীমা নির্দিষ্ট করে৷

2021/06 অনুযায়ী, শুধুমাত্র নরম সীমা সমর্থিত।

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 শেষ করে। যদি নির্দিষ্ট না করা থাকে তাহলে গাড়ির ShipmentRoute তার শেষ VisitRequest সম্পূর্ণ করার সাথে সাথেই শেষ হয়ে যায়। শিপমেন্ট মডেলের সময়কাল এবং দূরত্ব ম্যাট্রিক্স থাকলে, 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 সমষ্টি।travel_duration।

route_distance_limit

DistanceLimit

গাড়ির রুটের মোট দূরত্বে সীমা প্রযোজ্য। একটি প্রদত্ত OptimizeToursResponse এ, রুটের দূরত্ব হল এর সমস্ত transitions.travel_distance_meters সমষ্টি।travel_distance_meters।

extra_visit_duration_for_visit_type

map<string, Duration >

visit_types স্ট্রিং থেকে সময়কাল পর্যন্ত একটি মানচিত্র নির্দিষ্ট করে। সময়কাল হল VisitRequest.duration এর পাশাপাশি নির্দিষ্ট visit_types সহ ভিজিট করার সময়। এই অতিরিক্ত ভিজিট সময়কাল খরচ যোগ করে যদি 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 দেখুন।

সময়সীমা

একটি গাড়ির রুটের সর্বাধিক সময়কাল সংজ্ঞায়িত একটি সীমা৷ এটা শক্ত বা নরম হতে পারে।

যখন একটি সফ্ট লিমিট ফিল্ড সংজ্ঞায়িত করা হয়, তখন নরম সর্বোচ্চ থ্রেশহোল্ড এবং এর সাথে সম্পর্কিত খরচ উভয়কেই একসাথে সংজ্ঞায়িত করতে হবে।

ক্ষেত্র
max_duration

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)

খরচ nonnegative হতে হবে.

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

খরচ nonnegative হতে হবে.

লোডসীমা

একটি গাড়িতে প্রযোজ্য একটি লোড সীমা সংজ্ঞায়িত করে, যেমন "এই ট্রাকটি শুধুমাত্র 3500 কেজি পর্যন্ত বহন করতে পারে"। load_limits দেখুন।

ক্ষেত্র
soft_max_load

int64

লোড একটি নরম সীমা. cost_per_unit_above_soft_max 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

ট্রাভেলমোড

যানবাহন দ্বারা ব্যবহার করা যেতে পারে যা ভ্রমণ মোড.

এগুলি Google মানচিত্র প্ল্যাটফর্ম রুট পছন্দের API ভ্রমণ মোডগুলির একটি উপসেট হওয়া উচিত, দেখুন: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode

এনামস
TRAVEL_MODE_UNSPECIFIED অনির্দিষ্ট ভ্রমণ মোড, DRIVING এর সমতুল্য।
DRIVING ড্রাইভিং দিকনির্দেশের সাথে সম্পর্কিত ভ্রমণ মোড (গাড়ি, ...)।
WALKING হাঁটার দিকনির্দেশের সাথে সম্পর্কিত ভ্রমণ মোড।

আনলোডিং নীতি

একটি যানবাহন কিভাবে আনলোড করা যেতে পারে তার নীতি। শুধুমাত্র একটি পিকআপ এবং একটি ডেলিভারি উভয়ই চালানের ক্ষেত্রে প্রযোজ্য৷

অন্যান্য চালানগুলি unloading_policy ছাড়া রুটের যে কোনও জায়গায় বিনামূল্যে হতে পারে৷

এনামস
UNLOADING_POLICY_UNSPECIFIED অনির্দিষ্ট আনলোডিং নীতি; ডেলিভারি শুধুমাত্র তাদের সংশ্লিষ্ট পিক আপ পরে ঘটতে হবে.
LAST_IN_FIRST_OUT ডেলিভারি পিকআপের বিপরীত ক্রমে ঘটতে হবে
FIRST_IN_FIRST_OUT ডেলিভারি পিকআপের মতো একই ক্রমে ঘটতে হবে

ওয়েপয়েন্ট

একটি ওয়েপয়েন্ট এনক্যাপসুলেট করে। ওয়েপয়েন্টগুলি ভিজিট রিকোয়েস্টের আগমন এবং প্রস্থানের অবস্থানগুলি এবং যানবাহনের শুরু এবং শেষের অবস্থানগুলি চিহ্নিত করে৷

ক্ষেত্র
side_of_road

bool

ঐচ্ছিক। ইঙ্গিত করে যে এই ওয়েপয়েন্টের অবস্থানটি রাস্তার একটি নির্দিষ্ট পাশে গাড়ি থামানোর জন্য একটি পছন্দকে বোঝানো হয়েছে৷ আপনি যখন এই মানটি সেট করবেন, তখন রুটটি লোকেশনের মধ্য দিয়ে যাবে যাতে গাড়িটি রাস্তার পাশে থামতে পারে যে অবস্থানটি রাস্তার মাঝখানের দিকে পক্ষপাতদুষ্ট। এই বিকল্পটি 'ওয়াকিং' ভ্রমণ মোডের জন্য কাজ করে না।

ইউনিয়ন ক্ষেত্রের location_type । একটি অবস্থান প্রতিনিধিত্ব করার বিভিন্ন উপায়. location_type নিম্নলিখিতগুলির মধ্যে একটি হতে পারে:
location

Location

একটি ঐচ্ছিক শিরোনাম সহ ভৌগলিক স্থানাঙ্ক ব্যবহার করে নির্দিষ্ট করা একটি বিন্দু৷

place_id

string

ওয়েপয়েন্টের সাথে যুক্ত POI প্লেস আইডি।