Índice
Optimization(interface)DesignShippingNetworkRequest(mensagem)DesignShippingNetworkResponse(mensagem)SolveMathOptModelRequest(mensagem)SolveMathOptModelResponse(mensagem)SolveShiftGenerationRequest(mensagem)SolveShiftGenerationResponse(mensagem)SolveShiftSchedulingRequest(mensagem)SolveShiftSchedulingResponse(mensagem)
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 |
|---|
|
Resolve o problema de design e programação da rede de transporte marítimo (LSNDSP, na sigla em inglês) do 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 |
|---|
|
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 |
|---|
|
Soluciona um problema de geração de turnos com o |
| SolveShiftScheduling |
|---|
|
Soluciona um problema de programação de turnos fixo do |
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 |
ID do problema ou da solicitação. |
solver_parameters |
Parâmetros para o solucionador. |
ports[] |
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[] |
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[] |
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[] |
Lista de demandas em potencial de commodities (ou seja, contêineres) a serem atendidas pelos serviços de embarcações. |
vessel_services[] |
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 |
O ID da solicitação à qual esta resposta está associada. |
vessel_services[] |
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[] |
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 |
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 |
Obrigatório. Uma representação matemática do problema de otimização a ser resolvido. |
parameters |
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 |
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 |
Descrição da saída da resolução do modelo na solicitação. |
messages[] |
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 |
Opcional. Parâmetros para o solucionador. |
shift_templates[] |
Obrigatório. Conjunto de modelos de turno que especificam regras para gerar turnos. |
employee_demands[] |
Obrigatório. Demanda total dos funcionários que os turnos gerados por |
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:
- Cada mudança gerada em
employee_schedulessegue as regras especificadas noShiftTemplatecorrespondente. - Cada evento selecionado em cada turno segue as regras especificadas no
ShiftTemplate.Eventcorrespondente. - O número total de funcionários atribuídos ao conjunto de turnos gerados com o mesmo ShiftTemplate não excede
maximum_employee_countdesse modelo. - O conjunto de funcionários atribuídos abrange a demanda em todos os intervalos.
| Campos | |
|---|---|
solution_status |
Status da solução retornada. Se |
employee_schedules[] |
Conjunto de turnos gerados pelo solucionador com o número de funcionários atribuídos a cada programação. |
demand_coverage_violations[] |
Violações de cobertura da demanda com base no |
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 |
ID do problema ou da solicitação. |
solve_parameters |
Parâmetros para controlar uma única solução do problema. |
employees[] |
Todos os funcionários disponíveis a serem programados. |
shifts[] |
Todos os turnos para formar o cronograma. |
coverage_requirements[] |
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 é |
role_ids[] |
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[] |
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[] |
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[] |
Especificação de orçamento para o problema de agendamento. O nível de prioridade padrão para cada um desses requisitos é |
assignments_hint[] |
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:
- Cada ID de funcionário está contido no conjunto de funcionários fornecido na solicitação.
- 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.
- Cada ID de turno está contido no conjunto de turnos fornecido na solicitação.
- Cada ID de turno não é um dos IDs de turno não atribuíveis do funcionário em questão.
- Um funcionário nunca será atribuído a dois turnos sobrepostos.
- Na programação especificada, nenhuma das restrições ou solicitações com nível de prioridade
PRIORITY_MANDATORYfoi violada.
| Campos | |
|---|---|
request_id |
O ID da solicitação à qual esta resposta está associada. |
solution_status |
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[] |
Lista de todas as atribuições. Cada |
status_message |
Se |