Method: scheduling.solveShiftGeneration

פותר בעיה של יצירת משמרות מ-SolveShiftGenerationRequest הנתון על ידי יצירת משמרות מתבניות משמרות נתונות כדי לכסות את הביקוש של העובדים.

בקשת HTTP

POST https://optimization.googleapis.com/v1/scheduling:solveShiftGeneration

בכתובת ה-URL נעשה שימוש בתחביר המרת קידוד של gRPC.

גוף הבקשה

גוף הבקשה מכיל נתונים במבנה הבא:

ייצוג JSON
{
  "solverConfig": {
    object (SolverConfig)
  },
  "shiftTemplates": [
    {
      object (ShiftTemplate)
    }
  ],
  "employeeDemands": [
    {
      object (EmployeeDemand)
    }
  ]
}
שדות
solverConfig

object (SolverConfig)

זה שינוי אופציונלי. פרמטרים לפותר.

shiftTemplates[]

object (ShiftTemplate)

חובה. קבוצת תבניות של משמרות שמציינות כללים ליצירת משמרות.

employeeDemands[]

object (EmployeeDemand)

חובה. ביקוש העובדים הכולל שצריך לכסות את המשמרות שנוצרו על ידי shiftTemplates. מרווחי ה-DateTime שמצוינים בכל EmployeeDemand חייבים להיות נפרדים ואינם סמוכים.

גוף התשובה

תגובה לגבי הבעיה 'יצירת Shift'. אם ה-solutionStatus המוחזר הוא SOLVED, אז קבוצה של התאמות חוקיות שנוצרו על ידי הפותר מוחזרת ב-employeeSchedules. עבור לוח זמנים תקין למשמרות, המאפיינים הבאים מחזיקים:

  1. כל שינוי שנוצר ב-employeeSchedules תואם לכללים שצוינו ב-ShiftTemplate התואם.
  2. כל אירוע שנבחר בכל משמרת פועל בהתאם לכללים שצוינו ב-ShiftTemplate.Event התואם.
  3. המספר הכולל של העובדים שהוקצו לקבוצת השינויים שנוצרה מאותה תבנית Shift לא עולה על maximumEmployeeCount מהתבנית הזו.
  4. קבוצת העובדים שהוקצו להם מכסה את הביקוש בכל פרק זמן נתון.

אם הפעולה בוצעה ללא שגיאות, גוף התשובה מכיל נתונים במבנה הבא:

ייצוג JSON
{
  "solutionStatus": enum (ShiftGenerationSolutionStatus),
  "employeeSchedules": [
    {
      object (EmployeeSchedule)
    }
  ]
}
שדות
solutionStatus

enum (ShiftGenerationSolutionStatus)

הסטטוס של הפתרון שהוחזר. אם solutionStatus אינו SOLVED, הערך employeeSchedules יהיה ריק.

employeeSchedules[]

object (EmployeeSchedule)

קבוצת המשמרות שנוצרו על ידי הפותר, יחד עם מספר העובדים שהוקצו לכל לוח זמנים.

SolverConfig

מציין פרמטרים נוספים לפתרון הבעיה של 'יצירת Shift'.

ייצוג JSON
{
  "timeLimit": string,
  "multiDaySchedule": boolean,
  "shiftEventsCanChange": boolean
}
שדות
timeLimit

string (Duration format)

משך הזמן המקסימלי שהפותר צריך להקדיש לבעיה. אם המדיניות לא מוגדרת, ברירת המחדל היא דקה אחת. יש לבחור מגבלת זמן בהתאם לגודל הבעיה. דוגמה: בפתרון של 7 ימים עם 2 ShiftTemplates, כשבכל אחד מהם יש כ-20 זמני התחלה אפשריים ובערך 2 אירועים עם כ-30 שעות התחלה אפשריות ויומיים של הפסקה בשבוע, הערכים המומלצים הם: <10 שניות לפתרונות מהירים (וככל הנראה לא אופטימליים), (10 שניות, 300 שניות) לקבלת פתרונות איכותיים, ויותר מ-300 שניות לחיפוש מקיף. במקרים גדולים יותר, יכול להיות שיידרש זמן רב יותר.

הערך הזה הוא לא מגבלה קשיחה, והוא לא כולל את תקורת התקשורת. זמן האחזור הצפוי לפתרון הבעיה עשוי לחרוג מעט מהערך הזה.

משך זמן בשניות עם עד תשע ספרות עשרוניות, המסתיים ב-'s'. דוגמה: "3.5s".

multiDaySchedule

boolean

אם הערך הוא true, הפותר יוצר EmployeeSchedule התאמות שכוללות מספר התאמות (למשל, כדי ליצור לוח זמנים של שבוע). אחרת, כל EmployeeSchedule כולל התאמה אחת בדיוק. בלוחות זמנים של מספר ימים ההנחה היא ששעת ההתחלה של המשמרת זהה בין ימים, ומספר ימי ההפסקה בלוח זמנים כזה נקבע על ידי תבניות המשמרות. ברירת המחדל היא False.

shiftEventsCanChange

boolean

אם הערך הוא true, ייתכן שמשך הזמן של EmployeeSchedule ימים מרובים יכלול שינויים שביניהם שעות ההתחלה והסיום של האירועים משתנות בין כל הימים. אחרת, זמני ההתחלה והסיום של האירוע צריכים להיות זהים בכל ההתאמות של EmployeeSchedule מסוים. בכל אחד מהמקרים, שעת ההתחלה ושעת הסיום של כל המשמרות של לוח זמנים מרובה ימים זהה. לכן, המערכת מתעלמת מהפרמטר הזה אם הערך של multiDaySchedule הוא False. אם מגדירים את הפרמטר הזה כ-True, זמני פתרון הבעיות יהיו ארוכים יותר. ברירת המחדל היא False.

ShiftTemplate

תבנית שמציינת כללים ליצירת משמרות. משמרת היא יחידת עבודה שמציינת שעת התחלה ושעת סיום, והיא עשויה להכיל אירועים (כגון ארוחת צהריים, הפסקות וכו'). המענה יוקצה לתאריך ספציפי.

ייצוג JSON
{
  "id": string,
  "earliestStartTime": {
    object (TimeOfDay)
  },
  "latestStartTime": {
    object (TimeOfDay)
  },
  "durationMinutes": integer,
  "startTimeIncrementMinutes": integer,
  "daysOffCountPerWeek": integer,
  "eventTemplates": [
    {
      object (EventTemplate)
    }
  ],
  "minimumIntereventGapMinutes": integer,
  "maximumEmployeeCount": integer
}
שדות
id

string

המזהה הייחודי של התבנית הזו.

earliestStartTime

object (TimeOfDay)

השעה המוקדמת ביותר ביום שבה יכולה להתחיל משמרת. הערך הזה מצוין באמצעות שעות ודקות. המערכת מתעלמת משניות ומננו.

latestStartTime

object (TimeOfDay)

השעה המאוחרת ביותר ביום שבה יכולה להתחיל משמרת. הערך הזה מצוין באמצעות שעות ודקות. המערכת מתעלמת משניות ומננו. אם הערך הזה קטן מהערך earliestStartTime, אז שינוי שנוצר על ידי התבנית הזו עשוי להתחיל לפני חצות או אחריה.

durationMinutes

integer

משך הזמן הקבוע של שינוי שנוצר על ידי התבנית הזו.

startTimeIncrementMinutes

integer

מרווח הזמן (בדקות) ששימש ליצירת קבוצת זמני ההתחלה האפשריים בין earliestStartTime לבין latestStartTime. לדוגמה, אם שעת ההתחלה המוקדמת ביותר היא 8:00, שעת ההתחלה האחרונה היא 8:30 ושעת ההתחלה הרצויה היא 10 דקות, כל שעות ההתחלה האפשריות של תבנית המשמרת הזו הן 8:00, 8:10, 8:20 ו-8:30.

daysOffCountPerWeek

integer

מספר קבוע של ימי חופש בשבוע. לעובד יש יום חופש מסוים אם לא מוקצה לו משמרת שמתחילה באותו יום. שבוע הוא 7 ימים ומתחיל ביום ראשון.

eventTemplates[]

object (EventTemplate)

כללים ליצירת אירועים עבור כל משמרת. רק אירוע אחד ייכלל בכל שינוי עבור כל אירוע שצוין.

minimumIntereventGapMinutes

integer

מספר דקות מינימלי בין סיום של אירוע אחד לתחילתו של האירוע הבא.

maximumEmployeeCount

integer

המספר המקסימלי של עובדים שאפשר להקצות לכל המשמרות שנוצרו באמצעות התבנית הזו.

TimeOfDay

מייצג שעה ביום. התאריך ואזור הזמן אינם משמעותיים או מצוינים במקום אחר. API עשוי לבחור לאפשר שניות מעבר. הסוגים הקשורים הם google.type.Date ו-google.protobuf.Timestamp.

ייצוג JSON
{
  "hours": integer,
  "minutes": integer,
  "seconds": integer,
  "nanos": integer
}
שדות
hours

integer

שעות ביום בפורמט 24 שעות. צריך להיות מספר בין 0 ל-23. ממשק API עשוי לאפשר את הערך '24:00:00' בתרחישים כמו שעת הסגירה של העסק.

minutes

integer

דקות בשעה. חייב להיות בין 0 ל-59.

seconds

integer

שניות של זמן. הערך בדרך כלל צריך להיות בין 0 ל-59. ממשק API עשוי לאפשר את הערך 60 אם הוא מאפשר שניות שעברו.

nanos

integer

שברים של שניות בננו-שניות. חייב להיות בין 0 ל-999,999,999.

EventTemplate

תבנית שמציינת כללים ליצירת אירוע יחיד שמתרחש במהלך משמרת. אירוע יכול לייצג פגישה, הפסקה, ארוחת צהריים וכו'.

ייצוג JSON
{
  "id": string,
  "minimumMinutesAfterShiftStart": integer,
  "maximumMinutesAfterShiftStart": integer,
  "durationMinutes": integer,
  "startTimeIncrementMinutes": integer
}
שדות
id

string

המזהה הייחודי של התבנית הזו.

minimumMinutesAfterShiftStart

integer

מספר הדקות המינימלי שהאירוע הזה יכול להתחיל אחרי תחילת המשמרת.

maximumMinutesAfterShiftStart

integer

מספר הדקות המקסימלי לאחר תחילת המשמרת שהאירוע הזה יכול להתחיל.

durationMinutes

integer

משך הזמן קבוע בדקות של האירוע הזה.

startTimeIncrementMinutes

integer

מרווח הזמן (בדקות) ששימש ליצירת קבוצת זמני ההתחלה האפשריים של אירועים בין minimumMinutesAfterShiftStart ל-maximumMinutesAfterShiftStart. לדוגמה, אם מספר הדקות המינימלי לאחר התחלת משמרת הוא 30, והזמן המקסימלי לדקות לאחר התחלת משמרת הוא 45, ומרווח הזמן של זמן ההתחלה הוא 5 דקות, האירוע יכול להתרחש 30, 35, 40 או 45 דקות לאחר תחילת המשמרת.

EmployeeDemand

מציין את מספר העובדים שנדרשים לכיסוי הביקוש במרווח הזמן הנתון (DateTime).

ייצוג JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "employeeCount": integer
}
שדות
startDateTime

object (DateTime)

תחילת מרווח הזמן של הביקוש הנתון (כולל). הערכים האלה מוקראים עד הדקה. המערכת מתעלמת מהשניות ומכל היחידות הקטנות יותר.

endDateTime

object (DateTime)

סיום פרק הזמן של הביקוש הנתון (לא כולל). הערכים האלה מוקראים עד הדקה. המערכת מתעלמת מהשניות ומכל היחידות הקטנות יותר.

employeeCount

integer

מספר העובדים הנדרשים כדי לכסות את הביקוש למרווח הזמן הזה.

ShiftGenerationSolutionStatus

סטטוס הפתרון שסופק בתגובה של הפותר.

טיפוסים בני מנייה (enums)
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 (ShiftWithEvents)
    }
  ],
  "employeeCount": integer
}
שדות
shiftTemplateId

string

המזהה של התבנית ששימשה ליצירת קבוצת השינויים הזו.

shifts[]

object (ShiftWithEvents)

רשימת המשמרות שאליהן מוקצים מספר עובדים אחד (employeeCount). השינויים והאירועים שנבחרו ללוח הזמנים נוצרו מתבנית אחת. ההתאמות ממוינות בסדר כרונולוגי ולא חופפות. אם הערך SolverConfig.multi_day_schedule נכון, יום חופש מיוצג באופן מרומז על ידי היעדרות של אותו יום.

employeeCount

integer

מספר העובדים שצריך להקצות לקבוצת המשמרות הזו כדי לכסות את הביקוש.

ShiftWithEvents

מציין את תאריכי ההתחלה והסיום יחד עם רשימת אירועים קבועים של שינוי שנוצר על ידי הפותר.

ייצוג JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "events": [
    {
      object (Event)
    }
  ]
}
שדות
startDateTime

object (DateTime)

התאריך ושעת ההתחלה של המשמרת. הערך הזה מצוין עד הדקה. שניות ויחידות קטנות יותר לא ניתנות.

endDateTime

object (DateTime)

התאריך ושעת הסיום של המשמרת. הערך הזה מצוין עד הדקה. שניות ויחידות קטנות יותר לא ניתנות.

events[]

object (Event)

רשימת אירועים שכלולים בשינוי הזה, ממופים בדיוק אל אירועי ShiftTemplate.Event ובאותו סדר כמו אלה. אם הערך SolverConfig.shift_events_can_change הוא True, זמני ההתחלה והסיום של האירועים עשויים להשתנות בכל הShiftWithEvents של לוח הזמנים הזה.

אירוע

מציין את תאריכי ההתחלה והסיום של אירוע ספציפי במשמרת שנוצרה על ידי הפותר.

ייצוג JSON
{
  "eventTemplateId": string,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  }
}
שדות
eventTemplateId

string

המזהה של התבנית שבה נעשה שימוש כדי ליצור את האירוע הזה.

startDateTime

object (DateTime)

התאריך ושעת ההתחלה של האירוע. הערך הזה מצוין עד הדקה. שניות ויחידות קטנות יותר לא ניתנות.

endDateTime

object (DateTime)

התאריך ושעת הסיום של האירוע. הערך הזה מצוין עד הדקה. שניות ויחידות קטנות יותר לא ניתנות.