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