Solução injetada na solicitação, incluindo informações sobre quais visitas precisam ser restritas e como.
| Representação JSON |
|---|
{ "routes": [ { object ( |
| Campos | |
|---|---|
routes[] |
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 |
skippedShipments[] |
Envios ignorados da solução a ser injetada. Alguns podem ser omitidos da solução original. Consulte o campo |
constraintRelaxations[] |
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 ( |
| Campos | |
|---|---|
relaxations[] |
Todas as flexibilizações de restrição de visita que serão aplicadas a visitas em trajetos com veículos em |
vehicleIndices[] |
Especifica os índices de veículos a que a restrição de visita Um índice de veículo é mapeado da mesma forma que |
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_timeEj + 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_timeErelaxations(i).threshold_visit_count == 0e a extremidade do veículo é relaxada pararelaxations(i).levelse atender a estas condições:vehicleEndTime >= relaxations(i).threshold_timeEroute.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 ( |
| Campos | |
|---|---|
level |
O nível de flexibilização da restrição que se aplica quando as condições em ou após |
thresholdTime |
O horário em que a flexibilização 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: |
thresholdVisitCount |
O número de visitas em que a flexibilização Se for |
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 |
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. |