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