חלונות זמן מציינים את התזמון של אירועים במסלול. האירועים האלה יכולים לכלול את ההתחלה והסיום של מסלול נהיגה, שעות איסוף ומסירה מתוזמנות או את משך הזמן של מסלול שלם.
חלונות זמן יכולים לתמוך ביעדים כמו:
- תעדוף של השלמת איסופים ומסירות בפרקי זמן מוגדרים.
- תכנון מסלולים כדי לפעול במסגרת שעות הפעילות הכוללות.
- לוודא שהרכבים מתחילים ומסיימים את המסלולים בפרקי זמן מוגדרים.
מבנה
כפי שמוצג בתרשים, חלונות הזמן מובנים באופן הבא:
-
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 |
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 |
התנאי הזה מגדיר את חלון הזמן שבו אפשר להוריד כלב בבית של לקוח. בדוגמה הזו, אמרתם לשני הלקוחות שהכלבים שלהם יוחזרו בין השעות 17:00 ל-18:30. |
endTime:2023-01-13T18:30:00Z |
|||
Vehicle |
startTimeWindows |
startTime:2023-01-13T07:00:00ZendTime:2023-01-13T07:15:00Z |
הגדרת החלון המקובל להתחלת הנסיעה (משעה 7:00 עד 7:15) ולסיום הנסיעה (משעה 17:00 עד 17: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 |
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 }