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