SkippedShipment

Especifica os detalhes dos envios não realizados em uma solução. Para casos triviais e/ou se conseguirmos identificar a causa da omissão, vamos informar o motivo aqui.

Representação JSON
{
  "index": integer,
  "label": string,
  "reasons": [
    {
      object (Reason)
    }
  ],
  "penaltyCost": number,
  "estimatedIncompatibleVehicleRatio": number
}
Campos
index

integer

O índice corresponde ao índice do envio na ShipmentModel de origem.

label

string

Cópia do Shipment.label correspondente, se especificado no Shipment.

reasons[]

object (Reason)

Uma lista de motivos que explicam por que o envio foi ignorado. Consulte o comentário acima de Reason. Se não for possível entender por que um envio foi ignorado, os motivos não serão definidos.

penaltyCost

number

Esta é uma cópia do Shipment.penalty_cost, incluída aqui para facilitar a visualização da gravidade de um envio pulado.

Experimental: a existência ou o comportamento desse campo pode mudar no futuro.

estimatedIncompatibleVehicleRatio

number

Proporção estimada de veículos que não podem realizar esse envio por pelo menos um dos motivos abaixo. Observação: esse campo só é preenchido quando os motivos envolvem um veículo.

Experimental: a existência ou o comportamento desse campo pode mudar no futuro.

Motivo

Se pudermos explicar por que o envio foi pulado, os motivos serão listados aqui. Se o motivo não for o mesmo para todos os veículos, reason terá mais de um elemento. Um envio pulado não pode ter motivos duplicados, ou seja, quando todos os campos são iguais, exceto exampleVehicleIndex. Exemplo:

reasons {
  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
  exampleVehicleIndex: 1
  exampleExceededCapacityType: "Apples"
}
reasons {
  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
  exampleVehicleIndex: 3
  exampleExceededCapacityType: "Pears"
}
reasons {
  code: CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT
  exampleVehicleIndex: 1
}

A remessa pulada é incompatível com todos os veículos. Os motivos podem ser diferentes para todos os veículos, mas a capacidade de "Maçãs" de pelo menos um veículo seria excedida (incluindo o veículo 1), a capacidade de "Peras" de pelo menos um veículo seria excedida (incluindo o veículo 3) e o limite de distância de pelo menos um veículo seria excedido (incluindo o veículo 1).

Representação JSON
{
  "code": enum (Code),
  "exampleVehicleIndices": [
    integer
  ],
  "exampleExceededCapacityType": string,
  "exampleVehicleIndex": integer
}
Campos
code

enum (Code)

Consulte os comentários do código.

exampleVehicleIndices[]

integer

Igual a exampleVehicleIndex, exceto que fornecemos a lista de vários veículos identificados. Esta lista não é necessariamente completa. Esse campo só será preenchido se [fill_example_vehicle_indices_in_skipped_reasons][] for verdadeiro.

Experimental: a existência ou o comportamento desse campo pode mudar no futuro.

exampleExceededCapacityType

string

Se o código do motivo for DEMAND_EXCEEDS_VEHICLE_CAPACITY, documenta um tipo de capacidade que foi excedido.

exampleVehicleIndex

integer

Se o motivo estiver relacionado a uma incompatibilidade entre o envio e o veículo, esse campo vai mostrar o índice de um veículo relevante.

Código

Código que identifica o tipo de motivo. A ordem aqui não tem sentido. Em particular, não há indicação de que um determinado motivo vai aparecer antes de outro na solução, se ambos se aplicarem.

Enums
CODE_UNSPECIFIED Isso nunca deve ser usado.
NO_VEHICLE Não há nenhum veículo no modelo, o que torna todos os envios inviáveis.
DEMAND_EXCEEDS_VEHICLE_CAPACITY A demanda do envio excede a capacidade de um veículo para alguns tipos de capacidade, um deles é exampleExceededCapacityType.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT

A distância mínima necessária para realizar esse envio, ou seja, de startLocation do veículo até os locais de retirada e/ou entrega do envio e até o local final do veículo, excede o routeDistanceLimit do veículo.

Para essa computação, usamos as distâncias geodésicas.

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT

O tempo mínimo necessário para realizar esse envio, incluindo o tempo de viagem, de espera e de atendimento, excede o routeDurationLimit do veículo.

Observação: o tempo de viagem é calculado no melhor cenário, ou seja, como distância geodésica x 36 m/s (aproximadamente 130 km/hora).

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT Igual ao exemplo acima, mas só comparamos o tempo mínimo de viagem e a travelDurationLimit do veículo.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS O veículo não pode realizar esse envio no melhor cenário (consulte CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT para o cálculo de tempo) se ele começar no horário de início mais cedo: o tempo total faria o veículo terminar depois do horário de término mais recente.
VEHICLE_NOT_ALLOWED O campo allowedVehicleIndices da remessa não está vazio e o veículo não pertence a ela.
VEHICLE_IGNORED

O campo ignore do veículo é verdadeiro.

Experimental: a existência ou o comportamento desse campo pode mudar no futuro.

SHIPMENT_IGNORED

O campo ignore do envio é verdadeiro.

Experimental: a existência ou o comportamento desse campo pode mudar no futuro.

SKIPPED_IN_INJECTED_SOLUTION_CONSTRAINT

O envio é pulado no injectedSolutionConstraint.

Experimental: a existência ou o comportamento desse campo pode mudar no futuro.

VEHICLE_ROUTE_IS_FULLY_SEQUENCE_CONSTRAINED

A flexibilização da rota do veículo especificada no injectedSolutionConstraint não permite que nenhuma visita seja inserida.

Experimental: a existência ou o comportamento desse campo pode mudar no futuro.

ZERO_PENALTY_COST

O custo da multa é zero. Embora isso possa ser útil como uma opção de modelagem avançada, também pode explicar por que um envio foi ignorado.

Experimental: a existência ou o comportamento desse campo pode mudar no futuro.