پنجرههای زمانی زمانبندی رویدادها را در مسیر مشخص میکنند. این رویدادها میتواند شامل شروع و پایان مسیر راننده، زمانهای برنامهریزیشده برای سوار کردن و تحویل، یا مدتزمان کل مسیر باشد.
پنجرههای زمانی میتوانند از اهدافی مانند موارد زیر پشتیبانی کنند:
- تکمیل کردن تحویل گرفتن و تحویل دادن را در چارچوبهای زمانی مشخصشده در اولویت قرار دهید.
- مسیرها را طوری برنامهریزی کنید که در ساعت کاری کلی فعالیت کنند.
- مطمئن شوید وسایل نقلیه مسیرها را در چارچوبهای زمانی مشخصشده شروع و پایان میدهند.
ساختار
همانطور که در نمودار نشان داده شده است، بازههای زمانی بهصورت زیر ساختاردهی میشوند:
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 «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 |
بازه زمانی قابلقبول برای تحویل گرفتن سگ از خانه مشتری را تعریف میکند. در این مثال، به هر دو مشتری گفتهاید که بین ساعت ۷:۳۰ صبح تا ۹:۰۰ صبح برای تحویل گرفتن دردسترس باشند. |
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 }