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