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