Method: scheduling.solveShiftGeneration

Löst ein Schichterstellungsproblem aus dem gegebenen SolveShiftGenerationRequest, indem Schichten aus vorgegebenen Schichtvorlagen generiert werden, um den Mitarbeiterbedarf zu decken.

HTTP-Anfrage

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

Die URL verwendet die Syntax der gRPC-Transcodierung.

Anfragetext

Der Anfragetext enthält Daten mit folgender Struktur:

JSON-Darstellung
{
  "solverConfig": {
    object (SolverConfig)
  },
  "shiftTemplates": [
    {
      object (ShiftTemplate)
    }
  ],
  "employeeDemands": [
    {
      object (EmployeeDemand)
    }
  ]
}
Felder
solverConfig

object (SolverConfig)

Optional. Parameter für den Solver.

shiftTemplates[]

object (ShiftTemplate)

Erforderlich. Satz von Schichtvorlagen mit Regeln zum Generieren von Schichten.

employeeDemands[]

object (EmployeeDemand)

Erforderlich. Gesamte Mitarbeiteranforderung, die die von shiftTemplates erzeugten Schichten abdecken müssen. Die in jedem EmployeeDemand angegebenen DateTime-Intervalle müssen disjunkt sein und können nicht nebeneinander sein.

Antworttext

Antwort auf das Problem bei der Generierung von Schichten. Wenn der zurückgegebene solutionStatus SOLVED ist, wird eine Reihe gültiger Verschiebungen, die vom Solver erstellt wurden, in employeeSchedules zurückgegeben. Für einen gültigen Schichtplan gelten die folgenden Eigenschaften:

  1. Jede in employeeSchedules generierte Verschiebung entspricht den Regeln, die in der entsprechenden ShiftTemplate angegeben sind.
  2. Jedes in jeder Schicht ausgewählte Ereignis entspricht den Regeln, die in der zugehörigen ShiftTemplate.Event festgelegt sind.
  3. Die Gesamtzahl der Mitarbeiter, die den Schichten zugewiesen sind, die von derselben Schichtvorlage generiert wurden, überschreitet nicht maximumEmployeeCount dieser Vorlage.
  4. Die Gruppe der zugewiesenen Mitarbeitenden deckt den Bedarf in jedem festgelegten Intervall.

Wenn der Vorgang erfolgreich ist, enthält der Antworttext Daten mit folgender Struktur:

JSON-Darstellung
{
  "solutionStatus": enum (ShiftGenerationSolutionStatus),
  "employeeSchedules": [
    {
      object (EmployeeSchedule)
    }
  ]
}
Felder
solutionStatus

enum (ShiftGenerationSolutionStatus)

Status der zurückgegebenen Lösung. Wenn solutionStatus nicht SOLVED ist, ist employeeSchedules leer.

employeeSchedules[]

object (EmployeeSchedule)

Vom Solver generierter Schichtsatz und die Anzahl der Mitarbeitenden, die den einzelnen Zeitplänen zugewiesen sind.

SolverConfig

Gibt zusätzliche Parameter zum Lösen des Problems beim Generieren der Schicht an.

JSON-Darstellung
{
  "timeLimit": string,
  "multiDaySchedule": boolean,
  "shiftEventsCanChange": boolean
}
Felder
timeLimit

string (Duration format)

Die maximale Zeit, die der Matherechner für das Problem aufwenden sollte. Wenn nichts festgelegt ist, wird standardmäßig 1 Minute verwendet. Die Wahl eines Zeitlimits sollte vom Umfang des Problems abhängen. Wenn Sie beispielsweise eine 7-tägige Instanz mit 2 ShiftTemplates mit jeweils etwa 20 möglichen Startzeiten und zwei Ereignissen mit etwa 30 möglichen Startzeiten und zwei Tagen pro Woche lösen, werden folgende Werte empfohlen: < 10 s für schnelle Lösungen (und wahrscheinlich nicht optimal), (10 s, 300 s) für gute Lösungen und > 300 s für eine umfassende Suche. Für größere Instanzen sind möglicherweise längere Zeitlimits erforderlich.

Dieser Wert ist kein festes Limit und berücksichtigt nicht den Kommunikationsaufwand. Die erwartete Latenz zur Lösung des Problems kann diesen Wert leicht überschreiten.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

multiDaySchedule

boolean

Wenn dieser Wert auf „true“ gesetzt ist, generiert der Solver EmployeeSchedules, die mehrere Schichten umfassen (z.B. zum Generieren eines einwöchigen Zeitplans). Andernfalls enthält jede EmployeeSchedule genau eine Schicht. Bei mehrtägigen Zeitplänen wird davon ausgegangen, dass der Beginn der Schicht über die Tage hinweg gleich ist. Die Anzahl der freien Tage in einem solchen Zeitplan wird durch die Schichtvorlagen bestimmt. Der Standardwert ist "false".

shiftEventsCanChange

boolean

Bei „true“ können mehrtägige EmployeeSchedules Verschiebungen enthalten, bei denen Beginn und Ende ihrer Ereignisse über den gesamten Tag hinweg variieren. Andernfalls müssen alle Verschiebungen eines bestimmten EmployeeSchedule die Start- und Endzeiten desselben Ereignisses haben. In beiden Fällen haben alle Schichten eines mehrtägigen Zeitplans dieselbe Start- und Endzeit. Daher wird dieser Parameter ignoriert, wenn multiDaySchedule „false“ ist. Wird dieser Parameter auf „true“ gesetzt, kann dies zu längeren Lösungszeiten führen. Der Standardwert ist "false".

ShiftTemplate

Vorlage mit Regeln zum Generieren von Schichten. Eine Schicht ist eine Arbeitseinheit, die eine Startzeit und ein Ende festlegt und Ereignisse umfassen kann (z. B. Mittagessen, Pausen usw.). Einem bestimmten Datum in der Antwort wird eine Schicht zugewiesen.

JSON-Darstellung
{
  "id": string,
  "earliestStartTime": {
    object (TimeOfDay)
  },
  "latestStartTime": {
    object (TimeOfDay)
  },
  "durationMinutes": integer,
  "startTimeIncrementMinutes": integer,
  "daysOffCountPerWeek": integer,
  "eventTemplates": [
    {
      object (EventTemplate)
    }
  ],
  "minimumIntereventGapMinutes": integer,
  "maximumEmployeeCount": integer
}
Felder
id

string

Eindeutige ID dieser Vorlage.

earliestStartTime

object (TimeOfDay)

Frühester Zeitpunkt am Tag, an dem eine Schicht beginnen kann. Für diesen Wert werden Stunden und Minuten angegeben. Sekunden und Nanos werden ignoriert.

latestStartTime

object (TimeOfDay)

Letzter Zeitpunkt am Tag, zu dem eine Schicht beginnen kann. Für diesen Wert werden Stunden und Minuten angegeben. Sekunden und Nanos werden ignoriert. Wenn dieser Wert kleiner als earliestStartTime ist, kann eine von dieser Vorlage generierte Verschiebung vor oder nach Mitternacht beginnen.

durationMinutes

integer

Feste Dauer einer von dieser Vorlage generierten Schicht.

startTimeIncrementMinutes

integer

Das Zeitabschnitt (in Minuten), das verwendet wird, um den Satz möglicher Startzeiten zwischen earliestStartTime und latestStartTime zu generieren. Wenn die früheste Startzeit z. B. 8:00 Uhr ist, die späteste Startzeit 8:30 Uhr und die Startzeit um 10 Minuten liegt, dann lauten alle möglichen Startzeiten für diese Schichtvorlage: 8:00, 8:10, 8:20 und 8:30.

daysOffCountPerWeek

integer

Feste Anzahl freier Tage pro Woche. Ein Mitarbeiter hat einen bestimmten freien Tag, wenn er keiner Schicht zugewiesen ist, die an diesem Tag beginnt. Eine Woche umfasst sieben Tage und beginnt am Sonntag.

eventTemplates[]

object (EventTemplate)

Regeln zum Generieren von Ereignissen für jede Schicht. Für jedes angegebene Ereignis wird in jeder Schicht genau ein Ereignis berücksichtigt.

minimumIntereventGapMinutes

integer

Mindestminuten zwischen dem Ende eines Ereignisses und dem Beginn des nächsten.

maximumEmployeeCount

integer

Maximale Anzahl von Mitarbeitenden, die allen mit dieser Vorlage generierten Schichten zugewiesen werden kann.

TimeOfDay

Stellt eine Tageszeit dar. Das Datum und die Zeitzone sind entweder nicht relevant oder werden an anderer Stelle angegeben. Eine API kann Schaltsekunden zulassen. Vergleichbare Typen sind google.type.Date und google.protobuf.Timestamp.

JSON-Darstellung
{
  "hours": integer,
  "minutes": integer,
  "seconds": integer,
  "nanos": integer
}
Felder
hours

integer

Stunden im 24-Stunden-Format. Sollte zwischen 0 und 23 liegen. Eine API kann den Wert "24:00:00" für Szenarien wie Geschäftsschlusszeit zulassen.

minutes

integer

Minuten der Zeitangabe. Muss zwischen 0 und 59 liegen.

seconds

integer

Sekunden der Zeitangabe. Muss normalerweise zwischen 0 und 59 liegen. Eine API kann den Wert 60 zulassen, wenn sie Schaltsekunden zulässt.

nanos

integer

Sekundenbruchteile in Nanosekunden. Muss zwischen 0 und 999.999.999 liegen.

EventTemplate

Vorlage mit Regeln zum Generieren eines einzelnen Ereignisses, das während einer Schicht auftritt. Ein Ereignis kann eine Besprechung, eine Pause, ein Mittagessen usw. darstellen.

JSON-Darstellung
{
  "id": string,
  "minimumMinutesAfterShiftStart": integer,
  "maximumMinutesAfterShiftStart": integer,
  "durationMinutes": integer,
  "startTimeIncrementMinutes": integer
}
Felder
id

string

Eindeutige ID dieser Vorlage.

minimumMinutesAfterShiftStart

integer

Mindestanzahl der Minuten nach Beginn einer Schicht, in der dieses Ereignis beginnen kann.

maximumMinutesAfterShiftStart

integer

Maximale Anzahl von Minuten nach Beginn einer Schicht, in der dieses Ereignis beginnen kann.

durationMinutes

integer

Feste Dauer in Minuten für dieses Ereignis.

startTimeIncrementMinutes

integer

Das Zeitabschnitt (in Minuten), das verwendet wird, um den Satz möglicher Ereignisstartzeiten zwischen minimumMinutesAfterShiftStart und maximumMinutesAfterShiftStart zu generieren. Wenn beispielsweise die Mindestanzahl von Minuten nach dem Schichtbeginn 30 Minuten, die maximale Anzahl von Minuten nach dem Schichtbeginn 45 und die Startzeit 5 Minuten beträgt, kann das Ereignis 30, 35, 40 oder 45 Minuten nach Schichtbeginn erfolgen.

EmployeeDemand

Gibt die Anzahl der Mitarbeiter an, die im angegebenen DateTime-Intervall erforderlich sind, um den Bedarf zu decken.

JSON-Darstellung
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "employeeCount": integer
}
Felder
startDateTime

object (DateTime)

Beginn des Zeitintervalls für die gegebene Nachfrage (einschließlich). Diese Werte werden minutengenau ausgelesen. Sekunden und alle kleineren Einheiten werden ignoriert.

endDateTime

object (DateTime)

Ende des Zeitintervalls für die angegebene Nachfrage (ausschließlich). Diese Werte werden minutengenau ausgelesen. Sekunden und alle kleineren Einheiten werden ignoriert.

employeeCount

integer

Anzahl der Mitarbeiter, die erforderlich sind, um den Bedarf für dieses Intervall zu decken.

ShiftGenerationSolutionStatus

Lösungsstatus, der als Antwort eines Solver angegeben wird.

Enums
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED Nicht angegebener Status für die Antwort.
SHIFT_GENERATION_SOLVED Der Matherechner hat innerhalb des vorgegebenen Zeitlimits eine Lösung gefunden.
SHIFT_GENERATION_NOT_SOLVED Ein Problem hat verhindert, dass der Solver Verschiebungen generiert.
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED Es konnten keine Schichten generiert werden, um die Nachfrage innerhalb des vorgegebenen Zeitlimits zu decken.

EmployeeSchedule

Eine sortierte Liste von Schichten, die einer einzelnen ShiftTemplate entsprechen, die einer Anzahl von Mitarbeitern zugewiesen werden soll.

JSON-Darstellung
{
  "shiftTemplateId": string,
  "shifts": [
    {
      object (ShiftWithEvents)
    }
  ],
  "employeeCount": integer
}
Felder
shiftTemplateId

string

ID der Vorlage, die zum Generieren dieser Schichten verwendet wurde.

shifts[]

object (ShiftWithEvents)

Liste der Schichten, denen employeeCount Mitarbeiter zugewiesen sind. Die für den Zeitplan ausgewählten Schichten und Ereignisse wurden mit einer einzigen Vorlage generiert. Die Schichten sind chronologisch sortiert und überschneiden sich nicht. Wenn SolverConfig.multi_day_schedule wahr ist, wird ein arbeitsfreier Tag implizit durch das Fehlen einer an diesem Tag beginnenden Verschiebung dargestellt.

employeeCount

integer

Anzahl der Mitarbeitenden, die diesen Schichten zugewiesen werden sollten, um den Bedarf zu decken.

ShiftWithEvents

Gibt das Start- und Enddatum zusammen mit einer Liste fester Ereignisse einer vom Rechner generierten Schicht an.

JSON-Darstellung
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "events": [
    {
      object (Event)
    }
  ]
}
Felder
startDateTime

object (DateTime)

Startdatum und -zeit der Schicht. Dieser Wert wird minutengenau angegeben. Sekunden und kleinere Einheiten werden nicht angegeben.

endDateTime

object (DateTime)

Enddatum und -zeit der Schicht. Dieser Wert wird minutengenau angegeben. Sekunden und kleinere Einheiten werden nicht angegeben.

events[]

object (Event)

Liste der Ereignisse, die in dieser Schicht enthalten sind und den ShiftTemplate.Event-Werten genau und in derselben Reihenfolge zugeordnet sind. Wenn SolverConfig.shift_events_can_change „true“ ist, können Start- und Endzeiten der Ereignisse im gesamten ShiftWithEvents dieses Zeitplans variieren.

Veranstaltung

Gibt das Start- und Enddatum eines bestimmten Ereignisses in einer vom Rechner generierten Schicht an.

JSON-Darstellung
{
  "eventTemplateId": string,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  }
}
Felder
eventTemplateId

string

ID der Vorlage, die zum Generieren dieses Ereignisses verwendet wurde.

startDateTime

object (DateTime)

Startdatum und -zeit des Ereignisses. Dieser Wert wird minutengenau angegeben. Sekunden und kleinere Einheiten werden nicht angegeben.

endDateTime

object (DateTime)

Enddatum und -zeit des Ereignisses. Dieser Wert wird minutengenau angegeben. Sekunden und kleinere Einheiten werden nicht angegeben.