InjectedSolutionConstraint

Solução injetada na solicitação, incluindo informações sobre quais visitas precisam ser restritas e como.

Representação JSON
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "constraintRelaxations": [
    {
      object (ConstraintRelaxation)
    }
  ]
}
Campos
routes[]

object (ShipmentRoute)

Rotas da solução a serem injetadas. Alguns trajetos podem ser omitidos da solução original. As rotas e os envios ignorados precisam atender às proposições de validade básicas listadas para injectedFirstSolutionRoutes.

skippedShipments[]

object (SkippedShipment)

Envios ignorados da solução a ser injetada. Alguns podem ser omitidos da solução original. Consulte o campo routes.

constraintRelaxations[]

object (ConstraintRelaxation)

Para zero ou mais grupos de veículos, especifica quando e quanto flexibilizar as restrições. Se esse campo estiver vazio, todas as rotas de veículos não vazias serão totalmente restritas.

ConstraintRelaxation

Para um grupo de veículos, especifica em quais limites as restrições de visitas serão flexibilizadas e em que nível. Os envios listados no campo skipped_shipment são restritos para serem ignorados, ou seja, não podem ser realizados.

Representação JSON
{
  "relaxations": [
    {
      object (Relaxation)
    }
  ],
  "vehicleIndices": [
    integer
  ]
}
Campos
relaxations[]

object (Relaxation)

Todas as flexibilizações de restrição de visita que serão aplicadas a visitas em trajetos com veículos em vehicleIndices.

vehicleIndices[]

integer

Especifica os índices de veículos a que a restrição de visita relaxations se aplica. Se estiver vazio, será considerado o padrão, e os relaxations serão aplicados a todos os veículos não especificados em outros constraintRelaxations. Pode haver no máximo um padrão, ou seja, no máximo um campo de relaxamento de restrição pode estar vazio vehicleIndices. Um índice de veículo só pode ser listado uma vez, mesmo em vários constraintRelaxations.

Um índice de veículo é mapeado da mesma forma que ShipmentRoute.vehicle_index, se interpretInjectedSolutionsUsingLabels for verdadeiro (consulte o comentário fields).

Relaxamento

Se relaxations estiver vazio, o horário de início e a sequência de todas as visitas em routes serão totalmente restritos, e nenhuma nova visita poderá ser inserida ou adicionada a esses trajetos. Além disso, o horário de início e término de um veículo em routes é totalmente restrito, a menos que o veículo esteja vazio (ou seja, não tenha visitas e usedIfRouteIsEmpty esteja definido como "false" no modelo).

relaxations(i).level especifica o nível de relaxamento da restrição aplicado a uma visita #j que satisfaz:

  • route.visits(j).start_time >= relaxations(i).threshold_time E
  • j + 1 >= relaxations(i).threshold_visit_count

Da mesma forma, a partida do veículo é relaxada para relaxations(i).level se satisfizer:

  • vehicleStartTime >= relaxations(i).threshold_time E
  • relaxations(i).threshold_visit_count == 0 e a extremidade do veículo é relaxada para relaxations(i).level se atender a estas condições:
  • vehicleEndTime >= relaxations(i).threshold_time E
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Para aplicar um nível de flexibilização se uma visita atender à thresholdVisitCount OU à thresholdTime, adicione duas relaxations com a mesma level: uma com apenas thresholdVisitCount definida e outra com apenas thresholdTime definida. Se uma visita atender às condições de vários relaxations, o nível mais flexível será aplicado. Como resultado, do início do veículo até o fim da rota, passando pelas visitas em ordem, o nível de flexibilidade aumenta. Ou seja, o nível de flexibilidade não diminui à medida que a rota avança.

O tempo e a sequência de visitas à rota que não atendem às condições de limite de qualquer relaxations são totalmente restritos, e nenhuma visita pode ser inserida nessas sequências. Além disso, se o início ou o fim de um veículo não atender às condições de flexibilização, o horário será fixo, a menos que o veículo esteja vazio.

Representação JSON
{
  "level": enum (Level),
  "thresholdTime": string,
  "thresholdVisitCount": integer
}
Campos
level

enum (Level)

O nível de flexibilização da restrição que se aplica quando as condições em ou após thresholdTime E pelo menos thresholdVisitCount são atendidas.

thresholdTime

string (Timestamp format)

O horário em que a flexibilização level pode ser aplicada.

Usa o padrão RFC 3339, em que a saída gerada é sempre convertida em Z e tem 0, 3, 6 ou 9 dígitos fracionários. Além de "Z", outros ajustes também são aceitos. Exemplos: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" ou "2014-10-02T15:01:23+05:30".

thresholdVisitCount

integer

O número de visitas em que a flexibilização level pode ser aplicada. Se thresholdVisitCount for 0 (ou não estiver definido), o level poderá ser aplicado diretamente na partida do veículo.

Se for route.visits_size() + 1, o level só poderá ser aplicado à extremidade do veículo. Se for maior que route.visits_size() + 1, level não será aplicado a essa rota.

Nível

Expressa os diferentes níveis de flexibilização de restrições, que são aplicados a uma visita e às seguintes quando ela atende às condições de limite.

A enumeração abaixo está em ordem crescente de relaxamento.

Tipos enumerados
LEVEL_UNSPECIFIED

Nível de relaxamento padrão implícito: nenhuma restrição é relaxada, ou seja, todas as visitas são totalmente restritas.

Esse valor não pode ser usado explicitamente em level.

RELAX_VISIT_TIMES_AFTER_THRESHOLD Os horários de início da visita e do veículo serão flexibilizados, mas cada visita vai continuar vinculada ao mesmo veículo, e a sequência de visitas precisa ser respeitada: nenhuma visita pode ser inserida entre elas ou antes delas.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Igual a RELAX_VISIT_TIMES_AFTER_THRESHOLD, mas a sequência de visitas também é flexível: as visitas só podem ser feitas por este veículo, mas podem não ser realizadas.
RELAX_ALL_AFTER_THRESHOLD Igual a RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, mas o veículo também está relaxado: as visitas são totalmente sem custo financeiro no horário limite ou depois dele e podem não ser realizadas.