تم إدخال الحل في الطلب، بما في ذلك معلومات عن الزيارات التي يجب تقييدها وكيفية تقييدها.
تمثيل JSON |
---|
{ "routes": [ { object ( |
الحقول | |
---|---|
routes[] |
مسارات الحل المطلوب إدخاله. قد يتم حذف بعض المسارات من الحلّ الأصلي. يجب أن تستوفي المسارات والشحنات التي يتم تخطّيها افتراضات الصلاحية الأساسية المُدرجة لدى |
skippedShipments[] |
تخطّي شحنات الحلّ المطلوب حقنها قد يتم حذف بعضها من الحلّ الأصلي. اطّلِع على الحقل |
constraintRelaxations[] |
بالنسبة إلى مجموعات المركبات صفر أو أكثر، تحدد متى يتم تخفيف القيود ومقدارها. إذا كان هذا الحقل فارغًا، ستكون كل مسارات المركبات غير الفارغة مقيّدة بالكامل. |
ConstraintRelaxation
بالنسبة إلى مجموعة المركبات، يتم تحديد الحدّ أو الحدود التي سيتم تخفيف قيود الزيارات إليها وإلى أي مستوى. يجب فرض قيود على عمليات الشحن المُدرَجة في الحقل skipped_shipment
ليتم تخطّيها. أي أنّه لا يمكن تنفيذها.
تمثيل JSON |
---|
{
"relaxations": [
{
object ( |
الحقول | |
---|---|
relaxations[] |
كل التخفيفات من قيود الزيارات التي سيتم تطبيقها على الزيارات على المسارات التي تحتوي على مركبات في " |
vehicleIndices[] |
تحدّد هذه السمة مؤشرات المركبات التي ينطبق عليها قيد الزيارات يتم ربط فهرس المركبات بالطريقة نفسها المتّبعة مع |
استرخاء
إذا كانت السمة relaxations
فارغة، سيتم تحديد وقت البدء وتسلسل جميع الزيارات على routes
بشكل كامل ولا يمكن إدراج زيارات جديدة أو إضافتها إلى تلك المسارات. بالإضافة إلى ذلك، يكون وقت بدء المركبة وانتهائها في routes
مقيَّدًا تمامًا، ما لم تكن المركبة فارغة (أي لم تتم زيارتها وتم ضبط usedIfRouteIsEmpty
على "خطأ" في النموذج).
يحدد relaxations(i).level
مستوى تخفيف القيد المطبق على زيارة #j تتوافق مع:
route.visits(j).start_time >= relaxations(i).threshold_time
وj + 1 >= relaxations(i).threshold_visit_count
وبالمثل، يتم تخفيض بدء تشغيل المركبة إلى relaxations(i).level
في حال استيفاء ما يلي:
vehicleStartTime >= relaxations(i).threshold_time
و- تم تخفيض مستوى
relaxations(i).threshold_visit_count == 0
ونهاية المركبة إلىrelaxations(i).level
إذا كانت تستوفي الشروط التالية: vehicleEndTime >= relaxations(i).threshold_time
وroute.visits_size() + 1 >= relaxations(i).threshold_visit_count
لتطبيق مستوى الاسترخاء إذا كانت الزيارة تتوافق مع thresholdVisitCount
أو thresholdTime
، أضِف relaxations
بقيمة level
نفسها: أحدهما تم ضبط thresholdVisitCount
فقط والآخر تم ضبط thresholdTime
عليه فقط. إذا استوفت زيارة شروط عدة أنواع من relaxations
، ينطبق المستوى الأكثر استرخاءً. نتيجةً لذلك، يصبح مستوى الاسترخاء أكثر استرخاءً بدءًا من بداية زيارة المركبة عبر زيارات المسار وصولاً إلى نهايته، أي أنّ مستوى الاسترخاء لا ينخفض مع تقدّم المسار.
تجدر الإشارة إلى أنّ توقيت وتسلسل زيارات المسارات التي لا تستوفي شروط الحدّ الأدنى لأي relaxations
تكون محدودة تمامًا ولا يمكن إدراج أي زيارات في هذه التسلسلات. وكذلك، إذا كانت بداية المركبة أو نهايتها لا تلبّي شروط أي استرخاء، يكون الوقت ثابتًا، ما لم تكن المركبة فارغة.
تمثيل JSON |
---|
{
"level": enum ( |
الحقول | |
---|---|
level |
مستوى تخفيف القيد الذي ينطبق عند استيفاء الشروط في |
thresholdTime |
الوقت الذي يمكن فيه تطبيق الاسترخاء طابع زمني بتنسيق RFC3339 حسب التوقيت العالمي المنسَّق (UTC) "زولو" بدقة نانوثانية وما يصل إلى تسعة أرقام كسرية. أمثلة: |
thresholdVisitCount |
عدد الزيارات التي يمكن تطبيق فترة تخفيفها أمّا إذا كانت القيمة هي |
المستوى
تعبِّر عن مستويات تخفيف القيد المختلفة، والتي يتم تطبيقها على زيارة وتلك التي تليها عندما تستوفي شروط الحدّ.
التعداد أدناه مرتّبًا على زيادة الاسترخاء.
عمليات التعداد | |
---|---|
LEVEL_UNSPECIFIED |
مستوى الاسترخاء الافتراضي الضمني: لا يتم تخفيف أي قيود، أي تكون جميع الزيارات محدودة بالكامل. يجب عدم استخدام هذه القيمة صراحةً في |
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 ، ولكن المركبة مريحة أيضًا: تكون الزيارات مجانية تمامًا عند بلوغ الحد الأدنى أو بعده، ومن المحتمل أن تصبح الزيارات غير مكتملة. |