Í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 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 |
---|
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 |
---|
Resolve um problema de geração de turnos da |
SolveShiftScheduling |
---|
Resolve um problema fixo de agendamento de turnos do |
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 |
ID do problema ou da solicitação. |
solver_parameters |
Parâmetros do solucionador. |
ports[] |
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[] |
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[] |
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[] |
Lista de demandas potenciais de commodities (por exemplo, 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 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 |
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 disponível para cada classe de embarcação. |
commodity_demand_paths[] |
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 |
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 |
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 "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 |
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 |
Descrição da saída da resolução do modelo na solicitação. |
messages[] |
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 |
Opcional. Parâmetros do solucionador. |
shift_templates[] |
Obrigatório. Conjunto de modelos 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 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:
- Cada mudança gerada no
employee_schedules
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
maximum_employee_count
desse modelo. - O conjunto de funcionários atribuídos cobre a demanda em cada intervalo.
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 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 |
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 para agendamento. |
shifts[] |
Todos os turnos formam o cronograma. |
coverage_requirements[] |
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 é |
role_ids[] |
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[] |
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[] |
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[] |
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 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:
- 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 desse funcionário.
- 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á designado para dois turnos em conflito.
- Para a programação determinada, nenhuma das restrições ou solicitações com nível de prioridade
PRIORITY_MANDATORY
foi 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 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[] |
Lista com todas as atribuições. Cada |
status_message |
Se |