Package google.research.optimization.v1.workforce

Índice

Receso

Un período en el que un empleado interrumpe su trabajo durante un turno.

Campos
start_date_time

DateTime

Hora de inicio de un descanso.

duration_minutes

int32

Duración de la pausa en minutos.

BreakRule

Es una regla que determina cuándo puede comenzar una pausa dentro de un cambio y su duración. La lista de todas las pausas posibles que se consideran se determina en incrementos de rule_increment_minutes. Por ejemplo, si una regla de pausa modela una pausa de 30 minutos que puede comenzar entre las 10:00 y las 11:00, y el incremento de la regla es de 20 minutos, la lista de pausas que se consideran es la siguiente: [10:00, 10:30], [10:20, 10:50], [10:10, 11:10], [10:10, 11:10]

Campos
earliest_start_time

DateTime

La hora de inicio más temprana de la pausa (inclusive). Solo se pueden configurar hours y minutes.

latest_start_time

DateTime

La hora de inicio más reciente de la pausa (incluida). Solo se pueden configurar hours y minutes.

duration_minutes

int32

Duración de la pausa en minutos.

rule_increment_minutes

int32

[Opcional] Incremento de tiempo en minutos para todas las pausas que se pueden considerar en esta regla de pausa. Si no se establece, el valor predeterminado es duration_minutes.

BudgetRequirement

Requisitos de presupuesto para un intervalo determinado.

Campos
total_budget

double

Es el presupuesto total para el intervalo determinado. Se debe proporcionar un presupuesto total si la prioridad es PRIORITY_MANDATORY.

Si no estableces total_budget, se minimizará el costo total del programa de acuerdo con el priority especificado. Por ejemplo, si la priority para el presupuesto es PRIORITY_MEDIUM, la resolución de problemas minimizará el costo antes de reducir cualquier incumplimiento de restricción con prioridad PRIORITY_LOW.

start_date_time

DateTime

Es la hora de inicio del momento en que se aplica este presupuesto. Si no se especifica la hora de inicio, se establece como la hora de inicio más temprana de todos los cambios.

end_date_time

DateTime

Es la hora de finalización cuando se aplica este presupuesto. Si no se especifica una hora de finalización, se establece como la última hora de finalización de todos los cambios.

priority

Priority

Nivel de prioridad para cumplir con el requisito de presupuesto durante el período especificado. La prioridad predeterminada es PRIORITY_LOW. Si la prioridad se establece en PRIORITY_MANDATORY, se debe establecer total_budget.

Ten en cuenta que, si esta prioridad es mayor que otras prioridades de restricción y si total_budget es estricta, el programa resultante podría incumplir significativamente las restricciones de los empleados o los requisitos de cobertura.

CoverageRequirement

Un requisito de cobertura especifica la cantidad de empleados necesarios para un conjunto de roles o habilidades durante un período en particular y en una ubicación determinada. No se pueden superponer los intervalos de DateTime en una ubicación en particular. Como alternativa, se puede proporcionar una lista de IDs de turno en lugar de un período y una ubicación. Solo los empleados que pueden asignarse a la función específica (o que poseen la habilidad específica) pueden cumplir este requisito.

Para un rol o una habilidad determinados, se cumple el requisito de cobertura cuando al menos target_employee_count empleados trabajan en todo momento durante la ventana horaria (o para cada turno de shift_ids). En cambio, se incumple el requisito de cobertura si en algún momento de la ventana temporal (o en cualquiera de los turnos en shift_ids) hay menos de target_employee_count empleados que trabajan durante ese período. La cantidad de empleados que trabajan más que la target_employee_count sigue cumpliendo el requisito, pero el solucionador minimiza el exceso de personal.

Campos
start_date_time

DateTime

Es la hora de inicio del requisito de cobertura (incluida). Si se configura, shift_ids debe estar vacío.

end_date_time

DateTime

La hora de finalización del requisito de cobertura (exclusivo). Si se configura, shift_ids debe estar vacío.

location_id

string

Ubicación en la que se necesitan los empleados. shift_ids no está vacío, este campo debe estar vacío.

shift_ids[]

string

Si se establecen, los requisitos de rol y habilidad se aplican individualmente a cada ID de turno en esta lista. Si Shift_ids no está vacío, entonces start_date_time, end_date_time y location_id deben estar vacíos.

role_requirements[]

RoleRequirement

Cantidad requerida de empleados que se asignarán a los roles especificados durante el período. Se debe proporcionar un role_requirement como máximo para cada ID de función. El nivel de prioridad predeterminado para cada uno de los requisitos es PRIORITY_MANDATORY. Estas restricciones se incumplen si se asignan menos de target_employee_count empleados a las funciones especificadas en cualquier momento durante el período.

skill_requirements[]

SkillRequirement

Cantidad requerida de empleados con las habilidades especificadas que están asignados a turnos durante el período establecido. Se debe proporcionar una skill_requirement como máximo para cada ID de habilidad. El nivel de prioridad predeterminado para cada uno de los requisitos es PRIORITY_LOW. Estas restricciones se incumplen si hay menos de target_employee_count empleados que poseen las habilidades determinadas en algún momento durante el período.

RoleRequirement

Cantidad requerida de empleados que se asignarán a la función especificada durante el período.

Campos
role_id

string

Es el ID de función del requisito.

target_employee_count

int32

Cantidad deseada de empleados asignados a la función durante el período establecido.

priority

Priority

Nivel de prioridad para esta restricción de requisitos. La prioridad predeterminada para todas las restricciones de recursos es PRIORITY_MANDATORY.

SkillRequirement

Cantidad requerida de empleados que trabajan durante el período y tienen la habilidad especificada.

Campos
skill_id

string

Es el ID de habilidad del requisito.

target_employee_count

int32

Número deseado de empleados con una habilidad determinada que trabajan durante ese período.

priority

Priority

Nivel de prioridad para esta restricción de requisitos. La prioridad predeterminada para todas las restricciones de recursos es PRIORITY_LOW.

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.

Campos
start_date_time

DateTime

Es la fecha y hora de inicio del intervalo de demanda (inclusive). Este valor se especifica por minuto.

end_date_time

DateTime

Es la fecha y hora de finalización del intervalo de demanda (exclusivo). Este valor se especifica por minuto.

coverage_violation

int32

Incumplimiento de cobertura durante el intervalo especificado. Un valor positivo indica que la demanda está sobrecubierta, y un valor negativo indica que está subcubierta.

Empleado

Se programará a un empleado del personal.

Campos
id

string

ID único asignado a este empleado.

role_ids[]

string

Son los IDs de función que puede realizar este empleado. Se debe especificar al menos un rol. Cuando se asigna un turno a un empleado, también se le asigna un solo rol de esta lista. Se le puede asignar al empleado a diferentes roles durante el período de programación.

skill_ids[]

string

Los IDs de habilidad que posee este empleado. Esta lista puede estar vacía. Cuando se asigna un turno a un empleado, usa cualquier subconjunto de las habilidades enumeradas aquí para cubrir los requisitos de habilidades a lo largo del turno asignado.

shift_preferences[]

ShiftPreference

Cambiar las preferencias de este empleado. Los turnos especificados aquí representan cambios a los que el empleado preferiría asignarse durante el período de programación. Los IDs de cambio especificados en shift_preferences deben ser únicos. El solucionador de problemas intentará maximizar la suma de los valores de ShiftPreference.preference sobre todos los shift_preferences que se cumplan.

scheduling_constraints[]

SchedulingConstraint

Lista de restricciones de horario para este empleado. El nivel de prioridad predeterminado para cada una de estas restricciones es PRIORITY_MEDIUM. Consulta la enum Priority para obtener más detalles.

resource_constraints[]

ResourceConstraint

Cualquier restricción de programación adicional que no se especifique en scheduling_constraints se puede agregar aquí a resource_constraints. Un ResourceConstraint es una representación más abstracta que se usa para limitar los recursos de un empleado. El nivel de prioridad predeterminado para cada una de estas restricciones es PRIORITY_MEDIUM. Consulta la enum Priority para obtener más detalles.

shift_requests[]

ShiftRequest

Lista de solicitudes de turnos para el empleado. La solicitud puede ser para que se asigne o no a un empleado en turnos específicos. Cualquier asignación de programación fija para el empleado se puede representar con un ShiftRequest con prioridad PRIORITY_MANDATORY. Un ID de turno puede aparecer como máximo en una solicitud de programación de este empleado. El nivel de prioridad predeterminado para cada una de estas solicitudes es PRIORITY_LOW. Consulta la enum Priority para obtener más detalles.

hourly_contract

HourlyContract

Contrato que especifica las tarifas regulares y por horas extra para el empleado.

EmployeeDemand

Especifica la cantidad de empleados necesarios para cubrir la demanda en el intervalo de fecha y hora determinado.

Campos
start_date_time

DateTime

Inicio del intervalo de tiempo para la demanda determinada (inclusive). Estos valores se leen hasta el minuto; los segundos y todas las unidades más pequeñas se ignoran.

end_date_time

DateTime

Final del intervalo de la demanda determinada (exclusivo). Estos valores se leen hasta el minuto; los segundos y todas las unidades más pequeñas se ignoran.

employee_count

int32

Cantidad de empleados necesarios para cubrir la demanda de este intervalo.

EmployeeSchedule

Una lista ordenada de turnos correspondientes a un único ShiftTemplate que se asignará a una cantidad de empleados.

Campos
shift_template_id

string

ID de la plantilla que se utilizó para generar este conjunto de cambios.

shifts[]

ShiftWithEvents

Lista de turnos a los que se asignó employee_count número de empleados. Los turnos y eventos seleccionados para la programación se generaron a partir de una sola plantilla. Los cambios se ordenan cronológicamente y no se superponen. Si el valor de SolverConfig.multi_day_schedule es verdadero, un día libre se representa de forma implícita por la ausencia de un cambio que comience ese día.

employee_count

int32

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.

Campos
start_date_time

DateTime

Es la fecha y hora de inicio del cambio. Este valor se especifica por minuto. No se dan segundos ni unidades menores.

end_date_time

DateTime

Es la fecha y hora de finalización del cambio. Este valor se especifica por minuto. No se dan segundos ni unidades menores.

events[]

Event

Lista de eventos incluidos en este cambio, asignados exactamente a los ShiftTemplate.Event y en el mismo orden que estos. Si el valor de SolverConfig.shift_events_can_change es verdadero, las horas de inicio y finalización de los eventos pueden variar en todos los ShiftWithEvents de este programa.

Evento

Especifica la fecha y hora de inicio y finalización de un evento específico en un cambio que generó el solucionador.

Campos
event_template_id

string

El ID de la plantilla que se usó para generar este evento.

start_date_time

DateTime

Es la fecha y hora de inicio del evento. Este valor se especifica por minuto. No se dan segundos ni unidades menores.

end_date_time

DateTime

Es la fecha y hora de finalización del evento. Este valor se especifica por minuto. No se dan segundos ni unidades menores.

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.

Campos
id

string

ID único de esta plantilla.

minimum_minutes_after_shift_start

int32

Cantidad mínima de minutos en los que puede comenzar este evento después del comienzo de un turno.

maximum_minutes_after_shift_start

int32

Cantidad máxima de minutos que puede iniciar este evento después del comienzo de un turno.

duration_minutes

int32

Duración fija en minutos del evento

start_time_increment_minutes

int32

El incremento de tiempo (en minutos) que se usa para generar el conjunto de posibles horas de inicio de eventos entre minimum_minutes_after_shift_start y maximum_minutes_after_shift_start. Por ejemplo, si la cantidad mínima de minutos después del inicio del turno es de 30, la cantidad máxima de minutos después del inicio del turno es de 45 y el incremento de la hora de inicio es de 5 minutos, el evento puede tener lugar 30, 35, 40 o 45 minutos después del cambio.

HourlyContract

Especifica una tarifa por hora base, diferenciales de tarifas y multiplicadores de horas extras para determinar la remuneración de un empleado. Ten en cuenta que las reglamentaciones en distintas partes podrían requerir un cálculo diferente de la compensación por horas extra. La herramienta de resolución aproxima la compensación por tiempo extra para minimizar un costo total o alcanzar un presupuesto (consulta BudgetRequirement). No está diseñada como una herramienta para calcular la nómina.

Campos
base_hourly_rate

double

La remuneración por trabajar una hora no extrahora. Si se aplican varias tarifas al empleado, se aplican diferenciales de tarifas en relación con esta tarifa base por hora. Además, si hay varias tarifas, la tarifa base por hora debe ser la mínima de estas.

hourly_rate_shift_differentials

map<string, double>

La diferencial de tarifas por hora, que se paga sobre el base_hourly_rate. Por ejemplo, si la tarifa base por hora es de USD 30 por hora, "shift_1" se paga a una tarifa de USD 40 por hora y "shift_2" se paga a una tarifa de USD 45 por hora, entonces la representación del protocolo es: base_hourly_rate: 30 hourly_rate_shift_differentials {key: "shift_1" value: 10} hourly_rate_shift_differentials {key: "shift_2" value: 15}.

overtime_periods[]

OvertimePeriod

Una lista de todos los períodos para los que se debe calcular el tiempo extra Estos períodos no deben superponerse.

OvertimePeriod

Es un período fijo y recurrente (generalmente de 168 horas o siete períodos consecutivos de 24 horas) que se usa para determinar el importe de la remuneración por horas extras. Cada período tiene un multiplicador de horas extras (p.ej., 1.5) en relación con la base_hourly_rate y un límite en la cantidad de horas que se consideran trabajos normales (no extraordinarios) Cualquier cambio que se superponga con los períodos start_date_time (inclusivo) y end_date_time (exclusivo) se contabiliza en la cantidad total de horas trabajadas en el período. Si la superposición es parcial, solo se contarán las horas que se superponen.

Campos
overtime_multiplier

double

Multiplicador para calcular la tarifa por hora extra (debe ser mayor o igual que 1.0) Por lo general, la tarifa por hora extra con el tiempo se calcula como base_hourly_rate * overtime_multiplier. Si hay varias tarifas proporcionadas a través de hourly_rate_shift_differentials, el solucionador calcula la tarifa por hora extra con un promedio simple de las tarifas que se aplican durante el período extra. Nota: Las reglamentaciones en diferentes lugares pueden requerir un cálculo diferente de la compensación por horas extra. La resolución se aproxima a la compensación por tiempo extra para minimizar un valor representativo del costo total o cumplir con un presupuesto, pero no está diseñada como una herramienta para calcular la nómina.

start_date_time

DateTime

Es la hora de inicio del período extra. Si un cambio se superpone en este período, las horas de ese cambio se contarán desde start_date_time.

end_date_time

DateTime

Es la hora de finalización del período extra. Si un cambio se superpone en este período, las horas de ese cambio se contarán hasta end_date_time.

maximum_regular_hours

double

Cantidad máxima de horas laborales que se pagan a una tarifa regular (que no pertenece a horas extras). Esta cantidad debe ser positiva.

Prioridad

El nivel de prioridad para cualquier restricción en el horario de un empleado o los requisitos de cobertura. Estos incluyen SchedulingConstraint, ResourceConstraint, ShiftRequest y CoverageRequirement. Debido a que puede haber restricciones en conflicto, no siempre es posible satisfacer todas. Por lo tanto, cada tipo de restricción tiene una prioridad (determinada por el usuario o predeterminada) que informa al solucionador sobre la importancia relativa de todas las restricciones otorgadas a un programa completo.

Enumeradores
PRIORITY_UNSPECIFIED Nivel de prioridad desconocido.
PRIORITY_LOW El nivel de prioridad más bajo. Las restricciones con esta prioridad son menos importantes que las demás. Son los primeros en considerarse una infracción si no se encuentra una solución viable.
PRIORITY_MEDIUM Nivel de prioridad medio. Las restricciones con esta prioridad son más importantes que las que tienen prioridad PRIORITY_LOW, pero menos importantes que las PRIORITY_HIGH. Si no se puede encontrar una solución factible después de relajar todas las restricciones con prioridad PRIORITY_LOW, las restricciones con prioridad PRIORITY_MEDIUM se consideran a continuación para el incumplimiento.
PRIORITY_HIGH El nivel de prioridad más alto. Las restricciones con este nivel de prioridad son las más importantes. Son las últimas que se consideran por incumplimiento si no se puede encontrar una solución factible después de flexibilizar las restricciones de los niveles de prioridad más bajos.
PRIORITY_MANDATORY Nivel de prioridad que representa algo que el solucionador no puede incumplir. Si el solucionador muestra SolutionStatus.INFEASIBLE, puede deberse a demasiadas restricciones de PRIORITY_MANDATORY.

ResourceConstraint

Restricción general que limita la cantidad de un “recurso” determinado que usa un empleado. Esta es una versión abstracta del SchedulingConstraint más específico que es más flexible para el usuario. Muchas restricciones de programación que no se pueden especificar en SchedulingConstraint.type se pueden especificar con este mensaje en su lugar.

Campos
priority

Priority

Nivel de prioridad de esta restricción de recursos. La prioridad predeterminada para todas las restricciones de recursos es PRIORITY_MEDIUM.

resource_usages

map<string, double>

Cantidad de recursos utilizados por los turnos. Por ejemplo, si esta restricción se aplica a las horas mínimas y máximas que trabajó un empleado durante una semana específica, este mapa contendrá los cambios que se producen en esa semana y la duración de cada cambio en horas.

minimum_resource_usage

double

Uso mínimo de recursos para que se cumpla una restricción de recursos.

maximum_resource_usage

double

Uso máximo de recursos para que se cumpla una restricción de recursos.

SchedulingConstraint

Restricción de horario específica para un empleado en particular. La restricción especificada solo se aplica durante el intervalo [start_date_time, end_date_time) determinado.

Campos
priority

Priority

Nivel de prioridad para esta restricción de programación. La prioridad predeterminada para todas las restricciones de programación es PRIORITY_MEDIUM.

start_date_time

DateTime

Es la hora de inicio en la que se aplica esta restricción de programación (incluida).

end_date_time

DateTime

Es la hora de finalización en la que se aplica esta restricción de programación (exclusivo).

Campo de unión type. El tipo de restricción que se especifica. Cada restricción solo se aplica dentro del período especificado anteriormente. Las direcciones (type) solo pueden ser una de las siguientes opciones:
minimum_minutes

int32

Cantidad mínima de minutos que el empleado puede trabajar. Si se asigna al empleado un turno que se superpone (total o parcialmente) con la ventana de tiempo, la cantidad de minutos que el turno se superpone con la ventana de tiempo se incluye en este recuento.

maximum_minutes

int32

Cantidad máxima de minutos que el empleado puede trabajar en la ventana de tiempo. Si se asigna al empleado un turno que se superpone (total o parcialmente) con la ventana de tiempo, la cantidad de minutos que el turno se superpone con la ventana de tiempo se incluye en este recuento.

minimum_consecutive_work_days

int32

Cantidad mínima de días consecutivos en los que puede trabajar el empleado. Un empleado trabaja un día específico si se le asigna un turno que comienza durante ese día. Cualquier turno al que se asigne el empleado y que comience en el período se incluye en este recuento.

maximum_consecutive_work_days

int32

Cantidad máxima de días consecutivos en los que puede trabajar el empleado Un empleado trabaja un día específico si se le asigna un turno que comienza durante ese día. Cualquier turno al que se asigne el empleado y que comience en el período se incluye en este recuento.

minimum_shift_count

int32

Cantidad mínima de turnos que puede realizar el empleado. Este recuento incluye cualquier cambio al que se asigne el empleado y que se superponga completamente con el período.

maximum_shift_count

int32

Cantidad máxima de turnos que puede trabajar el empleado Este recuento incluye cualquier cambio al que se asigne el empleado y que se superponga completamente con el período.

minimum_rest_minutes

int32

Cantidad mínima de minutos que el empleado debe descansar después del final de un turno antes de que se lo asigne a otro. Esta restricción se aplica a cada par de turnos que se incluyen por completo en [start_date_time, end_date_time].

Shift

Un turno especifica una ventana de tiempo fija en la que pueden trabajar los empleados.

Campos
id

string

Es un ID único asignado a este cambio.

location_id

string

Es el ID de ubicación en el que se realiza este cambio. Este campo puede estar vacío.

start_date_time

DateTime

La hora de inicio del cambio (inclusive).

end_date_time

DateTime

La hora de finalización del cambio (exclusivo). Actualmente, la resolución solo permite cambios de menos de 24 horas de duración.

break_rules[]

BreakRule

Una lista de las reglas de incumplimiento que ocurren durante el cambio. A los empleados que realizan este turno se les asigna un descanso por break_rule, durante el cual no cubren la demanda del rol que cumplen. Cada período de BreakRule debe incluirse en su totalidad en el período de este cambio.

ShiftAssignment

Un empleado debe asignar un rol por turnos.

Campos
employee_id

string

El ID del empleado que se asigna.

shift_id

string

El ID del turno asignado al empleado.

role_id

string

Es el ID de rol al que se asignó el empleado para el turno.

breaks[]

Break

Lista de pausas para esta asignación de turno.

ShiftGenerationSolutionStatus

Estado de la solución proporcionado en la respuesta de una resolución.

Enumeradores
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.

ShiftPreference

Una preferencia numérica para un ID de cambio en particular.

Campos
shift_id

string

Es el ID del cambio para el que se especifica la preferencia.

preference

int32

Los valores de preferencia más altos indican un cambio más deseable.

ShiftRequest

La solicitud de un empleado de que se le asigne o no que se asigne a turnos específicos.

Campos
priority

Priority

Nivel de prioridad de esta solicitud de programación. La prioridad predeterminada para todas las solicitudes de programación es PRIORITY_LOW.

shift_ids[]

string

Los IDs de los cambios de la solicitud de programación.

type

WorkStatus

Tipo de solicitud, p.ej., si la solicitud se asignó o no al conjunto de cambios.

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.

Campos
id

string

ID único de esta plantilla.

earliest_start_time

TimeOfDay

Hora más temprana del día en que puede comenzar un turno Este valor se especifica con horas y minutos. Se ignoran los segundos y los nanosegundos.

latest_start_time

TimeOfDay

Hora más reciente del día en la que puede comenzar un turno. Este valor se especifica con horas y minutos. Se ignoran los segundos y los nanosegundos. Si este valor es menor que earliest_start_time, entonces un cambio generado por esta plantilla puede comenzar antes o después de la medianoche.

duration_minutes

int32

Duración fija de un cambio generado por esta plantilla.

start_time_increment_minutes

int32

El incremento de tiempo (en minutos) que se usa para generar el conjunto de horas de inicio posibles entre earliest_start_time y latest_start_time. Por ejemplo, si la primera hora de inicio es 8:00, la última hora de inicio es 8:30 y el incremento de la hora de inicio es 10 minutos, todos los horarios de inicio posibles para esta plantilla de cambio son 8:00, 8:10, 8:20 y 8:30.

days_off_count_per_week

int32

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.

event_templates[]

EventTemplate

Reglas de generación de eventos para cada turno Se incluirá exactamente un evento en cada turno para cada evento especificado.

minimum_interevent_gap_minutes

int32

Minutos mínimos entre el final de un evento y el inicio del siguiente.

maximum_employee_count

int32

Cantidad máxima de empleados que pueden asignarse a todos los turnos generados con esta plantilla.

SolutionStatus

Estado de la solución (es decir, un programa) que se proporciona en la respuesta de una resolución

Enumeradores
SOLUTION_STATUS_UNSPECIFIED Estado sin especificar para la respuesta.
FEASIBLE El programa que se muestra es factible, pero puede no ser óptimo.
OPTIMAL El programa que se muestra es óptimo.
INFEASIBLE No existe un cronograma factible para las restricciones dadas. La herramienta de resolución puede mostrar este valor si no se puede satisfacer algún subconjunto de las restricciones con el nivel de prioridad PRIORITY_MANDATORY.
NOT_SOLVED No se encontró ningún programa.
NOT_SOLVED_DEADLINE_EXCEEDED No se encontró ningún programa dentro del límite de tiempo establecido.

SolveParameters

Son parámetros que controlan una sola solución al problema de la programación de turnos.

Campos
time_limit

Duration

Tiempo máximo que el agente de resolución debería dedicar al problema. Si no se establece, el valor predeterminado es 1 minuto.

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.

SolverConfig

Especifica parámetros adicionales para resolver el problema de generación de turnos.

Campos
time_limit

Duration

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 ShiftTemplates, cada una con alrededor de 20 horas de inicio posibles y manteniendo 2 eventos con alrededor de 30 horas de inicio posibles, y dos días libres por semana, los valores recomendados son los siguientes: <10 s para soluciones rápidas (y probablemente subóptimos), (10 s y 300 s) para soluciones de buena calidad, y más de 300 s para una búsqueda exhaustiva. Las instancias más grandes pueden requerir límites de tiempo más largos.

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.

multi_day_schedule

bool

Si es verdadero, el solucionador genera EmployeeSchedule que incluyen varios cambios (p.ej., para generar un programa de una semana). De lo contrario, cada EmployeeSchedule incluye exactamente un cambio. Los programas de varios días suponen que la hora de inicio del turno es la misma para todos los días, y que las plantillas de turnos determinan la cantidad de días libres de ese horario. El valor predeterminado es falso.

shift_events_can_change

bool

Si esta preferencia se establece como "true", los elementos EmployeeSchedule de varios días pueden incluir cambios para los cuales la hora de inicio y finalización de los eventos varía en todos los días. De lo contrario, todos los turnos de una EmployeeSchedule determinada deben tener las horas de inicio y finalización del mismo evento. En cualquier caso, todos los turnos de una programación de varios días tienen la misma hora de inicio y de finalización. Por lo tanto, este parámetro se ignora si multi_day_schedule es falso. Si estableces este parámetro como verdadero, es posible que los tiempos de resolución sean más largos. El valor predeterminado es falso.

WorkStatus

Si un empleado está trabajando o no.

Enumeradores
WORK_STATUS_UNSPECIFIED Estado de trabajo desconocido.
STATUS_WORK Estado que representa a un empleado que trabaja.
STATUS_NOT_WORK Estado que representa a un empleado que no trabaja