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

تتوفّر النوافذ الزمنية في `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
    }