חלונות זמן מציינים את התזמון של אירועים במסלול. האירועים האלה יכולים לכלול את ההתחלה והסיום של מסלול הנהג, זמני איסוף ומסירה מתוזמנים או משך המסלול כולו.
חלונות זמן יכולים לתמוך ביעדים כמו:
- לתעדף את השלמת האיסופים והמשלוחים במסגרת הזמן שצוינה.
- תכנון מסלולים כדי לפעול במסגרת שעות הפעילות הכוללות.
- מוודאים שהנסיעות מתחילות ומסתיימות במסגרות זמן מוגדרות.
מבנה
כמו שמוצג בתרשים, חלונות הזמן בנויים באופן הבא:
-
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 |
ההגדרה הזו מגדירה את חלון הזמן המקובל להורדת הכלב בבית הלקוח. בדוגמה הזו, אמרתם לשני הלקוחות שהכלבים שלהם יוחזרו בין השעות 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 }