InjectedSolutionConstraint

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

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

skippedShipments[]

object (SkippedShipment)

Os envios da solução a serem injetados foram ignorados. 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 este campo estiver vazio, todos os trajetos de veículos não vazios serão totalmente restritos.

ConstraintRelaxation

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

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

object (Relaxation)

Todos os relaxamentos de restrição de visitas que serão aplicados às visitas nos trajetos com veículos em vehicleIndices.

vehicleIndices[]

integer

Especifica os índices do veículo aos quais a restrição de visita relaxations se aplica. Se estiver vazio, será considerado o padrão, e a relaxations será aplicada a todos os veículos não especificados em outra constraintRelaxations. Pode haver no máximo um padrão, ou seja, no máximo um campo de relaxamento de restrição pode ficar vazio em 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 (confira 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 visita nova poderá ser inserida ou adicionada a esses trajetos. Além disso, os horários de início e término de um veículo em routes são totalmente restritos, 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 satisfaç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 atender a:

  • vehicleStartTime >= relaxations(i).threshold_time E
  • relaxations(i).threshold_visit_count == 0 e a extremidade do veículo é relaxada para relaxations(i).level se satisfizer:
  • 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 definido. Se uma visita atender às condições de vários relaxations, o nível mais descontraído será aplicado. Como resultado, do início do veículo às visitas do trajeto até o final do veículo, 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 de visitas ao trajeto que não atendem às condições limite de qualquer relaxations são totalmente restritos, e nenhuma visita pode ser inserida nessas sequências. Além disso, se a partida ou o fim de um veículo não satisfizer as condições de qualquer relaxamento, o tempo será fixado, 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 após thresholdTime E pelo menos thresholdVisitCount são atendidas.

thresholdTime

string (Timestamp format)

É a hora em que a level de relaxamento pode ser aplicada ou depois dela.

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 durante ou depois das quais o relaxamento level pode ser aplicado. Se a thresholdVisitCount for 0 (ou deixada sem definição), o level poderá ser aplicado diretamente na inicialização do veículo.

Se for route.visits_size() + 1, o level só poderá ser aplicado à extremidade do veículo. Se for um valor superior a route.visits_size() + 1, o level não será aplicado a esse trajeto.

Nível

Expressa os diferentes níveis de relaxamento de restrição, que são aplicados a uma visita e aqueles que se seguem quando ela satisfaz as condições 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 de término da visita serão flexibilizados, mas cada visita permanece vinculada ao mesmo veículo e a sequência da visita deve ser observada: nenhuma visita pode ser inserida entre elas ou antes delas.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Igual à RELAX_VISIT_TIMES_AFTER_THRESHOLD, mas a sequência da visita também é flexível: as visitas permanecem simplesmente ligadas ao veículo.
RELAX_ALL_AFTER_THRESHOLD Igual a RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, mas o veículo é relaxado: as visitas são totalmente sem custo financeiro dentro do tempo limite ou depois dele e podem ter um desempenho inferior.