InjectedSolutionConstraint

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

تمثيل JSON
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "constraintRelaxations": [
    {
      object (ConstraintRelaxation)
    }
  ]
}
الحقول
routes[]

object (ShipmentRoute)

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

skippedShipments[]

object (SkippedShipment)

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

constraintRelaxations[]

object (ConstraintRelaxation)

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

ConstraintRelaxation

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

تمثيل JSON
{
  "relaxations": [
    {
      object (Relaxation)
    }
  ],
  "vehicleIndices": [
    integer
  ]
}
الحقول
relaxations[]

object (Relaxation)

جميع إجراءات تخفيف القيود المفروضة على الزيارات التي سيتم تطبيقها على الزيارات على المسارات التي تتضمّن مركبات في vehicleIndices

vehicleIndices[]

integer

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

يتمّ ربط فهرس المركبة بالطريقة نفسها التي يتمّ بها ربط ShipmentRoute.vehicle_index، إذا كانت قيمة interpretInjectedSolutionsUsingLabels صحيحة (راجِع التعليق fields).

استرخاء

إذا كان الحقل relaxations فارغًا، يتم فرض قيود كاملة على وقت بدء جميع الزيارات على routes وتسلسلها، ولا يمكن إدراج أي زيارات جديدة أو إضافتها إلى هذه المسارات. بالإضافة إلى ذلك، يكون وقت بدء ونهاية المركبة في routes محدودًا بالكامل، ما لم تكن المركبة فارغة (أي ليس لها زيارات وتم ضبط usedIfRouteIsEmpty على false في النموذج).

يحدِّد 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": string,
  "thresholdVisitCount": integer
}
الحقول
level

enum (Level)

مستوى تخفيف القيود الذي ينطبق عند استيفاء الشروط في thresholdTime أو بعد ذلك وthresholdVisitCount على الأقل

thresholdTime

string (Timestamp format)

الوقت الذي يمكن فيه تطبيق level أو بعده

يجب أن يكون طابعًا زمنيًا بالتنسيق RFC3339 UTC "Zulu"‎ وبدقة تصل إلى نانوثانية وما يصل إلى تسعة أرقام كسور. أمثلة: "2014-10-02T15:01:23Z" و"2014-10-02T15:01:23.045123456Z"

thresholdVisitCount

integer

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