OptimizeToursResponse

Resposta após a solução de um problema de otimização de percursos, contendo as rotas seguidas por cada veículo, as remessas que foram puladas e o custo geral da solução.

Representação JSON
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "requestLabel": string,
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "validationErrors": [
    {
      object (OptimizeToursValidationError)
    }
  ],
  "metrics": {
    object (Metrics)
  }
}
Campos
routes[]

object (ShipmentRoute)

Rotas calculadas para cada veículo. A rota i corresponde ao veículo i no modelo.

requestLabel

string

Cópia do OptimizeToursRequest.label, se um rótulo tiver sido especificado na solicitação.

skippedShipments[]

object (SkippedShipment)

A lista de todos os envios pulados.

validationErrors[]

object (OptimizeToursValidationError)

Lista de todos os erros de validação que conseguimos detectar de forma independente. Consulte a explicação "VÁRIOS ERROS" para a mensagem OptimizeToursValidationError. Em vez de erros, isso vai incluir avisos no caso de solvingMode ser DEFAULT_SOLVE.

metrics

object (Metrics)

Métricas de duração, distância e uso para esta solução.

OptimizeToursValidationError

Descreve um erro ou aviso encontrado ao validar um OptimizeToursRequest.

Representação JSON
{
  "code": integer,
  "displayName": string,
  "fields": [
    {
      object (FieldReference)
    }
  ],
  "errorMessage": string,
  "offendingValues": string
}
Campos
code

integer

Um erro de validação é definido pelo par (code, displayName), que está sempre presente.

Os campos a seguir fornecem mais contexto sobre o erro.

VÁRIOS ERROS: quando há vários erros, o processo de validação tenta gerar vários deles. Assim como um compilador, esse é um processo imperfeito. Alguns erros de validação são "fatais", ou seja, eles interrompem todo o processo de validação. Esse é o caso de erros displayName="UNSPECIFIED", entre outros. Alguns erros podem fazer com que o processo de validação ignore outros erros.

ESTABILIDADE: code e displayName precisam ser muito estáveis. No entanto, novos códigos e nomes de exibição podem aparecer ao longo do tempo, o que pode fazer com que uma solicitação (inválida) gere um par diferente (code, displayName) porque o novo erro ocultou o antigo. Por exemplo, consulte "VÁRIOS ERROS".

displayName

string

O nome de exibição do erro.

fields[]

object (FieldReference)

Um contexto de erro pode envolver zero, um (na maioria das vezes) ou mais campos. Por exemplo, a primeira coleta do veículo 4 e da remessa 2 pode ser feita da seguinte maneira:

fields { name: "vehicles" index: 4}
fields { name: "shipments" index: 2 subField {name: "pickups" index: 0} }

No entanto, a cardinalidade de fields não deve mudar para um determinado código de erro.

errorMessage

string

String legível que descreve o erro. Há um mapeamento de um para um entre code e errorMessage (quando o código não é "UNSPECIFIED").

ESTABILIDADE: não é estável: a mensagem de erro associada a um determinado code pode mudar (e esperamos que seja para esclarecer) ao longo do tempo. Use displayName e code.

offendingValues

string

Pode conter os valores dos campos. Essa opção nem sempre está disponível. Não confie nele e use apenas para depuração manual de modelos.

FieldReference

Especifica um contexto para o erro de validação. Um FieldReference sempre se refere a um determinado campo neste arquivo e segue a mesma estrutura hierárquica. Por exemplo, podemos especificar o elemento 2 de startTimeWindows do veículo 5 usando:

name: "vehicles" index: 5 subField { name: "endTimeWindows" index: 2 }

No entanto, omitimos entidades de nível superior, como OptimizeToursRequest ou ShipmentModel, para evitar a aglomeração da mensagem.

Representação JSON
{
  "name": string,
  "subField": {
    object (FieldReference)
  },

  // Union field index_or_key can be only one of the following:
  "index": integer,
  "key": string
  // End of list of possible types for union field index_or_key.
}
Campos
name

string

Nome do campo, por exemplo, "veículos".

subField

object (FieldReference)

Subcampo anidado recursivamente, se necessário.

Campo de união index_or_key.

index_or_key pode ser apenas de um dos tipos a seguir:

index

integer

Índice do campo se ele for repetido.

key

string

Chave se o campo for um mapa.

Métricas

Métricas gerais, agregadas em todas as rotas.

Representação JSON
{
  "aggregatedRouteMetrics": {
    object (AggregatedMetrics)
  },
  "skippedMandatoryShipmentCount": integer,
  "usedVehicleCount": integer,
  "earliestVehicleStartTime": string,
  "latestVehicleEndTime": string,
  "costs": {
    string: number,
    ...
  },
  "totalCost": number
}
Campos
aggregatedRouteMetrics

object (AggregatedMetrics)

Agregada nas rotas. Cada métrica é a soma (ou o valor máximo, para cargas) de todos os campos ShipmentRoute.metrics com o mesmo nome.

skippedMandatoryShipmentCount

integer

Número de envios obrigatórios pulados.

usedVehicleCount

integer

Número de veículos usados. Observação: se uma rota de veículo estiver vazia e Vehicle.used_if_route_is_empty for verdadeiro, o veículo será considerado usado.

earliestVehicleStartTime

string (Timestamp format)

O horário de início mais cedo de um veículo usado, calculado como o mínimo de todos os veículos usados de ShipmentRoute.vehicle_start_time.

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".

latestVehicleEndTime

string (Timestamp format)

O horário de término mais recente de um veículo usado, calculado como o máximo de todos os veículos usados de ShipmentRoute.vehicle_end_time.

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".

costs

map (key: string, value: number)

Custo da solução, detalhado por campos de solicitação relacionados a custos. As chaves são caminhos proto, relativos à entrada OptimizeToursRequest, por exemplo, "model.shipments.pickups.cost", e os valores são o custo total gerado pelo campo de custo correspondente, agregado em toda a solução. Em outras palavras, costs["model.shipments.pickups.cost"] é a soma de todos os custos de retirada da solução. Todos os custos definidos no modelo são informados em detalhes aqui, exceto os custos relacionados a TransitionAttributes, que são informados de forma agregada a partir de 01/2022.

totalCost

number

Custo total da solução. A soma de todos os valores no mapa de custos.