L'API Route Optimization restituisce i percorsi per i veicoli nella richiesta corrispondente. Le spedizioni vengono assegnate ai veicoli o possono essere ignorate a seconda delle proprietà della richiesta.
Un messaggio OptimizeToursResponse (REST, gRPC) ha due proprietà di primo livello principali:
routes[]sono i percorsi di ciascun veicolo con le spedizioni assegnate. OgniRoutecontiene metriche che riflettono le proprietà del singolo percorso.metricssono metriche aggregate per l'intera risposta, per tutti i veicoli e i piani di itinerario. Le metriche di primo livello contengono le stesse proprietà delle metriche per itinerario, con valori aggregati per tutti gli itinerari.
Alcune proprietà potrebbero non essere sempre compilate a seconda dei risultati dell'ottimizzazione:
skippedShipments[]elenca le spedizioni che non vengono eseguite da nessun veicolo. Una spedizione può essere saltata se non può essere eseguita entro vincoli specificati o se il costo per l'esecuzione della spedizione supera il costo della penale. Ad esempio, se il ritiro o la consegna di una spedizione ha untimeWindowmolto ridotto, potrebbe non essere possibile o conveniente per un veicolo eseguire la visita durante la finestra temporale richiesta.validationErrors[]specifica gli errori che rendono la richiesta non valida o impossibile da risolvere quandosolvingModedella richiesta è impostato suVALIDATE_ONLY. Nella normale modalitàDEFAULT_SOLVE, gli errori di convalida verranno visualizzati in un messaggio di errore anziché nel corpo della risposta. Tieni presente che la modalità di risoluzioneVALIDATE_ONLYpuò segnalare più errori contemporaneamente, il che è utile per eseguire rapidamente il debug delle richieste.
Proprietà route
Ogni voce routes[] è un messaggio ShipmentRoute (REST, gRPC). Ogni ShipmentRoute rappresenta l'assegnazione del percorso per un determinato veicolo della richiesta. Le proprietà importanti di ShipmentRoute correlate al corrispondente
Vehicle includono:
vehicleIndexè l'indice a partire da zero diVehiclenel messaggio di richiesta corrispondente. Le risposte REST omettono questa proprietà quando il valore è zero.vehicleStartTimeè l'ora in cui il veicolo deve iniziare il percorso.vehicleEndTimeè l'ora prevista per il termine del percorso del veicolo.
In una risposta, routes avrà il seguente aspetto:
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:38:42Z",
"visits": [
...
],
"transitions": [
...
],
"metrics": {
...
},
...
}
],
...
}
Ogni ShipmentRoute include un elenco ordinato di visits che il veicolo completerà. Ogni Visit (REST, gRPC) rappresenta un VisitRequest
(REST, gRPC) della richiesta corrispondente. Le proprietà Visit
importanti includono:
shipmentIndexè l'indice a partire da zero della spedizione a cui appartiene questa visita nella richiesta corrispondente.isPickupè true quando una visita è un ritiro e false quando è una consegna. Le risposte REST omettono questa proprietà quando il valore è false.visitRequestIndexè l'indice a zero diVisitRequestdaShipment.pickupsoShipment.deliveriesnella richiesta corrispondente cheVisitrappresenta. Le risposte REST omettono questa proprietà quando il valore è zero.startTimeè l'ora prevista per l'inizio della visita.loadDemandsmappa il tipo di carico all'importo del carico richiesto per completare ilVisit. Gli importi del carico sono negativi per le visite di consegna e rappresentano il carico che viene rimosso dal veicolo.
Un esempio di Visit è il seguente:
{
"routes": [
{
...
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
...
],
},
...
],
...
}
Ogni ShipmentRoute include un elenco ordinato di transitions che rappresentano i viaggi tra visits per un determinato veicolo. Le proprietà importanti dei messaggi Transition
(REST, gRPC) includono:
startTimeè l'ora in cui il veicolo inizierà a eseguire la transizione.travelDurationè la durata per cui il veicolo deve percorrere la tratta per completare la transizione.travelDistanceMetersè la distanza in metri che il veicolo deve percorrere per completare la transizione.trafficInfoUnavailableindica se i dati sul traffico sono disponibili per la transizione.waitDurationindica il tempo di inattività del veicolo in attesa prima di poter avviare il prossimoVisit. Questo può verificarsi a causa delstart_timedelVisitche segue.totalDurationè la durata totale della transizione, inclusi i tempi di percorrenza, attesa, interruzione e ritardo.vehicleLoadsmappa il tipo di carico alla quantità di carico trasportata dal veicolo durante questa transizione.
Un esempio di Transition è il seguente:
{
"routes": [
{
...
"transitions": [
...
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
...
],
...
}
],
...
}
Per ulteriori informazioni sulla relazione tra vists e transitions, consulta
Ottimizzazione dell'ordine di ritiro e consegna e la documentazione di riferimento di ShipmentRoute (REST, gRPC). Per ulteriori informazioni sulle proprietà routePolyline e routeToken di un messaggio Transition, consulta Polilinee di transizione e token percorso.
Proprietà delle metriche
Il messaggio Metrics (REST, gRPC) riassume l'intera soluzione.
Alcune proprietà importanti di Metrics includono:
totalCostè il costo totale sostenuto per completare i percorsi. Scopri di più sui costi in Parametri del modello di costo.usedVehicleCountè il numero totale di veicoli utilizzati nella soluzione. I veicoli possono avere percorsi vuoti quando l'ottimizzatore determina che il loro utilizzo non è necessario.skippedMandatoryShipmentCountè il numero di spedizioni ignorate che sono "obbligatorie". Una spedizione obbligatoria non specifica unpenaltyCostche viene applicato se la spedizione viene saltata. Le importazioni obbligatorie possono comunque essere saltate se il loro rendimento non è fattibile in base a vincoli specifici. Scopri di più sui costi in Parametri del modello di costo.
Le metriche aggiuntive vengono registrate come messaggi AggregatedMetrics (REST,
gRPC). Il tipo di messaggio AggregatedMetrics viene utilizzato per la proprietà Metrics.aggregatedRouteMetrics e per la proprietà ShipmentRoute.metrics. La proprietà Metrics.aggregatedRouteMetrics contiene le metriche aggregate per tutti i ShipmentRoute in OptimizeToursResponse. Ogni proprietà ShipmentRoute.metrics contiene le metriche per quel ShipmentRoute specifico.
Le proprietà AggregatedMetrics importanti includono:
performedShipmentCountè il numero di spedizioni effettuate dai veicoli lungo l'intero percorso.travelDurationè il tempo totale che i veicoli trascorrono in transito mentre completano i loro percorsi.waitDurationè il tempo totale che i veicoli trascorrono in attesa durante il completamento delle loro corse.delayDurationè il tempo di ritardo totale dei veicoli. Di solito è zero, a meno che nella richiesta non vengano utilizzatiTransitionAttributes.breakDurationè il tempo totale che i veicoli trascorrono in pausa durante il completamento dei loro percorsi.visitDurationè il tempo totale impiegato dai veicoli per effettuare le visite durante il completamento dei percorsi. Si tratta in pratica della somma di tutti i valoriVisitRequest.durationperVisitRequestcorrispondenti aVisitassegnati al veicolo applicabile.totalDurationè la durata totale necessaria per completare i percorsi dei veicoli.travelDistanceMetersè la distanza totale percorsa dai veicoli durante il completamento dei loro percorsi.maxLoadsmappa i tipi di carico al volume massimo trasportato dai veicoli in qualsiasi punto dei loro percorsi.
Un messaggio Metrics di esempio è simile al seguente:
{
"routes": [
...
],
"metrics": {
"aggregatedRouteMetrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"usedVehicleCount": 1,
"earliestVehicleStartTime": "2024-02-13T00:00:00Z",
"latestVehicleEndTime": "2024-02-13T00:38:42Z",
"totalCost": 18.603,
"costs": {
"model.vehicles.cost_per_kilometer": 18.603
}
}
}
Esempio completo
Un esempio completo di risposta per la richiesta di Creare una richiesta è simile al seguente:
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:38:42Z",
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
{
"startTime": "2024-02-13T00:19:31Z",
"detour": "0s"
}
],
"transitions": [
{
"travelDuration": "0s",
"waitDuration": "0s",
"totalDuration": "0s",
"startTime": "2024-02-13T00:00:00Z"
},
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
{
"travelDuration": "1151s",
"travelDistanceMeters": 9599,
"waitDuration": "0s",
"totalDuration": "1151s",
"startTime": "2024-02-13T00:19:31Z"
}
],
"metrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"routeCosts": {
"model.vehicles.cost_per_kilometer": 18.603
},
"routeTotalCost": 18.603
}
],
"metrics": {
"aggregatedRouteMetrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"usedVehicleCount": 1,
"earliestVehicleStartTime": "2024-02-13T00:00:00Z",
"latestVehicleEndTime": "2024-02-13T00:38:42Z",
"totalCost": 18.603,
"costs": {
"model.vehicles.cost_per_kilometer": 18.603
}
}
}