Parâmetros do modelo de custo

A mensagem OptimizeToursRequest (REST, gRPC) contém vários propriedades relacionadas a custos. Juntos, esses parâmetros de custo representam modelo de custo. O modelo de custo captura muitas das informações de alto nível objetivos de otimização, como:

  • Priorizar trajetos Vehicle mais rápidos em vez de trajetos mais curtos ou outros por perto
  • Decidir se o custo de exibição de uma Shipment vale o valor do Conclusão de Shipment
  • Realizar retiradas e entregas dentro de janelas de tempo somente quando isso for econômico
.

Veja um exemplo de solicitação com custos

{
  "model": {
    "globalStartTime": "2023-01-13T16:00:00-08:00",
    "globalEndTime": "2023-01-14T16:00:00-08:00",
    "shipments": [
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789456,
              "longitude": -122.390192
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 100.0
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789116,
              "longitude": -122.395080
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 5.0
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.795242,
              "longitude": -122.399347
            },
            "duration": "250s"
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 50.0
      }
    ],
    "vehicles": [
      {
        "endLocation": {
          "latitude": 37.794465,
          "longitude": -122.394839
        },
        "startLocation": {
          "latitude": 37.794465,
          "longitude": -122.394839
        },
        "costPerHour": 40.0,
        "costPerKilometer": 10.0
      }
    ]
  }
}
    

Vehicle propriedades de custo

A mensagem Vehicle (REST, gRPC) tem várias propriedades de custo:

  • Vehicle.cost_per_hour: representa o custo de operação de um veículo por hora. incluindo os tempos de trânsito, espera, visita e intervalo.
  • Vehicle.cost_per_kilometer: representa o custo por quilômetro percorrido por o veículo.
  • Vehicle.cost_per_traveled_hour: representa o custo de operar um veículo. apenas durante o trânsito, exceto nos períodos de espera, visita e intervalo.

Esses parâmetros de custo permitem que o otimizador faça a diferença de tempo em relação à distância percorrida compensações. Os custos gerados pela rota otimizada aparecem na resposta mensagem como metrics.costs:

À medida que costPerHour aumenta, o otimizador tenta encontrar rotas mais rápidas. que podem não ser as rotas mais curtas. Neste exemplo, o trajeto mais rápido acontece seja o mais curto, então as alterações nos parâmetros de custo têm pouco efeito.

Shipment propriedades de custo

A mensagem Shipment (REST, gRPC) também tem vários custos parâmetros:

  • Shipment.penalty_cost representa o custo incorrido ao ignorar o remessa
  • Shipment.VisitRequest.cost representa o custo de uma retirada ou entrega, usada principalmente para possibilitar o equilíbrio de custos entre várias coletas ou opções de entrega para uma única remessa.

Os parâmetros de custo Shipment usam as mesmas unidades sem dimensões que o custo Vehicle parâmetros. O custo incorrido após a conclusão de um Shipment exceder o custo da penalidade, o Shipment não está incluído no trajeto de nenhum Vehicle e aparece no skipped_shipments na mensagem de resposta.

ShipmentModel propriedades de custo

A mensagem ShipmentModel (REST, gRPC) inclui um custo único. propriedade, globalDurationCostPerHour. Esse custo é incorrido com base no valor tempo necessário para que todos os veículos concluam os ShipmentRoutes. Aumentando A globalDurationCostPerHour prioriza a conclusão antecipada de todos os envios.

Propriedades de custo da resposta da otimização de rotas

A mensagem OptimizeToursResponse (REST, gRPC) tem propriedades de custo. que representam os custos incorridos no processo de conclusão de ShipmentRoutes. As propriedades metrics.costs e metrics.totalCost representam o número de unidades de custo incorridas em todos os trajetos na resposta. Cada entrada routes tem Propriedades routeCosts e routeTotalCosts que representam os custos dessa para uma rota específica.

Veja a resposta ao exemplo de solicitação com os custos

{
  "routes": [
    {
      "vehicleStartTime": "2023-01-14T00:00:00Z",
      "vehicleEndTime": "2023-01-14T00:28:22Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2023-01-14T00:00:00Z",
          "detour": "0s"
        },
        {
          "shipmentIndex": 2,
          "isPickup": true,
          "startTime": "2023-01-14T00:02:30Z",
          "detour": "150s"
        },
        {
          "startTime": "2023-01-14T00:08:55Z",
          "detour": "150s"
        },
        {
          "shipmentIndex": 2,
          "startTime": "2023-01-14T00:21:21Z",
          "detour": "572s"
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-14T00:00:00Z"
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-14T00:02:30Z"
        },
        {
          "travelDuration": "235s",
          "travelDistanceMeters": 795,
          "waitDuration": "0s",
          "totalDuration": "235s",
          "startTime": "2023-01-14T00:05:00Z"
        },
        {
          "travelDuration": "496s",
          "travelDistanceMeters": 1893,
          "waitDuration": "0s",
          "totalDuration": "496s",
          "startTime": "2023-01-14T00:13:05Z"
        },
        {
          "travelDuration": "171s",
          "travelDistanceMeters": 665,
          "waitDuration": "0s",
          "totalDuration": "171s",
          "startTime": "2023-01-14T00:25:31Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 2,
        "travelDuration": "902s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "800s",
        "totalDuration": "1702s",
        "travelDistanceMeters": 3353
      },
      "routeCosts": {
        "model.vehicles.cost_per_kilometer": 33.53,
        "model.vehicles.cost_per_hour": 18.911111111111111
      },
      "routeTotalCost": 52.441111111111113
    }
  ],
  "skippedShipments": [
    {
      "index": 1
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 2,
      "travelDuration": "902s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "800s",
      "totalDuration": "1702s",
      "travelDistanceMeters": 3353
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2023-01-14T00:00:00Z",
    "latestVehicleEndTime": "2023-01-14T00:28:22Z",
    "totalCost": 57.441111111111113,
    "costs": {
      "model.vehicles.cost_per_kilometer": 33.53,
      "model.vehicles.cost_per_hour": 18.911111111111111,
      "model.shipments.penalty_cost": 5
    }
  }
}
    

Na resposta de exemplo, as metrics.costs de nível superior são:

{
  "metrics": {
    ...
    "costs": {
      "model.vehicles.cost_per_hour": 18.911111111111111,
      "model.vehicles.cost_per_kilometer": 33.53,
      "model.shipments.penalty_cost": 5
    }
  }
}

O valor model.shipments.penalty_cost representa o custo incorrido devido ao fretes pulados. A propriedade skippedShipments lista quais remessas foram pulado.

Neste exemplo, apenas model.shipments[1] na solicitação de exemplo é ignorada. model.shipments[1] tem um custo de penalidade de cinco unidades, o que corresponde ao total chave model.shipments.penalty_cost na resposta de exemplo. O envio está baixo penaltyCost em comparação com os 40.0 costPerHour e 10.0 da Vehicle costPerKilometer tornam mais econômico pular o envio do que concluí-lo.

Tópico avançado: custos e restrições flexíveis

Várias propriedades de mensagens OptimizeToursRequest (REST, gRPC) representam restrições flexíveis, que são restrições que incorrem em custo quando não pode ser atendida.

Por exemplo, as restrições do veículo LoadLimit (REST, gRPC) têm softMaxLoad e costPerUnitAboveSoftMax. Juntos, eles geram custo proporcional às unidades de carga que excedem softMaxLoad, permitindo que limite seja excedido somente se fizer sentido do ponto de vista de custos.

Da mesma forma, as restrições TimeWindow (REST, gRPC) têm soft_start_time e soft_end_time, com as cost_per_hour_before_soft_start_time e cost_per_hour_after_soft_end_time que são incorridos com base em quão cedo ou tarde o evento restrito ocorre com em relação ao TimeWindow.

Como acontece com todos os parâmetros do modelo de custo, os custos de restrição flexível são expressos na mesmas unidades sem dimensões que outros parâmetros de custo.

LoadLimit restrições são abordadas em detalhes na Demandas e limites de carga. TimeWindow restrições foram abordadas em detalhes em Restrições da janela de tempo de retirada e entrega.