Résolution d'un problème de génération d'équipes à partir du SolveShiftGenerationRequest
donné en générant des équipes à partir de modèles d'équipes donnés afin de couvrir la demande des employés.
Requête HTTP
POST https://optimization.googleapis.com/v1/scheduling:solveShiftGeneration
L'URL utilise la syntaxe de transcodage gRPC.
Corps de la requête
Le corps de la requête contient des données présentant la structure suivante :
Représentation JSON |
---|
{ "solverConfig": { object ( |
Champs | |
---|---|
solverConfig |
Facultatif. Paramètres du résolveur. |
shiftTemplates[] |
Obligatoire. Ensemble de modèles d'équipes spécifiant des règles pour générer des équipes. |
employeeDemands[] |
Obligatoire. Nombre total de demandes des employés que les équipes générées par |
Corps de la réponse
Réponse au problème de génération d’équipes. Si la valeur solutionStatus
renvoyée est SOLVED
, un ensemble de décalages valides générés par le résolveur est renvoyé dans employeeSchedules
. Pour que le planning des équipes soit valide, les propriétés suivantes sont valides:
- Chaque équipe générée dans
employeeSchedules
respecte les règles spécifiées dans leShiftTemplate
correspondant. - Chaque événement sélectionné dans chaque quart de travail respecte les règles spécifiées dans le
ShiftTemplate.Event
correspondant. - Le nombre total d'employés affectés à l'ensemble des équipes générées à partir du même modèle ShiftTemplate ne dépasse pas
maximumEmployeeCount
de ce modèle. - L'ensemble des employés affectés couvrent la demande à chaque intervalle donné.
Si la requête aboutit, le corps de la réponse contient des données qui ont la structure suivante :
Représentation JSON |
---|
{ "solutionStatus": enum ( |
Champs | |
---|---|
solutionStatus |
État de la solution renvoyée. Si |
employeeSchedules[] |
Ensemble des quarts de travail générés par le résolveur avec le nombre d'employés affectés à chaque planification. |
demandCoverageViolations[] |
Cas de non-respect de la couverture de la demande basés sur le |
SolverConfig
Spécifie des paramètres supplémentaires pour résoudre le problème de génération d'équipes.
Représentation JSON |
---|
{ "timeLimit": string, "multiDaySchedule": boolean, "shiftEventsCanChange": boolean } |
Champs | |
---|---|
timeLimit |
Temps maximal que le résolveur doit consacrer au problème. Si ce champ n'est pas spécifié, la valeur par défaut est de 1 minute. Le choix d'une limite de temps doit dépendre de l'ampleur du problème. Par exemple, lors de la résolution d'une instance de 7 jours avec 2 Cette valeur n'est pas une limite stricte et ne tient pas compte des frais de communication. La latence attendue pour résoudre le problème peut dépasser légèrement cette valeur. Durée en secondes avec neuf chiffres au maximum après la virgule et se terminant par " |
multiDaySchedule |
Si la valeur est "true", le résolveur génère des |
shiftEventsCanChange |
Si la valeur est "true", les |
ShiftTemplate
Modèle spécifiant les règles pour générer des quarts. Un quart de travail est une unité de travail qui spécifie une heure de début et une heure de fin, et qui peut contenir des événements (par exemple, déjeuner, pauses, etc.). Un changement sera attribué à une date spécifique dans la réponse.
Représentation JSON |
---|
{ "id": string, "earliestStartTime": { object ( |
Champs | |
---|---|
id |
ID unique de ce modèle. |
earliestStartTime |
Première heure de la journée à laquelle une équipe peut commencer. Cette valeur est spécifiée en heures et en minutes. secondes et les nano-unités sont ignorées. |
latestStartTime |
Dernière heure de la journée à laquelle une équipe peut commencer. Cette valeur est spécifiée en heures et en minutes. secondes et les nano-unités sont ignorées. Si cette valeur est inférieure à |
durationMinutes |
Durée fixe d'une période de travail générée par ce modèle. |
startTimeIncrementMinutes |
Incrément de temps (en minutes) utilisé pour générer l'ensemble des heures de début possibles entre |
daysOffCountPerWeek |
Nombre fixe de jours de repos par semaine. Un employé bénéficie d'un jour de congé donné s'il n'est pas affecté à un quart de travail qui commence ce jour-là. Une semaine dure sept jours et commence le dimanche. |
eventTemplates[] |
Règles permettant de générer des événements pour chaque équipe. Un seul événement sera inclus dans chaque quart de travail pour chaque événement spécifié. |
minimumIntereventGapMinutes |
Nombre minimal de minutes entre la fin d'un événement et le début du suivant. |
maximumEmployeeCount |
Nombre maximal d'employés pouvant être affectés à toutes les périodes de travail générées par ce modèle. |
TimeOfDay
Représente une heure de la journée. La date et le fuseau horaire sont spécifiés ailleurs, ou ne sont pas significatifs. Une API peut choisir d'autoriser des secondes intercalaires. Les types associés sont google.type.Date
et google.protobuf.Timestamp
.
Représentation JSON |
---|
{ "hours": integer, "minutes": integer, "seconds": integer, "nanos": integer } |
Champs | |
---|---|
hours |
Heure de la journée au format 24 heures. Elle doit être comprise entre 0 à 23. Une API peut choisir d'autoriser la valeur "24:00:00" pour des cas tels que l'heure de fermeture des bureaux. |
minutes |
Minutes de l'heure de la journée. Elles doivent être comprises entre 0 à 59. |
seconds |
Secondes de l'heure de la journée. Elles doivent normalement être comprises entre 0 et 59. Une API peut autoriser la valeur 60 si elle autorise les secondes intercalaires. |
nanos |
Fractions de secondes en nanosecondes. La valeur doit être comprise entre 0 et 999 999 999. |
EventTemplate
Modèle spécifiant les règles pour générer un seul événement qui se produit pendant une équipe. Un événement peut représenter une réunion, une pause, un déjeuner, etc.
Représentation JSON |
---|
{ "id": string, "minimumMinutesAfterShiftStart": integer, "maximumMinutesAfterShiftStart": integer, "durationMinutes": integer, "startTimeIncrementMinutes": integer } |
Champs | |
---|---|
id |
ID unique de ce modèle. |
minimumMinutesAfterShiftStart |
Nombre minimal de minutes pendant lesquelles cet événement peut commencer après le début d'une période de travail. |
maximumMinutesAfterShiftStart |
Nombre maximal de minutes pendant lesquelles cet événement peut commencer après le début d'une période de travail. |
durationMinutes |
Durée fixe de cet événement, en minutes. |
startTimeIncrementMinutes |
Incrément de temps (en minutes) utilisé pour générer l'ensemble des heures de début d'événements possibles entre |
EmployeeDemand
Spécifie le nombre d'employés nécessaires pour couvrir la demande au cours de l'intervalle DateTime donné.
Représentation JSON |
---|
{ "startDateTime": { object ( |
Champs | |
---|---|
startDateTime |
Début de l'intervalle de temps pour la demande donnée (inclus). Ces valeurs sont lues à la minute près. secondes et toutes les unités plus petites sont ignorées. |
endDateTime |
Fin de l'intervalle de temps pour la demande donnée (exclue). Ces valeurs sont lues à la minute près. secondes et toutes les unités plus petites sont ignorées. |
employeeCount |
Nombre d'employés nécessaires pour couvrir la demande pour cet intervalle. |
ShiftGenerationSolutionStatus
État de la solution fourni dans la réponse d'un résolveur.
Enums | |
---|---|
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED |
État de la réponse non spécifié. |
SHIFT_GENERATION_SOLVED |
Le résolveur a trouvé une solution dans le délai indiqué. |
SHIFT_GENERATION_NOT_SOLVED |
Un problème a empêché le résolveur de générer des changements. |
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED |
Les équipes n'ont pas pu être générées pour couvrir la demande dans le délai imparti. |
EmployeeSchedule
Liste ordonnée de quarts de travail correspondant à un seul ShiftTemplate
devant être attribué à un certain nombre d'employés.
Représentation JSON |
---|
{
"shiftTemplateId": string,
"shifts": [
{
object ( |
Champs | |
---|---|
shiftTemplateId |
ID du modèle qui a été utilisé pour générer cet ensemble d'ajustements. |
shifts[] |
Liste des horaires auxquels |
employeeCount |
Nombre d'employés devant être affectés à cet ensemble d'équipes pour répondre à la demande. |
ShiftWithEvents
Spécifie les dates de début et de fin, ainsi que la liste des événements fixes d'un décalage généré par le résolveur.
Représentation JSON |
---|
{ "startDateTime": { object ( |
Champs | |
---|---|
startDateTime |
Date et heure de début du quart de travail. Cette valeur est spécifiée à la minute. secondes et les unités inférieures ne sont pas fournies. |
endDateTime |
Date et heure de fin du quart de travail. Cette valeur est spécifiée à la minute près. secondes et les unités inférieures ne sont pas fournies. |
events[] |
Liste des événements inclus dans ce décalage, mappés exactement aux éléments |
Événement
Spécifie les dates et heures de début et de fin d'un événement spécifique dans un décalage généré par le résolveur.
Représentation JSON |
---|
{ "eventTemplateId": string, "startDateTime": { object ( |
Champs | |
---|---|
eventTemplateId |
ID du modèle qui a été utilisé pour générer cet événement. |
startDateTime |
Date et heure de début de l'événement. Cette valeur est spécifiée à la minute près. secondes et les unités inférieures ne sont pas fournies. |
endDateTime |
Date et heure de fin de l'événement. Cette valeur est spécifiée à la minute. secondes et les unités inférieures ne sont pas fournies. |
DemandCoverageViolation
Spécifie le cas de non-respect de la couverture de la demande pour l'intervalle donné. La demande des employés reste la même pendant tout l'intervalle spécifié.
Représentation JSON |
---|
{ "startDateTime": { object ( |
Champs | |
---|---|
startDateTime |
Date et heure de début de l'intervalle de demande (incluses). Cette valeur est spécifiée à la minute près. |
endDateTime |
Date et heure de fin de l'intervalle de demande (exclues). Cette valeur est spécifiée à la minute près. |
coverageViolation |
Non-respect de la couverture pendant la période spécifiée. Une valeur positive indique que la demande est surcouverte, tandis qu'une valeur négative indique que la demande est sous-couverte. |