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

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

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

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

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

البنية

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

قائمة التحقّق من Essentials

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

الخصائص

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

الموقع التنسيق الوصف
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
    }