Resuelve un problema de generación de turnos a partir de un SolveShiftGenerationRequest
determinado generando turnos a partir de plantillas de turnos determinadas para satisfacer la demanda de los empleados.
Solicitud HTTP
POST https://optimization.googleapis.com/v1/scheduling:solveShiftGeneration
La URL usa la sintaxis de la transcodificación gRPC.
Cuerpo de la solicitud
El cuerpo de la solicitud contiene datos con la siguiente estructura:
Representación JSON |
---|
{ "solverConfig": { object ( |
Campos | |
---|---|
solverConfig |
Opcional. Parámetros para la resolución |
shiftTemplates[] |
Obligatorio. Un conjunto de plantillas de turnos que especifican las reglas para generar turnos. |
employeeDemands[] |
Obligatorio. Demanda total de los empleados que deben cubrir los turnos que genera |
Cuerpo de la respuesta
Respuesta para el problema de generación de turnos. Si la solutionStatus
que se muestra es SOLVED
, en employeeSchedules
se muestra un conjunto de cambios válidos generados por el solucionador de problemas. En el caso de un programa de turnos válido, se aplican las siguientes propiedades:
- Cada cambio generado en
employeeSchedules
cumple con las reglas especificadas en elShiftTemplate
correspondiente. - Cada evento seleccionado en cada cambio cumple con las reglas especificadas en el
ShiftTemplate.Event
correspondiente. - La cantidad total de empleados asignados al conjunto de turnos generados a partir del mismo ShiftTemplate no excede los
maximumEmployeeCount
de esa plantilla. - El conjunto de empleados asignados cubre la demanda en cada intervalo determinado.
Si se ejecuta correctamente, el cuerpo de la respuesta contendrá datos con la siguiente estructura:
Representación JSON |
---|
{ "solutionStatus": enum ( |
Campos | |
---|---|
solutionStatus |
Estado de la solución que se muestra. Si |
employeeSchedules[] |
Conjunto de turnos generados por el solucionador junto con el número de empleados asignados a cada programa. |
demandCoverageViolations[] |
Incumplimientos de cobertura de la demanda basados en la |
SolverConfig
Especifica parámetros adicionales para resolver el problema de generación de turnos.
Representación JSON |
---|
{ "timeLimit": string, "multiDaySchedule": boolean, "shiftEventsCanChange": boolean } |
Campos | |
---|---|
timeLimit |
Tiempo máximo que el agente de resolución debería dedicar al problema. Si no se establece, el valor predeterminado es 1 minuto. La elección de un límite de tiempo debería depender del tamaño del problema. Por ejemplo, cuando se resuelve una instancia de 7 días con 2 Este valor no es un límite estricto y no tiene en cuenta la sobrecarga de comunicación. Es posible que la latencia esperada para resolver el problema exceda un poco este valor. Una duración en segundos con hasta nueve dígitos decimales, que terminan en “ |
multiDaySchedule |
Si es verdadero, el solucionador genera |
shiftEventsCanChange |
Si esta preferencia se establece como "true", los elementos |
ShiftTemplate
Plantilla que especifica las reglas para generar turnos. Un turno es una unidad de trabajo que especifica una hora de inicio y finalización, y puede contener eventos (por ejemplo, almuerzos, descansos, etc.). Se asignará un cambio a una fecha específica en la respuesta.
Representación JSON |
---|
{ "id": string, "earliestStartTime": { object ( |
Campos | |
---|---|
id |
ID único de esta plantilla. |
earliestStartTime |
Hora más temprana del día en que puede comenzar un turno Este valor se especifica con horas y minutos. segundos y nanos se ignoran. |
latestStartTime |
Hora más reciente del día en la que puede comenzar un turno. Este valor se especifica con horas y minutos. segundos y nanos se ignoran. Si este valor es menor que |
durationMinutes |
Duración fija de un cambio generado por esta plantilla. |
startTimeIncrementMinutes |
El incremento de tiempo (en minutos) que se usa para generar el conjunto de horas de inicio posibles entre |
daysOffCountPerWeek |
Cantidad fija de días libres por semana Un empleado tiene un día libre determinado si no se le asigna un turno que comience ese día. Una semana dura 7 días y comienza el domingo. |
eventTemplates[] |
Reglas de generación de eventos para cada turno Se incluirá exactamente un evento en cada turno para cada evento especificado. |
minimumIntereventGapMinutes |
Minutos mínimos entre el final de un evento y el inicio del siguiente. |
maximumEmployeeCount |
Cantidad máxima de empleados que pueden asignarse a todos los turnos generados con esta plantilla. |
TimeOfDay
Representa una hora del día. La fecha y la zona horaria no son significativas o se especifican en otro lugar. Una API puede optar por permitir segundos bisiestos. Los tipos relacionados son google.type.Date
y google.protobuf.Timestamp
.
Representación JSON |
---|
{ "hours": integer, "minutes": integer, "seconds": integer, "nanos": integer } |
Campos | |
---|---|
hours |
Horas del día en formato de 24 horas. Debe ser del 0 al 23. Una API puede permitir el valor “24:00:00” para casos como el horario de cierre de empresas. |
minutes |
Minutos de horas del día. Debe ser un valor entre 0 y 59. |
seconds |
Segundos de minutos de la hora. Por lo general, debe ser un valor entre 0 y 59. Una API puede permitir el valor 60 si permite segundos bisiestos. |
nanos |
Fracciones de segundos en nanosegundos. Debe ser un valor entre 0 y 999,999,999. |
EventTemplate
Plantilla que especifica las reglas para generar un solo evento que ocurre durante un turno. Un evento puede representar una reunión, un descanso, un almuerzo, etcétera.
Representación JSON |
---|
{ "id": string, "minimumMinutesAfterShiftStart": integer, "maximumMinutesAfterShiftStart": integer, "durationMinutes": integer, "startTimeIncrementMinutes": integer } |
Campos | |
---|---|
id |
Es el ID único de esta plantilla. |
minimumMinutesAfterShiftStart |
Cantidad mínima de minutos en los que puede comenzar este evento después del comienzo de un turno. |
maximumMinutesAfterShiftStart |
Cantidad máxima de minutos que puede iniciar este evento después del comienzo de un turno. |
durationMinutes |
Duración fija en minutos del evento |
startTimeIncrementMinutes |
El incremento de tiempo (en minutos) que se usa para generar el conjunto de posibles horas de inicio de eventos entre |
EmployeeDemand
Especifica la cantidad de empleados necesarios para cubrir la demanda en el intervalo de fecha y hora determinado.
Representación JSON |
---|
{ "startDateTime": { object ( |
Campos | |
---|---|
startDateTime |
Inicio del intervalo de tiempo para la demanda determinada (inclusive). Estos valores se leen por minuto. segundos y se ignoran todas las unidades más pequeñas. |
endDateTime |
Final del intervalo de la demanda determinada (exclusivo). Estos valores se leen por minuto. segundos y se ignoran todas las unidades más pequeñas. |
employeeCount |
Cantidad de empleados necesarios para cubrir la demanda de este intervalo. |
ShiftGenerationSolutionStatus
Estado de la solución proporcionado en la respuesta de una resolución.
Enumeraciones | |
---|---|
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED |
Estado sin especificar para la respuesta. |
SHIFT_GENERATION_SOLVED |
El solucionador encontró una solución en el límite de tiempo proporcionado. |
SHIFT_GENERATION_NOT_SOLVED |
Un problema impidió que la herramienta de resolución generara cambios. |
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED |
No se pudieron generar cambios para cubrir la demanda dentro del límite de tiempo establecido. |
EmployeeSchedule
Una lista ordenada de turnos correspondientes a un único ShiftTemplate
que se asignará a una cantidad de empleados.
Representación JSON |
---|
{
"shiftTemplateId": string,
"shifts": [
{
object ( |
Campos | |
---|---|
shiftTemplateId |
ID de la plantilla que se utilizó para generar este conjunto de cambios. |
shifts[] |
Lista de turnos a los que se asignó |
employeeCount |
Cantidad de empleados que deben asignarse a este conjunto de turnos para cubrir la demanda. |
ShiftWithEvents
Especifica la fecha de inicio y finalización junto con una lista de eventos fijos de un cambio generado por el solucionador.
Representación JSON |
---|
{ "startDateTime": { object ( |
Campos | |
---|---|
startDateTime |
Es la fecha y hora de inicio del cambio. Este valor se especifica por minuto. segundos y unidades más pequeñas. |
endDateTime |
Es la fecha y hora de finalización del cambio. Este valor se especifica por minuto. segundos y unidades más pequeñas. |
events[] |
Lista de eventos incluidos en este cambio, asignados exactamente a los |
Evento
Especifica la fecha y hora de inicio y finalización de un evento específico en un cambio que generó el solucionador.
Representación JSON |
---|
{ "eventTemplateId": string, "startDateTime": { object ( |
Campos | |
---|---|
eventTemplateId |
El ID de la plantilla que se usó para generar este evento. |
startDateTime |
Es la fecha y hora de inicio del evento. Este valor se especifica por minuto. segundos y unidades más pequeñas. |
endDateTime |
Es la fecha y hora de finalización del evento. Este valor se especifica por minuto. segundos y unidades más pequeñas. |
DemandCoverageViolation
Especifica el incumplimiento de la cobertura de la demanda para el intervalo determinado. La demanda de empleados es la misma durante todo el intervalo especificado.
Representación JSON |
---|
{ "startDateTime": { object ( |
Campos | |
---|---|
startDateTime |
Es la fecha y hora de inicio del intervalo de demanda (inclusive). Este valor se especifica por minuto. |
endDateTime |
Es la fecha y hora de finalización del intervalo de demanda (exclusivo). Este valor se especifica por minuto. |
coverageViolation |
Incumplimiento de cobertura durante el intervalo especificado. Un valor positivo indica que la demanda está sobrecubierta, y un valor negativo indica que está subcubierta. |