חלונות זמן מציינים את התזמון של אירועים במסלול. האירועים האלה יכולים לכלול את ההתחלה והסיום של מסלול נהיגה, את השעות המתוכננות לאיסוף ולמסירה או את משך הזמן של מסלול שלם.
חלונות זמן יכולים לתמוך ביעדים כמו:
- תעדוף השלמת איסופים ומשלוחים בפרקי זמן מוגדרים.
- תכנון מסלולים כך שהם יפעלו במסגרת שעות הפעילות הכוללות.
- לוודא שהרכבים מתחילים ומסיימים את המסלולים במסגרות זמן מוגדרות.
מבנה
כפי שמוצג בתרשים, חלונות הזמן בנויים באופן הבא:
-
globalStartTime
ו-globalEndTime
הם מאפיינים שלShipmentModel
-
timeWindows
הם מאפיינים של:-
pickups
בתוךShipment
. -
deliveries
בתוךShipment
.
-
-
startTimeWindows
ו-endTimeWindows
הם מאפיינים שלVehicle
.
רשימת משימות ל-Essentials
מאפיינים
בטבלה הבאה מתוארים המאפיינים של חלון הזמן הגלובלי.
נכס | פורמט | תיאור |
---|---|---|
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 |
המאפיין מגדיר את חלון הזמן שבו אפשר לאסוף כלב מבית הלקוח. בדוגמה הזו, ביקשתם משני הלקוחות להיות זמינים לאיסוף בין השעות 7:30 ל-9:00. |
endTime :2023-01-13T09:00:00Z |
|||
Shipment.deliveries |
timeWindows |
startTime :2023-01-13T17:00:00Z |
התנאי הזה מגדיר את חלון הזמן שבו אפשר להוריד כלב בבית של לקוח. בדוגמה הזו, אמרתם לשני הלקוחות שהכלבים שלהם יוחזרו בין השעות 17:00 ל-18: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) ולסיום הנסיעה (משעה 17:00 עד 17: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 |
number | העלות לשעה שנוצרת כשאירוע מתחיל לפני softStartTime . מאפיין החובה הזה משמש כשמשתמשים ב-softStartTime . במאמר בנושא מודל עלויות מוסבר איך להטמיע עלויות. |
costPerHourAfterSoftEndTime |
number | העלות לשעה שנוצרה כשאירוע מסתיים אחרי softEndTime . מאפיין החובה הזה משמש כשמשתמשים ב-softEndTime . במאמר בנושא מודל עלויות מוסבר איך להטמיע עלויות. |
דוגמת קוד
בדוגמה הבאה מוצג המבנה של מאפייני האילוץ הרך של סוג ההודעה TimeWindow
:
{ "softStartTime": "SOFT_START_TIME", "softEndTime": "SOFT_END_TIME", "costPerHourBeforeSoftStartTime": COST_BEFORE_START_TIME, "costPerHourAfterSoftEndTime": COST_AFTER_END_TIME }