Il messaggio OptimizeToursRequest
(REST, gRPC) contiene una serie di
proprietà relative ai
costi. Insieme, questi parametri di costo rappresentano il
modello di costo della richiesta. Il modello di costo acquisisce molti degli scopi di ottimizzazione di alto livello della richiesta, ad esempio:
- Dare la priorità ai percorsi
Vehicle
più veloci rispetto a quelli più brevi o viceversa - Decidere se il costo per pubblicare un
Shipment
vale il valore del completamento delShipment
- Eseguire ritiri e consegne entro le finestre temporali solo quando ciò è 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à costo
Il messaggio Vehicle
(REST, gRPC) ha diverse proprietà di costo:
Vehicle.cost_per_hour
: rappresenta il costo di gestione di un veicolo all'ora, inclusi i tempi di transito, attesa, visita e pausa.Vehicle.cost_per_kilometer
: rappresenta il costo per chilometro percorso dal veicolo.Vehicle.cost_per_traveled_hour
: rappresenta il costo di gestione di un veicolo solo durante il transito, esclusi i tempi di attesa, visita e pausa.
Questi parametri di costo consentono all'ottimizzatore di fare compromessi tra tempo e distanza percorsa. I costi sostenuti dal percorso ottimizzato vengono visualizzati nel messaggio di risposta come metrics.costs
:
Man mano che costPerHour
aumenta, l'ottimizzatore tenta di trovare percorsi più veloci che potrebbero non essere i percorsi più brevi. In questo esempio il percorso più veloce
è anche il più breve, pertanto le modifiche ai parametri di costo hanno scarso effetto.
Shipment
proprietà costo
Il messaggio Shipment
(REST, gRPC) ha anche diversi parametri di costo:
Shipment.penalty_cost
indica il costo sostenuto per saltare la spedizione.Shipment.VisitRequest.cost
indica il costo di un ritiro o di una consegna specifici, utilizzato principalmente per consentire il confronto dei costi tra più opzioni di ritiro o consegna per una singola spedizione.
I parametri di costo Shipment
utilizzano le stesse unità senza dimensioni di Vehicle
parametri di costo. Se il costo sostenuto per completare un Shipment
supera il costo della penale, il Shipment
non è incluso nel percorso di nessun Vehicle
, ma viene visualizzato nell'elenco skipped_shipments
nel messaggio di risposta.
ShipmentModel
proprietà di costo
Il messaggio ShipmentModel
(REST, gRPC) include una singola proprietà di costo, globalDurationCostPerHour
. Questo costo viene addebitato in base al tempo totale
necessario a tutti i veicoli per completare i ShipmentRoute
. Se aumenti
globalDurationCostPerHour
, dai la priorità al completamento anticipato di tutte le spedizioni.
Proprietà dei costi della risposta di Route Optimization
Il messaggio OptimizeToursResponse
(REST, gRPC) ha proprietà di costo
che rappresentano i costi sostenuti durante la procedura 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
routeCosts
e routeTotalCosts
proprietà che rappresentano i costi per quella
rotta specifica.
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 sostenuto a causa delle spedizioni saltate. La proprietà skippedShipments
elenca le importazioni saltate.
In questo esempio, viene ignorato solo model.shipments[1]
nella richiesta di esempio.
model.shipments[1]
ha un costo di penalità di 5 unità, che corrisponde alla chiave totalemodel.shipments.penalty_cost
nella risposta di esempio. Il basso valore della spedizione
penaltyCost
rispetto ai 40,0 costPerHour
e 10,0
costPerKilometer
di Vehicle
rende più conveniente saltare la spedizione che completarla.
Argomento avanzato: costi e vincoli flessibili
Diverse proprietà dei messaggi OptimizeToursRequest
(REST, gRPC) rappresentano vincoli flessibili, ovvero vincoli che comportano un costo quando non possono essere soddisfatti.
Ad esempio, i vincoli dei veicoli LoadLimit
(REST, gRPC) hanno proprietà softMaxLoad
e costPerUnitAboveSoftMax
. Insieme, queste hanno un costo proporzionale alle unità di carico che superano softMaxLoad
, consentendo di superare il limite solo se ciò ha senso dal punto di vista dei costi.
Allo stesso modo, i vincoli TimeWindow
(REST, gRPC) hanno proprietà soft_start_time
e soft_end_time
, con le corrispondenti proprietà 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, rispetto a TimeWindow
.
Come per tutti i parametri del modello di costo, i costi dei vincoli flessibili vengono espressi nelle stesse unità senza dimensioni degli altri parametri di costo.
I vincoli LoadLimit
sono trattati in dettaglio in
Carichi e limiti. I vincoli TimeWindow
sono trattati in dettaglio
in Vincoli relativi alla finestra temporale di ritiro e consegna.