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 complexo de otimização que busca encontrar o projeto e a programação ideais de uma rede de transporte marítimo. O objetivo é minimizar o custo total de operação da rede e, ao mesmo tempo, atender o máximo possível da demanda de carga entre as portas.

O LSNDSP pode ser dividido em dois subproblemas principais: design de rede e programação. O subproblema do projeto de rede determina o conjunto de portas a serem atendidas pela rede, o número de embarcações a serem implantadas em cada rota e as rotas que as embarcações vão seguir. O subproblema de programação 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 cargas e a demanda por transporte de cargas entre os portos.

Em palavras simples, o LSNDSP é o problema de decidir quais portas atender, quantas naves usar e como programar as naves 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 cargas, 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 nem acompanhar o progresso de uma solução.

SolveShiftGeneration

rpc SolveShiftGeneration(SolveShiftGenerationRequest) returns (SolveShiftGenerationResponse)

Soluciona um problema de geração de turnos com o SolveShiftGenerationRequest especificado, gerando turnos com base em modelos de turnos fornecidos para atender à demanda de funcionários.

SolveShiftScheduling

rpc SolveShiftScheduling(SolveShiftSchedulingRequest) returns (SolveShiftSchedulingResponse)

Soluciona um problema de programação de turnos fixo do SolveShiftSchedulingRequest especificado, atribuindo 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 agendamento sejam minimizadas.

DesignShippingNetworkRequest

A solicitação contém uma instância do LSNDSP e precisa conter um conjunto de portas, um conjunto de candidatas de 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 para o solucionador.

ports[]

Port

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

leg_candidates[]

LegCandidate

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

vessel_classes[]

VesselClass

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

commodity_demands[]

CommodityDemand

Lista de demandas em potencial de commodities (ou seja, 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 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ção 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ção que atende a esse trecho. Observe que não ter serviços 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 número disponível de cada classe.

commodity_demand_paths[]

CommodityDemandPath

Lista de todos os caminhos de demanda de commodities por meio dos quais a demanda positiva de commodities é enviada. Alguns IDs de demanda de commodities podem não ser incluídos se nenhuma demanda for enviada. Uma demanda de commodities também pode ser parcialmente atendida. Para cada demanda de commodities, a quantidade total atendida não pode exceder a demanda total. Por fim, commodity_demand_paths dependem de vessel_services (consulte a definição de CommodityDemandPath).

SolveMathOptModelRequest

A solicitação de um controle remoto unário é resolvida em MathOpt.

Campos
solver_type

SolverTypeProto

Opcional. Tipo de solucionador para resolver numericamente o problema. Se um solucionador não for compatível com um atributo específico no modelo, o procedimento de otimização não será bem-sucedido.

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 verdadeiro 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 true resultará em um erro.

model_parameters

ModelSolveParametersProto

Opcional. Parâmetros para controlar uma única solução que são específicos do modelo de entrada (consulte SolveParametersProto para conhecer 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 tiver sido usado, ele conterá mensagens de registro para solucionadores que oferecem suporte a callbacks de mensagens.

SolveShiftGenerationRequest

Solicitação para resolver o problema de Geração de turnos. As regras para gerar mudanças são descritas em cada ShiftTemplate. Várias mudanças na resposta podem ser geradas a partir de um único ShiftTemplate. As mudanças geradas e selecionadas pelo solucionador precisam seguir as regras descritas no ShiftTemplate e cobrir a demanda de funcionários especificada.

Campos
solver_config

SolverConfig

Opcional. Parâmetros para o solucionador.

shift_templates[]

ShiftTemplate

Obrigatório. Conjunto de modelos de turno 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.

SolveShiftGenerationResponse

Resposta para o problema de geração de turno. 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 em 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 com o mesmo ShiftTemplate não excede maximum_employee_count desse modelo.
  4. O conjunto de funcionários atribuídos abrange a demanda em todos os intervalos.

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 programação.

demand_coverage_violations[]

DemandCoverageViolation

Violações de cobertura da demanda com base no employee_counts atribuído no employee_schedules especificado. Os employee_demands fornecidos na solicitação são agregados. Se dois intervalos employee_demand se sobrepuserem, a demanda será somada na parte sobreposta do intervalo.

SolveShiftSchedulingRequest

Solicitação da API de programação da 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, em um período, o número de funcionários necessários para desempenhar cada função. Os funcionários atribuídos a um turno também são atribuídos a uma (e somente uma) função naquele turno, e os funcionários não podem ser atribuídos a dois turnos sobrepostos. Consulte o SolveShiftSchedulingResponse abaixo para mais detalhes sobre o que torna uma atribuição de turno válida.

Restrições adicionais de agendamento podem ser especificadas para cada funcionário para restringir ainda mais o problema. Todas as restrições de agendamento e requisitos de cobertura recebem um nível de prioridade (MANDATORY, ALTO, MÉDIO, BAIXO). Todas as restrições com nível de prioridade PRIORITY_MANDATORY precisam ser atendidas pelo solucionador. Restrições com qualquer outra prioridade podem ser violadas pelo solucionador, mas 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 além das restrições fornecidas. O solucionador não violará uma restrição para satisfazer mais preferências; ele apenas violará uma restrição se a atribuição de programação for inviável de acordo com as restrições fornecidas.

Observação sobre o horário: todos os momentos do problema são especificados usando a mensagem DateTime. A mensagem inclui um campo TimeZone. O fuso horário é definido como UTC, a menos que seja especificado de outra forma pelo usuário. As mensagens DateTime devem ser especificadas somente 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 a serem programados.

shifts[]

Shift

Todos os turnos para formar o cronograma.

coverage_requirements[]

CoverageRequirement

Requisitos de cobertura para todo o horizonte de planejamento. Elas especificam o número de funcionários que devem desempenhar cada função ou ter uma habilidade durante um período ou uma lista de IDs de turno. Todos os requisitos de cobertura precisam ser especificados com períodos ou uma lista de IDs de turnos, mas não com ambos. Os períodos (se informados) dos requisitos de cobertura não podem se sobrepor para cada local. 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. Confira o tipo enumerado Priority para saber mais.

role_ids[]

string

Lista de todas as funções possíveis dos funcionários. Cada funcionário precisa ter pelo menos uma função que possa ser atribuída a ele em um turno. Uma função se refere a uma atribuição de trabalho específica durante um turno (ou seja, enfermeiro, chefe executivo, garçom etc.). Quando um funcionário é atribuído a um turno, ele também recebe uma única função específica.

skill_ids[]

string

Lista de todas as habilidades possíveis na força de trabalho. Uma habilidade se refere a qualquer qualificação extra que um funcionário possa ter que não esteja relacionada a um trabalho específico atribuído a ela (ou seja, certificações, idiomas falados etc.). Esta lista pode estar vazia. Quando um funcionário é designado para um turno, ele deve ter 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 locais diferentes pode ser útil quando, por exemplo, um gerente de enfermagem quer agendar muitos enfermeiros de diferentes unidades de um hospital ou, por outro exemplo, um gerente de hotel quer 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. Confira o tipo enumerado Priority para saber mais.

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 agendamento. As dicas de atribuição serão ignoradas se a atribuição contradizer um turno não atribuível ou uma solicitação de programação.

SolveShiftSchedulingResponse

Resposta da API de programação da força de trabalho. Para cada resposta, o shift_assignments vai estar 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 do funcionário em questão.
  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á atribuído a dois turnos sobrepostos.
  6. Na programação especificada, 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 viável ou otimizada, outros campos no proto poderão ficar vazios. Se o status for NOT_SOLVED_DEADLINE_EXCEEDED, significa que o limite de tempo foi atingido sem que houvesse uma solução viável ou determinasse 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 de todas as atribuições. Cada ShiftAssignment especifica um funcionário, o turno a que ele é atribuído e a função que ele deve desempenhar nesse turno.

status_message

string

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