InjectedSolutionConstraint

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

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

object (ShipmentRoute)

Rotas da solução a ser injetada. Algumas rotas podem ser omitidas da solução original. As rotas e os envios pulados precisam atender às suposiçõ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 relaxar 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 relaxadas e em qual nível. Os envios listados no campo skipped_shipment são restritos a serem pulados, 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 visitas 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 o relaxations será aplicado a todos os veículos que não forem especificados em outro constraintRelaxations. Pode haver no máximo um padrão, ou seja, no máximo um campo de relaxamento de restrição pode ser vehicleIndices vazio. 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 tenha usedIfRouteIsEmpty definido como falso no modelo).

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

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

Da mesma forma, a inicialização do veículo é relaxada para relaxations(i).level se ele atender aos seguintes requisitos:

  • vehicleStartTime >= relaxations(i).threshold_time E
  • relaxations(i).threshold_visit_count == 0 e a extremidade do veículo é relaxada para relaxations(i).level se ela atender aos seguintes requisitos:
  • vehicleEndTime >= relaxations(i).threshold_time E
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Para aplicar um nível de relaxamento se uma visita atende aos requisitos de thresholdVisitCount OU thresholdTime, adicione duas relaxations com o mesmo level: uma com apenas thresholdVisitCount definida e a 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é as visitas de rota em ordem até o final do veículo, o nível de relaxamento se torna mais relaxado, ou seja, o nível de relaxamento não diminui à medida que a rota avança.

O tempo e a sequência de visitas de 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 qualquer relaxamento, o tempo 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 relaxamento de 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 tempo em que ou após o qual a level de relaxamento pode ser aplicada.

Um carimbo de data/hora no formato RFC3339 UTC "Zulu", com resolução de nanossegundos e até nove dígitos fracionários. Exemplos: "2014-10-02T15:01:23Z" e "2014-10-02T15:01:23.045123456Z".

thresholdVisitCount

integer

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

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

Nível

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

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

Enums
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 e término da visita e do veículo serão relaxados, mas cada visita continua vinculada ao mesmo veículo, e a sequência de visitas precisa ser observada: 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 é relaxada: as visitas só podem ser realizadas por esse 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 é relaxado: as visitas são totalmente sem custo financeiro no horário limite ou depois dele e podem não ser realizadas.