الفترات الزمنية

تتوفّر الفترات الزمنية في `ShipmentModel`، وفي `Shipment` في عناصر عمليات الاستلام والتسليم، وفي `Vehicle`.

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

يمكن أن تتيح الفترات الزمنية تحقيق أهداف مثل:

  • تحديد أولوية إكمال عمليات استلام الطلبات وتسليمها خلال أُطر زمنية محدّدة
  • تخطيط المسارات للعمل خلال ساعات العمل الإجمالية
  • ضمان بدء المركبات للمسارات وإنهاءها خلال أُطر زمنية محدّدة

البنية

كما هو موضّح في المخطّط البياني، يتم تنظيم الفترات الزمنية على النحو التالي:

قائمة التحقُّق من العناصر الأساسية

تصف قائمة التحقُّق التالية المعرفة الأساسية التي تمنع الأخطاء المحتملة المتعلقة بالفترات الزمنية. ويمكن أن تساعدك هذه القائمة في التحقّق من صحة طلبك وتحديد المشاكل في ردّك وحلّها.

.

الخصائص

يوضّح الجدول التالي سمات الفترة الزمنية العامة.

الموقع التنسيق الوصف
globalStartTime Timestamp أبكر وقت لأي حدث
globalEndTime Timestamp أحدث وقت لأي حدث

يوضّح الجدول التالي سمات الفترة الزمنية في الشحنات والمركبات.

أحد الوالدين الموقع التنسيق الوصف
Shipment.pickups timeWindows مصفوفة من أنواع رسائل TimeWindow تحدّد الفواصل الزمنية لاستلام شحنة
Shipment.deliveries timeWindows تحدّد الفواصل الزمنية لتسليم شحنة
Vehicle startTimeWindows تحدّد وقت بدء جدول تشغيل المركبة
endTimeWindows تحدّد وقت انتهاء جدول تشغيل المركبة

يوضّح الجدول التالي سمات نوع رسالة TimeWindow.

الموقع التنسيق الوصف
startTime سلسلة (تنسيق RFC3339 UTC "Zulu") بداية الفترة الزمنية
endTime سلسلة (تنسيق RFC3339 UTC "Zulu") نهاية الفترة الزمنية

أمثلة

يتضمّن هذا القسم ثلاثة أنواع من الأمثلة:

عيّنات تعليمات برمجية

تعرض الأقسام التالية عيّنات تعليمات برمجية لأنواع مختلفة من الفترات الزمنية.

الفترات الزمنية العامة

تعرض عيّنة التعليمات البرمجية التالية بنية الفترات الزمنية العامة:

{
  "model": {
    "globalStartTime": "YYYY-MM-DDTHH:MM:SSZ",
    "globalEndTime": "YYYY-MM-DDTHH:MM:SSZ",
    "shipments": [ ... ],
    "vehicles": [ ... ]
  }
}

الفترات الزمنية لعمليات استلام الطلبات وتسليمها

تعرض عيّنة التعليمات البرمجية التالية بنية الفترات الزمنية في عمليات استلام الطلبات وتسليمها في شحنة:

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "timeWindows": [
              {
                "startTime": "YYYY-MM-DDTHH:MM:SSZ",
                "endTime": "YYYY-MM-DDTHH:MM:SSZ"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "timeWindows": [
              {
                "startTime": "YYYY-MM-DDTHH:MM:SSZ",
                "endTime": "YYYY-MM-DDTHH:MM:SSZ"
              }
            ]
          }
        ]
      }
    ],
    "vehicles": [ ... ]
  }
}

الفترات الزمنية للمركبة

تعرض عيّنة التعليمات البرمجية التالية بنية الفترات الزمنية لمركبة:

{
  "model": {
    "shipments": [ ... ],
    "vehicles": [
      {
        "startTimeWindows": [
          {
            "startTime": "YYYY-MM-DDTHH:MM:SSZ",
            "endTime": "YYYY-MM-DDTHH:MM:SSZ"
          }
        ],
        "endTimeWindows": [
          {
            "startTime": "YYYY-MM-DDTHH:MM:SSZ",
            "endTime": "YYYY-MM-DDTHH:MM:SSZ"
          }
        ]
      }
    ]
  }
}

مثال على السيناريو

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

في هذا المثال، تكون قيم السمات في الطلب على النحو التالي:

أحد الوالدين الموقع القيمة السيناريو
ShipmentModel globalStartTime 2023-01-13T07:00:00Z يمثّل وقت افتتاح مركز رعاية الكلاب. لا يمكن استلام أي طلبات أو تسليمها قبل هذا الوقت.
ShipmentModel globalEndTime 2023-01-13T19:00:00Z يمثّل وقت إغلاق مركز رعاية الكلاب. يجب إكمال جميع عمليات استلام الطلبات وتسليمها بحلول هذا الوقت.
Shipment.pickups timeWindows startTime:
2023-01-13T07:30:00Z
تحدّد الفترة الزمنية المقبولة لاستلام كلب من منزل أحد العملاء. في هذا المثال، طلبت من كلا العميلَين أن يكونا متاحَين لاستلام الكلب بين الساعة 7:30 صباحًا و9:00 صباحًا.
endTime:
2023-01-13T09:00:00Z
Shipment.deliveries timeWindows startTime:
2023-01-13T17:00:00Z
تحدّد الفترة الزمنية المقبولة لإعادة كلب إلى منزل أحد العملاء. في هذا المثال، أبلغت كلا العميلَين بأنّه سيتم إعادة كلبيهما بين الساعة 5:00 مساءً و6:30 مساءً.
endTime:
2023-01-13T18:30:00Z
Vehicle startTimeWindows startTime:
2023-01-13T07:00:00Z
endTime:
2023-01-13T07:15:00Z
تحدّد الفترة الزمنية المقبولة لبدء المركبة (من الساعة 7:00 صباحًا إلى 7:15 صباحًا) وإنهاءها (من الساعة 5:00 مساءً إلى 5:15 مساءً).
endTimeWindows startTime:
2023-01-13T18:45:00Z
endTime:
2023-01-13T19:00:00Z

يوضّح الرسم البياني التالي الفترات الزمنية التي تؤثر في هذا المسار.

تمثّل عدة جداول زمنية الفترة الزمنية العالمية، وفترات استلام الطلب وتسليمه، وفترات بدء وانتهاء استخدام المركبة، وساعات عمل المركبة.

في هذا السيناريو، وكما هو موضّح في المخطّط البياني، تعمل الفترات الزمنية على النحو التالي:

  • تمثّل الفترة الزمنية العامة ساعات عمل مركز رعاية الكلاب، ويجب أن تقع جميع الفترات الزمنية الأخرى ضمن هذه الفترة الزمنية.
  • تتضمّن عمليات استلام الطلبات وتسليمها timeWindows خاصة بها في بداية اليوم و نهايته على التوالي.
  • تمنح startTimeWindows الخاصة بالمركبة مشغّل المركبة إطارًا زمنيًا يجب أن يبدأ فيه العمل، وتوفّر endTimeWindows إطارًا زمنيًا آخر يجب أن ينهي فيه يومه.
  • يحدّد وقت بدء أول startTimeWindow ووقت انتهاء آخر endTimeWindow ساعات تشغيل المركبة، وهي في هذه الحالة نفسها الفترة الزمنية العامة.

مثال على الطلب

يوضّح المثال التالي بنية طلب optimizeTours يتضمّن قيم الفترات الزمنية في مثال السيناريو.

{
  "model": {
    "globalStartTime": "2023-01-13T07:00:00Z",
    "globalEndTime": "2023-01-13T19:00:00Z",
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.8024,
              "longitude": -122.4058
            },
            "timeWindows": [
              {
                "startTime": "2023-01-13T07:30:00Z",
                "endTime": "2023-01-13T09:00:00Z"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            },
            "timeWindows": [
              {
                "startTime": "2023-01-13T17:00:00Z",
                "endTime": "2023-01-13T18:30:00Z"
              }
            ]
          }
        ]
      },
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.7359,
              "longitude": -122.5011
            },
            "timeWindows": [
              {
                "startTime": "2023-01-13T07:30:00Z",
                "endTime": "2023-01-13T09:00:00Z"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.759773,
              "longitude": -122.427063
            },
            "timeWindows": [
              {
                "startTime": "2023-01-13T17:00:00Z",
                "endTime": "2023-01-13T18:30:00Z"
              }
            ]
          }
        ]
      }
    ],
    "vehicles": [
      {
        "startLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "endLocation": {
          "latitude": 37.759773,
          "longitude": -122.427063
        },
        "costPerHour": 27,
        "startTimeWindows": [
          {
            "startTime": "2023-01-13T07:00:00Z",
            "endTime": "2023-01-13T07:15:00Z"
          }
        ],
        "endTimeWindows": [
          {
            "startTime": "2023-01-13T18:45:00Z",
            "endTime": "2023-01-13T19:00:00Z"
          }
        ]
      }
    ]
  }
}

الفترات الزمنية المرنة

يمكن استخدام الفترات الزمنية كقيود مرنة من خلال تحديد softStartTime و softEndTime في نوع رسالة TimeWindow. ويسمح ذلك للمحسِّن بالخروج عن الفترة الزمنية المحدّدة بتكلفة محدّدة، مع تحديد أولوية التحسين العام على الالتزام الصارم بالأُطر الزمنية عندما يكون ذلك مفيدًا.

تنطبق على الفترات الزمنية المرنة قيود الاستخدام التالية:

الخصائص

يوضّح الجدول التالي سمات القيد المرن للفترات الزمنية.

اسم السمة التنسيق وصف السمة
softStartTime الطابع الزمني يحدّد بداية الفترة الزمنية المرنة. إذا وقع حدث قبل هذا الوقت، يتم تكبّد تكلفة.
softEndTime الطابع الزمني يحدّد نهاية الفترة الزمنية المرنة. إذا وقع حدث بعد هذا الوقت، يتم تكبّد تكلفة.
costPerHourBeforeSoftStartTime الرقم التكلفة لكل ساعة يتم تكبّدها عندما يبدأ حدث قبل الـ softStartTime. هذه السمة مطلوبة عند استخدام softStartTime. اطّلِع على المفهوم الرئيسي نموذج التكلفة لمزيد من المعلومات حول كيفية تطبيق التكاليف.
costPerHourAfterSoftEndTime الرقم التكلفة لكل ساعة يتم تكبّدها عندما ينتهي حدث بعد softEndTime. هذه السمة مطلوبة عند استخدام softEndTime. اطّلِع على المفهوم الرئيسي نموذج التكلفة لمزيد من المعلومات حول كيفية تطبيق التكاليف.

عيّنة تعليمات برمجية

يوضّح المثال التالي بنية سمات القيد المرن لنوع رسالة TimeWindow:

    {
      "softStartTime": "SOFT_START_TIME",
      "softEndTime": "SOFT_END_TIME",
      "costPerHourBeforeSoftStartTime": COST_BEFORE_START_TIME,
      "costPerHourAfterSoftEndTime": COST_AFTER_END_TIME
    }