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