Parametri del modello di costo

Il messaggio OptimizeToursRequest (REST, gRPC) contiene un certo numero di proprietà correlate a costi. Insieme, questi parametri di costo rappresentano modello di costo. Il modello di costo acquisisce molti dei dati di alto livello obiettivi di ottimizzazione, quali:

  • Dai la priorità ai percorsi Vehicle più veloci su percorsi più brevi o viceversa intorno a
  • Decidere se il costo di pubblicazione di un Shipment vale il valore del Completamento di Shipment
  • Effettuare ritiri e consegne entro le finestre temporali solo in questo caso conveniente

Visualizza un esempio di richiesta con i costi

{
  "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 proprietà di costo

Il messaggio Vehicle (REST, gRPC) ha diverse proprietà di costo:

  • Vehicle.cost_per_hour: rappresenta il costo orario di utilizzo di un veicolo inclusi i tempi di transito, di attesa, di visita e di pausa.
  • Vehicle.cost_per_kilometer: rappresenta il costo per chilometro percorso del veicolo.
  • Vehicle.cost_per_traveled_hour: rappresenta il costo di gestione di un veicolo solo mentre sono in transito, esclusi i tempi di attesa, di visita e di pausa.

Questi parametri di costo consentono all'ottimizzatore di confrontare il tempo con la distanza percorsa compromessi. I costi sostenuti dal percorso ottimizzato vengono visualizzati nella risposta messaggio come metrics.costs:

Con l'aumento di costPerHour, l'ottimizzatore tenta di trovare percorsi più veloci che potrebbero non essere le route più brevi. In questo esempio il percorso più veloce si verifica più breve, pertanto le modifiche ai parametri di costo hanno uno scarso effetto.

Shipment proprietà di costo

Anche il messaggio Shipment (REST, gRPC) ha diversi costi parametri:

  • Shipment.penalty_cost rappresenta il costo sostenuto saltando il campo spedizione.
  • Shipment.VisitRequest.cost rappresenta il costo di un determinato ritiro o consegna a domicilio, utilizzata principalmente per fare in modo che i costi tra ritiro o consegna di più articoli le opzioni di consegna per una singola spedizione.

Shipment parametro di costo utilizza le stesse unità senza dimensioni del costo Vehicle parametri. Il costo sostenuto per completare una Shipment supera il costo della penalità, Shipment non è incluso in nessun percorso di Vehicle e compare invece nel Elenco skipped_shipments nel messaggio di risposta.

ShipmentModel proprietà di costo

Il messaggio ShipmentModel (REST, gRPC) include un singolo costo proprietà, globalDurationCostPerHour. Questo costo viene sostenuto in base al totale tempo necessario a tutti i veicoli per completare gli ShipmentRoute. In aumento globalDurationCostPerHour dà la priorità al completamento anticipato di tutte le spedizioni.

Proprietà dei costi della risposta di ottimizzazione del percorso

Il messaggio OptimizeToursResponse (REST, gRPC) ha proprietà di costo che rappresentano i costi sostenuti nel processo di completamento dei ShipmentRoute. Le proprietà metrics.costs e metrics.totalCost rappresentano il numero di unità di costo sostenute in tutte le route nella risposta. Ogni voce routes ha Proprietà routeCosts e routeTotalCosts che rappresentano i costi un percorso specifico.

Visualizza una risposta alla richiesta di esempio con i costi

{
  "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
    }
  }
}
    

Nella risposta di esempio, i metrics.costs di primo livello sono:

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

Il valore model.shipments.penalty_cost rappresenta il costo dovuto a le spedizioni saltate. La proprietà skippedShipments elenca le spedizioni saltata.

In questo esempio, solo model.shipments[1] nella richiesta dell'esempio viene ignorato. model.shipments[1] prevede un costo della penalità di 5 unità, che corrisponde al costo totale Chiave model.shipments.penalty_cost nella risposta di esempio. La spedizione è in esaurimento penaltyCost rispetto ai 40,0 costPerHour e 10,0 di Vehicle costPerKilometer rendono più conveniente saltare la spedizione rispetto a completarlo.

Argomento avanzato: costi e vincoli flessibili

Diverse proprietà dei messaggi OptimizeToursRequest (REST, gRPC) rappresentano i vincoli flessibili, ovvero vincoli che comportano un costo quando non può essere soddisfatto.

Ad esempio, i vincoli LoadLimit del veicolo (REST, gRPC) hanno Proprietà softMaxLoad e costPerUnitAboveSoftMax. Insieme, questi eventi in modo proporzionale alle unità di carico che superano softMaxLoad, consentendo limite da superare solo se questo ha senso dal punto di vista dei costi.

Analogamente, i vincoli TimeWindow (REST, gRPC) Proprietà soft_start_time e soft_end_time, con i corrispondenti cost_per_hour_before_soft_start_time e cost_per_hour_after_soft_end_time sostenute in base all'anticipo o al ritardo dell'evento vincolato, in merito al TimeWindow.

Come per tutti i parametri del modello di costo, i costi dei vincoli flessibili sono espressi nel le stesse unità senza dimensioni degli altri parametri di costo.

I vincoli LoadLimit vengono gestiti in dettaglio in Carica richieste e limiti. I vincoli TimeWindow vengono gestiti in dettaglio in Vincoli per i tempi di ritiro e consegna.