Resolve um problema de geração de turnos da SolveShiftGenerationRequest
determinada, gerando turnos de determinados modelos de turno para atender à demanda dos funcionários.
Solicitação HTTP
POST https://optimization.googleapis.com/v1/scheduling:solveShiftGeneration
O URL usa a sintaxe de transcodificação gRPC.
Corpo da solicitação
O corpo da solicitação contém dados com a seguinte estrutura:
Representação JSON |
---|
{ "solverConfig": { object ( |
Campos | |
---|---|
solverConfig |
Opcional. Parâmetros do solucionador. |
shiftTemplates[] |
Obrigatório. Conjunto de modelos que especificam regras para gerar turnos. |
employeeDemands[] |
Obrigatório. Demanda total dos funcionários que os turnos gerados por |
Corpo da resposta
Resposta para o problema da geração de mudanças. Se o solutionStatus
retornado for SOLVED
, um conjunto de mudanças válidas geradas pelo solucionador será retornado em employeeSchedules
. Para uma programação de turnos válida, as seguintes propriedades são mantidas:
- Cada mudança gerada no
employeeSchedules
segue as regras especificadas noShiftTemplate
correspondente. - Cada evento selecionado em cada turno segue as regras especificadas no
ShiftTemplate.Event
correspondente. - O número total de funcionários atribuídos ao conjunto de turnos gerados a partir do mesmo ShiftTemplate não excede
maximumEmployeeCount
desse modelo. - O conjunto de funcionários atribuídos cobre a demanda em cada intervalo.
Se bem-sucedido, o corpo da resposta incluirá dados com a estrutura a seguir:
Representação JSON |
---|
{ "solutionStatus": enum ( |
Campos | |
---|---|
solutionStatus |
Status da solução retornada. Se |
employeeSchedules[] |
Conjunto de turnos gerados pelo solucionador com o número de funcionários atribuídos a cada cronograma. |
SolverConfig
Especifica parâmetros adicionais para resolver o problema da geração de mudanças.
Representação JSON |
---|
{ "timeLimit": string, "multiDaySchedule": boolean, "shiftEventsCanChange": boolean } |
Campos | |
---|---|
timeLimit |
O tempo máximo que o solucionador deve gastar no problema. Se não for definido, o padrão será um minuto. A escolha do limite de tempo depende do tamanho do problema. Por exemplo, ao resolver uma instância de 7 dias com 2 Esse valor não é um limite rígido e não considera a sobrecarga de comunicação. A latência esperada para resolver o problema pode exceder um pouco esse valor. Uma duração em segundos com até nove dígitos fracionários, terminando em " |
multiDaySchedule |
Se verdadeiro, o solucionador gera |
shiftEventsCanChange |
Se for verdadeiro, |
ShiftTemplate
Modelo que especifica regras para gerar turnos. Um turno é uma unidade de trabalho que especifica um horário de início e de término e pode conter eventos (como almoço, intervalos etc.). Um turno será atribuído a uma data específica na resposta.
Representação JSON |
---|
{ "id": string, "earliestStartTime": { object ( |
Campos | |
---|---|
id |
ID exclusivo deste modelo. |
earliestStartTime |
Primeiro horário do dia em que uma mudança pode começar. Esse valor é especificado com horas e minutos; segundos e nanos são ignorados. |
latestStartTime |
Último horário do dia em que uma mudança pode começar. Esse valor é especificado com horas e minutos; segundos e nanos são ignorados. Se esse valor for menor que |
durationMinutes |
Duração fixa de um turno gerado por este modelo. |
startTimeIncrementMinutes |
O incremento de tempo (em minutos) usado para gerar o conjunto de possíveis horários de início entre |
daysOffCountPerWeek |
Número fixo de dias de folga por semana. Um funcionário terá um determinado dia de folga se não for designado para um turno que comece nesse dia. Uma semana tem 7 dias e começa no domingo. |
eventTemplates[] |
Regras para gerar eventos para cada turno. Exatamente um evento será incluído em cada turno para cada evento especificado. |
minimumIntereventGapMinutes |
Mínimo de minutos entre o final de um evento e o início do próximo. |
maximumEmployeeCount |
Número máximo de funcionários que podem ser atribuídos a todos os turnos gerados por este modelo. |
TimeOfDay
Representa um horário do dia. A data e o fuso horário não são relevantes ou são especificados em outro lugar. Uma API pode permitir segundos bissextos. Os tipos relacionados são google.type.Date
e google.protobuf.Timestamp
.
Representação JSON |
---|
{ "hours": integer, "minutes": integer, "seconds": integer, "nanos": integer } |
Campos | |
---|---|
hours |
Horas do dia no formato de 24 horas. Precisa ser de 0 a 23. Uma API pode permitir o valor "24:00:00" para o horário de fechamento da empresa, por exemplo. |
minutes |
Minutos da hora do dia. Precisa ser de 0 a 59. |
seconds |
Segundos do minutos do horário. Normalmente precisa ser de 0 a 59. Uma API pode permitir o valor 60 se permitir segundos bissextos. |
nanos |
Frações de segundos em nanossegundos. Precisa ser de 0 a 999.999.999. |
EventTemplate
Modelo que especifica regras para gerar um único evento que ocorre durante um turno. Um evento pode representar uma reunião, um intervalo, um almoço etc.
Representação JSON |
---|
{ "id": string, "minimumMinutesAfterShiftStart": integer, "maximumMinutesAfterShiftStart": integer, "durationMinutes": integer, "startTimeIncrementMinutes": integer } |
Campos | |
---|---|
id |
ID exclusivo deste modelo. |
minimumMinutesAfterShiftStart |
Número mínimo de minutos após o início de um turno que esse evento pode começar. |
maximumMinutesAfterShiftStart |
Número máximo de minutos após o início de um turno que este evento pode começar. |
durationMinutes |
A duração desse evento é corrigida em minutos. |
startTimeIncrementMinutes |
O incremento de tempo (em minutos) usado para gerar o conjunto de possíveis horários de início do evento entre |
EmployeeDemand
Especifica o número de funcionários necessários para cobrir a demanda no intervalo DateTime determinado.
Representação JSON |
---|
{ "startDateTime": { object ( |
Campos | |
---|---|
startDateTime |
Início do intervalo de tempo para a demanda especificada (inclusive). Esses valores são lidos por minuto, os segundos e todas as unidades menores são ignoradas. |
endDateTime |
Fim do intervalo de tempo para a demanda especificada (exclusivo). Esses valores são lidos por minuto, os segundos e todas as unidades menores são ignoradas. |
employeeCount |
Número de funcionários necessários para cobrir a demanda desse intervalo. |
ShiftGenerationSolutionStatus
Status da solução fornecido na resposta de um solucionador.
Enums | |
---|---|
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED |
Status não especificado para a resposta. |
SHIFT_GENERATION_SOLVED |
O solucionador encontrou uma solução no limite de tempo fornecido. |
SHIFT_GENERATION_NOT_SOLVED |
Um problema impediu o solucionador de gerar mudanças. |
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED |
Não foi possível gerar mudanças para cobrir a demanda dentro do limite de tempo fornecido. |
EmployeeSchedule
Uma lista ordenada de turnos correspondentes a um único ShiftTemplate
que será atribuído a vários funcionários.
Representação JSON |
---|
{
"shiftTemplateId": string,
"shifts": [
{
object ( |
Campos | |
---|---|
shiftTemplateId |
ID do modelo usado para gerar esse conjunto de turnos. |
shifts[] |
Lista de turnos para os quais o número de |
employeeCount |
Número de funcionários que devem ser atribuídos a este conjunto de turnos para atender à demanda. |
ShiftWithEvents
Especifica as datas de início e término com uma lista de eventos fixos de uma mudança gerada pelo solucionador.
Representação JSON |
---|
{ "startDateTime": { object ( |
Campos | |
---|---|
startDateTime |
Data e hora de início do turno. Esse valor é especificado até o minuto; os segundos e as unidades menores não são fornecidos. |
endDateTime |
Data e hora de término do turno. Esse valor é especificado até o minuto; os segundos e as unidades menores não são fornecidos. |
events[] |
Lista de eventos incluídos nessa mudança, mapeados exatamente para e na mesma ordem que os |
Evento
Especifica o início e o término da DateTime de um evento específico em uma mudança gerada pelo solucionador.
Representação JSON |
---|
{ "eventTemplateId": string, "startDateTime": { object ( |
Campos | |
---|---|
eventTemplateId |
ID do modelo que foi usado para gerar este evento. |
startDateTime |
Data e hora de início do evento. Esse valor é especificado até o minuto; os segundos e as unidades menores não são fornecidos. |
endDateTime |
Data e hora de término do evento. Esse valor é especificado até o minuto; os segundos e as unidades menores não são fornecidos. |