تحدّد الفترات الزمنية توقيت الأحداث على مسار. يمكن أن تشمل هذه الأحداث بداية مسار السائق ونهايته، أو أوقات الاستلام والتسليم المحدّدة، أو مدة المسار بأكمله.
يمكن أن تساعد الفترات الزمنية في تحقيق أهداف مثل:
- تحديد أولويات إكمال عمليات الاستلام والتسليم خلال الأطر الزمنية المحدّدة
- خطِّط للمسارات لتعمل ضمن ساعات العمل الإجمالية.
- التأكّد من أنّ المركبات تبدأ المسارات وتنتهي منها خلال الأُطر الزمنية المحدّدة
البنية
كما هو موضّح في المخطّط، يتم تنظيم الفترات الزمنية على النحو التالي:
globalStartTimeوglobalEndTimeهما سمتان خاصتان بـShipmentModeltimeWindowsهي خصائص:-
pickupsداخلShipment -
deliveriesداخلShipment
-
startTimeWindowsوendTimeWindowsهما سمتان خاصتان بـ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:00ZendTime:2023-01-13T07:15:00Z |
تحدّد هذه السمة الفترة الزمنية المقبولة لبدء تشغيل المركبة (من الساعة 7:00 صباحًا إلى 7:15 صباحًا) وإيقاف تشغيلها (من الساعة 5:00 مساءً إلى 5:15 مساءً). |
endTimeWindows |
startTime:2023-01-13T18:45:00ZendTime: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 }