Method: scheduling.solveShiftGeneration

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 (SolverConfig)
  },
  "shiftTemplates": [
    {
      object (ShiftTemplate)
    }
  ],
  "employeeDemands": [
    {
      object (EmployeeDemand)
    }
  ]
}
Campos
solverConfig

object (SolverConfig)

Opcional. Parâmetros do solucionador.

shiftTemplates[]

object (ShiftTemplate)

Obrigatório. Conjunto de modelos que especificam regras para gerar turnos.

employeeDemands[]

object (EmployeeDemand)

Obrigatório. Demanda total dos funcionários que os turnos gerados por shiftTemplates precisam atender. Os intervalos DateTime especificados em cada EmployeeDemand precisam ser separados e não adjacentes.

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:

  1. Cada mudança gerada no employeeSchedules segue as regras especificadas no ShiftTemplate correspondente.
  2. Cada evento selecionado em cada turno segue as regras especificadas no ShiftTemplate.Event correspondente.
  3. 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.
  4. 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 (ShiftGenerationSolutionStatus),
  "employeeSchedules": [
    {
      object (EmployeeSchedule)
    }
  ]
}
Campos
solutionStatus

enum (ShiftGenerationSolutionStatus)

Status da solução retornada. Se solutionStatus não for SOLVED, employeeSchedules estará vazio.

employeeSchedules[]

object (EmployeeSchedule)

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

string (Duration format)

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 ShiftTemplates, cada uma com aproximadamente 20 horários de início possíveis e realizar 2 eventos com cerca de 30 horários de início possíveis e dois dias de folga por semana, os valores recomendados são: < 10 s para soluções rápidas (e provavelmente abaixo do ideal), (10 s, 300 s) para soluções de boa qualidade e > 300 s para uma pesquisa completa. Instâncias maiores podem exigir limites de tempo mais longos.

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 "s". Exemplo: "3.5s".

multiDaySchedule

boolean

Se verdadeiro, o solucionador gera EmployeeSchedules que incluem várias mudanças (por exemplo, para gerar uma programação de uma semana). Caso contrário, cada EmployeeSchedule incluirá exatamente um deslocamento. As programações de vários dias pressupõem que o horário de início do turno é o mesmo em todos os dias, e o número de dias de folga dessa programação é determinado pelos modelos de turno. O padrão é false

shiftEventsCanChange

boolean

Se for verdadeiro, EmployeeSchedules de vários dias poderão incluir mudanças em que os horários de início e término dos eventos variam todos os dias. Caso contrário, todos os turnos de uma EmployeeSchedule específica precisam ter os mesmos horários de início e término do evento. Em ambos os casos, todos os turnos de uma programação de vários dias têm o mesmo horário de início e término. Sendo assim, esse parâmetro será ignorado se multiDaySchedule for falso. Definir esse parâmetro como verdadeiro pode resultar em tempos de solução mais longos. O padrão é false

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 (TimeOfDay)
  },
  "latestStartTime": {
    object (TimeOfDay)
  },
  "durationMinutes": integer,
  "startTimeIncrementMinutes": integer,
  "daysOffCountPerWeek": integer,
  "eventTemplates": [
    {
      object (EventTemplate)
    }
  ],
  "minimumIntereventGapMinutes": integer,
  "maximumEmployeeCount": integer
}
Campos
id

string

ID exclusivo deste modelo.

earliestStartTime

object (TimeOfDay)

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

object (TimeOfDay)

Ú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 earliestStartTime, uma mudança gerada por esse modelo vai começar antes ou depois da meia-noite.

durationMinutes

integer

Duração fixa de um turno gerado por este modelo.

startTimeIncrementMinutes

integer

O incremento de tempo (em minutos) usado para gerar o conjunto de possíveis horários de início entre earliestStartTime e latestStartTime. Por exemplo, se o primeiro horário de início for 8h, o último horário de início for 8h30 e o incremento do horário de início for de 10 minutos, todos os horários de início possíveis para este modelo de mudança serão: 8h, 8h10, 8h20 e 8h30.

daysOffCountPerWeek

integer

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[]

object (EventTemplate)

Regras para gerar eventos para cada turno. Exatamente um evento será incluído em cada turno para cada evento especificado.

minimumIntereventGapMinutes

integer

Mínimo de minutos entre o final de um evento e o início do próximo.

maximumEmployeeCount

integer

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

integer

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

integer

Minutos da hora do dia. Precisa ser de 0 a 59.

seconds

integer

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

integer

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

string

ID exclusivo deste modelo.

minimumMinutesAfterShiftStart

integer

Número mínimo de minutos após o início de um turno que esse evento pode começar.

maximumMinutesAfterShiftStart

integer

Número máximo de minutos após o início de um turno que este evento pode começar.

durationMinutes

integer

A duração desse evento é corrigida em minutos.

startTimeIncrementMinutes

integer

O incremento de tempo (em minutos) usado para gerar o conjunto de possíveis horários de início do evento entre minimumMinutesAfterShiftStart e maximumMinutesAfterShiftStart. Por exemplo, se o mínimo de minutos após o início do turno for 30, o máximo de minutos após o início do turno for 45 e o incremento do horário de início for de 5 minutos, o evento poderá ocorrer 30, 35, 40 ou 45 minutos após o início do turno.

EmployeeDemand

Especifica o número de funcionários necessários para cobrir a demanda no intervalo DateTime determinado.

Representação JSON
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "employeeCount": integer
}
Campos
startDateTime

object (DateTime)

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

object (DateTime)

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

integer

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 (ShiftWithEvents)
    }
  ],
  "employeeCount": integer
}
Campos
shiftTemplateId

string

ID do modelo usado para gerar esse conjunto de turnos.

shifts[]

object (ShiftWithEvents)

Lista de turnos para os quais o número de employeeCount funcionários é atribuído. Os turnos e eventos selecionados para a programação foram gerados usando um único modelo. As mudanças são classificadas cronologicamente e não se sobrepõem. Se SolverConfig.multi_day_schedule for verdadeiro, um dia de folga será representado implicitamente pela ausência de um turno a partir desse dia.

employeeCount

integer

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 (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "events": [
    {
      object (Event)
    }
  ]
}
Campos
startDateTime

object (DateTime)

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

object (DateTime)

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[]

object (Event)

Lista de eventos incluídos nessa mudança, mapeados exatamente para e na mesma ordem que os ShiftTemplate.Events. Se SolverConfig.shift_events_can_change for verdadeiro, os horários de início e término dos eventos poderão variar em toda a ShiftWithEvents desta programação.

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 (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  }
}
Campos
eventTemplateId

string

ID do modelo que foi usado para gerar este evento.

startDateTime

object (DateTime)

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

object (DateTime)

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.