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