Interpretar a resposta da API Route Optimization… com cachorros

Desenvolvedores do Espaço Econômico Europeu (EEE)

Observação para produção

Para simplificar, este guia usa REST e JSON. No entanto, para seu ambiente de produção, a recomendação geral é usar o gRPC e as bibliotecas de cliente para melhorar o desempenho. Para mais informações, consulte as bibliotecas de cliente da API Route Optimization.

Depois de enviar a solicitação em Fazer sua primeira solicitação, o otimizador retorna um OptimizeToursResponse. Essa resposta é o plano de trajeto que o motorista deve seguir. Este guia mostra como ler esse relatório.

Resumo do plano de rota

No cenário da creche para cães, o otimizador atribui o boiadeiro de Berna e o chihuahua à sua van e ignora o pastor alemão. O plano de rota do motorista é o seguinte:

  • Começar o turno às 7h55 na creche.
  • Pegar o Bernese Mountain Dog perto da Coit Tower às 8h20.
  • Pegue o chihuahua no South Sunset Playground Park às 8h58.
  • Volte para a creche às 9h24 e espere até que a janela de entrega seja aberta às 9h30.
  • Deixar o Bernese Mountain Dog às 9h30.
  • Deixar o chihuahua às 9h35.
  • Terminar o turno às 9h40.

O plano de rota custa US $147,22, incluindo uma penalidade de US $100 por pular o pastor alemão.

Para verificar os resultados, compare sua resposta com o exemplo completo. Seus resultados podem ser um pouco diferentes porque os tempos de viagem e as distâncias dependem dos dados atuais das vias.

Exemplo de resposta completa

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T15:55:04Z",
      "vehicleEndTime": "2024-02-13T17:40:00Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T16:20:00Z",
          "detour": "0s",
          "shipmentLabel": "Bernese mountain dog",
          "visitType": "PICKUP_SHIPMENT"
        },
        {
          "shipmentIndex": 1,
          "isPickup": true,
          "startTime": "2024-02-13T16:58:12Z",
          "detour": "2600s",
          "shipmentLabel": "Chihuahua",
          "visitType": "PICKUP_SHIPMENT"
        },
        {
          "startTime": "2024-02-13T17:30:00Z",
          "detour": "2297s",
          "shipmentLabel": "Bernese mountain dog",
          "visitType": "DELIVER_SHIPMENT"
        },
        {
          "shipmentIndex": 1,
          "startTime": "2024-02-13T17:35:00Z",
          "detour": "656s",
          "shipmentLabel": "Chihuahua",
          "visitType": "DELIVER_SHIPMENT"
        }
      ],
      "transitions": [
        {
          "travelDuration": "1496s",
          "travelDistanceMeters": 7082,
          "waitDuration": "0s",
          "totalDuration": "1496s",
          "startTime": "2024-02-13T15:55:04Z"
        },
        {
          "travelDuration": "1992s",
          "travelDistanceMeters": 16589,
          "waitDuration": "0s",
          "totalDuration": "1992s",
          "startTime": "2024-02-13T16:25:00Z"
        },
        {
          "travelDuration": "1252s",
          "travelDistanceMeters": 7860,
          "waitDuration": "356s",
          "totalDuration": "1608s",
          "startTime": "2024-02-13T17:03:12Z"
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2024-02-13T17:35:00Z"
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2024-02-13T17:40:00Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 2,
        "travelDuration": "4740s",
        "waitDuration": "356s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "1200s",
        "totalDuration": "6296s",
        "travelDistanceMeters": 31531,
        "performedShipmentPenaltyCostSum": 2000
      },
      "routeCosts": {
        "model.vehicles.cost_per_hour": 47.22
      },
      "routeTotalCost": 47.22,
      "vehicleFullness": {
        "maxFullness": 0.3497777777777778,
        "activeSpan": 0.3497777777777778
      }
    }
  ],
  "skippedShipments": [
    {
      "index": 2,
      "label": "German shepherd",
      "penaltyCost": 100
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 2,
      "travelDuration": "4740s",
      "waitDuration": "356s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "1200s",
      "totalDuration": "6296s",
      "travelDistanceMeters": 31531,
      "performedShipmentPenaltyCostSum": 2000
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T15:55:04Z",
    "latestVehicleEndTime": "2024-02-13T17:40:00Z",
    "totalCost": 147.22,
    "costs": {
      "model.vehicles.cost_per_hour": 47.22,
      "model.shipments.penalty_cost": 100
    }
  }
}
    

Estrutura da resposta

OptimizeToursResponse tem um objeto ShipmentRoute com um tipo de mensagem de visitas e um objeto Metrics com aggregatedRouteMetrics e totalCost.

O OptimizeToursResponse contém dois componentes principais:

  • routes: o plano de rota para cada veículo da sua frota, incluindo a ordem e os horários de cada retirada e entrega. Você tem uma van, então há um plano de rota.
  • metrics: um resumo de todo o plano de trajeto, incluindo o custo total, a duração e a distância.

Como o otimizador ignora o pastor alemão, a resposta também inclui skippedShipments.

As seções a seguir mostram onde encontrar cada detalhe do resumo do plano de rota na resposta.

Qual veículo faz qual trajeto?

O otimizador gera um plano de trajeto (a matriz routes) que corresponde à ordem de vehicles na sua solicitação.

O campo vehicleIndex identifica cada veículo com base na posição com base em zero, que para sua van é 0. Os campos vehicleStartTime e vehicleEndTime instruem o motorista sobre quando iniciar e encerrar o turno.

A API Route Optimization retorna carimbos de data/hora em UTC, marcados pelo sufixo Z, independentemente do deslocamento na sua solicitação. Para saber o horário de San Francisco, subtraia 8 horas. Para sua van, o turno vai das 7h55 às 9h40, conforme mostrado no exemplo de código a seguir.

{
"routes": [
    {
    // "vehicleIndex": 0, // Omitted in actual JSON response because it's 0
    "vehicleStartTime": "2024-02-13T15:55:04Z",
    "vehicleEndTime": "2024-02-13T17:40:00Z",
    ...
    }
  ]
  ...
}

Qual é a ordem de embarque e desembarque?

Em cada rota, a matriz visits contém todas as retiradas e entregas do veículo atribuído em ordem cronológica.

O shipmentIndex de cada visita é a posição baseada em zero do envio na sua solicitação: 0 é o boiadeiro de Berna, e 1 é o chihuahua. O campo shipmentLabel mostra o rótulo que você definiu para cada remessa.

Para distinguir entre uma retirada e uma entrega, verifique os campos visitType ou isPickup:

  • visitType: define explicitamente a ação de visita.
    • Retirada: visitType = "PICKUP_SHIPMENT"
    • Entrega: visitType = "DELIVER_SHIPMENT"
  • isPickup: um campo auxiliar booleano.
    • Retirada: isPickup = true
    • Entrega: isPickup = false (omitido no JSON)

Para determinar a sequência exata de eventos e o horário de chegada esperado em cada local, leia a matriz visits em ordem. A tabela a seguir mostra a ação do plano de rota com base na ordem e nos valores dos campos shipmentIndex, isPickup ou visitType e startTime.

Sequência Valor de shipmentIndex Valor isPickup ou visitType Valor de startTime (UTC) Ação
Primeira visita 0 (omitido em JSON) Verdadeiro ou PICKUP_SHIPMENT 2024-02-13T16:20:00Z Pegar o boiadeiro de Berna às 8h20.
Segunda visita 1 Verdadeiro ou PICKUP_SHIPMENT 2024-02-13T16:58:12Z Pegue o Chihuahua às 8h58.
Terceira visita 0 (omitido em JSON) Falso (omitido) ou DELIVER_SHIPMENT 2024-02-13T17:30:00Z Deixar o boiadeiro de Berna na creche para cães às 9h30.
Quarta visita 1 Falso (omitido) ou DELIVER_SHIPMENT 2024-02-13T17:35:00Z Deixar o chihuahua na creche para cães às 9h35.

O exemplo de código a seguir mostra como a resposta fornece essa sequência:

{
  "routes": [
    {
      "visits": [
        {
          // "shipmentIndex": 0, // Omitted in actual JSON response because it's 0
          "isPickup": true,
          "startTime": "2024-02-13T16:20:00Z",
          "shipmentLabel": "Bernese mountain dog",
          "visitType": "PICKUP_SHIPMENT"
        },
        {
          "shipmentIndex": 1,
          "isPickup": true,
          "startTime": "2024-02-13T16:58:12Z",
          "shipmentLabel": "Chihuahua",
          "visitType": "PICKUP_SHIPMENT"
        },
        {
          // "shipmentIndex": 0, // Omitted in actual JSON response because it's 0
          // "isPickup": false, // Omitted in actual JSON response because it's false
          "startTime": "2024-02-13T17:30:00Z",
          "shipmentLabel": "Bernese mountain dog",
          "visitType": "DELIVER_SHIPMENT"
        },
        {
          "shipmentIndex": 1,
          // "isPickup": false, // Omitted in actual JSON response because it's false
          "startTime": "2024-02-13T17:35:00Z",
          "shipmentLabel": "Chihuahua",
          "visitType": "DELIVER_SHIPMENT"
        }
      ]
    }
  ]
}

Cada visita também tem um visitRequestIndex, que é a posição baseada em zero da opção de retirada ou entrega que o otimizador escolheu para a remessa. Cada cachorro neste cenário tem apenas uma opção de retirada e uma de entrega, então visitRequestIndex é sempre 0, e a resposta omite isso.

O que acontece entre as visitas?

Em cada rota, a matriz transitions lista os detalhes da viagem entre as visitas. Embora visits e transitions sejam listas separadas, elas se intercalam no tempo, da seguinte maneira:

  1. transitions[0] (trajeto do início até a primeira visita)
  2. visits[0] (primeira visita)
  3. transitions[1] (incentivar a segunda visita)
  4. visits[1] (segunda visita)
  5. ...
  6. visits[N-1] (última visita, em que N é o número total de visitas)
  7. transitions[N] (dirigir da última visita até o final)

Para acompanhar a linha do tempo do trajeto, consulte o campo startTime nas duas matrizes. O startTime de uma transição é quando o motorista começa a se deslocar, e o startTime de uma visita é quando o motorista começa a retirada ou entrega.

Cada transição mostra o tempo de trajeto e a distância esperados entre os locais. A tabela a seguir mapeia os campos transitions e visits para as ações de rota cronológica do cenário de creche para cães.

Sequência Nome do campo Valor de startTime (UTC) Detalhes Ação
Primeira transição transitions[0] 2024-02-13T15:55:04Z travelDuration: 1496s
travelDistanceMeters: 7082
Dirija 7 km por 25 minutos a partir da creche para buscar o boiadeiro de Berna. O turno começa às 7h55.
Primeira visita visits[0] 2024-02-13T16:20:00Z shipmentIndex: 0 (omitido em JSON)
isPickup: verdadeiro
Pegar o boiadeiro de Berna a partir das 8h20. A visita leva 5 minutos.
Segunda transição transitions[1] 2024-02-13T16:25:00Z travelDuration: 1992s
travelDistanceMeters: 16589
Dirija 17 km por 33 minutos da Coit Tower para buscar o chihuahua a partir das 8h25.
Segunda visita visits[1] 2024-02-13T16:58:12Z shipmentIndex: 1
isPickup: True
Pegar o chihuahua a partir das 8h58. A visita leva 5 minutos.
Terceira transição transitions[2] 2024-02-13T17:03:12Z travelDuration: 1252s
travelDistanceMeters: 7860
waitDuration: 356s
Dirija 8 km por 21 minutos do South Sunset Playground de volta à creche, começando às 9h03. Chegue às 9h24 e aguarde 6 minutos para que a janela de entrega seja aberta.
Terceira visita visits[2] 2024-02-13T17:30:00Z shipmentIndex: 0 (omitido em JSON)
isPickup: False (omitido em JSON)
Deixar o boiadeiro de Berna na creche para cães a partir das 9h30. A visita leva 5 minutos.
Quarta transição transitions[3] 2024-02-13T17:35:00Z travelDuration: 0s
travelDistanceMeters: 0 (omitido em JSON)
Não dirija. Pronto para deixar o Chihuahua na creche às 9h35.
Quarta visita visits[3] 2024-02-13T17:35:00Z shipmentIndex: 1
isPickup: False (omitido no JSON)
Deixe o chihuahua na creche para cães a partir das 9h35. A visita leva 5 minutos.
Quinta transição transitions[4] 2024-02-13T17:40:00Z travelDuration: 0s
travelDistanceMeters: 0 (omitido em JSON)
Não dirija. O motorista encerra o turno às 9h40.

O exemplo de código a seguir mostra como a resposta fornece essa sequência para transitions[0] e transitions[1]:

{
  "routes": [
    {
      "transitions": [
        {
          "travelDuration": "1496s",
          "travelDistanceMeters": 7082,
          "waitDuration": "0s",
          "totalDuration": "1496s",
          "startTime": "2024-02-13T15:55:04Z"
        },
        {
          "travelDuration": "1992s",
          "travelDistanceMeters": 16589,
          "waitDuration": "0s",
          "totalDuration": "1992s",
          "startTime": "2024-02-13T16:25:00Z"
        },
        ...
      ]
    }
  ]
}

Quanto custa o trajeto?

Você pode analisar vários campos na resposta, dependendo se precisa do custo de um veículo específico ou do custo total de toda a frota.

A tabela a seguir lista todas as maneiras de encontrar informações de custo na resposta:

Com filhos Parâmetro Escopo Descrição
ShipmentRoute routeCosts Por rota Um detalhamento dos componentes de custo específicos (como custo por hora) para essa rota.
routeTotalCost Por rota O custo total calculado para essa rota específica.
Metrics totalCost Total (todas as rotas) O custo total agregado de todas as rotas na solução.
costs Total (todas as rotas) Um detalhamento dos componentes de custo agregados em todas as rotas da solução.

Os custos especificados em routeCosts e costs refletem as restrições de custo que você especifica na solicitação. Para mais informações, consulte o documento Conceito principal do modelo de custo.

Nesse cenário de creche para cães, como você tem uma remessa ignorada, o custo por rota e o custo total agregado são diferentes. O custo do trajeto inclui apenas os custos associados a esse trajeto específico (o salário do motorista), enquanto o custo total agregado também inclui a penalidade pela remessa ignorada. O exemplo de código a seguir mostra onde encontrar esses valores na resposta:

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T15:55:04Z",
      "vehicleEndTime": "2024-02-13T17:40:00Z",
      ...
      "routeCosts": {
        "model.vehicles.cost_per_hour": 47.22
      },
      "routeTotalCost": 47.22
    }
  ],
  "metrics": {
    "totalCost": 147.22,
    "costs": {
      "model.shipments.penalty_cost": 100,
      "model.vehicles.cost_per_hour": 47.22
    },
    ...
  }
}

De acordo com o plano de trajeto, o motorista opera a van das 7h55 às 9h40, o que equivale a aproximadamente 1 hora e 45 minutos (6.296 segundos). Com base na taxa definida de US $27 por hora, o custo do trajeto é de US $47,22. Como o otimizador pulou a remessa do pastor alemão, ele adiciona um custo de penalidade de US $100, elevando o custo total agregado para US $147,22.

Por que uma remessa foi ignorada?

O otimizador lista todas as remessas que não realiza na matriz skippedShipments. O motivo para pular uma remessa depende de você definir um penaltyCost:

  • Remessas obrigatórias (sem penaltyCost): o otimizador nunca as ignora só porque são caras. Ele só pula uma se não for possível encaixar a remessa em nenhuma rota, por exemplo, porque a janela de tempo dela entra em conflito com outras remessas.
  • Remessas opcionais (com um penaltyCost): o otimizador também pode ignorar essas remessas quando o custo de realização delas for maior do que a penalidade. É possível definir custos de penalidade diferentes para priorizar algumas remessas em relação a outras.

Nesse cenário, a janela de retirada do pastor alemão entra em conflito com a do boiadeiro de berna. A Coit Tower e o Land's End ficam a 25 minutos de distância, então o motorista não pode fazer as duas retiradas no período de 20 minutos. O otimizador precisa pular um deles. Como o pastor alemão tem o menor custo de penalidade (US$ 100 em comparação com US $1.000 para o cliente regular), o otimizador o ignora e incorre na penalidade de US $100.

O exemplo de código a seguir mostra o objeto skippedShipments na resposta:

{
  ...
  "skippedShipments": [
    {
      "index": 2,
      "label": "German shepherd",
      "penaltyCost": 100
    }
  ],
  ...
}

O objeto skippedShipments na resposta contém os seguintes campos:

  • index: o índice baseado em zero da remessa na sua solicitação (2 para a terceira remessa).
  • label: o rótulo que você especificou na solicitação ("Pastor alemão").
  • penaltyCost: o custo de penalidade que você especificou na solicitação, que a API adiciona ao custo total.

Para evitar que o otimizador pule uma remessa, flexibilize a restrição que causa o conflito. Por exemplo, peça ao dono do pastor alemão um horário de retirada mais flexível e atualize o timeWindows para essa retirada na sua solicitação.

Campos de resposta no exemplo

A tabela a seguir descreve todos os campos de resposta retornados no OptimizeToursResponse do cenário de exemplo. Embora não seja necessário usar todos os campos para entender o plano de rota, é possível analisá-los para determinar como ajustar o OptimizeToursRequest de acordo com as necessidades da sua empresa. Para mais informações, consulte Ciclo de vida do plano de rota.

É possível filtrar o conteúdo por pai ou por Text Search.

Com filhos Parâmetro Tipo de propriedade Descrição
OptimizeToursResponse routes Matriz de objetos (ShipmentRoute) Contém a lista de rotas calculadas para cada veículo (uma por veículo). Para este cenário de creche para cães, ele contém o plano de rota detalhado para sua única van.
metrics Objeto (Metrics) Contém as métricas gerais da solução, agregadas em todas as rotas. Para esse cenário de creche para cães, este é o resumo dos custos e das durações operacionais do dia.
skippedShipments Matriz de objetos (SkippedShipment) Contém a lista de remessas que foram ignoradas na solução. Nesse cenário, o terceiro cachorro (pastor alemão) é ignorado.
ShipmentRoute vehicleStartTime Carimbo de data/hora É o horário em que o veículo inicia o trajeto. Nesse cenário de creche para cães, o motorista começa a dirigir a van às 7h55.
vehicleEndTime Carimbo de data/hora É o horário em que o veículo termina o trajeto. Nesse cenário de creche para cães, o motorista termina de dirigir a van às 9h40.
visits Matriz de objetos (Visit) É a lista ordenada de retiradas e entregas no trajeto. Nesse cenário de creche para cães, essa é a sequência de busca e entrega dos dois cachorros.
transitions Matriz de objetos (Transition) É a lista ordenada de distância, tempo de viagem e tempo de espera entre as visitas. Para esse cenário de creche para cães, isso detalha a distância e o tempo de viagem entre a Coit Tower, o South Sunset Playground Park e a creche.
metrics Objeto (AggregatedMetrics) Estas são as métricas específicas dessa rota. Para este cenário de creche para cães, estas são as estatísticas desta van específica. Essas métricas são baseadas nos custos que você especificou na solicitação. Para mais detalhes, consulte o documento Conceito principal do modelo de custo.
routeCosts Objeto (mapa) Este é um detalhamento dos custos específicos para essa rota. Para este cenário de creche para cães, isso mostra o custo calculado com base no salário do motorista de US $27 por hora.
routeTotalCost Número Esse é o custo total do trajeto específico. Para esse cenário de creche para cães, o custo total é de 47.22 para o trajeto dessa van.
vehicleFullness Objeto (VehicleFullness) É um detalhamento de quão perto o veículo chega dos limites operacionais, como tempo, distância e carga. Para esse cenário de creche para cães, apenas os horários de início e término do turno limitam o motorista. Portanto, o otimizador calcula vehicleFullness como a fração da duração real do trajeto e o tempo máximo disponível para o turno do motorista.
Visit shipmentIndex Número inteiro Esse é o índice baseado em zero da remessa na solicitação original. Para este cenário de creche para cães, 0 representa o boiadeiro de Berna, e 1 representa o chihuahua.
isPickup Booleano Este campo será verdadeiro se a visita for uma retirada. Para este cenário de creche para cães, ele é verdadeiro ao buscar um cachorro e falso (ou ausente) ao deixar um cachorro na creche.
startTime Carimbo de data/hora É o horário de início estimado da visita. No cenário da creche para cães, isso acontece quando o motorista bate na porta.
detour Duração Esse é o tempo extra que o otimizador adiciona à jornada dessa remessa específica. Um desvio é a diferença entre o plano de rota real e a viagem direta ideal se o motorista não tiver outras remessas ou tarefas a serem concluídas.

Para este cenário de creche para cães, a primeira visita, que é para buscar o boiadeiro de Berna, tem um desvio de 0 porque o motorista vai diretamente da creche para essa retirada. Para a retirada do Chihuahua, o desvio é de 43 minutos, porque o motorista pega o Bernese primeiro (e gasta 5 minutos para colocá-lo no carro).
shipmentLabel String Este é o rótulo da solicitação para cada remessa. Para este cenário de creche para cães, os rótulos são "Chihuahua" ou "Boiadeiro de Berna".
visitType String (tipo enumerado) Indica o tipo de visita, que pode ser PICKUP_SHIPMENT para retiradas ou DELIVER_SHIPMENT para entregas. Neste cenário, é PICKUP_SHIPMENT ou DELIVER_SHIPMENT.
Transition travelDuration Duração Esse é o tempo gasto em deslocamento durante a transição entre visitas. Por exemplo, no cenário da creche para cães, o motorista leva cerca de 25 minutos para ir da creche até a Coit Tower para buscar o Bernese.
travelDistanceMeters Número inteiro É a distância percorrida em metros durante essa transição. Por exemplo, neste cenário de creche para cães, o motorista percorre 7 quilômetros da creche até a Coit Tower para buscar o Bernese Mountain Dog.
waitDuration Duração É o tempo de espera antes da próxima retirada ou entrega. Nesse cenário de creche para cães, o valor é de 6 minutos (356 segundos) para a terceira transição, porque o motorista chega à creche antes do horário de entrega, que começa às 9h30. Para outras transições, esse valor é 0.
totalDuration Duração É a duração total da transição, incluindo o tempo de percurso e de espera. Por exemplo, o motorista gasta 25 minutos (25 minutos dirigindo e 0 minutos esperando) na primeira transição e 27 minutos (21 minutos dirigindo e 6 minutos esperando) na terceira transição de volta para a creche.
startTime Carimbo de data/hora É o horário em que a viagem começa. Ele corresponde ao horário de conclusão da visita anterior (ou, para a primeira transição, ao horário de início do veículo). No cenário da creche para cães, a primeira transição começa às 7h55, quando o motorista sai da creche, e a segunda transição começa às 8h25, quando o motorista sai da Coit Tower.
Metrics aggregatedRouteMetrics Objeto (AggregatedMetrics) Essa é a soma das métricas de todas as rotas. Para este cenário de creche para cães, estas são as métricas totais para sua van.
usedVehicleCount Número inteiro É o número de veículos usados na solução. Neste cenário de creche para cães, você usa apenas uma van.
earliestVehicleStartTime Carimbo de data/hora Esse é o horário de início mais cedo entre todos os veículos. Para este cenário de creche para cães, o trajeto da van começa às 7h55.
latestVehicleEndTime Carimbo de data/hora Este é o horário de término mais recente entre todos os veículos. Para este cenário de creche para cães, o trajeto da van termina às 9h40.
totalCost Número Esse é o custo total da solução. Para esse cenário de creche para cães, todo o plano de rota custa 147.22 por dia (incluindo o salário do motorista de 47.22 e a penalidade de envio ignorado de 100).
costs Objeto (mapa) Este é um detalhamento do custo total por categoria. Para esse cenário de creche para cães, o otimizador calculou o custo da rota com base no custo por hora e no custo de penalidade para o pastor alemão ignorado.
AggregatedMetrics performedShipmentCount Número inteiro É o número de remessas roteirizadas. Nesse cenário de creche para cães, o motorista transporta dois cachorros.
travelDuration Duração É o tempo total gasto na viagem. Nesse cenário de creche para cães, o motorista viaja por 79 minutos.
waitDuration Duração Esse é o tempo total gasto em espera. Nesse cenário de creche para cães, o motorista fica ocioso por 6 minutos (356 segundos) na creche esperando que a janela de entrega seja aberta.
delayDuration Duração É a duração extra que você define usando atributos de transição, como o tempo reservado para estacionar. Para este cenário de creche para cães, você não definiu nenhum atributo de transição na solicitação, então esse valor é zero.
breakDuration Duração É o tempo total gasto em pausas. Para este cenário de creche para cães, não há intervalos.
visitDuration Duração É o tempo total gasto na realização de serviços durante as visitas. Para este cenário de creche para cães, são 20 minutos (5 minutos por visita para 4 visitas).
totalDuration Duração É a soma de todos os componentes de duração. Para este cenário de creche para cães, a duração total é de 105 minutos (6.296 segundos).
travelDistanceMeters Número inteiro É a distância total da viagem em metros. Nesse cenário de creche para cães, o motorista percorre uma distância total de 31,5 km.
performedShipmentPenaltyCostSum Duplo É a soma dos custos de penalidade de todas as remessas realizadas. Nesse cenário, o valor é 2000 porque o motorista pegou o Bernese e o Chihuahua (cada um com um custo de penalidade de 1000).
VehicleFullness maxFullness Número Essa é a maior taxa de utilização em todos os campos VehicleFullness. Para este cenário de creche para cães, o valor é 0,35 porque o motorista só opera a van por 105 minutos de todo o turno da manhã, que você definiu como 5 horas na solicitação.
activeSpan Número Essa é a proporção entre a duração total do turno do motorista e o horário de funcionamento do plano de trajeto. Um número menor significa que o motorista passa menos tempo do dia útil operando o veículo. Para este cenário de creche para cães, esse valor é 0,35, porque o motorista opera a van por 105 minutos durante o turno de 5 horas.
SkippedShipment index Número inteiro Esse é o índice baseado em zero da remessa na solicitação original. Nesse cenário, 2 representa o pastor alemão.
label String Esse é o rótulo que você especificou para a remessa na solicitação.
penaltyCost Número Esse é o custo de penalidade que você tem quando o otimizador ignora essa remessa. Ele corresponde ao penaltyCost especificado na solicitação.