پنجرههای زمانی زمانبندی رویدادها را در مسیر مشخص میکنند. این رویدادها میتواند شامل شروع و پایان مسیر راننده، زمانهای برنامهریزیشده برای تحویل و دریافت، یا مدتزمان کل مسیر باشد.
پنجرههای زمانی میتوانند از اهدافی مانند موارد زیر پشتیبانی کنند:
- تکمیل کردن تحویلها و ارسالها را در چارچوبهای زمانی مشخصشده در اولویت قرار دهید.
- مسیرها را طوری برنامهریزی کنید که در ساعت کاری کلی فعالیت کنند.
- مطمئن شوید وسایل نقلیه مسیرها را در چارچوبهای زمانی مشخصشده شروع و پایان میدهند.
ساختار
همانطور که در نمودار نشان داده شده است، پنجرههای زمان به این صورت ساختاربندی میشوند:
globalStartTimeوglobalEndTimeداراییهایShipmentModelهستندtimeWindowsداراییهای:-
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 «زولو») | پایان یک بازه زمانی. |
مثالها
این بخش سه نوع مثال را پوشش میدهد:
- نمونههای کد که ساختار پنجرههای زمانی را نشان میدهند.
- سناریو نمونه که یک روش استفاده از پنجرههای زمانی برای دستیابی به هدف کسبوکار را نشان میدهد.
- نمونه درخواست که شامل مقادیر تنظیمشده در سناریوی نمونه است.
نمونههای کد
بخشهای زیر نمونههای کد از انواع مختلف بازههای زمانی را نشان میدهد.
بازه زمانی جهانی
نمونه کد زیر ساختار بازههای زمانی جهانی را نشان میدهد:
{ "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 |
بازه زمانی قابلقبول برای تحویل گرفتن سگ از خانه مشتری را تعریف میکند. در این مثال، به هر دو مشتری گفتهاید که بین ساعت ۷:۳۰ صبح تا ۹:۰۰ صبح برای تحویل گرفتن دردسترس باشند. |
endTime:2023-01-13T09:00:00Z |
|||
Shipment.deliveries |
timeWindows |
startTime:2023-01-13T17:00:00Z |
بازه زمانی قابلقبول برای تحویل سگ در خانه مشتری را تعریف میکند. در این مثال، به هر دو مشتری گفتهاید که سگهایشان بین ساعت ۵:۰۰ تا ۶:۳۰ بعدازظهر تحویل داده میشوند. |
endTime:2023-01-13T18:30:00Z |
|||
Vehicle |
startTimeWindows |
startTime:2023-01-13T07:00:00ZendTime:2023-01-13T07:15:00Z |
پنجره قابلقبول برای شروع (۷:۰۰ ق.ظ. تا ۷:۱۵ ق.ظ.) و پایان (۵:۰۰ ب.ظ. تا ۵:۱۵ ب.ظ.) وسیله نقلیه را تعریف میکند. |
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 }