تحدّد الفترات الزمنية توقيت الأحداث على مسار معيّن. ويمكن أن تشمل هذه الأحداث بدء مسار السائق وانتهائه، أو أوقات استلام الطلبات وتسليمها المجدولة، أو مدة مسار كامل.
يمكن أن تتيح الفترات الزمنية تحقيق أهداف مثل:
- تحديد أولوية إكمال عمليات استلام الطلبات وتسليمها خلال أُطر زمنية محدّدة
- تخطيط المسارات للعمل خلال ساعات العمل الإجمالية
- ضمان بدء المركبات للمسارات وإنهاءها خلال أُطر زمنية محدّدة
البنية
كما هو موضّح في المخطّط البياني، يتم تنظيم الفترات الزمنية على النحو التالي:
globalStartTimeوglobalEndTimeهما سمتان من سماتShipmentModeltimeWindowsهي سمات من سمات:pickupsداخلShipment.deliveriesداخلShipment.
startTimeWindowsوendTimeWindowsهما سمتان من سمات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: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 }