Package google.maps.routeoptimization.v1

الفهرس

RouteOptimization

خدمة لتحسين جولات المركبات

صلاحية أنواع معيّنة من الحقول:

  • google.protobuf.Timestamp
    • يتم عرض الأوقات بتنسيق Unix: عدد الثواني منذ 1970-01-01T00:00:00+00:00.
    • يجب أن تكون الثواني في النطاق [0, 253402300799]، أي في النطاق [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
    • يجب إلغاء ضبط قيمة "نانو ثانية" أو ضبطها على 0.
  • google.protobuf.Duration
    • يجب أن تكون الثواني في النطاق [0, 253402300799]، أي في النطاق [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
    • يجب إلغاء ضبط قيمة "نانو ثانية" أو ضبطها على 0.
  • google.type.LatLng
    • يجب أن يكون خط العرض ضمن النطاق [-90.0, 90.0].
    • يجب أن يكون خط الطول ضمن النطاق [-180.0, 180.0].
    • يجب أن تكون قيمة خط العرض أو خط الطول أو كليهما غير صفرية.
BatchOptimizeTours

rpc BatchOptimizeTours(BatchOptimizeToursRequest) returns (Operation)

تحسين جولات المركبة لرسالة واحدة أو أكثر OptimizeToursRequest كمجموعة

هذه الطريقة هي عملية طويلة الأمد (LRO). تتم قراءة مدخلات التحسين (رسائل OptimizeToursRequest) ومخرجاته (رسائل OptimizeToursResponse) وكتابتها في Cloud Storage بالتنسيق الذي يحدّده المستخدم. على غرار طريقة OptimizeTours، تحتوي كل OptimizeToursRequest على ShipmentModel وتعرض OptimizeToursResponse تحتوي على حقول ShipmentRoute، وهي مجموعة من المسارات التي يجب أن تسلكها المركبات لخفض التكلفة الإجمالية.

يمكن للمستخدم إجراء عملية بحث operations.get للتحقّق من حالة عملية LRO:

إذا كانت قيمة الحقل done في LRO هي false، يعني ذلك أنّه لا يزال يتمّ تنفيذ طلب واحد على الأقلّ، وقد اكتملت طلبات أخرى بنجاح وتتوفّر نتائجها في Cloud Storage.

إذا كان الحقل done في عملية LRO صحيحًا، يعني ذلك أنّه تمت معالجة جميع الطلبات، وستكون نتائج الطلبات التي تمت معالجتها بنجاح متاحة في Cloud Storage، بينما لن تكون نتائج الطلبات التي تعذّر تنفيذها متاحة في Cloud Storage. إذا تم ضبط الحقل error في عملية LRO، يعني ذلك أنّه يتضمّن الخطأ الناتج عن أحد الطلبات التي تعذّر تنفيذها.

نطاقات الأذونات

يجب توفير نطاق OAuth التالي:

  • https://www.googleapis.com/auth/cloud-platform
أذونات "إدارة الهوية وإمكانية الوصول"

يتطلّب الإذن التالي في إدارة الهوية وإمكانية الوصول (IAM) على مورد parent:

  • routeoptimization.operations.create

لمزيد من المعلومات، يُرجى الاطّلاع على مستندات "إدارة الهوية وإمكانية الوصول".

OptimizeTours

rpc OptimizeTours(OptimizeToursRequest) returns (OptimizeToursResponse)

ترسل هذه الطريقة OptimizeToursRequest يحتوي على ShipmentModel وتعرض OptimizeToursResponse يحتوي على ShipmentRoute، وهي مجموعة من المسارات التي يجب أن تسلكها المركبات لتقليل التكلفة الإجمالية.

يتألف نموذج ShipmentModel بشكل أساسي من Shipment يجب تنفيذها وVehicle يمكن استخدامها لنقل Shipment. تُسند ShipmentRoute Shipment إلى Vehicle. وعلى وجه التحديد، يتم تخصيص سلسلة من Visit لكل مركبة، حيث يتوافق Visit مع VisitRequest، وهو عملية استلام أو تسليم Shipment.

الهدف هو توفير عملية ربط بين ShipmentRoute وVehicle تقلّل من التكلفة الإجمالية التي تتضمّن العديد من المكوّنات المحدّدة في ShipmentModel.

نطاقات الأذونات

يجب توفير نطاق OAuth التالي:

  • https://www.googleapis.com/auth/cloud-platform
أذونات "إدارة الهوية وإمكانية الوصول"

يتطلّب الإذن التالي في إدارة الهوية وإمكانية الوصول (IAM) على مورد parent:

  • routeoptimization.locations.use

لمزيد من المعلومات، يُرجى الاطّلاع على مستندات "إدارة الهوية وإمكانية الوصول".

OptimizeToursLongRunning

rpc OptimizeToursLongRunning(OptimizeToursRequest) returns (Operation)

هذا النوع هو صيغة مختلفة من طريقة OptimizeTours مصمّمة لعمليات التحسين التي تتضمّن قيم مهلة كبيرة، ويجب تفضيلها على طريقة OptimizeTours لعمليات التحسين التي تستغرق أكثر من بضع دقائق.

سيكون لعملية long-running operation (عملية طويلة الأمد) التي يتم إرجاعها اسم بالتنسيق <parent>/operations/<operation_id> ويمكن استخدامها لتتبُّع تقدّم عملية الحساب. نوع الحقل metadata هو OptimizeToursLongRunningMetadata. نوع الحقل response هو OptimizeToursResponse، في حال نجاح العملية.

تجريبية: يُرجى الاطّلاع على https://developers.google.com/maps/tt/route-optimization/experimental/otlr/make-request لمزيد من التفاصيل.

نطاقات الأذونات

يجب توفير نطاق OAuth التالي:

  • https://www.googleapis.com/auth/cloud-platform
أذونات "إدارة الهوية وإمكانية الوصول"

يتطلّب الإذن التالي في إدارة الهوية وإمكانية الوصول (IAM) على مورد parent:

  • routeoptimization.operations.create

لمزيد من المعلومات، يُرجى الاطّلاع على مستندات "إدارة الهوية وإمكانية الوصول".

OptimizeToursUri

rpc OptimizeToursUri(OptimizeToursUriRequest) returns (Operation)

هذه هي صيغة مختلفة من طريقة OptimizeToursLongRunning مصمّمة لعمليات التحسين التي تتضمّن قيم مهلة كبيرة وأحجام إدخال/إخراج كبيرة.

يحدّد العميل معرّف الموارد المنتظم (URI) الخاص بـ OptimizeToursRequest المخزّن في Google Cloud Storage، ويكتب الخادم OptimizeToursResponse إلى معرّف الموارد المنتظم (URI) الخاص بـ Google Cloud Storage الذي يحدّده العميل.

يجب تفضيل هذه الطريقة على طريقة OptimizeTours للتحسينات التي تستغرق أكثر من بضع دقائق وأحجام الإدخال/الإخراج التي تزيد عن 8 ميغابايت، على الرغم من أنّه يمكن استخدامها أيضًا للتحسينات الأقصر والأصغر.

سيكون لعملية long-running operation (عملية طويلة الأمد) التي يتم إرجاعها اسم بالتنسيق <parent>/operations/<operation_id> ويمكن استخدامها لتتبُّع تقدّم عملية الحساب. نوع الحقل metadata هو OptimizeToursLongRunningMetadata. نوع الحقل response هو OptimizeToursUriResponse، في حال نجاح العملية.

تجريبية: يُرجى الاطّلاع على https://developers.google.com/maps/tt/route-optimization/experimental/otlr/make-request لمزيد من التفاصيل.

نطاقات الأذونات

يجب توفير نطاق OAuth التالي:

  • https://www.googleapis.com/auth/cloud-platform
أذونات "إدارة الهوية وإمكانية الوصول"

يتطلّب الإذن التالي في إدارة الهوية وإمكانية الوصول (IAM) على مورد parent:

  • routeoptimization.operations.create

لمزيد من المعلومات، يُرجى الاطّلاع على مستندات "إدارة الهوية وإمكانية الوصول".

AggregatedMetrics

المقاييس المجمّعة لـ 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>

الحد الأقصى للحِمل الذي تم تحقيقه على مدار المسار بأكمله (أو الحل)، لكل كمية في هذا المسار (أو الحل)، ويتم احتسابه على أنّه الحد الأقصى لجميع Transition.vehicle_loads (أو ShipmentRoute.metrics.max_loads.

performed_mandatory_shipment_count

int32

عدد عمليات الشحن الإلزامية التي تم تنفيذها

تجريبي: قد يتغيّر سلوك هذا الحقل أو يتوقف عن الوجود في المستقبل.

performed_shipment_penalty_cost_sum

double

مجموع Shipment.penalty_cost لعمليات الشحن التي تم تنفيذها.

تجريبي: قد يتغيّر سلوك هذا الحقل أو يتوقف عن الوجود في المستقبل.

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، ويجب أن تستوفي BreakRequest هذه BreakRule جميعها. اطّلِع على FrequencyConstraint.

BreakRequest

يجب معرفة تسلسل فترات الاستراحة (أي عددها وترتيبها) التي تنطبق على كل مركبة مسبقًا، وتحدّد الرموز BreakRequest المتكررة هذا التسلسل، بالترتيب الذي يجب أن تحدث به، وقد تتداخل الفترات الزمنية (earliest_start_time / latest_start_time)، ولكن يجب أن تكون متوافقة مع الترتيب (يتم التحقّق من ذلك).

الحقول
earliest_start_time

Timestamp

الحقل مطلوب. الحدّ الأدنى (شامل) لبداية فترة الاستراحة.

latest_start_time

Timestamp

الحقل مطلوب. الحدّ الأعلى (شامل) لوقت بدء الاستراحة

min_duration

Duration

الحقل مطلوب. تمثّل هذه السمة الحدّ الأدنى لمدة الاستراحة. يجب أن تكون موجبة.

FrequencyConstraint

يمكن للمستخدم فرض قيود إضافية على معدّل تكرار الفواصل الإعلانية ومدتها المحدّدة أعلاه، وذلك من خلال فرض حدّ أدنى لمعدّل تكرار الفواصل الإعلانية، مثل "يجب أن يكون هناك فاصل إعلاني لمدة ساعة واحدة على الأقل كل 12 ساعة". بافتراض أنّه يمكن تفسير ذلك على أنّه "خلال أي فترة زمنية متغيرة مدتها 12 ساعة، يجب أن يكون هناك استراحة واحدة على الأقل لمدة ساعة واحدة على الأقل"، سيتم تحويل هذا المثال إلى FrequencyConstraint التالي:

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

سيراعي توقيت فترات الاستراحة ومدتها في الحلّ جميع هذه القيود، بالإضافة إلى الفترات الزمنية والمدد الدنيا المحدّدة مسبقًا في BreakRequest.

قد ينطبق FrequencyConstraint في الواقع على فواصل إعلانية غير متتالية. على سبيل المثال، يلتزم الجدول الزمني التالي بالمثال "ساعة واحدة كل 12 ساعة":

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
الحقول
min_break_duration

Duration

الحقل مطلوب. الحدّ الأدنى لمدة الاستراحة لهذا القيد. غير سالب اطّلِع على وصف FrequencyConstraint.

max_inter_break_duration

Duration

الحقل مطلوب. الحدّ الأقصى المسموح به لأي فاصل زمني في المسار لا يتضمّن استراحة لمدة duration >= min_break_duration على الأقل يجب أن تكون موجبة.

DataFormat

تنسيقات البيانات لملفات الإدخال والإخراج

عمليات التعداد
DATA_FORMAT_UNSPECIFIED قيمة غير صالحة، يجب ألا يكون التنسيق UNSPECIFIED.
JSON JavaScript Object Notation
PROTO_TEXT تنسيق نصي لآلية سَلسلة البيانات المنظّمة، يمكنك الاطّلاع على https://protobuf.dev/reference/protobuf/textformat-spec/

DistanceLimit

حدّ يحدّد الحدّ الأقصى للمسافة التي يمكن قطعها، ويمكن أن يكون حدًّا صارمًا أو مرنًا.

في حال تحديد حدّ أقصى مرن، يجب تحديد كل من soft_max_meters وcost_per_kilometer_above_soft_max ويجب أن تكونا غير سالبتَين.

الحقول
max_meters

int64

حدّ ثابت يقصر المسافة على max_meters كحدّ أقصى، ويجب أن يكون الحدّ غير سالب.

soft_max_meters

int64

حدّ مرن لا يفرض حدًا أقصى للمسافة، ولكن عند تجاوزه ينتج عنه تكلفة تُضاف إلى التكاليف الأخرى المحدّدة في النموذج، مع استخدام الوحدة نفسها.

إذا تم تحديد soft_max_meters، يجب أن تكون قيمته أقل من max_meters ويجب أن تكون غير سالبة.

cost_per_kilometer_below_soft_max

double

التكلفة لكل كيلومتر تمّت قيادته، وتزداد حتى soft_max_meters، وفقًا للصيغة التالية:

  min(distance_meters, soft_max_meters) / 1000.0 *
  cost_per_kilometer_below_soft_max.

لا يمكن استخدام هذه التكلفة في route_distance_limit.

cost_per_kilometer_above_soft_max

double

التكلفة لكل كيلومتر يتم تكبدها إذا كانت المسافة أعلى من الحدّ soft_max_meters. تكون التكلفة الإضافية 0 إذا كانت المسافة أقل من الحدّ، وإلا فإنّ الصيغة المستخدَمة لاحتساب التكلفة هي ما يلي:

  (distance_meters - soft_max_meters) / 1000.0 *
  cost_per_kilometer_above_soft_max.

يجب أن تكون التكلفة غير سالبة.

GcsDestination

موقع Google Cloud Storage الذي ستتم كتابة ملفات الإخراج فيه.

الحقول
uri

string

الحقل مطلوب. معرّف الموارد المنتظم (URI) لخدمة Google Cloud Storage

GcsSource

موقع Google Cloud Storage الذي سيتم قراءة ملف الإدخال منه.

الحقول
uri

string

الحقل مطلوب. معرّف الموارد المنتظم (URI) لعنصر Google Cloud Storage بالتنسيق gs://bucket/path/to/object

InjectedSolutionConstraint

حلّ تم إدراجه في الطلب يتضمّن معلومات عن الزيارات التي يجب تقييدها وكيفية تقييدها

الحقول
routes[]

ShipmentRoute

مسارات الحلّ المطلوب إضافته قد يتم حذف بعض المسارات من الحل الأصلي. يجب أن تستوفي المسارات والشحنات التي تم تخطّيها افتراضات الصلاحية الأساسية المدرَجة في injected_first_solution_routes.

skipped_shipments[]

SkippedShipment

الشحنات التي تم تخطّيها للحلّ الذي سيتم إدخاله وقد يتم حذف بعضها من الحل الأصلي. الاطّلاع على حقل routes

constraint_relaxations[]

ConstraintRelaxation

بالنسبة إلى صفر أو أكثر من مجموعات المركبات، يحدّد هذا الحقل متى يتم تخفيف القيود ومقدار التخفيف. إذا كان هذا الحقل فارغًا، يتم فرض قيود كاملة على جميع مسارات المركبات غير الفارغة.

ConstraintRelaxation

بالنسبة إلى مجموعة من المركبات، يحدّد هذا الحقل الحدّ الأدنى الذي سيتم عنده تخفيف القيود المفروضة على الزيارات والمستوى الذي سيتم تخفيفها عنده. ويتم حظر الشحنات المُدرَجة في الحقل skipped_shipment، أي لا يمكن تنفيذها.

الحقول
relaxations[]

Relaxation

جميع القيود التي سيتم تخفيفها على الزيارات في المسارات التي تتضمّن مركبات في vehicle_indices

vehicle_indices[]

int32

تحدّد هذه السمة مؤشرات المركبات التي ينطبق عليها قيد الزيارة relaxations. إذا كانت هذه السمة فارغة، سيتم اعتبارها القيمة التلقائية وستنطبق relaxations على جميع المركبات غير المحدّدة في constraint_relaxations الأخرى. يمكن أن يكون هناك قيمة تلقائية واحدة على الأكثر، أي أنّه يُسمح بحقل واحد على الأكثر لتخفيف القيود فارغًا vehicle_indices. لا يمكن إدراج فهرس مركبة إلا مرة واحدة، حتى ضمن عدة constraint_relaxations.

يتم ربط فهرس المركبة بالطريقة نفسها كما في 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 و
  • j + 1 >= relaxations(i).threshold_visit_count

وبالمثل، يتم تخفيف شرط بدء تشغيل المركبة إلى relaxations(i).level إذا استوفى ما يلي:

  • vehicle_start_time >= relaxations(i).threshold_time و
  • يتم تخفيف شرط نهاية فترة الإيجار إلى relaxations(i).level إذا استوفى ما يلي:relaxations(i).threshold_visit_count == 0
  • vehicle_end_time >= relaxations(i).threshold_time و
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

لتطبيق مستوى استرخاء إذا كانت الزيارة تستوفي threshold_visit_count أو threshold_time، أضِف relaxations مرّتين مع level نفسه: أحدهما مع ضبط 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، ولكن يمكن أيضًا الاسترخاء في المركبة: تكون الزيارات مجانية تمامًا في الوقت المحدد أو بعده، ويمكن ألا يتم تنفيذها.

InputConfig

تحديد إدخال لـ [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours]

الحقول
data_format

DataFormat

الحقل مطلوب. تنسيق البيانات المدخلة

حقل الربط source الحقل مطلوب. يمكن أن يكون التعليق source إحدى القيم التالية فقط:
gcs_source

GcsSource

موقع Google Cloud Storage يجب أن يكون هذا الملف عبارة عن عنصر واحد.

الموقع الجغرافي

تتضمّن هذه السمة موقعًا جغرافيًا (نقطة جغرافية واتجاهًا اختياريًا).

الحقول
lat_lng

LatLng

الإحداثيات الجغرافية لنقطة الطريق

heading

int32

تمثّل هذه السمة اتجاه البوصلة المرتبط باتجاه حركة المرور. تُستخدَم هذه القيمة لتحديد جانب الطريق الذي يجب استخدامه للاستلام والتسليم. يمكن أن تتراوح قيم الاتجاه من 0 إلى 360، حيث يشير 0 إلى اتجاه الشمال تمامًا، ويشير 90 إلى اتجاه الشرق تمامًا، وما إلى ذلك.

OptimizeToursLongRunningMetadata

لا يتضمّن هذا النوع أي حقول.

البيانات الوصفية للعمليات التي يتم تنفيذها عند استدعاء OptimizeToursLongRunning

OptimizeToursRequest

طلب يتم تقديمه إلى أداة حلّ لتحسين الجولات، وتحدّد هذه الأداة نموذج الشحنة المطلوب حلّه بالإضافة إلى مَعلمات التحسين.

الحقول
parent

string

الحقل مطلوب. استهداف مشروع أو موقع جغرافي لإجراء مكالمة

التنسيق:

  • projects/{project-id}
  • projects/{project-id}/locations/{location-id}

في حال عدم تحديد موقع جغرافي، سيتم اختيار منطقة تلقائيًا.

timeout

Duration

في حال ضبط مهلة الاستجابة هذه، يعرض الخادم ردًا قبل انقضاء مدة المهلة أو قبل بلوغ الموعد النهائي الذي حدّده الخادم للطلبات المتزامنة، أيهما أقرب.

بالنسبة إلى الطلبات غير المتزامنة، سينشئ الخادم حلاً (إذا أمكن) قبل انقضاء المهلة.

model

ShipmentModel

نموذج الشحن المطلوب حله

solving_mode

SolvingMode

يكون وضع الحلّ تلقائيًا DEFAULT_SOLVE (0).

search_mode

SearchMode

وضع البحث المستخدَم لحلّ الطلب

injected_first_solution_routes[]

ShipmentRoute

توجيه خوارزمية التحسين للعثور على حلّ أوّلي مشابه لحلّ سابق

يتم فرض قيود على النموذج عند إنشاء الحلّ الأول. ويتم تخطّي أي شحنات لم يتم تنفيذها على مسار معيّن ضمنيًا في الحلّ الأول، ولكن يمكن تنفيذها في الحلول اللاحقة.

يجب أن يستوفي الحل بعض افتراضات الصلاحية الأساسية:

  • بالنسبة إلى جميع الطرق، يجب أن يكون vehicle_index ضمن النطاق وألّا يكون مكررًا.
  • بالنسبة إلى جميع الزيارات، يجب أن يكون shipment_index وvisit_request_index ضمن النطاق.
  • لا يمكن الإشارة إلى شحنة إلا في مسار واحد.
  • يجب استلام شحنة الاستلام والتسليم قبل تسليمها.
  • لا يمكن تنفيذ أكثر من بديل واحد لاستلام الشحنة أو تسليمها.
  • بالنسبة إلى جميع المسارات، تزداد الأوقات (أي vehicle_start_time <= visits[0].start_time <= visits[1].start_time ... <= vehicle_end_time).
  • لا يمكن إجراء عملية شحن إلا على مركبة مسموح بها، وتكون المركبة مسموحًا بها إذا كان الحقل Shipment.allowed_vehicle_indices فارغًا أو إذا كان الحقل vehicle_index مضمّنًا في الحقل Shipment.allowed_vehicle_indices.

إذا كان الحلّ الذي تم إدخاله غير ممكن، لن يتم بالضرورة عرض خطأ في التحقّق من الصحة، بل قد يتم عرض خطأ يشير إلى عدم الإمكانية.

injected_solution_constraint

InjectedSolutionConstraint

تقييد خوارزمية التحسين للعثور على حل نهائي مشابه لحل سابق على سبيل المثال، يمكن استخدام ذلك لتجميد أجزاء من المسارات التي تم إكمالها أو التي سيتم إكمالها ولكن يجب عدم تعديلها.

إذا كان الحلّ الذي تم إدخاله غير ممكن، لن يتم بالضرورة عرض خطأ في التحقّق من الصحة، بل قد يتم عرض خطأ يشير إلى عدم الإمكانية.

refresh_details_routes[]

ShipmentRoute

إذا لم يكن الحقل فارغًا، سيتم إعادة تحميل المسارات المحدّدة بدون تعديل تسلسل الزيارات أو أوقات السفر الأساسية، وسيتم تعديل التفاصيل الأخرى فقط. ولا يحلّ ذلك المشكلة في النموذج.

اعتبارًا من 2020/11، لا يتم ملء الخطوط المتعددة إلا للطرق غير الفارغة، ويجب أن تكون قيمة populate_polylines صحيحة.

قد تكون حقول route_polyline للمسارات التي تم تمريرها غير متوافقة مع المسار transitions.

يجب عدم استخدام هذا الحقل مع injected_first_solution_routes أو injected_solution_constraint.

ليس لـ Shipment.ignore وVehicle.ignore أي تأثير في السلوك. لا يزال يتم ملء الخطوط المتعددة بين جميع الزيارات في جميع المسارات غير الفارغة بغض النظر عما إذا كان يتم تجاهل الشحنات أو المركبات ذات الصلة.

interpret_injected_solutions_using_labels

bool

إذا كان ذلك صحيحًا:

ينطبق هذا التفسير على الحقول injected_first_solution_routes وinjected_solution_constraint وrefresh_details_routes. يمكن استخدامها عندما تتغير مؤشرات الشحنات أو المركبات في الطلب منذ إنشاء الحلّ، ربما بسبب إزالة شحنات أو مركبات من الطلب أو إضافتها إليه.

إذا كانت القيمة هي true، يجب ألا تظهر التصنيفات في الفئات التالية أكثر من مرة واحدة في فئتها:

إذا لم يتطابق vehicle_label في الحلّ المُدخَل مع مركبة طلب، تتم إزالة المسار المطابق من الحلّ مع الزيارات. إذا لم يتطابق shipment_label في الحلّ المُدخَل مع شحنة طلب، تتم إزالة الزيارة المطابقة من الحلّ. إذا لم يتطابق SkippedShipment.label في الحلّ المُدخَل مع شحنة طلب، تتم إزالة SkippedShipment من الحلّ.

قد تؤثر إزالة زيارات مسار أو مسارات كاملة من حلّ تم إدخاله في القيود الضمنية، ما قد يؤدي إلى تغيير في الحلّ أو حدوث أخطاء في التحقّق من الصحة أو عدم إمكانية التنفيذ.

ملاحظة: على المتّصل التأكّد من أنّ كل Vehicle.label (أو Shipment.label) يحدّد بشكل فريد كيان مركبة (أو شحنة) مستخدَم في الطلبَين ذَوَي الصلة: الطلب السابق الذي أنتج OptimizeToursResponse المستخدَم في الحلّ المُدرَج والطلب الحالي الذي يتضمّن الحلّ المُدرَج. لا تكفي عمليات التحقّق من التفرد الموضّحة أعلاه لضمان استيفاء هذا الشرط.

consider_road_traffic

bool

ضَع تقدير حركة المرور في الاعتبار عند احتساب الحقول ShipmentRoute وTransition.travel_duration وVisit.start_time وvehicle_end_time، وعند ضبط الحقل ShipmentRoute.has_traffic_infeasibilities، وعند احتساب الحقل OptimizeToursResponse.total_cost.

populate_polylines

bool

في حال ضبطها على "صحيح"، سيتم ملء الخطوط المتعددة في الردود ShipmentRoute.

populate_transition_polylines

bool

إذا كانت القيمة صحيحة، سيتم ملء الخطوط المتعددة ورموز المسار المميزة في الرد ShipmentRoute.transitions.

allow_large_deadline_despite_interruption_risk

bool

في حال ضبط هذا الخيار، يمكن أن يتضمّن الطلب موعدًا نهائيًا (راجِع https://grpc.io/blog/deadlines) يصل إلى 60 دقيقة، وإلا سيكون الحدّ الأقصى للموعد النهائي 30 دقيقة فقط. تجدر الإشارة إلى أنّ الطلبات التي تستغرق وقتًا طويلاً تنطوي على خطر أكبر بكثير (ولكنه لا يزال ضئيلاً) من التعطّل.

use_geodesic_distances

bool

في حال ضبط القيمة على true، سيتم احتساب مسافات التنقّل باستخدام المسافات الجيوديسية بدلاً من مسافات "خرائط 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. القيمة التلقائية هي 100 والحد الأقصى هو 10,000.

SearchMode

وضع يحدّد سلوك البحث، مع الموازنة بين وقت الاستجابة وجودة الحلّ. في جميع الأوضاع، يتم فرض الموعد النهائي لتقديم الطلب على مستوى العالم.

عمليات التعداد
SEARCH_MODE_UNSPECIFIED وضع البحث غير المحدّد، وهو مكافئ RETURN_FAST.
RETURN_FAST أوقِف البحث بعد العثور على الحلّ الأول المناسب.
CONSUME_ALL_AVAILABLE_TIME استغِلّ كل الوقت المتاح للبحث عن حلول أفضل.

SolvingMode

تحدّد هذه السمة الطريقة التي يجب أن يتعامل بها برنامج الحلّ مع الطلب. في جميع الأوضاع باستثناء 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 فارغًا.

ملاحظة مهمة: لا يتم عرض جميع الشحنات غير الممكنة هنا، بل فقط تلك التي تم رصدها على أنّها غير ممكنة أثناء المعالجة المسبقة.

TRANSFORM_AND_RETURN_REQUEST

لا يعمل هذا الوضع إلا إذا لم يكن ShipmentModel.objectives فارغًا. لم يتم حلّ الطلب. يتم التحقّق من صحتها وملؤها بالتكاليف التي تتوافق مع الأهداف المحدّدة فقط. يمكنك أيضًا الاطّلاع على مستندات ShipmentModel.objectives. يتم عرض الطلب الناتج على أنّه OptimizeToursResponse.processed_request.

تجريبي: يمكنك الاطّلاع على https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request لمزيد من التفاصيل.

OptimizeToursResponse

الردّ بعد حلّ مشكلة تحسين الجولة الذي يتضمّن المسارات التي تتبعها كل مركبة والشحنات التي تم تخطّيها والتكلفة الإجمالية للحلّ

الحقول
routes[]

ShipmentRoute

المسارات المحسوبة لكل مركبة، ويتطابق المسار رقم i مع المركبة رقم i في النموذج.

request_label

string

نسخة من OptimizeToursRequest.label، إذا تم تحديد تصنيف في الطلب

skipped_shipments[]

SkippedShipment

قائمة بجميع الشحنات التي تم تخطّيها

validation_errors[]

OptimizeToursValidationError

قائمة بجميع أخطاء التحقّق التي تمكّنا من رصدها بشكل مستقل. راجِع شرح "أخطاء متعدّدة" للرسالة OptimizeToursValidationError. بدلاً من الأخطاء، سيتضمّن ذلك تحذيرات في حال كانت قيمة solving_mode هي DEFAULT_SOLVE.

processed_request

OptimizeToursRequest

في بعض الحالات، نعدّل الطلب الوارد قبل حلّه، أي نضيف تكاليف. إذا كانت قيمة solving_mode هي TRANSFORM_AND_RETURN_REQUEST، يتم عرض الطلب المعدَّل هنا.

تجريبي: يمكنك الاطّلاع على https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request لمزيد من التفاصيل.

metrics

Metrics

مقاييس المدة والمسافة والاستخدام لهذا الحلّ

المقاييس

مقاييس عامة، مجمّعة على مستوى جميع المسارات

الحقول
aggregated_route_metrics

AggregatedMetrics

يتم تجميعها على مستوى المسارات. كل مقياس هو مجموع (أو الحد الأقصى، بالنسبة إلى عمليات التحميل) جميع حقول ShipmentRoute.metrics التي تحمل الاسم نفسه.

skipped_mandatory_shipment_count

int32

عدد الشحنات الإلزامية التي تم تخطّيها

used_vehicle_count

int32

عدد المركبات المستخدَمة ملاحظة: إذا كان مسار المركبة فارغًا وكانت قيمة Vehicle.used_if_route_is_empty هي "صحيح"، تُعتبر المركبة مستعمَلة.

earliest_vehicle_start_time

Timestamp

تمثّل هذه السمة أقرب وقت لبدء استخدام مركبة مستعمَلة، ويتم احتسابها كحدّ أدنى لجميع المركبات المستعمَلة من ShipmentRoute.vehicle_start_time.

latest_vehicle_end_time

Timestamp

تمثّل هذه السمة آخر وقت انتهاء لمركبة مستعمَلة، ويتم احتسابها كحدّ أقصى لجميع المركبات المستعمَلة من ShipmentRoute.vehicle_end_time.

costs

map<string, double>

تكلفة الحلّ، مقسّمة حسب حقول الطلبات ذات الصلة بالتكلفة المفاتيح هي مسارات أولية، بالنسبة إلى OptimizeToursRequest للإدخال، مثل "model.shipments.pickups.cost"، والقيم هي التكلفة الإجمالية التي تم إنشاؤها بواسطة حقل التكلفة المقابل، ويتم تجميعها على مستوى الحلّ بأكمله. بعبارة أخرى، costs["model.shipments.pickups.cost"] هو مجموع جميع تكاليف الاستلام على مستوى الحلّ. يتم هنا عرض جميع التكاليف المحدّدة في النموذج بالتفصيل، باستثناء التكاليف المتعلّقة بسمات الانتقال التي يتم عرضها بشكل مجمّع فقط اعتبارًا من 2022/01.

total_cost

double

التكلفة الإجمالية للحلّ مجموع كل القيم في خريطة التكاليف

OptimizeToursUriMetadata

لا يتضمّن هذا النوع أي حقول.

البيانات الوصفية للعمليات التي يتم تنفيذها عند استدعاء OptimizeToursUri

OptimizeToursUriRequest

طلب تستخدمه طريقة OptimizeToursUri.

الحقول
parent

string

الحقل مطلوب. استهداف مشروع أو موقع جغرافي لإجراء مكالمة

التنسيق:

  • projects/{project-id}
  • projects/{project-id}/locations/{location-id}

في حال عدم تحديد موقع جغرافي، سيتم اختيار منطقة تلقائيًا.

input

Uri

الحقل مطلوب. معرّف الموارد المنتظم (URI) لكائن Cloud Storage الذي يحتوي على OptimizeToursRequest

output

Uri

الحقل مطلوب. معرّف الموارد المنتظم (URI) لعنصر Cloud Storage الذي سيحتوي على OptimizeToursResponse

OptimizeToursUriResponse

ردّ يعرضه الإجراء OptimizeToursUri.

الحقول
output

Uri

اختياريّ. معرّف الموارد المنتظم (URI) لكائن Cloud Storage الذي يحتوي على OptimizeToursResponse بترميز JSON أو textproto. إذا تم ترميز العنصر بتنسيق JSON، ستكون لاحقة اسم العنصر .json. إذا تم ترميز العنصر على أنّه textproto، ستكون لاحقة اسم العنصر .txtpb.

يمكن استخدام crc32_checksum الخاص بالمرجع للتحقّق من عدم تعديل محتواه.

OptimizeToursValidationError

تصف هذه السمة خطأً أو تحذيرًا حدث أثناء التحقّق من صحة OptimizeToursRequest.

الحقول
code

int32

يتم تحديد خطأ التحقّق من الصحة من خلال الزوج (code، display_name) الذي يكون متوفّرًا دائمًا.

تقدّم الحقول التالية لهذا القسم مزيدًا من السياق حول الخطأ.

أخطاء متعدّدة: عند حدوث أخطاء متعدّدة، تحاول عملية التحقّق عرض العديد منها. وكما هو الحال مع المترجم، هذه عملية غير مثالية، إذ ستكون بعض أخطاء التحقّق "خطيرة"، ما يعني أنّها ستوقف عملية التحقّق بأكملها، كما هو الحال مع أخطاء display_name="UNSPECIFIED" وغيرها. وقد تتسبّب بعض الأخطاء في تخطّي عملية التحقّق لأخطاء أخرى.

الثبات: يجب أن يكون code وdisplay_name ثابتَين للغاية. ولكن قد تظهر رموز وأسماء عرض جديدة بمرور الوقت، ما قد يؤدي إلى أن يؤدي طلب معيّن (غير صالح) إلى عرض زوج مختلف (code، display_name) لأنّ الخطأ الجديد أخفى الخطأ القديم. على سبيل المثال، اطّلِع على "أخطاء متعدّدة".

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

سلسلة يمكن لشخص عادي قراءتها تصف الخطأ. هناك تطابق بنسبة 1:1 بين code وerror_message (عندما تكون قيمة الرمز البريدي غير "UNSPECIFIED").

الثبات: غير ثابتة: قد تتغيّر رسالة الخطأ المرتبطة برمز code معيّن (نأمل أن يكون ذلك لتوضيحها) بمرور الوقت. يُرجى الاعتماد على display_name وcode بدلاً من ذلك.

offending_values

string

قد يحتوي على قيم الحقول، ولكن لا يتوفّر دائمًا، لذا يجب عدم الاعتماد عليه واستخدامه فقط لتصحيح أخطاء النموذج يدويًا.

FieldReference

تحدّد هذه السمة سياقًا لخطأ التحقّق. يشير FieldReference دائمًا إلى حقل معيّن في هذا الملف ويتّبع البنية الهرمية نفسها. على سبيل المثال، يمكننا تحديد العنصر رقم 2 من start_time_windows للمركبة رقم 5 باستخدام:

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

ومع ذلك، نحذف الكيانات ذات المستوى الأعلى، مثل OptimizeToursRequest أو ShipmentModel، لتجنُّب الازدحام في الرسالة.

الحقول
name

string

اسم الحقل، مثل "المركبات".

sub_field

FieldReference

حقل فرعي متداخل بشكل متكرر، إذا لزم الأمر

حقل الربط index_or_key

يمكن أن يكون التعليق index_or_key إحدى القيم التالية فقط:

index

int32

فهرس الحقل إذا كان متكرّرًا

key

string

مفتاح إذا كان الحقل خريطة

OutputConfig

تحدِّد هذه السمة وجهة لنتائج [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].

الحقول
data_format

DataFormat

الحقل مطلوب. تنسيق بيانات الإخراج.

حقل الربط destination الحقل مطلوب. يمكن أن يكون التعليق destination إحدى القيم التالية فقط:
gcs_destination

GcsDestination

موقع Google Cloud Storage الذي سيتم كتابة الإخراج فيه.

RouteModifiers

تتضمّن هذه السمة مجموعة من الشروط الاختيارية التي يجب استيفاؤها عند احتساب مسارات المركبات. يشبه ذلك RouteModifiers في واجهة برمجة التطبيقات "المسارات المفضّلة" من منصة خرائط Google. يمكنك الاطّلاع على: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.

الحقول
avoid_tolls

bool

تحدّد هذه السمة ما إذا كان يجب تجنُّب الطرق التي يتم فيها تحصيل رسوم عبور حيثما كان ذلك معقولاً. سيتم منح الأولوية للمسارات التي لا تحتوي على طرق برسوم عبور. ينطبق ذلك على وسائل النقل الآلية فقط.

avoid_highways

bool

تحدّد هذه السمة ما إذا كان يجب تجنُّب الطرق السريعة حيثما كان ذلك معقولاً. سيتم منح الأولوية للمسارات التي لا تحتوي على طرق سريعة. ينطبق ذلك على وسائل النقل الآلية فقط.

avoid_ferries

bool

تحدّد هذه السمة ما إذا كان يجب تجنُّب العبّارات حيثما كان ذلك معقولاً. سيتم منح الأولوية للمسارات التي لا تتضمّن السفر بالعبّارات. ينطبق ذلك على وسائل النقل الآلية فقط.

avoid_indoor

bool

اختياريّ. تحدِّد هذه السمة ما إذا كان يجب تجنُّب التنقّل في الأماكن المغلقة عند توفّر بديل معقول. سيتم منح الأولوية للمسارات التي لا تتضمّن ميزة "التنقّل في الأماكن المغلقة". ينطبق ذلك على وضع السفر WALKING فقط.

الشحن

شحنة سلعة واحدة، من أحد مواقع استلامها إلى أحد مواقع تسليمها. لكي يتم اعتبار الشحنة على أنّها تمّت، يجب أن تزور مركبة فريدة أحد مواقع استلامها (وتقلّل من سعتها الاحتياطية وفقًا لذلك)، ثم تزور أحد مواقع تسليمها لاحقًا (وبالتالي تزيد من سعتها الاحتياطية وفقًا لذلك).

الحقول
display_name

string

الاسم المعروض الذي يحدّده المستخدم للشحنة يمكن أن يصل طوله إلى 63 حرفًا ويمكن أن يستخدم أحرف UTF-8.

pickups[]

VisitRequest

مجموعة من بدائل الاستلام المرتبطة بالشحنة. وفي حال عدم تحديدها، يجب أن تتوقف المركبة في موقع جغرافي يتوافق مع عمليات التسليم فقط.

deliveries[]

VisitRequest

مجموعة من بدائل التسليم المرتبطة بالشحنة. في حال عدم تحديد هذه السمة، يجب أن تتوقف المركبة في موقع جغرافي يتوافق مع نقاط الاستلام.

load_demands

map<string, Load>

متطلبات حمولة الشحنة (مثل الوزن والحجم وعدد المنصات وما إلى ذلك) يجب أن تكون المفاتيح في الخريطة معرّفات تصف نوع الحمولة المقابلة، ويُفضّل أن تتضمّن أيضًا الوحدات. على سبيل المثال: "weight_kg" و"volume_gallons" و"pallet_count" وما إلى ذلك. إذا لم يظهر مفتاح معيّن في الخريطة، سيتم اعتبار الحمولة المقابلة فارغة.

allowed_vehicle_indices[]

int32

مجموعة المركبات التي يمكنها تنفيذ هذه الشحنة. إذا كانت فارغة، يمكن لجميع المركبات تنفيذها. يتم تحديد المركبات من خلال الفهرس الخاص بها في قائمة ShipmentModelvehicles.

costs_per_vehicle[]

double

تحدّد هذه السمة التكلفة التي يتم تكبّدها عند تسليم هذه الشحنة بواسطة كل مركبة. في حال تحديدها، يجب أن تتضمّن أحد الخيارَين التاليَين:

  • عدد العناصر نفسه في costs_per_vehicle_indices يشير costs_per_vehicle[i] إلى المركبة costs_per_vehicle_indices[i] من الطراز.
  • عدد العناصر نفسه المتوفّر في المركبات في النموذج، ويتوافق العنصر رقم i مع المركبة رقم 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

تحدّد هذه السمة الحدّ الأقصى المطلق لوقت التوقف مقارنةً بأقصر مسار من الاستلام إلى التسليم. وفي حال تحديدها، يجب أن تكون غير سالبة، ويجب أن تتضمّن الشحنة عملية استلام وعملية تسليم على الأقل.

على سبيل المثال، لنفترض أنّ t هو أقصر وقت يستغرقه الانتقال من خيار الاستلام المحدّد إلى خيار التسليم المحدّد. بعد ذلك، يفرض الإعداد pickup_to_delivery_absolute_detour_limit ما يلي:

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

إذا تم تحديد كل من الحدود النسبية والمطلقة في الشحنة نفسها، سيتم استخدام الحد الأكثر تقييدًا لكل زوج ممكن من عمليات الاستلام والتسليم. اعتبارًا من 10/2017، لا تتوفّر الطرق الفرعية إلا عندما لا تعتمد مدة الرحلة على المركبات.

pickup_to_delivery_time_limit

Duration

تحدّد هذه السمة الحد الأقصى للمدة الزمنية من بداية الاستلام إلى بداية تسليم الشحنة. وإذا تم تحديدها، يجب أن تكون غير سالبة، ويجب أن تحتوي الشحنة على عملية استلام وتسليم على الأقل. ولا يعتمد ذلك على البدائل المحددة للاستلام والتسليم، ولا على سرعة المركبة. ويمكن تحديد هذه السمة إلى جانب قيود الحد الأقصى للانحراف: سيلتزم الحل بكلتا المواصفات.

shipment_type

string

سلسلة غير فارغة تحدّد "نوع" هذه الشحنة. يمكن استخدام هذه الميزة لتحديد حالات عدم التوافق أو المتطلبات بين shipment_types (راجِع shipment_type_incompatibilities وshipment_type_requirements في ShipmentModel).

يختلف عن visit_types الذي يتم تحديده لزيارة واحدة: تتشارك جميع عمليات الاستلام/التسليم التي تنتمي إلى الشحنة نفسها قيمة shipment_type نفسها.

label

string

تحدّد هذه السمة تصنيفًا لهذه الشحنة، ويتم عرض هذا التصنيف في الردّ في shipment_label الخاص بـ ShipmentRoute.Visit المقابل.

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

تحدّد هذه السمة الحدّ الأقصى لوقت الانحراف النسبي مقارنةً بأقصر مسار من موقع الاستلام إلى موقع التسليم. في حال تحديدها، يجب أن تكون غير سالبة، ويجب أن تتضمّن الشحنة عملية استلام وعملية تسليم على الأقل.

على سبيل المثال، لنفترض أنّ t هو أقصر وقت يستغرقه الانتقال من خيار الاستلام المحدّد إلى خيار التسليم المحدّد. بعد ذلك، يفرض الإعداد pickup_to_delivery_relative_detour_limit ما يلي:

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

إذا تم تحديد كل من الحدود النسبية والمطلقة في الشحنة نفسها، سيتم استخدام الحد الأكثر تقييدًا لكل زوج ممكن من عمليات الاستلام والتسليم. اعتبارًا من 10/2017، لا تتوفّر الطرق الفرعية إلا عندما لا تعتمد مدة الرحلة على المركبات.

التحميل

عند إجراء زيارة، قد تتم إضافة مبلغ محدّد مسبقًا إلى حمولة المركبة إذا كانت عملية استلام، أو طرحه إذا كانت عملية توصيل. تحدّد هذه الرسالة هذا المبلغ. يمكنك الاطّلاع على load_demands.

الحقول
amount

int64

مقدار اختلاف حمولة المركبة التي تجري الزيارة المقابلة. وبما أنّها عدد صحيح، يُنصح المستخدمون باختيار وحدة مناسبة لتجنُّب فقدان الدقة. يجب أن تكون القيمة ≥ 0.

VisitRequest

طلب زيارة يمكن إجراؤها بواسطة مركبة: يتضمّن الموقع الجغرافي (أو موقعَين جغرافيَين، كما هو موضّح أدناه) وأوقات العمل ممثّلة بنطاقات زمنية، ومدة الخدمة (الوقت الذي تستغرقه المركبة بعد وصولها لاستلام السلع أو تسليمها).

الحقول
arrival_location

LatLng

الموقع الجغرافي الذي تصل إليه المركبة عند تنفيذ VisitRequest إذا كان نموذج الشحن يتضمّن مصفوفات المسافة والمدة، يجب عدم تحديد arrival_location.

arrival_waypoint

Waypoint

نقطة الطريق التي تصل إليها المركبة عند تنفيذ VisitRequest هذا. إذا كان نموذج الشحن يتضمّن مصفوفات المسافة والمدة، يجب عدم تحديد arrival_waypoint.

departure_location

LatLng

الموقع الجغرافي الذي تغادر منه المركبة بعد إكمال هذه VisitRequest. يمكن حذفها إذا كانت مماثلة لـ arrival_location. إذا كان نموذج الشحن يتضمّن مصفوفات المسافة والمدة، يجب عدم تحديد departure_location.

departure_waypoint

Waypoint

نقطة المرور التي تغادر منها المركبة بعد إكمال هذه VisitRequest. يمكن حذفها إذا كانت مماثلة لـ arrival_waypoint. إذا كان نموذج الشحن يتضمّن مصفوفات المسافة والمدة، يجب عدم تحديد departure_waypoint.

tags[]

string

تحدّد هذه السمة العلامات المرفقة بطلب الزيارة، ولا يُسمح باستخدام سلاسل فارغة أو مكرّرة.

time_windows[]

TimeWindow

فترات زمنية تقيّد وقت الوصول إلى موقع جغرافي. يُرجى العِلم أنّه يمكن أن تغادر المركبة خارج فترة وقت الوصول، أي أنّه ليس من الضروري أن يكون وقت الوصول + المدة داخل فترة زمنية. قد يؤدي ذلك إلى وقت انتظار إذا وصلت المركبة قبل TimeWindow.start_time.

يشير عدم توفّر TimeWindow إلى أنّ المركبة يمكنها إجراء هذه الزيارة في أي وقت.

يجب أن تكون الفترات الزمنية منفصلة، أي يجب ألا تتداخل أي فترة زمنية مع فترة أخرى أو تكون مجاورة لها، ويجب أن تكون مرتّبة بترتيب تصاعدي.

لا يمكن ضبط cost_per_hour_after_soft_end_time وsoft_end_time إلا إذا كانت هناك فترة زمنية واحدة.

duration

Duration

مدة الزيارة، أي الوقت الذي استغرقته المركبة بين الوصول والمغادرة (سيتم إضافته إلى وقت الانتظار المحتمل؛ يُرجى الاطّلاع على time_windows).

cost

double

تكلفة تلبية طلب الزيارة هذا على مسار مركبة يمكن استخدام هذه السمة لدفع تكاليف مختلفة لكل خيار بديل لاستلام الشحنة أو توصيلها. يجب أن تكون هذه التكلفة بالوحدة نفسها التي تستخدمها السمة Shipment.penalty_cost، ويجب ألا تكون سالبة.

load_demands

map<string, Load>

متطلبات التحميل لطلب الزيارة هذا، وهي تشبه الحقل Shipment.load_demands، إلا أنّها تنطبق على VisitRequest فقط بدلاً من Shipment بالكامل. تتم إضافة المتطلبات المدرَجة هنا إلى المتطلبات المدرَجة في Shipment.load_demands.

visit_types[]

string

تحدّد هذه السمة أنواع الزيارات. يمكن استخدام هذه المعلومات لتخصيص وقت إضافي يحتاج إليه أحد المركبات لإكمال هذه الزيارة (راجِع Vehicle.extra_visit_duration_for_visit_type).

لا يمكن أن يظهر النوع إلا مرة واحدة.

label

string

تحدّد هذه السمة تصنيفًا لـ VisitRequest. يتم عرض هذا التصنيف في الردّ على أنّه visit_label في ShipmentRoute.Visit المقابل.

avoid_u_turns

bool

تحدّد هذه السمة ما إذا كان يجب تجنُّب المنعطفات على شكل حرف U في مسارات القيادة في هذا الموقع الجغرافي. يتم بذل أقصى جهد لتجنُّب المنعطفات على شكل حرف U، ولكن لا يمكن ضمان تجنُّبها بالكامل. هذه ميزة تجريبية وقد يتغير سلوكها.

تجريبية: يُرجى الاطّلاع على https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request لمزيد من التفاصيل.

ShipmentModel

يحتوي نموذج الشحن على مجموعة من الشحنات التي يجب أن تنفّذها مجموعة من المركبات، مع تقليل التكلفة الإجمالية إلى الحدّ الأدنى، وهي مجموع ما يلي:

  • تكلفة توجيه المركبات (مجموع التكلفة لكل الوقت الإجمالي والتكلفة لكل مدة الرحلة والتكلفة الثابتة لجميع المركبات)
  • عقوبات الشحن غير المنفَّذ
  • تكلفة المدة الإجمالية للشحنات
الحقول
shipments[]

Shipment

مجموعة من عمليات الشحن التي يجب تنفيذها في النموذج

vehicles[]

Vehicle

مجموعة من المركبات التي يمكن استخدامها لإجراء زيارات.

objectives[]

Objective

مجموعة الأهداف لهذا النموذج، والتي سنحوّلها إلى تكاليف. إذا لم يكن النموذج فارغًا، يجب ألا تكون هناك تكلفة مرتبطة به. للحصول على الطلب المعدَّل، يُرجى استخدام solving_mode = TRANSFORM_AND_RETURN_REQUEST. يُرجى العِلم أنّه لن يتم حلّ الطلب في هذه الحالة. اطّلِع على المستندات ذات الصلة.

تجريبي: يمكنك الاطّلاع على https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request لمزيد من التفاصيل.

global_start_time

Timestamp

وقت البدء والانتهاء العام للنموذج: لا يمكن اعتبار أي أوقات خارج هذا النطاق صالحة.

يجب أن يكون النطاق الزمني للنموذج أقل من عام واحد، أي يجب أن يكون الفرق بين global_end_time وglobal_start_time أقل من 31536000 ثانية.

عند استخدام حقول cost_per_*hour، قد تحتاج إلى ضبط هذه النافذة على فاصل زمني أصغر لزيادة الأداء (على سبيل المثال، إذا كنت تصمّم نموذجًا ليوم واحد، عليك ضبط الحدود الزمنية العامة على ذلك اليوم). وفي حال عدم ضبطها، يتم استخدام 00:00:00 بالتوقيت العالمي المتفق عليه، 1 يناير 1970 (أي الثواني: 0، النانو ثانية: 0) كقيمة تلقائية.

global_end_time

Timestamp

في حال عدم ضبطها، يتم استخدام 00:00:00 بالتوقيت العالمي المتفق عليه في 1 يناير 1971 (أي الثواني: 31536000، النانو ثانية: 0) كقيمة تلقائية.

global_duration_cost_per_hour

double

"المدة الإجمالية" للخطة العامة هي الفرق بين أقرب وقت بدء فعلي وأبعد وقت انتهاء فعلي لجميع المركبات. يمكن للمستخدمين تحديد تكلفة لكل ساعة لتلك الكمية لمحاولة تحسين وقت إكمال المهمة، على سبيل المثال. يجب أن تكون هذه التكلفة بالوحدة نفسها التي تستخدمها السمة Shipment.penalty_cost.

duration_distance_matrices[]

DurationDistanceMatrix

تحدّد هذه السمة مصفوفات المدة والمسافة المستخدَمة في النموذج. إذا كان هذا الحقل فارغًا، سيتم استخدام "خرائط Google" أو المسافات الجيوديسية بدلاً من ذلك، وذلك استنادًا إلى قيمة الحقل use_geodesic_distances. إذا لم يكن فارغًا، لا يمكن أن تكون قيمة use_geodesic_distances صحيحة، ولا يمكن أن يكون كل من duration_distance_matrix_src_tags وduration_distance_matrix_dst_tags فارغًا.

أمثلة على الاستخدام:

  • هناك موقعان جغرافيان: locA وlocB.
  • مركبة واحدة تبدأ مسارها في locA وتنتهي فيه.
  • طلب واحد لزيارة مكان الاستلام في locB
model {
  vehicles { start_tags: "locA"  end_tags: "locA" }
  shipments { pickups { tags: "locB" } }
  duration_distance_matrix_src_tags: "locA"
  duration_distance_matrix_src_tags: "locB"
  duration_distance_matrix_dst_tags: "locA"
  duration_distance_matrix_dst_tags: "locB"
  duration_distance_matrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • هناك ثلاثة مواقع جغرافية: locA وlocB وlocC.
  • مركبة واحدة تبدأ مسارها في locA وتنتهي في locB، باستخدام مصفوفة "سريع".
  • مركبة واحدة تبدأ مسارها وتنتهي منه في locB، باستخدام مصفوفة "بطيئة".
  • مركبة واحدة تبدأ مسارها في locB وتنتهي فيه، باستخدام مصفوفة "سريع".
  • طلب واحد لزيارة مكان الاستلام في locC
model {
  vehicles { start_tags: "locA" end_tags: "locB" start_tags: "fast" }
  vehicles { start_tags: "locB" end_tags: "locB" start_tags: "slow" }
  vehicles { start_tags: "locB" end_tags: "locB" start_tags: "fast" }
  shipments { pickups { tags: "locC" } }
  duration_distance_matrix_src_tags: "locA"
  duration_distance_matrix_src_tags: "locB"
  duration_distance_matrix_src_tags: "locC"
  duration_distance_matrix_dst_tags: "locB"
  duration_distance_matrix_dst_tags: "locC"
  duration_distance_matrices {
    vehicle_start_tag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  duration_distance_matrices {
    vehicle_start_tag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
duration_distance_matrix_src_tags[]

string

علامات تحدّد مصادر مصفوفات المدة والمسافة، حيث تحدّد duration_distance_matrices(i).rows(j) المدد والمسافات من الزيارات التي تحمل العلامة duration_distance_matrix_src_tags(j) إلى الزيارات الأخرى في المصفوفة i.

تتطابق العلامات مع VisitRequest.tags أو Vehicle.start_tags. يجب أن يتطابق VisitRequest أو Vehicle معيّن مع علامة واحدة بالضبط في هذا الحقل. تجدر الإشارة إلى أنّ علامات المصدر والوجهة والمصفوفة الخاصة بـ Vehicle قد تكون هي نفسها، وبالمثل، قد تكون علامات المصدر والوجهة الخاصة بـ VisitRequest هي نفسها. يجب أن تكون جميع العلامات مختلفة ولا يمكن أن تكون سلاسل فارغة. إذا لم يكن هذا الحقل فارغًا، يجب ألا يكون duration_distance_matrices فارغًا.

duration_distance_matrix_dst_tags[]

string

علامات تحدّد وجهات مصفوفات المدة والمسافة؛ duration_distance_matrices(i).rows(j).durations(k) (أو duration_distance_matrices(i).rows(j).meters(k))) تحدّد مدة (أو مسافة) السفر من الزيارات التي تحمل العلامة 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

مجموعات من shipment_types غير المتوافقة (راجِع ShipmentTypeIncompatibility).

shipment_type_requirements[]

ShipmentTypeRequirement

مجموعات متطلبات shipment_type (راجِع ShipmentTypeRequirement)

precedence_rules[]

PrecedenceRule

مجموعة من قواعد الأولوية التي يجب فرضها في النموذج

ملاحظة مهمة: يؤدي استخدام قواعد الأولوية إلى الحدّ من حجم المشكلة التي يمكن تحسينها، وقد يتم رفض الطلبات التي تستخدم قواعد الأولوية وتتضمّن العديد من الشحنات.

max_active_vehicles

int32

يفرض هذا الحقل قيودًا على الحد الأقصى لعدد المركبات النشطة. تكون المركبة نشطة إذا كان مسارها ينفّذ شحنة واحدة على الأقل. يمكن استخدام هذا الحقل للحدّ من عدد المسارات في حال كان عدد السائقين أقل من عدد المركبات وكانت أسطول المركبات غير متجانس. ستختار عملية التحسين بعد ذلك أفضل مجموعة فرعية من المركبات لاستخدامها. يجب أن تكون القيمة موجبة تمامًا.

DurationDistanceMatrix

تحدّد هذه السمة مصفوفة المدة والمسافة من مواقع بدء الزيارة والمركبة إلى مواقع انتهاء الزيارة والمركبة.

الحقول
rows[]

Row

تحدّد هذه السمة صفوف مصفوفة المدة والمسافة، ويجب أن تحتوي على عدد العناصر نفسه الذي تحتويه السمة ShipmentModel.duration_distance_matrix_src_tags.

vehicle_start_tag

string

علامة تحدّد المركبات التي تنطبق عليها مصفوفة المدة والمسافة هذه. إذا كان هذا الحقل فارغًا، ينطبق ذلك على جميع المركبات، ولا يمكن أن تكون هناك سوى مصفوفة واحدة.

يجب أن يتطابق كل بدء تشغيل مركبة مع مصفوفة واحدة بالضبط، أي يجب أن يتطابق أحد حقول start_tags مع vehicle_start_tag لمصفوفة واحدة (وللمصفوفة هذه فقط).

يجب أن يكون لكل مصفوفة vehicle_start_tag مختلف.

الصف

تحدّد هذه السمة صفًا في مصفوفة المدة والمسافة.

الحقول
durations[]

Duration

قيم المدة لصف معيّن يجب أن يحتوي على عدد العناصر نفسه الموجود في ShipmentModel.duration_distance_matrix_dst_tags.

meters[]

double

قيم المسافة لصف معيّن إذا لم تكن هناك تكاليف أو قيود تشير إلى المسافات في النموذج، يمكن ترك هذا الحقل فارغًا، وإلا يجب أن يحتوي على عدد العناصر نفسه الذي يحتويه durations.

الهدف

تحلّ الأهداف محلّ نموذج التكلفة بالكامل، وبالتالي فهي غير متوافقة مع التكاليف المحدّدة مسبقًا. يرتبط كل هدف بعدد من التكاليف المحدّدة مسبقًا، مثل المركبات أو الشحنات أو سمات الانتقال.

تجريبي: يمكنك الاطّلاع على https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request لمزيد من التفاصيل.

الحقول
type

Type

نوع الهدف.

weight

double

مقدار أهمية هذا الهدف مقارنةً بالأهداف الأخرى يمكن أن يكون هذا أي رقم غير سالب، ولا يلزم أن يكون مجموع الأوزان 1. تكون الأوزان تلقائيًا 1.0.

النوع

نوع الهدف الذي سيتم ربطه بمجموعة من التكاليف.

عمليات التعداد
DEFAULT سيتم استخدام مجموعة تلقائية من التكاليف لضمان تقديم حلّ معقول. ملاحظة: يمكن استخدام هذا الهدف بمفرده، ولكن سيتم دائمًا إضافته أيضًا بالوزن 1.0، كأساس، إلى الأهداف التي يحدّدها المستخدم، إذا لم يكن موجودًا من قبل.
MIN_DISTANCE أهداف "الحدّ الأدنى" تقليل إجمالي المسافة المقطوعة
MIN_WORKING_TIME تقليل إجمالي وقت العمل، الذي يتم جمعه على مستوى جميع المركبات
MIN_TRAVEL_TIME كما هو موضّح أعلاه، ولكن مع التركيز على مدة السفر فقط.
MIN_NUM_VEHICLES تقليل عدد المركبات المستخدَمة

PrecedenceRule

قاعدة الأولوية بين حدثَين (كل حدث هو استلام شحنة أو تسليمها): يجب أن يبدأ الحدث "الثاني" بعد offset_duration على الأقل من بدء الحدث "الأول".

يمكن أن تشير عدة أسبقيات إلى الأحداث نفسها (أو الأحداث ذات الصلة)، مثل "يحدث استلام الطلب B بعد تسليم A" و "يحدث استلام الطلب C بعد استلام الطلب B".

بالإضافة إلى ذلك، لا تسري الأسبقية إلا عند تنفيذ كلتا الشحنتَين، ويتم تجاهلها في ما عدا ذلك.

الحقول
first_is_delivery

bool

تشير إلى ما إذا كان الحدث "الأول" هو حدث تسليم.

second_is_delivery

bool

تشير إلى ما إذا كان الحدث "الثاني" هو حدث تسليم.

offset_duration

Duration

الإزاحة بين الحدث "الأول" والحدث "الثاني"، ويمكن أن تكون قيمة سالبة.

first_index

int32

فهرس الشحنة للحدث "الأول". يجب تحديد هذا الحقل.

second_index

int32

فهرس الشحنة للحدث "الثاني" يجب تحديد هذا الحقل.

ShipmentRoute

يمكن تقسيم مسار المركبة على محور الوقت على النحو التالي (نفترض أنّ هناك n زيارة):

  |            |            |          |       |  T[2], |        |      |
  | Transition |  Visit #0  |          |       |  V[2], |        |      |
  |     #0     |    aka     |   T[1]   |  V[1] |  ...   | V[n-1] | T[n] |
  |  aka T[0]  |    V[0]    |          |       | V[n-2],|        |      |
  |            |            |          |       | T[n-1] |        |      |
  ^            ^            ^          ^       ^        ^        ^      ^
vehicle    V[0].start   V[0].end     V[1].   V[1].    V[n].    V[n]. vehicle
 start     (arrival)   (departure)   start   end      start    end     end

يُرجى العِلم بأنّنا نفرّق بين ما يلي:

  • "الأحداث المحدّدة بوقت"، مثل بدء المركبة وإيقافها وبدء كل زيارة وانتهائها (المعروفة أيضًا باسم الوصول والمغادرة) وهي تحدث في ثانية معيّنة.
  • "الفواصل الزمنية"، مثل الزيارات نفسها والانتقال بين الزيارات على الرغم من أنّ الفواصل الزمنية قد تكون أحيانًا صفرية المدة، أي تبدأ وتنتهي في الثانية نفسها، إلا أنّها غالبًا ما تكون ذات مدة موجبة.

المتغيرات الثابتة:

  • إذا كانت هناك n زيارة، سيكون هناك n+1 عملية انتقال.
  • يسبق الزيارة دائمًا انتقال (الفهرس نفسه)، ويليها انتقال (الفهرس + 1).
  • يتبع بدء تشغيل المركبة دائمًا الانتقال رقم 0.
  • يسبق نهاية المركبة دائمًا الانتقال رقم n.

عند التكبير، إليك ما يحدث أثناء Transition وVisit:

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

أخيرًا، إليك كيفية ترتيب TRAVEL وBREAKS وDELAY وWAIT أثناء عملية الانتقال.

  • ولا تتداخل مع بعضها.
  • يجب أن يكون التأخير فريدًا ويجب أن يكون فترة زمنية متجاورة قبل الزيارة التالية مباشرةً (أو نهاية الرحلة). وبالتالي، يكفي معرفة مدة التأخير لمعرفة وقت بدئه وانتهائه.
  • فترات الاستراحة هي فترات زمنية متجاورة وغير متداخلة. يحدّد الردّ وقت بدء كل استراحة ومدتها.
  • يمكن "مقاطعة" حالتي TRAVEL وWAIT: يمكن مقاطعتهما عدة مرات خلال هذه الفترة الانتقالية. يمكن للعملاء افتراض أنّ السفر سيحدث "في أقرب وقت ممكن" وأنّ "الانتظار" سيشغل الوقت المتبقي.

مثال (معقّد):

                               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

تسلسل مرتّب من الزيارات يمثّل مسارًا. تمثّل visits[i] الزيارة رقم i في المسار. إذا كان هذا الحقل فارغًا، سيتم اعتبار المركبة غير مستخدَمة.

transitions[]

Transition

قائمة مرتّبة بعمليات الانتقال للمسار.

has_traffic_infeasibilities

bool

عند ضبط OptimizeToursRequest.consider_road_traffic على "صحيح"، يشير هذا الحقل إلى أنّه يتم توقّع التناقضات في أوقات الرحلات باستخدام تقديرات مدة الرحلة المستندة إلى حركة المرور. قد لا يتوفّر وقت كافٍ لإكمال الرحلة المعدّلة حسب حركة المرور، أو قد تحدث تأخيرات أو فواصل بين الزيارات، أو قبل الزيارة الأولى، أو بعد الزيارة الأخيرة، مع استيفاء إطارات الوقت المحدّدة للزيارة والمركبة. على سبيل المثال:

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

من المرجّح أن يكون وقت الوصول إلى next_visit متأخرًا عن الفترة الزمنية الحالية بسبب زيادة تقدير وقت السفر travel_duration(previous_visit, next_visit) نتيجة الازدحام المروري. بالإضافة إلى ذلك، قد يتم فرض تداخل بين استراحة وزيارة بسبب زيادة في تقديرات مدة الرحلة وقيود على فترة الزيارة أو الاستراحة.

route_polyline

EncodedPolyline

تمثّل هذه السمة الخط المتعدد الأضلاع المرمّز للمسار، ولا تتم تعبئتها إلا إذا تم ضبط OptimizeToursRequest.populate_polylines على "صحيح".

breaks[]

Break

فترات الاستراحة المجدوَلة للمركبة التي تسلك هذا المسار يمثّل التسلسل breaks فواصل زمنية، يبدأ كل منها عند start_time المقابل ويستمر لمدة duration ثانية.

metrics

AggregatedMetrics

مقاييس المدة والمسافة والحِمل لهذا المسار يتم جمع حقول AggregatedMetrics على مستوى كل ShipmentRoute.transitions أو ShipmentRoute.visits، حسب السياق.

vehicle_fullness

VehicleFullness

حقل VehicleFullness لاحتساب مدى اقتراب المقاييس المحدّدة من حدود المركبة المعنية حقولها هي نِسب بين حقل مقياس محدود (مثل AggregatedMetrics.travel_distance_meters) والحدّ الأقصى للمركبة ذي الصلة (مثل Vehicle.route_distance_limit).

تجريبي: قد يتغيّر سلوك هذا الحقل أو يتوقف عن الوجود في المستقبل.

route_costs

map<string, double>

تكلفة المسار، مقسّمة حسب حقول الطلبات ذات الصلة بالتكلفة المفاتيح هي مسارات أولية، نسبةً إلى OptimizeToursRequest للإدخال، مثل "model.shipments.pickups.cost"، والقيم هي التكلفة الإجمالية التي تم إنشاؤها بواسطة حقل التكلفة المقابل، ويتم تجميعها على مستوى المسار بأكمله. بعبارة أخرى، costs["model.shipments.pickups.cost"] هو مجموع جميع تكاليف الاستلام على طول المسار. يتم هنا عرض جميع التكاليف المحدّدة في النموذج بالتفصيل، باستثناء التكاليف المتعلّقة بسمات الانتقال التي يتم عرضها بشكل مجمّع فقط اعتبارًا من 2022/01.

route_total_cost

double

تمثّل هذه السمة التكلفة الإجمالية للمسار، أي مجموع كل التكاليف في خريطة التكاليف.

استراحة

بيانات تمثّل تنفيذ استراحة

الحقول
start_time

Timestamp

وقت بدء الاستراحة

duration

Duration

مدة الاستراحة

EncodedPolyline

تمثّل هذه السمة التمثيل المشفر لخط متعدد الأضلاع. يمكنك الاطّلاع على مزيد من المعلومات حول ترميز الخطوط المتعددة على الروابط التالية: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.

الحقول
points

string

سلسلة تمثّل النقاط المرمّزة للخط المتعدد الأضلاع.

الانتقال

الانتقال بين حدثَين على المسار اطّلِع على وصف ShipmentRoute.

إذا لم تكن المركبة مزوّدة بـ start_location و/أو end_location، تكون مقاييس التنقّل ذات الصلة صفرًا.

الحقول
travel_duration

Duration

مدة السفر خلال هذه الفترة الانتقالية

travel_distance_meters

double

المسافة المقطوعة أثناء عملية الانتقال

traffic_info_unavailable

bool

عند طلب بيانات حركة المرور من خلال OptimizeToursRequest.consider_road_traffic، وتعذُّر استرداد بيانات حركة المرور لـ Transition، يتم ضبط قيمة هذا البولياني على "صحيح". قد يكون ذلك مؤقتًا (خلل نادر في خوادم بيانات حركة المرور في الوقت الفعلي) أو دائمًا (لا تتوفّر بيانات لهذا الموقع الجغرافي).

delay_duration

Duration

مجموع مدة التأخير المطبَّقة على عملية النقل هذه إذا كان هناك أي تأخير، يبدأ التأخير قبل delay_duration ثانية بالضبط من الحدث التالي (زيارة أو نهاية رحلة المركبة). يمكنك الاطّلاع على TransitionAttributes.delay.

break_duration

Duration

مجموع مدة الفواصل الإعلانية التي تحدث أثناء هذا الانتقال، إن وُجدت يتم تخزين تفاصيل حول وقت بدء كل استراحة ومدتها في ShipmentRoute.breaks.

wait_duration

Duration

الوقت الذي تم قضاؤه في الانتظار خلال هذه الفترة الانتقالية تتوافق مدة الانتظار مع وقت عدم النشاط ولا تشمل وقت الاستراحة. يُرجى العِلم أيضًا أنّ مدة الانتظار هذه قد يتم تقسيمها إلى عدة فواصل زمنية غير متجاورة.

total_duration

Duration

إجمالي مدة الانتقال، ويتم توفيرها لتسهيل الأمر، وهي تساوي:

  • الزيارة التالية start_time (أو vehicle_end_time إذا كان هذا هو الانتقال الأخير) - start_time لهذا الانتقال
  • إذا كانت قيمة ShipmentRoute.has_traffic_infeasibilities هي false، ينطبق ما يلي أيضًا: `total_duration = travel_duration + delay_duration
  • break_duration + wait_duration`.
start_time

Timestamp

وقت بدء هذا الانتقال

route_polyline

EncodedPolyline

تمثيل خطوط متعدّدة الأضلاع المرمّزة للمسار الذي تم اتّباعه أثناء الانتقال. لا تتم تعبئة هذا الحقل إلا إذا تم ضبط populate_transition_polylines على "صحيح".

route_token

string

للقراءة فقط. رمز مبهم يمكن تمريره إلى Navigation SDK لإعادة إنشاء المسار أثناء التنقّل، وفي حال إعادة التوجيه، يتم الالتزام بالنية الأصلية عند إنشاء المسار. تعامَل مع هذا الرمز كبيانات ثنائية مبهمة. لا تقارِن قيمته بين الطلبات لأنّ قيمته قد تتغيّر حتى إذا كانت الخدمة تعرض المسار نفسه تمامًا. لا تتم تعبئة هذا الحقل إلا إذا تم ضبط populate_transition_polylines على "صحيح".

vehicle_loads

map<string, VehicleLoad>

حمولة المركبة خلال عملية النقل هذه، لكل نوع يظهر في Vehicle.load_limits لهذه المركبة، أو الذي يحتوي على Shipment.load_demands غير صفرية في بعض الشحنات التي تم تنفيذها على هذا المسار

تمثّل عمليات التحميل خلال عملية النقل الأولى عمليات التحميل الأولية لمسار المركبة. بعد ذلك، وبعد كل زيارة، تتم إضافة load_demands الزيارة أو طرحها للحصول على عمليات التحميل لعملية النقل التالية، وذلك استنادًا إلى ما إذا كانت الزيارة هي عملية استلام أو تسليم.

VehicleLoad

تعرض هذه السمة حمولة المركبة الفعلية في نقطة معيّنة على طول المسار، لنوع معيّن (راجِع Transition.vehicle_loads).

الحقول
amount

int64

تعرض هذه السمة مقدار الحمولة على المركبة، للنوع المحدّد. يتم عادةً تحديد وحدة التحميل حسب النوع. يمكنك الاطّلاع على Transition.vehicle_loads.

زيارة

زيارة يتم إجراؤها أثناء مسار، وتتطابق هذه الزيارة مع عملية استلام أو تسليم Shipment.

الحقول
shipment_index

int32

فهرس الحقل shipments في المصدر ShipmentModel

is_pickup

bool

صحيح إذا كانت الزيارة مرتبطة باستلام Shipment، وإلا تكون مرتبطة بالتسليم.

visit_request_index

int32

فهرس VisitRequest في حقل الاستلام أو التوصيل الخاص بـ Shipment (راجِع 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

visit_type

VisitType

اختياريّ. تحدّد هذه السمة نوع الزيارة. تتجاوز هذه السمة قيمة الحقل Visit.is_pickup.

injected_solution_location_token

int32

رمز مميّز غير شفاف يمثّل معلومات حول موقع الزيارة.

قد تتم تعبئة هذا الحقل في زيارات مسارات النتائج عندما تكون قيمة VisitRequest.avoid_u_turns هي "صحيح" لهذه الزيارة أو إذا كانت قيمة ShipmentModel.avoid_u_turns هي "صحيح" في الطلب OptimizeToursRequest.

تجريبية: يُرجى الاطّلاع على https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request لمزيد من التفاصيل.

VisitType

تشير هذه السمة إلى ما إذا كانت الزيارة هي لاستلام الطلب أو لتسليمه أو لزيارة Stop. لا يتم استخدام الزيارات إلى Stop إلا عند تفعيل ميزة "التحسين المتعدّد الوسائط".

عمليات التعداد
VISIT_TYPE_UNSPECIFIED نوع الزيارة غير محدّد.
PICKUP_SHIPMENT تشير الزيارة إلى استلام شحنة.
DELIVER_SHIPMENT تشير الزيارة إلى عملية تسليم شحنة.

ShipmentTypeIncompatibility

تحدّد هذه السمة حالات عدم التوافق بين الشحنات استنادًا إلى shipment_type. يتم حظر ظهور الشحنات غير المتوافقة على المسار نفسه استنادًا إلى وضع عدم التوافق.

الحقول
types[]

string

قائمة بالأنواع غير المتوافقة تُعدّ الشحنتان اللتان تتضمّنان shipment_types مختلفًا من بين الشحنات المُدرَجة "غير متوافقتَين".

incompatibility_mode

IncompatibilityMode

الوضع الذي تم تطبيقه على عدم التوافق

IncompatibilityMode

أوضاع تحدّد كيفية حظر الشحنات غير المتوافقة على المسار نفسه

عمليات التعداد
INCOMPATIBILITY_MODE_UNSPECIFIED وضع التوافق غير محدّد. يجب عدم استخدام هذه القيمة مطلقًا.
NOT_PERFORMED_BY_SAME_VEHICLE في هذا الوضع، لا يمكن أبدًا أن تشترك شحنتان بنوعَين غير متوافقَين في المركبة نفسها.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

في هذا الوضع، لا يمكن أبدًا أن تكون شحنتان من أنواع غير متوافقة في المركبة نفسها في الوقت نفسه:

  • ويمكنهما مشاركة المركبة نفسها فقط إذا تم تسليم إحدى الطلبات قبل استلام الطلب الآخر.
  • عندما تكون الشحنتان مخصّصتين للاستلام فقط (بدون تسليم) أو للتسليم فقط (بدون استلام)، لا يمكن أن تستخدم الشحنتان المركبة نفسها على الإطلاق.

ShipmentTypeRequirement

تحدّد هذه السمة المتطلبات بين الشحنات استنادًا إلى shipment_type، ويتم تحديد تفاصيل المتطلبات من خلال وضع المتطلبات.

الحقول
required_shipment_type_alternatives[]

string

قائمة بأنواع الشحن البديلة التي تتطلّبها dependent_shipment_types

dependent_shipment_types[]

string

يجب أن تتضمّن جميع الشحنات التي لها نوع في الحقل dependent_shipment_types شحنة واحدة على الأقل من النوع required_shipment_type_alternatives يتم تسليمها على المسار نفسه.

ملاحظة: لا يُسمح بسلاسل المتطلبات التي يعتمد فيها shipment_type على نفسه.

requirement_mode

RequirementMode

الوضع الذي تم تطبيقه على المتطلب

RequirementMode

أوضاع تحدّد مظهر الشحنات التابعة على مسار.

عمليات التعداد
REQUIREMENT_MODE_UNSPECIFIED وضع المتطلبات غير محدّد. يجب عدم استخدام هذه القيمة مطلقًا.
PERFORMED_BY_SAME_VEHICLE في هذا الوضع، يجب أن تشترك جميع الشحنات "التابعة" في المركبة نفسها مع شحنة واحدة على الأقل من شحناتها "المطلوبة".
IN_SAME_VEHICLE_AT_PICKUP_TIME

في وضع IN_SAME_VEHICLE_AT_PICKUP_TIME، يجب أن تتضمّن جميع الشحنات "التابعة" شحنة واحدة "مطلوبة" على الأقل في المركبة عند استلامها.

لذلك، يجب أن يتضمّن استلام شحنة "تابعة" أحد الخيارَين التاليَين:

  • شحنة "مطلوبة" للتسليم فقط تم تسليمها على الطريق بعد
  • تم استلام شحنة "مطلوبة" على المسار قبلها، وإذا كانت الشحنة "المطلوبة" تتضمّن عملية تسليم، يجب إجراء عملية التسليم هذه بعد استلام الشحنة "التابعة".
IN_SAME_VEHICLE_AT_DELIVERY_TIME كما في السابق، باستثناء أنّ الشحنات "التابعة" يجب أن تتضمّن شحنة "مطلوبة" في مركبتها في وقت التسليم.

SkippedShipment

تحدّد هذه السمة تفاصيل الشحنات التي لم يتم تنفيذها في الحلّ. في الحالات البسيطة و/أو إذا تمكّنا من تحديد سبب التخطّي، نُدرج السبب هنا.

الحقول
index

int32

يتوافق الفهرس مع فهرس الشحنة في المستند المصدر ShipmentModel.

label

string

نسخة من Shipment.label المقابلة، إذا تم تحديدها في Shipment

reasons[]

Reason

قائمة بالأسباب التي توضّح سبب تخطّي الشحنة. راجِع التعليق أعلاه Reason. إذا لم نتمكّن من معرفة سبب تخطّي شحنة، لن يتم تحديد الأسباب.

penalty_cost

double

هذه نسخة من Shipment.penalty_cost، تم تضمينها هنا لتسهيل معرفة مدى خطورة الشحنة التي تم تخطّيها.

تجريبي: قد يتغيّر سلوك هذا الحقل أو يتوقف عن الوجود في المستقبل.

estimated_incompatible_vehicle_ratio

double

النسبة المقدَّرة للمركبات التي لا يمكنها تنفيذ عملية الشحن هذه لأحد الأسباب أدناه على الأقل. ملاحظة: لا يتم ملء هذا الحقل إلا عندما تتضمّن الأسباب مركبة.

تجريبي: قد يتغيّر سلوك هذا الحقل أو يتوقف عن الوجود في المستقبل.

السبب

إذا كان بإمكاننا توضيح سبب تخطّي الشحنة، سيتم إدراج الأسباب هنا. إذا لم يكن السبب هو نفسه لجميع المركبات، سيحتوي reason على أكثر من عنصر واحد. لا يمكن أن تتضمّن الشحنة التي تم تخطّيها أسبابًا مكرّرة، أي أن تكون جميع الحقول متطابقة باستثناء example_vehicle_index. مثال:

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

الشحنة التي تم تخطّيها غير متوافقة مع جميع المركبات. قد تختلف الأسباب من مركبة إلى أخرى، ولكن سيتم تجاوز سعة "التفاح" في مركبة واحدة على الأقل (بما في ذلك المركبة 1)، وسيتم تجاوز سعة "الكمثرى" في مركبة واحدة على الأقل (بما في ذلك المركبة 3)، وسيتم تجاوز حد المسافة في مركبة واحدة على الأقل (بما في ذلك المركبة 1).

الحقول
code

Code

يُرجى الرجوع إلى تعليقات الرمز.

example_vehicle_indices[]

int32

هي نفسها example_vehicle_index، باستثناء أنّنا نقدّم قائمة بالمركبات المتعدّدة التي تم تحديدها. هذه القائمة ليست شاملة بالضرورة، ولا يتم ملؤها إلا إذا كانت قيمة [fill_example_vehicle_indices_in_skipped_reasons][] هي "صحيح".

تجريبي: قد يتغيّر سلوك هذا الحقل أو يتوقف عن الوجود في المستقبل.

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 للمركبة.

ملاحظة: يتم احتساب مدة السفر في أفضل سيناريو، أي كمسافة جيوديسية × 36 متر/ثانية (حوالي 130 كيلومتر/ساعة).

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT كما هو موضح أعلاه، ولكننا نقارن فقط بين الحد الأدنى لمدة الرحلة وtravel_duration_limit للمركبة.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS لا يمكن للمركبة إجراء هذه الشحنة في أفضل سيناريو (راجِع CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT لمعرفة كيفية احتساب الوقت) إذا بدأت في أقرب وقت بدء لها: سيؤدي إجمالي الوقت إلى انتهاء المركبة بعد آخر وقت انتهاء لها.
VEHICLE_NOT_ALLOWED حقل allowed_vehicle_indices الخاص بالشحنة ليس فارغًا، وهذه المركبة لا تنتمي إليه.
VEHICLE_IGNORED

قيمة الحقل ignore للمركبة هي true.

تجريبي: قد يتغيّر سلوك هذا الحقل أو يتوقف عن الوجود في المستقبل.

SHIPMENT_IGNORED

الحقل ignore الخاص بالشحنة هو true.

تجريبي: قد يتغيّر سلوك هذا الحقل أو يتوقف عن الوجود في المستقبل.

SKIPPED_IN_INJECTED_SOLUTION_CONSTRAINT

تم تخطّي الشحنة في injected_solution_constraint.

تجريبي: قد يتغيّر سلوك هذا الحقل أو يتوقف عن الوجود في المستقبل.

VEHICLE_ROUTE_IS_FULLY_SEQUENCE_CONSTRAINED

لا يسمح تخفيف قيود مسار المركبة المحدّد في injected_solution_constraint بإدراج أي زيارة.

تجريبي: قد يتغيّر سلوك هذا الحقل أو يتوقف عن الوجود في المستقبل.

ZERO_PENALTY_COST

لا تتضمّن الشحنة أي تكلفة جزائية. على الرغم من أنّ هذا الخيار قد يكون مفيدًا كخيار متقدّم للنمذجة، إلا أنّه قد يوضّح أيضًا سبب تخطّي الشحنة بعد حدوث ذلك.

تجريبي: قد يتغيّر سلوك هذا الحقل أو يتوقف عن الوجود في المستقبل.

TimeWindow

تفرض الفترات الزمنية قيودًا على وقت وقوع حدث معيّن، مثل وقت الوصول إلى موقع جغرافي أو وقت بدء تشغيل مركبة ووقت إيقافها.

تفرض حدود الفترة الزمنية الثابتة، start_time وend_time، الوقت الأبكر والأحدث للحدث، بحيث يكون start_time <= event_time <= end_time. الحدّ الأدنى لفترة المهلة المرنة، soft_start_time، يعبّر عن تفضيل لحدوث الحدث في الوقت soft_start_time أو بعده من خلال تكبُّد تكلفة تتناسب مع المدة التي يقع فيها الحدث قبل soft_start_time. يعبّر الحدّ الأعلى لفترة الوقت المرنة، soft_end_time، عن تفضيل حدوث الحدث في soft_end_time أو قبلها من خلال تحمّل تكلفة تتناسب مع المدة التي يحدث فيها الحدث بعد soft_end_time. يجب أن تكون قيم start_time وend_time وsoft_start_time وsoft_end_time ضمن حدود الوقت العالمية (راجِع ShipmentModel.global_start_time وShipmentModel.global_end_time)، ويجب أن تلتزم بما يلي:

  0 <= `start_time` <= `end_time` and
  0 <= `start_time` <= `soft_start_time` and
  0 <= `soft_end_time` <= `end_time`.
الحقول
start_time

Timestamp

تمثّل هذه السمة وقت بدء نافذة الموعد النهائي. وفي حال عدم تحديدها، سيتم ضبطها على ShipmentModel.global_start_time.

end_time

Timestamp

تمثّل هذه السمة وقت انتهاء الفترة الزمنية المحدّدة. إذا لم يتم تحديدها، سيتم ضبطها على ShipmentModel.global_end_time.

soft_start_time

Timestamp

تمثّل هذه السمة وقت البدء التدريجي للفترة الزمنية.

soft_end_time

Timestamp

تمثّل هذه السمة وقت انتهاء الفترة الزمنية.

cost_per_hour_before_soft_start_time

double

تكلفة لكل ساعة تُضاف إلى التكاليف الأخرى في النموذج إذا وقع الحدث قبل soft_start_time، ويتم احتسابها على النحو التالي:

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

يجب أن تكون هذه التكلفة موجبة، ولا يمكن ضبط الحقل إلا إذا تم ضبط soft_start_time.

cost_per_hour_after_soft_end_time

double

تكلفة لكل ساعة تُضاف إلى التكاليف الأخرى في النموذج إذا وقع الحدث بعد soft_end_time، ويتم احتسابها على النحو التالي:

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

يجب أن تكون هذه التكلفة موجبة، ولا يمكن ضبط الحقل إلا إذا تم ضبط soft_end_time.

TransitionAttributes

تحدّد هذه السمة سمات عمليات الانتقال بين زيارتَين متتاليتَين على مسار. يمكن تطبيق عدة TransitionAttributes على عملية الانتقال نفسها: في هذه الحالة، يتم جمع كل التكاليف الإضافية ويتم تطبيق القيد أو الحد الأكثر صرامة (باتّباع دلالات "و" الطبيعية).

الحقول
src_tag

string

علامات تحدّد مجموعة عمليات الانتقال (من المصدر إلى الوجهة) التي تنطبق عليها هذه السمات.

تتطابق زيارة المصدر أو بداية المركبة إذا كان 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

تحدّد هذه السمة التأخير الذي يحدث عند تنفيذ هذا الانتقال.

يحدث هذا التأخير دائمًا بعد الانتهاء من الزيارة المصدر وقبل بدء الزيارة الوجهة.

يوري

معرّف موارد منتظم يشير إلى مورد يمكن قراءته وكتابته من خلال Route Optimization API.

الحقول
uri

string

معرّف الموارد المنتظم (URI) للمرجع، وقد لا يكون المرجع متوفّرًا بعد.

يتم ترميز محتوى المورد كملف JSON أو textproto. لا تتوفّر سوى موارد Google Cloud Storage. إذا تم ترميز المورد كملف JSON، يجب أن ينتهي اسم المورد باللاحقة .json. وإذا تم ترميز المورد كملف textproto، يجب أن ينتهي اسم المورد باللاحقة .txtpb. على سبيل المثال، قد يبدو معرّف الموارد المنتظم (URI) الخاص بخدمة Google Cloud Storage لملف JSON مرمّز على النحو التالي: gs://bucket/path/input/object.json.

مركبة

تُستخدَم لتمثيل مركبة في مشكلة متعلّقة بالشحن. سيؤدي حلّ مشكلة متعلّقة بالشحن إلى إنشاء مسار يبدأ من 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_hour بدلاً من cost_per_traveled_hour فقط إلى حدوث وقت استجابة إضافي.

cost_per_traveled_hour

double

تكلفة كل ساعة يتم فيها قطع مسافة على مسار المركبة لا تنطبق هذه التكلفة إلا على مدة التنقل التي يستغرقها المسار (أي المدة المُسجّلة في ShipmentRoute.transitions)، ولا تشمل وقت الانتظار ووقت الزيارة.

cost_per_kilometer

double

تكلفة الكيلومتر الواحد من مسار المركبة يتم تطبيق هذه التكلفة على المسافة التي تم تسجيلها في ShipmentRoute.transitions ولا تنطبق على أي مسافة تم قطعها ضمنيًا من arrival_location إلى departure_location في VisitRequest واحدة.

fixed_cost

double

تكلفة ثابتة يتم تطبيقها إذا تم استخدام هذه المركبة للتعامل مع شحنة.

used_if_route_is_empty

bool

لا ينطبق هذا الحقل إلا على المركبات التي لا يخدم مسارها أي شحنات، ويشير إلى ما إذا كان يجب اعتبار المركبة مستخدَمة أم لا في هذه الحالة.

في حال ضبط القيمة على "صحيح"، ستنتقل المركبة من موقعها الجغرافي عند البدء إلى موقعها الجغرافي عند الانتهاء حتى إذا لم تنقل أي شحنات، وسيتم أخذ تكاليف الوقت والمسافة الناتجة عن رحلتها من موقع البدء إلى موقع الانتهاء في الاعتبار.

وفي ما عدا ذلك، لا تنتقل المركبة من نقطة البداية إلى نقطة النهاية، ولا يتم تحديد أي break_rule أو تأخير (من TransitionAttributes) لهذه المركبة. وفي هذه الحالة، لا يحتوي ShipmentRoute الخاص بالمركبة على أي معلومات باستثناء فهرس المركبة وتصنيفها.

route_duration_limit

DurationLimit

الحدّ الأقصى لمدة مسار المركبة الإجمالية في OptimizeToursResponse معيّن، مدة مسار المركبة هي الفرق بين vehicle_end_time وvehicle_start_time.

travel_duration_limit

DurationLimit

الحدّ المطبَّق على مدة رحلة مسار المركبة. في OptimizeToursResponse معيّن، تكون مدة رحلة المسار هي مجموع كل transitions.travel_duration.

route_distance_limit

DistanceLimit

الحدّ المطبَّق على إجمالي مسافة مسار المركبة في OptimizeToursResponse معيّن، تكون مسافة المسار هي مجموع كل transitions.travel_distance_meters.

extra_visit_duration_for_visit_type

map<string, Duration>

تحدّد هذه السمة خريطة من سلاسل visit_types إلى المدد. المدة هي الوقت بالإضافة إلى VisitRequest.duration الذي يجب أخذه في الزيارات التي تتضمّن visit_types المحدّدة. تؤدي مدة الزيارة الإضافية هذه إلى زيادة التكلفة إذا تم تحديد cost_per_hour. لا يمكن أن تكون المفاتيح (أي visit_types) سلاسل فارغة.

إذا كان طلب الزيارة يتضمّن أنواعًا متعددة، ستتم إضافة مدة لكل نوع في الخريطة.

break_rule

BreakRule

تصف هذه السمة جدول فترات الاستراحة الذي سيتم فرضه على هذه المركبة. إذا كان الحقل فارغًا، لن يتم تحديد أي فترات استراحة لهذه المركبة.

label

string

تحدّد هذه السمة تصنيفًا لهذه المركبة، ويتم عرض هذا التصنيف في الردّ كـ vehicle_label الخاص بـ ShipmentRoute المقابل.

ignore

bool

إذا كانت القيمة صحيحة، يجب أن تكون قيمة used_if_route_is_empty خاطئة، وستبقى هذه المركبة غير مستخدَمة.

إذا تمّت عملية شحن بواسطة مركبة تم تجاهلها في injected_first_solution_routes، سيتم تخطّيها في الحلّ الأول، ولكن يمكن تنفيذها في الاستجابة.

إذا تمّت عملية شحن بواسطة مركبة تمّ تجاهلها في injected_solution_constraint وكان أيّ عملية استلام الطلب/تسليم ذات صلة مقيّدة بالبقاء على متن المركبة (أي لم يتمّ تخفيف القيود إلى المستوى RELAX_ALL_AFTER_THRESHOLD)، يتمّ تخطّيها في الردّ. إذا كانت الشحنة تتضمّن حقل allowed_vehicle_indices غير فارغ وتم تجاهل جميع المركبات المسموح بها، سيتم تخطّيها في الردّ.

travel_duration_multiple

double

تحدّد هذه السمة عاملاً مضاعفًا يمكن استخدامه لزيادة أوقات تنقّل هذه المركبة أو تقليلها. على سبيل المثال، يعني ضبط هذه السمة على 2.0 أنّ هذه المركبة أبطأ وتستغرق أوقات تنقّل تبلغ ضعف أوقات تنقّل المركبات العادية. لا يؤثّر هذا المضاعف في مدة الزيارات، ولكنّه يؤثّر في التكلفة إذا تم تحديد cost_per_hour أو cost_per_traveled_hour. يجب أن تكون القيمة ضمن النطاق [0.001, 1000.0]. إذا لم يتم ضبطها، تكون المركبة عادية، ويتم اعتبار هذا المضاعف 1.0.

تحذير: سيتم تقريب أوقات الرحلات إلى أقرب ثانية بعد تطبيق هذا المضاعف ولكن قبل إجراء أي عمليات رقمية، وبالتالي، قد يؤدي المضاعف الصغير إلى فقدان الدقة.

يمكنك أيضًا الاطّلاع على extra_visit_duration_for_visit_type أدناه.

DurationLimit

حدّ يحدّد الحدّ الأقصى لمدة مسار المركبة، ويمكن أن يكون حدًّا صارمًا أو مرنًا.

عند تحديد حقل حدّ أقصى مرن، يجب تحديد الحدّ الأقصى المرن والتكلفة المرتبطة به معًا.

الحقول
max_duration

Duration

حدّ أقصى صارم يقيّد المدة لتكون max_duration على الأكثر

soft_max_duration

Duration

حدّ أقصى غير إلزامي للمدة، ولكن عند تجاوزه، ستتحمّل المسار تكلفة تضاف إلى التكاليف الأخرى المحدّدة في النموذج، مع استخدام الوحدة نفسها.

يجب أن تكون قيمة soft_max_duration غير سالبة في حال تحديدها. إذا تم تحديد max_duration أيضًا، يجب أن تكون قيمة soft_max_duration أقل من max_duration.

quadratic_soft_max_duration

Duration

حدّ مرن لا يفرض حدًا أقصى للمدة، ولكن عند تجاوزه، يتكبّد المسار تكلفة تربيعية في المدة. تُضاف هذه التكلفة إلى التكاليف الأخرى المحدّدة في النموذج، مع استخدام الوحدة نفسها.

في حال ضبط quadratic_soft_max_duration، يجب استيفاء الشروط التالية:

  • يجب أن تكون القيمة غير سالبة.
  • يجب تحديد max_duration.
  • يجب أن تكون قيمة quadratic_soft_max_duration أقل من قيمة max_duration.
  • يجب ألا يزيد الفرق عن يوم واحد: max_duration - quadratic_soft_max_duration <= 86400 seconds
cost_per_hour_after_soft_max

double

التكلفة لكل ساعة يتم تكبدها في حال انتهاك الحد soft_max_duration. تكون التكلفة الإضافية 0 إذا كانت المدة أقل من الحد، وإلا فإن التكلفة تعتمد على المدة على النحو التالي:

  cost_per_hour_after_soft_max * (duration - soft_max_duration)

يجب أن تكون التكلفة غير سالبة.

cost_per_square_hour_after_quadratic_soft_max

double

تمثّل هذه السمة التكلفة لكل ساعة مربّعة يتم تكبّدها في حال انتهاك الحدّ الأقصى quadratic_soft_max_duration.

تكون التكلفة الإضافية 0 إذا كانت المدة أقل من الحدّ الأدنى، وإلا ستعتمد التكلفة على المدة على النحو التالي:

  cost_per_square_hour_after_quadratic_soft_max *
  (duration - quadratic_soft_max_duration)^2

يجب أن تكون التكلفة غير سالبة.

LoadLimit

تحدّد هذه السمة الحدّ الأقصى للحمولة المسموح بها في مركبة، مثلاً "يمكن لهذه الشاحنة أن تحمل ما يصل إلى 3500 كغ فقط". يمكنك الاطّلاع على load_limits.

الحقول
soft_max_load

int64

حدّ أقصى مرن لعملية التحميل يمكنك الاطّلاع على cost_per_unit_above_soft_max.

cost_per_unit_above_soft_max

double

إذا تجاوزت الحمولة soft_max_load على طول مسار هذه المركبة، سيتم تطبيق غرامة التكلفة التالية (مرة واحدة فقط لكل مركبة): (الحمولة - soft_max_load) * cost_per_unit_above_soft_max. يجب أن تكون جميع التكاليف متطابقة مع وحدة Shipment.penalty_cost. لا يمكن تحديد الحدود المرنة إلا على الأنواع التي تنطبق على عمليات الاستلام فقط أو عمليات التسليم فقط في جميع أنحاء النموذج.

start_load_interval

Interval

تمثّل هذه السمة الفاصل الزمني المقبول لتحميل المركبة في بداية المسار.

end_load_interval

Interval

تعرض هذه السمة الفترة الزمنية المقبولة لتحميل المركبة في نهاية المسار.

max_load

int64

الحد الأقصى المقبول للحِمل

cost_per_kilometer

LoadCost

تكلفة نقل وحدة واحدة من الحمولة لمسافة كيلومتر واحد لهذه المركبة يمكن استخدام ذلك كبديل لاستهلاك الوقود: إذا كان الحمل عبارة عن وزن (بالنيوتن)، فإنّ الحمل مضروبًا في الكيلومتر يساوي الطاقة.

تجريبي: يمكنك الانتقال إلى https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request لمزيد من التفاصيل.

cost_per_traveled_hour

LoadCost

تكلفة التنقّل بوحدة حمولة واحدة خلال ساعة واحدة لهذه المركبة

تجريبي: يمكنك الانتقال إلى https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request لمزيد من التفاصيل.

الفاصل الزمني

فترة مبالغ التحميل المقبولة

الحقول
min

int64

الحدّ الأدنى المقبول للحِمل، ويجب أن تكون قيمته ≥ 0. وفي حال تحديد كلتيهما، يجب أن تكون قيمة minmax.

max

int64

الحد الأقصى للحِمل المقبول، ويجب أن تكون القيمة ≥ 0. في حال عدم تحديدها، لن يتم فرض أي قيود على الحد الأقصى للحِمل من خلال هذه الرسالة. وفي حال تحديد كلتيهما، يجب أن تكون قيمة minmax.

LoadCost

تكلفة نقل وحدة واحدة من الحمولة خلال Transition بالنسبة إلى حمولة معيّنة، تكون التكلفة هي مجموع جزأين:

  • min(load, load_threshold) * cost_per_unit_below_threshold
  • max(0, load - load_threshold) * cost_per_unit_above_threshold

باستخدام هذه التكلفة، تفضّل الحلول تلبية الطلبات المرتفعة أولاً، أو بعبارة أخرى، تلبية الطلبات المرتفعة أخيرًا. على سبيل المثال، إذا كانت إحدى المركبات تتضمّن

load_limit {
  key: "weight"
  value {
    cost_per_kilometer {
      load_threshold: 15
      cost_per_unit_below_threshold: 2.0
      cost_per_unit_above_threshold: 10.0
    }
  }
}

ومساره هو start,pickup,pickup,delivery,delivery,end مع عمليات الانتقال التالية:

transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }

عندئذٍ تكون التكلفة التي تتحمّلها هذه LoadCost هي (cost_below * load_below * kilometers + cost_above * load_above * kms)

  • الانتقال 0: 0.0
  • الانتقال 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • الانتقال 2: 2.0 * 15 * 1.0 + 10.0 * (20 - 15) * 1.0 = 80.0
  • الانتقال 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • الانتقال 4: 0.0

إذًا، يكون LoadCost على طول المسار 120.0.

ومع ذلك، إذا كان المسار هو start,pickup,delivery,pickup,delivery,end مع عمليات الانتقال:

transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }

عندئذٍ تكون التكلفة التي تتحمّلها LoadCost هي

  • الانتقال 0: 0.0
  • الانتقال 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • الانتقال 2: 0.0
  • الانتقال 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • الانتقال 4: 0.0

في هذه الحالة، تكون قيمة LoadCost على طول المسار 40.0.

LoadCost يجعل الحلول التي تتضمّن انتقالات محمّلة بشكل كبير أكثر تكلفة.

تجريبي: يمكنك الانتقال إلى https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request لمزيد من التفاصيل.

الحقول
load_threshold

int64

مقدار الحمولة الذي يتغيّر عنده سعر نقل وحدة الحمولة من cost_per_unit_below_threshold إلى cost_per_unit_above_threshold. يجب أن يكون >= 0.

cost_per_unit_below_threshold

double

تكلفة نقل وحدة حمولة، لكل وحدة بين 0 والحدّ الأقصى يجب أن تكون قيمة محدودة وأكبر من أو تساوي 0.

cost_per_unit_above_threshold

double

تكلفة نقل وحدة حمولة، لكل وحدة تتجاوز الحدّ. في حالة الحدّ الأدنى الخاص = 0، تكون هذه تكلفة ثابتة لكل وحدة. يجب أن تكون قيمة محدودة وأكبر من أو تساوي 0.

TravelMode

وسائل النقل التي يمكن أن تستخدمها المركبات

يجب أن تكون هذه القيم مجموعة فرعية من وسائل النقل في Routes API من "منصة خرائط Google". يمكنك الاطّلاع على https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode

ملاحظة: طرق WALKING هي في مرحلة الإصدار التجريبي وقد لا تتضمّن أحيانًا أرصفة واضحة أو ممرات للمشاة. يجب عرض هذا التحذير للمستخدم في جميع مسارات المشي التي تعرضها في تطبيقك.

عمليات التعداد
TRAVEL_MODE_UNSPECIFIED وضع السفر غير المحدّد، وهو ما يعادل DRIVING.
DRIVING وضع التنقّل الذي يتوافق مع اتجاهات القيادة (سيارة، وما إلى ذلك)
WALKING وسيلة النقل التي تتوافق مع اتجاهات المشي

UnloadingPolicy

سياسة تحديد كيفية تفريغ المركبة، وتنطبق فقط على الشحنات التي تتضمّن عملية استلام وتسليم.

يمكن إجراء عمليات شحن أخرى في أي مكان على المسار بغض النظر عن unloading_policy.

عمليات التعداد
UNLOADING_POLICY_UNSPECIFIED سياسة تفريغ غير محدّدة، ويجب أن تتم عمليات التسليم بعد عمليات الاستلام المقابلة.
LAST_IN_FIRST_OUT يجب أن تتم عمليات التسليم بترتيب عكسي لعمليات الاستلام
FIRST_IN_FIRST_OUT يجب أن تتم عمليات التسليم بالترتيب نفسه الذي تتم به عمليات الاستلام

VehicleFullness

VehicleFullness هو مقياس يحسب مدى امتلاء مركبة. تتراوح قيمة كل حقل VehicleFullness بين 0 و1، ويتم احتسابها كنسبة بين حقل مقياس محدود (مثل AggregatedMetrics.travel_distance_meters) والحد الأقصى المرتبط به للمركبة (مثل Vehicle.route_distance_limit)، إذا كان متاحًا. وإلا، ستبقى نسبة الامتلاء غير مضبوطة. وإذا كان الحد الأقصى 0، سيتم ضبط الحقل على 1. ملاحظة: عندما يكون المسار عرضة لعدم إمكانية التنقل بسبب الازدحام المروري، قد تتجاوز بعض نسب الامتلاء الأولية 1.0، على سبيل المثال، قد تتجاوز المركبة الحد الأقصى للمسافة. في هذه الحالات، نضبط قيم الامتلاء على 1.0.

الحقول
max_fullness

double

الحد الأقصى لجميع الحقول الأخرى في هذه الرسالة

distance

double

النسبة بين AggregatedMetrics.travel_distance_meters وVehicle.route_distance_limit إذا لم يتم ضبط Vehicle.route_distance_limit، لن يتم ضبط هذا الحقل.

travel_duration

double

نسبة Vehicle.travel_duration_limit إلى [AggregatedMetrics.travel_duration_seconds][]. إذا لم يتم ضبط Vehicle.travel_duration_limit، لن يتم ضبط هذا الحقل.

active_duration

double

نسبة Vehicle.route_duration_limit إلى [AggregatedMetrics.total_duration_seconds][]. إذا لم يتم ضبط Vehicle.route_duration_limit، سيتم إلغاء ضبط هذا الحقل.

max_load

double

النسبة القصوى بين جميع أنواع [AggregatedMetrics.max_load][] وVehicle.load_limits الخاص بها إذا لم يتم ضبط جميع حقول Vehicle.load_limits، سيتم إلغاء ضبط هذا الحقل.

active_span

double

تمثّل هذه السمة النسبة (vehicle_end_time - vehicle_start_time) / (latest_vehicle_end_time - earliest_vehicle_start_time) لمركبة معيّنة. في حال عدم توفّر المقام، يتم استخدام (ShipmentModel.global_end_time - ShipmentModel.global_start_time) بدلاً منه.

النقطة الوسيطة

تغليف نقطة طريق تحدّد نقاط الطريق مواقع الوصول والمغادرة لطلبات VisitRequest، ومواقع البدء والانتهاء للمركبات.

الحقول
side_of_road

bool

اختياريّ. تشير إلى أنّ الموقع الجغرافي لنقطة على المسار هذه يهدف إلى أن تتوقف المركبة على جانب معيّن من الطريق. عند ضبط هذه القيمة، سيمرّ المسار بالموقع الجغرافي لكي تتمكّن المركبة من التوقف على جانب الطريق الذي يميل إليه الموقع الجغرافي من وسط الطريق. لا يعمل هذا الخيار مع وضع التنقّل "سيرًا على الأقدام".

vehicle_stopover

bool

تشير إلى أنّ نقطة الطريق مخصّصة لتتوقف فيها المركبات، إما لالتقاط الركاب أو إنزالهم. لا يعمل هذا الخيار إلا مع وضع السفر "القيادة"، وعندما يكون "location_type" هو "location".

تجريبي: قد يتغيّر سلوك هذا الحقل أو يتوقف عن الوجود في المستقبل.

حقل الربط location_type طرق مختلفة لتمثيل موقع جغرافي يمكن أن يكون التعليق location_type إحدى القيم التالية فقط:
location

Location

تمثّل هذه السمة نقطة محدّدة باستخدام الإحداثيات الجغرافية، بما في ذلك عنوان اختياري.

place_id

string

تمثّل هذه السمة رقم تعريف المكان الخاص بنقطة الاهتمام المرتبط بنقطة الطريق.

عند استخدام معرّف مكان لتحديد موقع الوصول أو المغادرة في VisitRequest، استخدِم معرّف مكان محدّدًا بما يكفي لتحديد موقع LatLng للتنقّل إلى المكان. على سبيل المثال، يكون معرّف المكان الذي يمثّل مبنى مناسبًا، ولكن لا يُنصح باستخدام معرّف المكان الذي يمثّل طريقًا.