פתרון בעיה של יצירת תזוזה מ-SolveShiftGenerationRequest
הנתון על ידי יצירת מעברים מתבניות Shift נתונות כדי לתת מענה לביקוש של העובדים.
בקשת HTTP
POST https://optimization.googleapis.com/v1/scheduling:solveShiftGeneration
בכתובת ה-URL נעשה שימוש בתחביר המרת קידוד של gRPC.
גוף הבקשה
גוף הבקשה מכיל נתונים במבנה הבא:
ייצוג JSON |
---|
{ "solverConfig": { object ( |
שדות | |
---|---|
solverConfig |
זה שינוי אופציונלי. פרמטרים לפותר. |
shiftTemplates[] |
חובה. קבוצה של תבניות Shift שמציינות כללים ליצירת שינויים. |
employeeDemands[] |
חובה. הביקוש הכולל של העובדים שצריך לכסות את השינויים שנוצרו על ידי |
גוף התשובה
תשובה לבעיה של Shift Generation. אם הערך של solutionStatus
שהוחזר הוא SOLVED
, אז קבוצת שינויים חוקיים שנוצרה על ידי הפותר מוחזרת בפונקציה employeeSchedules
. כדי ליצור לוח זמנים תקין לשינוי, המאפיינים הבאים צריכים להתקיים:
- כל שינוי שנוצר ב-
employeeSchedules
עומד בכללים המפורטים ב-ShiftTemplate
התואם. - כל אירוע שנבחר בכל התאמה עומד בכללים המפורטים ב-
ShiftTemplate.Event
התואם. - המספר הכולל של העובדים שהוקצו לקבוצת השינויים שנוצרה מאותה ShiftTemplate לא עולה על
maximumEmployeeCount
מהתבנית. - קבוצת העובדים המוקצים מכסה את הביקוש בכל מרווח נתון.
אם הפעולה בוצעה ללא שגיאות, גוף התגובה יכיל נתונים במבנה הבא:
ייצוג JSON |
---|
{ "solutionStatus": enum ( |
שדות | |
---|---|
solutionStatus |
הסטטוס של הפתרון שהוחזר. אם |
employeeSchedules[] |
קבוצת משמרות שנוצרו על ידי הפותר יחד עם מספר העובדים שהוקצו לכל לוח זמנים. |
demandCoverageViolations[] |
הפרות של הכיסוי בביקוש על סמך |
SolverConfig
מציינת פרמטרים נוספים לפתרון הבעיה של Shift Generation.
ייצוג JSON |
---|
{ "timeLimit": string, "multiDaySchedule": boolean, "shiftEventsCanChange": boolean } |
שדות | |
---|---|
timeLimit |
משך הזמן המקסימלי שצריך להמתין לפתרון הבעיה. אם לא מגדירים את ברירת המחדל, ברירת המחדל היא דקה. בחירת מגבלת הזמן צריכה להשתנות בהתאם לגודל הבעיה. דוגמה: כשרוצים לפתור מופע של 7 ימים עם 2 הערך הזה הוא לא מגבלה קשיחה והוא לא מביא בחשבון את תקורת התקשורת. זמן האחזור הצפוי לפתרון הבעיה עשוי מעט לחרוג מהערך הזה. משך זמן בשניות עם עד תשע ספרות עשרוניות, שמסתיים ב-' |
multiDaySchedule |
אם הערך הוא True, הפתרון יוצר פעולות |
shiftEventsCanChange |
אם True, ימי |
ShiftTemplate
תבנית שמגדירה כללים ליצירת שינויים. משמרת היא יחידת עבודה שמציינת שעת התחלה ושעת סיום, ועשויה להכיל אירועים (לדוגמה, ארוחת צהריים, הפסקות וכו'). שינוי יוקצה לתאריך ספציפי בתשובה.
ייצוג JSON |
---|
{ "id": string, "earliestStartTime": { object ( |
שדות | |
---|---|
id |
המזהה הייחודי של התבנית הזו. |
earliestStartTime |
השעה המוקדמת ביותר ביום שבה יכולה להתחיל משמרת. הערך הזה מצוין עם שעות ודקות; שניות וננו. |
latestStartTime |
השעה המאוחרת ביותר ביום שבה יכולה להתחיל משמרת. הערך הזה מצוין עם שעות ודקות; שניות וננו. אם הערך הזה קטן מהערך |
durationMinutes |
משך זמן קבוע של החלפה שנוצרה על ידי התבנית הזו. |
startTimeIncrementMinutes |
מרווח הזמן (בדקות) ששימש ליצירת הקבוצה של זמני ההתחלה האפשריים בין |
daysOffCountPerWeek |
מספר קבוע של ימי הנחה בשבוע. אם עובד מסוים לא תוקצה למשמרת שמתחילה באותו יום, יש לו יום חופשה נתון. שבוע הוא 7 ימים ומתחיל ביום ראשון. |
eventTemplates[] |
כללים ליצירת אירועים לכל משמרת. אירוע אחד בדיוק ייכלל בכל שינוי עבור כל אירוע שצוין. |
minimumIntereventGapMinutes |
מספר הדקות המינימלי בין סוף אירוע אחד לבין תחילת האירוע הבא. |
maximumEmployeeCount |
המספר המקסימלי של עובדים שאפשר להקצות לכל המשמרות שנוצרו באמצעות התבנית הזו. |
TimeOfDay
מייצג שעה ביום. התאריך ואזור הזמן לא משמעותיים או שהם מצוינים במקום אחר. יכול להיות ש-API יבחר לאפשר שניות מדלגות. הסוגים הקשורים הם google.type.Date
ו-google.protobuf.Timestamp
.
ייצוג JSON |
---|
{ "hours": integer, "minutes": integer, "seconds": integer, "nanos": integer } |
שדות | |
---|---|
hours |
שעות ביום בפורמט 24 שעות. צריך להיות מספר בין 0 ל-23. ממשק API עשוי לבחור לאפשר את הערך '24:00:00' לתרחישים כמו שעת הסגירה של העסק. |
minutes |
דקות בשעה ביום. חייב להיות בין 0 ל-59. |
seconds |
שניות ודקות. בדרך כלל הערך צריך להיות בין 0 ל-59. ה-API עשוי לאפשר את הערך 60 אם הוא מאפשר שניות מדלגות. |
nanos |
שברי שניות בננו-שניות. חייב להיות בין 0 ל-999,999,999. |
EventTemplate
תבנית שמגדירה כללים ליצירת אירוע יחיד שמתרחש במהלך שינוי שינוי. אירוע יכול לייצג פגישה, הפסקה, ארוחת צהריים וכו'.
ייצוג JSON |
---|
{ "id": string, "minimumMinutesAfterShiftStart": integer, "maximumMinutesAfterShiftStart": integer, "durationMinutes": integer, "startTimeIncrementMinutes": integer } |
שדות | |
---|---|
id |
המזהה הייחודי של התבנית הזו. |
minimumMinutesAfterShiftStart |
מספר הדקות המינימלי שהאירוע יכול להתחיל אחרי תחילת השינוי. |
maximumMinutesAfterShiftStart |
מספר הדקות המקסימלי אחרי תחילת השינוי שהאירוע הזה יכול להתחיל. |
durationMinutes |
משך זמן קבוע בדקות של האירוע. |
startTimeIncrementMinutes |
מרווח הזמן (בדקות) ששימש ליצירת הקבוצה של זמני ההתחלה האפשריים של אירועים בין |
EmployeeDemand
מציינת את מספר העובדים שנדרשים כדי לכסות את הביקוש בפרק הזמן הנתון של DateTime.
ייצוג JSON |
---|
{ "startDateTime": { object ( |
שדות | |
---|---|
startDateTime |
תחילת פרק הזמן של הביקוש הנתון (כולל). הערכים האלה ייקראו עד לדקה. שניות וכל היחידות הקטנים יותר לא נלקחים בחשבון. |
endDateTime |
סיום פרק הזמן של הדרישה הנתונה (לא כולל). הערכים האלה ייקראו עד לדקה. שניות וכל היחידות הקטנים יותר לא נלקחים בחשבון. |
employeeCount |
מספר העובדים שנדרשים כדי לכסות את הביקוש למרווח הזה. |
ShiftGenerationSolutionStatus
סטטוס הפתרון שסופק בתשובה של פותר.
טיפוסים בני מנייה (enum) | |
---|---|
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED |
סטטוס התגובה לא צוין. |
SHIFT_GENERATION_SOLVED |
הפותר מצא פתרון במגבלת הזמן שצוינה. |
SHIFT_GENERATION_NOT_SOLVED |
בעיה מנעה מהפותר ליצור שינויים. |
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED |
לא ניתן היה ליצור התאמות כדי לכסות את הביקוש במסגרת הזמן שצוינה. |
EmployeeSchedule
רשימה ממוינת של משמרות התואם ל-ShiftTemplate
בודד שיוקצה למספר עובדים.
ייצוג JSON |
---|
{
"shiftTemplateId": string,
"shifts": [
{
object ( |
שדות | |
---|---|
shiftTemplateId |
מזהה התבנית ששימשה ליצירת קבוצת השינויים הזו. |
shifts[] |
רשימת משמרות שאליהן מוקצה מספר עובדים אחד ( |
employeeCount |
מספר העובדים שצריך להקצות לקבוצת המשמרות הזו כדי לכסות את הביקוש. |
ShiftWithEvents
מציין את תאריך ההתחלה ותאריך הסיום יחד עם רשימת אירועים קבועים של שינוי שנוצר על ידי הפותר.
ייצוג JSON |
---|
{ "startDateTime": { object ( |
שדות | |
---|---|
startDateTime |
התאריך ושעת ההתחלה של המשמרת. הערך הזה מצוין עד לדקה; שניות ויחידות קטנות יותר לא ניתנות. |
endDateTime |
התאריך ושעת הסיום של המשמרת. הערך הזה מצוין עד לדקה; שניות ויחידות קטנות יותר לא ניתנות. |
events[] |
רשימת אירועים הכלולים בשינוי הזה, ממופים בדיוק אל אותם אירועי ' |
אירוע
מציין את תאריכי ההתחלה והסיום של אירוע ספציפי במשמרת שנוצרה על ידי הפותר.
ייצוג JSON |
---|
{ "eventTemplateId": string, "startDateTime": { object ( |
שדות | |
---|---|
eventTemplateId |
המזהה של התבנית ששימשה ליצירת האירוע הזה. |
startDateTime |
התאריך ושעת ההתחלה של האירוע. הערך הזה מצוין עד לדקה; שניות ויחידות קטנות יותר לא ניתנות. |
endDateTime |
התאריך ושעת הסיום של האירוע. הערך הזה מצוין עד לדקה; שניות ויחידות קטנות יותר לא ניתנות. |
DemandCoverageViolation
מציינת את ההפרה בכיסוי הביקוש במרווח הנתון. הביקוש של העובדים זהה בכל התקופה שצוינה.
ייצוג JSON |
---|
{ "startDateTime": { object ( |
שדות | |
---|---|
startDateTime |
התאריך ושעת ההתחלה של מרווח הביקוש (כולל). הערך הזה מצוין עד לדקה. |
endDateTime |
התאריך ושעת הסיום של תקופת הביקוש (לא כולל). הערך הזה מצוין עד לדקה. |
coverageViolation |
הפרה של הכיסוי במהלך פרק הזמן שצוין. ערך חיובי מציין שיש עומס יתר בביקוש, וערך שלילי מציין שהביקוש בחסר. |