Package google.research.optimization.v1

Índice

Otimização

Uma API One Platform que expõe um conjunto de solucionadores de otimização para problemas de pesquisa operacional de alto nível. MOE:begin_strip

DesignShippingNetwork

rpc DesignShippingNetwork(DesignShippingNetworkRequest) returns (DesignShippingNetworkResponse)

Resolve o problema de design e programação da rede de transporte marítimo (LSNDSP, na sigla em inglês) do DesignShippingNetworkRequest fornecido.

O LSNDSP é um problema de otimização complexo que busca encontrar o projeto e a programação ideais para uma rede de transporte marítimo. O objetivo é minimizar o custo total de operação da rede e, ao mesmo tempo, atender ao máximo possível da demanda de carga entre as portas.

O LSNDSP pode ser dividido em dois subproblemas principais: projeto da rede e programação. O subproblema de projeto da rede determina o conjunto de portas que serão atendidas pela rede, o número de embarcações a serem distribuídas em cada rota e as rotas que elas percorrerão. O subproblema de agendamento determina os horários de navegação dos navios, considerando o tempo necessário para navegar entre os portos, o tempo necessário para carregar e descarregar carga e a demanda pelo transporte de carga entre portos.

Em palavras simples, o LSNDSP é o problema de decidir quais portos atender, quantos navios usar e como agendar os navios para que o custo de operação da rede seja minimizado e, ao mesmo tempo, maximize a receita para atender à demanda de carga. Um subcomponente desafiador do LSNDSP é o roteamento de carga, que determina quais demandas atender e quais rotas atribuir à carga para maximizar a receita.

SolveMathOptModel

rpc SolveMathOptModel(SolveMathOptModelRequest) returns (SolveMathOptModelResponse)

Resolve o modelo de entrada e retorna o resultado de uma vez. Use quando não precisar de callbacks, incrementabilidade e não precisar acompanhar o progresso de uma solução.

SolveShiftGeneration

rpc SolveShiftGeneration(SolveShiftGenerationRequest) returns (SolveShiftGenerationResponse)

Resolve um problema de geração de turnos da SolveShiftGenerationRequest determinada, gerando turnos de determinados modelos de turno para atender à demanda dos funcionários.

SolveShiftScheduling

rpc SolveShiftScheduling(SolveShiftSchedulingRequest) returns (SolveShiftSchedulingResponse)

Resolve um problema fixo de agendamento de turnos do SolveShiftSchedulingRequest determinado, atribuindo os funcionários a turnos de modo que as preferências de programação dos funcionários sejam maximizadas e as violações de restrições de horários sejam minimizadas.

DesignShippingNetworkRequest

A solicitação contém uma instância do LSNDSP e precisa conter um conjunto de portas, um conjunto de candidatos a trecho, um conjunto de classes de embarcações e um conjunto de demandas de mercadorias a serem atendidas.

Campos
request_id

string

ID do problema ou da solicitação.

solver_parameters

SolverParameters

Parâmetros do solucionador.

ports[]

Port

Lista de possíveis portas a serem chamadas em serviços de navios. A solicitação só pode conter os IDs de porta que estão nessa lista.

leg_candidates[]

LegCandidate

Lista de possíveis candidatos a trecho a serem adicionados aos serviços de embarcações. A solicitação só pode conter os IDs de candidatos a trecho que estão nessa lista.

vessel_classes[]

VesselClass

Lista de classes de embarcações para realizar serviços. Todas as embarcações da mesma classe são completamente intercambiáveis. A solicitação só pode conter os IDs de classe de embarcações que estão nessa lista.

commodity_demands[]

CommodityDemand

Lista de demandas potenciais de commodities (por exemplo, contêineres) a serem atendidas pelos serviços de embarcações.

vessel_services[]

VesselService

Uma rede de serviços de embarcações válidos (normalmente, o estado atual da rede) pode ser fornecida para ser usada como um ponto de partida para a otimização.

DesignShippingNetworkResponse

A resposta mantém a solução para a instância do LSNDSP transmitida na solicitação. Ele contém uma rede válida de serviços de embarcações e caminhos de demanda de commodities. A demanda total de mercadorias que passa por cada trecho não pode exceder a capacidade da classe de embarcações que atende a esse trecho. Ter nenhum serviço de embarcações sem demanda atendida é sempre uma solução viável para o problema de design e programação da rede de transporte marítimo.

Campos
request_id

string

O ID da solicitação à qual esta resposta está associada.

vessel_services[]

VesselService

Rede de serviços de embarcações. O número total de embarcações usadas não pode exceder o disponível para cada classe de embarcação.

commodity_demand_paths[]

CommodityDemandPath

Lista de todos os caminhos de demanda de commodities pelos quais a demanda positiva de commodities é enviada. Se a demanda não for enviada, alguns códigos de demanda de mercadorias não serão incluídos. Alternativamente, uma demanda de mercadorias pode ser parcialmente atendida. Para cada demanda de mercadorias, a quantidade total atendida não pode exceder a demanda total. Finalmente, commodity_demand_paths dependem de vessel_services (consulte a definição de CommodityDemandPath).

SolveMathOptModelRequest

Solicitação de uma solução remota unária em MathOpt.

Campos
solver_type

SolverTypeProto

Opcional. Tipo de solucionador para resolver numericamente o problema. Se um solucionador não oferecer suporte a um recurso específico no modelo, o procedimento de otimização não vai funcionar.

model

ModelProto

Obrigatório. Uma representação matemática do problema de otimização a ser resolvido.

parameters

SolveParametersProto

Opcional. Parâmetros para controlar uma única solução. O parâmetro enable_output é tratado especificamente. Para solucionadores compatíveis com callbacks de mensagens, defini-lo como "true" fará com que o servidor registre um callback de mensagem. As mensagens resultantes serão retornadas em SolveMathOptModelResponse.messages. Para outros solucionadores, definir enable_output como verdadeiro resultará em um erro.

model_parameters

ModelSolveParametersProto

Opcional. Parâmetros para controlar uma solução única específica do modelo de entrada. Consulte SolveParametersProto para ver os parâmetros independentes do modelo.

SolveMathOptModelResponse

Resposta para uma solução remota unária em MathOpt.

Campos
result

SolveResultProto

Descrição da saída da resolução do modelo na solicitação.

messages[]

string

Se SolveParametersProto.enable_output foi usado, ele conterá mensagens de registro para solucionadores compatíveis com callbacks de mensagens.

SolveShiftGenerationRequest

Solicitação para resolver o problema de geração de turnos. As regras para gerar turnos são descritas em cada ShiftTemplate. Várias mudanças na resposta podem ser geradas a partir de um único ShiftTemplate. Os turnos gerados e selecionados pelo solucionador devem aderir às regras descritas no ShiftTemplate e atender à demanda especificada de funcionários.

Campos
solver_config

SolverConfig

Opcional. Parâmetros do solucionador.

shift_templates[]

ShiftTemplate

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

employee_demands[]

EmployeeDemand

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

SolveShiftGenerationResponse

Resposta para o problema da geração de mudanças. Se o solution_status retornado for SOLVED, um conjunto de mudanças válidas geradas pelo solucionador será retornado em employee_schedules. Para uma programação de turnos válida, as seguintes propriedades são mantidas:

  1. Cada mudança gerada no employee_schedules 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 maximum_employee_count desse modelo.
  4. O conjunto de funcionários atribuídos cobre a demanda em cada intervalo.

Campos
solution_status

ShiftGenerationSolutionStatus

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

employee_schedules[]

EmployeeSchedule

Conjunto de turnos gerados pelo solucionador com o número de funcionários atribuídos a cada cronograma.

SolveShiftSchedulingRequest

Solicitação da API de agendamento de força de trabalho. No mínimo, a solicitação especifica um conjunto de funcionários, um conjunto de turnos, um conjunto de possíveis funções que um funcionário pode desempenhar e um conjunto de requisitos de cobertura. Os requisitos de cobertura especificam, durante um período, o número de funcionários necessários para cumprir cada função. Os funcionários atribuídos a um turno também recebem uma (e apenas uma) função nesse turno, e os funcionários não podem ser atribuídos a dois turnos sobrepostos. Consulte os SolveShiftSchedulingResponse abaixo para mais detalhes sobre o que torna uma atribuição de turno válida.

Outras restrições de programação podem ser especificadas para cada funcionário para restringir ainda mais o problema. Todas as restrições de programação e requisitos de cobertura recebem um nível de prioridade (OBRIGATÓRIO, ALTO, MÉDIO, BAIXO). Todas as restrições com o nível de prioridade PRIORITY_MANDATORY precisam ser atendidas pelo solucionador. Restrições com qualquer outra prioridade podem ser violadas pelo solucionador, mas essas violações são minimizadas na ordem de prioridade. Consulte o tipo enumerado Priority para mais detalhes sobre como os níveis de prioridade de cada restrição são processados.

O solucionador tentará maximizar os valores de ShiftPreference.preference para cada funcionário acima das restrições fornecidas. O solucionador não violará uma restrição para satisfazer mais preferências, apenas violará uma restrição se a atribuição de programação for inviável sob as restrições fornecidas.

Observação sobre o horário: todos os horários do problema são especificados usando a mensagem DateTime. A mensagem inclui um campo "TimeZone". O TimeZone será considerado UTC, a menos que especificado de outra forma pelo usuário. As mensagens DateTime devem ser especificadas apenas até os minutos; todos os segundos e nanos são ignorados.

Campos
request_id

string

ID do problema ou da solicitação.

solve_parameters

SolveParameters

Parâmetros para controlar uma única solução do problema.

employees[]

Employee

Todos os funcionários disponíveis para agendamento.

shifts[]

Shift

Todos os turnos formam o cronograma.

coverage_requirements[]

CoverageRequirement

Requisitos de cobertura para todo o horizonte de planejamento. Especificam o número de funcionários que devem desempenhar cada função ou ter uma habilidade durante um intervalo de tempo ou uma lista de IDs de turno. Todos os requisitos de cobertura precisam ser especificados com períodos ou uma lista de IDs de turno (mas não ambos). As janelas de tempo (se fornecidas) para os requisitos de cobertura não podem se sobrepor para cada local específico. O nível de prioridade padrão para cada uma dessas restrições é PRIORITY_MANDATORY para os requisitos da função e PRIORITY_LOW para os requisitos de habilidade. Consulte a enumeração Priority para mais detalhes.

role_ids[]

string

Lista de todos os papéis possíveis na força de trabalho. Cada funcionário precisa ter pelo menos uma função atribuída em um turno. Um papel se refere a uma atribuição de trabalho específica durante um turno (por exemplo, enfermeiro, chefe executivo, garçom etc.). Quando um funcionário é designado para um turno, ele também é designado para uma única função específica.

skill_ids[]

string

Lista de todas as habilidades possíveis da força de trabalho. Uma habilidade se refere a quaisquer qualificações adicionais que um funcionário pode ter que não pertencem a um trabalho específico atribuível (ou seja, certificações, idiomas falados etc.). Esta lista pode estar vazia. Quando um funcionário é designado para um turno, ele deve desenvolver todas as habilidades necessárias para esse turno.

location_ids[]

string

Lista de todos os locais possíveis para o conjunto de turnos na programação. Esta lista pode estar vazia. Especificar localizações diferentes pode ser útil quando, por exemplo, um gerente de enfermagem deseja agendar muitas enfermeiras em unidades diferentes de um hospital ou, para outro exemplo, um gerente de hotel deseja agendar funcionários em vários hotéis.

budget_requirements[]

BudgetRequirement

Especificação de orçamento para o problema de agendamento. O nível de prioridade padrão para cada um desses requisitos é PRIORITY_LOW. Consulte a enumeração Priority para mais detalhes.

assignments_hint[]

ShiftAssignment

Mude as atribuições para usar como uma solução provisória (também conhecida como dica de solução) para o problema de programação. As dicas de atribuição serão ignoradas se a atribuição entrar em conflito com um turno não atribuível ou uma solicitação de agendamento.

SolveShiftSchedulingResponse

Resposta para a API de agendamento de força de trabalho. Para cada resposta, shift_assignments ficará vazio se o solution_status retornado for NOT_SOLVED_DEADLINE_EXCEEDED ou INFEASIBLE. Se o solution_status retornado for OPTIMAL ou FEASIBLE, uma atribuição de turno válida será retornada em shift_assignments. Para uma atribuição de turno válida, as seguintes propriedades são mantidas:

  1. Cada ID de funcionário está contido no conjunto de funcionários fornecido na solicitação.
  2. Cada ID de função atribuído ao funcionário está contido no conjunto de IDs de função desse funcionário.
  3. Cada ID de turno está contido no conjunto de turnos fornecido na solicitação.
  4. Cada ID de turno não é um dos IDs de turno não atribuíveis do funcionário em questão.
  5. Um funcionário nunca será designado para dois turnos em conflito.
  6. Para a programação determinada, nenhuma das restrições ou solicitações com nível de prioridade PRIORITY_MANDATORY foi violada.

Campos
request_id

string

O ID da solicitação à qual esta resposta está associada.

solution_status

SolutionStatus

Status da solução retornada. Se a solução não for FÁCIL ou OTIMAL, outros campos neste proto podem ficar vazios. Se o status for NOT_SOLVED_DEADLINE_EXCEEDED, o limite de tempo foi atingido sem encontrar uma solução viável ou determinar se existe uma solução viável. As solicitações podem ser inviáveis se as restrições do nível de prioridade MANDATORY não puderem ser atendidas.

shift_assignments[]

ShiftAssignment

Lista com todas as atribuições. Cada ShiftAssignment especifica um funcionário, o turno a que ele foi atribuído e a função atribuída a ele.

status_message

string

Se solution_status não for ideal, esse campo poderá conter mais informações sobre o solucionador.