تم إدخال الحل في الطلب، بما في ذلك معلومات عن الزيارات التي يجب تقييدها وكيفية تقييدها.
تمثيل 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 "Zulu" ، مع دقة نانوثانية وما يصل إلى تسعة أرقام كسرية. أمثلة: |
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 ، ولكن المركبة هادئة أيضًا: تكون الزيارات مجانية بالكامل في وقت الحدّ الأدنى أو بعده، وقد تصبح الزيارات غير صالحة. |