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

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

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

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

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

البنية

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

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

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

الخصائص

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

الموقع التنسيق الوصف
globalStartTime Timestamp تمثّل هذه السمة أقرب وقت لأي حدث.
globalEndTime Timestamp تمثّل هذه السمة آخر وقت لأي حدث.

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

أحد الوالدين الموقع التنسيق الوصف
Shipment.pickups timeWindows مصفوفة من أنواع الرسائل TimeWindow. تحدّد هذه السمة الفواصل الزمنية لاستلام الشحنة.
Shipment.deliveries timeWindows تحدّد هذه السمة الفواصل الزمنية لتسليم شحنة.
Vehicle startTimeWindows تحدّد هذه السمة وقت بدء الجدول الزمني لتشغيل المركبة.
endTimeWindows 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
    }