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