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

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

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

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

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

البنية

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

  • globalStartTime وglobalEndTime هما سمتان خاصتان بـ ShipmentModel
  • timeWindows هي خصائص:
    • pickups داخل Shipment
    • deliveries داخل Shipment
  • startTimeWindows وendTimeWindows هما سمتان خاصتان بـ 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. يسمح ذلك للمحسِّن بالخروج عن الإطار الزمني المحدّد بتكلفة محدّدة، مع إعطاء الأولوية للتحسين العام على الالتزام الصارم بالأطر الزمنية عندما يكون ذلك مفيدًا.

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

  • لا يمكن تطبيقها على globalStartTime وglobalEndTime لأنّهما لا يستخدمان نوع الرسالة TimeWindow.
  • لا يمكن تطبيقها إلا عندما يكون هناك 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
    }