InjectedSolutionConstraint

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

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 remessas ignoradas precisam atender às suposições de validade básicas listadas para injectedFirstSolutionRoutes.

skippedShipments[]

object (SkippedShipment)

As remessas da solução a serem injetadas foram ignoradas. Alguns podem ser omitidos da solução original. Veja o campo routes.

constraintRelaxations[]

object (ConstraintRelaxation)

Para zero ou mais grupos de veículos, especifica quando e quanto relaxar restrições. Se este campo estiver vazio, todos os trajetos com veículos não vazios serão totalmente restritos.

ConstraintRelaxation

Para um grupo de veículos, especifica em quais limites as restrições de visitas serão reduzidas e em qual nível. As remessas listadas no campo skipped_shipment são restritas a serem ignoradas, ou seja, não podem ser realizadas.

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

object (Relaxation)

Todos os relaxamentos de restrição de visita que se aplicam às visitas em trajetos com veículos em vehicleIndices.

vehicleIndices[]

integer

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

Um índice de veículos é 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 limitados, e não será possível inserir ou adicionar novas visitas a esses trajetos. Além disso, os horários de início e término de um veículo em routes são totalmente limitados, 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 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 atender a:

  • vehicleStartTime >= relaxations(i).threshold_time E
  • relaxations(i).threshold_visit_count == 0 e a extremidade do veículo será relaxada para relaxations(i).level se atender a:
  • 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 atender a thresholdVisitCount OU a thresholdTime, adicione dois relaxations com o mesmo level: um com apenas thresholdVisitCount definido e outro com apenas thresholdTime definidos. Se uma visita satisfizer as condições de vários relaxations, o nível mais descontraído será aplicado. Como resultado, do início do veículo até as visitas ao trajeto até o final, o nível de relaxamento fica mais relaxado, ou seja, o nível de relaxamento não diminui à medida que o trajeto avança.

O tempo e a sequência das visitas ao trajeto que não atendem às condições de limite de qualquer relaxations são totalmente limitados, e nenhuma visita pode ser inserida nessas sequências. Além disso, se o início ou fim de um veículo não atender às condições de relaxamento, o tempo vai 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 thresholdTime ou depois E pelo menos thresholdVisitCount são atendidas.

thresholdTime

string (Timestamp format)

O momento em que o level de relaxamento pode ser aplicado.

Um carimbo de data/hora no formato UTC "Zulu" RFC3339, 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 das quais o level de relaxamento pode ser aplicado. Se a thresholdVisitCount for 0 (ou deixada sem definição), a level poderá ser aplicada diretamente ao ligar o veículo.

Se for route.visits_size() + 1, o level poderá ser aplicado apenas ao fim do veículo. Se for mais que route.visits_size() + 1, level não será aplicado para essa rota.

Nível

Expressa os diferentes níveis de relaxamento de restrição, que são aplicados para uma visita e os seguintes quando ele satisfaz as condições de limite.

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

Enums
LEVEL_UNSPECIFIED

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

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 os horários de início/término do veículo serão afrouxados, mas cada visita permanece vinculada ao mesmo veículo, e a sequência da visita deve ser observada: nenhuma visita pode ser inserida entre eles ou antes deles.
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 permanecem simplesmente vinculadas ao veículo.
RELAX_ALL_AFTER_THRESHOLD Igual ao RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, mas o veículo também é calmo: as visitas são totalmente sem custo financeiro dentro do limite ou após essa data e podem apresentar problemas.