Questa pagina descrive la vita di un piano di percorso utilizzando l'API Route Optimization, a partire dall'identificazione delle tue esigenze di routing fino a un piano di percorso integrato nel tuo sistema.
Seguendo le fasi del piano di percorso, puoi raggiungere i seguenti obiettivi:
- Mappa le operazioni della tua flotta: traduci la tua flotta fisica, i vincoli complessi e gli obiettivi commerciali in codice per l'API.
- Ottimizza i piani di percorso per la tua attività: scopri come perfezionare il tuo piano di percorso in modo che possa soddisfare i tuoi obiettivi e migliorare le tue operazioni quotidiane.
- Esegui il deployment in produzione: implementa il piano di percorso includendolo nelle operazioni quotidiane.
Il seguente diagramma mostra la vita di un piano di percorso.
La fase di implementazione di un piano di percorso si verifica quando integri per la prima volta l'API o quando i requisiti aziendali cambiano in modo significativo. Copre le fasi da 1 a 5.
La fase delle operazioni quotidiane è più leggera e il perfezionamento è minimo. Riguarda le fasi da 2 a 4.
Le fasi del ciclo di vita di un percorso sono le seguenti:
- Definisci l'ambito del problema: identifica e organizza obiettivi, risorse, attività e vincoli per avere un quadro completo delle tue operazioni prima di iniziare a utilizzare l'API.
- Mappa i tuoi dati: traduci la tua realtà aziendale in parametri API in modo che il piano di percorso rifletta il modo in cui vuoi che operi la tua flotta.
- Crea una richiesta e ottieni un piano di percorso: inserisci i tuoi dati nell'API e ottieni il piano di percorso ottimizzato.
- Perfeziona il piano di percorso:testa il piano di percorso e ripetilo modificando i vincoli e gli obiettivi per assicurarti che copra tutte le tue esigenze.
- Integra il piano di percorso: collega il piano di percorso ai tuoi sistemi esistenti per fornire una navigazione pratica.
Definisci l'ambito del problema
Prima di utilizzare l'API, devi organizzare i dettagli delle tue operazioni quotidiane in categorie di dati chiare. In questo modo, puoi iniziare il processo di implementazione con una chiara comprensione delle tue risorse e attività attuali, dei loro vincoli e degli obiettivi che vuoi raggiungere con la tua flotta.
Identifica le risorse e le attività
Un passaggio importante nella pianificazione del percorso è l'identificazione delle risorse e delle attività, ovvero i veicoli e le spedizioni.
| I veicoli | Le spedizioni |
|---|---|
|
|
Identifica i vincoli
I vincoli sono i limiti e le restrizioni su come puoi utilizzare i tuoi veicoli e su come devi gestire le spedizioni. Determinano la maggior parte delle tue operazioni e sono fondamentali per creare un piano di percorso ottimizzato.
I vincoli rientrano generalmente in due categorie:
| Vincoli rigidi | Vincoli flessibili |
|---|---|
| Questi sono limiti che non possono essere superati. Ad esempio, un camion non può trasportare un peso superiore alla sua capacità massima e un conducente non può effettuare un ritiro dopo la chiusura di un negozio. | Si tratta di preferenze che possono essere violate se necessario, di solito con un costo di penalità. Ad esempio, potresti preferire caricare un camion solo all'80% della capacità o consegnare prima di un orario target, ma non hai problemi a superare questi limiti per ottenere un percorso migliore. |
I vincoli più comuni includono:
- Limiti di capacità:il peso, il volume o il numero massimo di articoli che un veicolo può trasportare.
- Finestre temporali:le fasce orarie specifiche in cui una località è aperta per una visita o gli orari di turno specifici di un conducente.
- Costi: il costo di utilizzo di un veicolo o di mancata spedizione. Uno degli obiettivi principali dell'API è generare un piano di percorso conveniente.
- Pause del conducente: i periodi di riposo del conducente, in genere richiesti dalle leggi sul lavoro dopo un determinato numero di ore di lavoro.
Definisci i tuoi scopi commerciali
Una volta stabilite le risorse e le attività e i relativi limiti, è il momento di stabilire quali metriche sono più importanti per la tua attività. Questi obiettivi vanno di pari passo con i vincoli e ti aiutano a decidere cosa è più importante quando pianifichi un percorso.
Di seguito sono riportati alcuni esempi di scopi commerciali:
| Dimensioni della flotta | Distanza | Ora | Costo |
|---|---|---|---|
| Vuoi ridurre al minimo il numero di veicoli utilizzati o utilizzare l'intera flotta per terminare prima la giornata lavorativa? | Vuoi il percorso più breve per risparmiare carburante o preferisci un percorso più veloce che potrebbe essere più lungo a causa dell'utilizzo delle autostrade? | Vuoi ridurre al minimo le ore totali di lavoro o dare la priorità all'arrivo in orari specifici, il che può allungare il tempo trascorso sul percorso? | Vuoi ridurre al minimo le spese operative come stipendi e carburante o accettare costi più elevati per rispettare scadenze rigorose? |
Mappa i dati
Una volta raccolti i dati, mappali in modo che corrispondano alle proprietà dell'API. In questo modo, l'ottimizzatore dispone di tutte le informazioni necessarie per restituire un piano di percorso che tenga conto della realtà della tua attività.
Utilizza i parametri nelle tabelle successive per mappare le risorse, le attività, i vincoli e gli obiettivi che hai mappato nella sezione Definisci l'ambito del problema.
Mappatura delle variabili
| Concetto del mondo reale | Parametro API | Descrizione |
|---|---|---|
| Conducente o veicolo | model.vehicles[] |
Rappresenta un singolo veicolo del tuo parco veicoli. |
| Sedi dei centri di raccolta |
vehicles[].startWaypointvehicles[].endWaypoint
|
La località in cui il veicolo inizia e termina il suo percorso. |
| Il tuo orario di apertura |
model.globalStartTimemodel.globalEndTime
|
L'ora di inizio più presto e l'ora di fine più tardi per l'operazione dell'intera flotta. |
| Attività o pacchetto | model.shipments[] |
Rappresenta un job. Può essere un pickup, un delivery o entrambi. |
| Posizione dell'attività |
pickups[].arrivalWaypointdeliveries[].arrivalWaypoint
|
La posizione geografica in cui si svolge il lavoro. |
| Tempi di servizio |
pickups[].durationdeliveries[].duration
|
Il tempo trascorso nella località per completare l'attività (ad esempio, lo scarico), escluso il tempo di percorrenza. |
Mappatura dei vincoli
| Vincolo del mondo reale | Parametro API | Descrizione |
|---|---|---|
| Capacità del veicolo | vehicles[].loadLimits |
Imposta il limite rigido o flessibile per la capacità del veicolo. Se il valore loadDemand di una spedizione supera il limite rimanente, non viene assegnato. |
| Dimensioni del pacco | shipments[].loadDemands |
La quantità di capacità del veicolo consumata da una spedizione. |
| Limitazione per i veicoli | shipments[].allowedVehicleIndices |
Limita una spedizione in modo che possa essere ritirata o consegnata solo da veicoli o conducenti specifici. |
| Orari disponibili | shipments[].pickups[].timeWindows o shipments[].deliveries[].timeWindows |
Imposta gli orari disponibili per visitare una località. Se un veicolo non può arrivare entro questa finestra, la spedizione viene saltata. |
| Shift length limit | vehicles[].routeDurationLimit |
Imposta un limite rigido o flessibile per la durata del lavoro di un conducente specifico (ad esempio, un massimo di 8 ore), indipendentemente dall'ora di fine globale. |
| Pause del conducente | vehicles[].breakRule |
Applica regole di riposo specifiche, come pause obbligatorie dopo un certo numero di ore di lavoro. |
| Limitazioni stradali | vehicles[].travelMode |
Specifica la modalità di viaggio (ad esempio DRIVE o BICYCLE). In questo modo, il percorso viene limitato alle strade legali e vengono determinate le velocità utilizzate per calcolare i tempi di percorrenza. |
Mappatura degli obiettivi
| Obiettivo reale | Parametro API | Descrizione |
|---|---|---|
| Riduci al minimo le dimensioni del parco veicoli | vehicles[].fixedCost |
Applica un costo una tantum per l'utilizzo di un veicolo. Un costo fisso elevato impone a un percorso di dare la priorità all'utilizzo di un numero inferiore di veicoli rispetto all'aumento della distanza totale o dell'orario di lavoro. |
| Riduci al minimo la distanza | vehicles[].costPerKilometer |
Applica un costo per ogni chilometro percorso. Dà la priorità ai percorsi più brevi per risparmiare carburante e usura. |
| Riduci al minimo il tempo totale | vehicles[].costPerHour |
Applica un costo per ogni ora di attività del veicolo (inclusi i tempi di viaggio e di attesa). Dà la priorità al completamento più rapido. |
| Riduci al minimo il tempo di guida | vehicles[].costPerTraveledHour |
Applica un costo specifico per il tempo impiegato per lo spostamento. In questo modo, è possibile distinguere tra l'attesa nel traffico (costosa) e l'attesa a una fermata(potenzialmente più economica). |
| Assegna la priorità a determinate attività | shipments[].penaltyCost |
Applica un costo se una spedizione specifica viene saltata. Impostando un valore elevato, le attività critiche avranno la priorità su quelle facoltative. |
Crea la richiesta e ricevi una risposta
L'utilizzo dell'API Route Optimization per generare un piano di percorso prevede i seguenti passaggi:
- Configura l'ambiente: configura il progetto Google Cloud, abilita l'API e configura l'autenticazione. Per istruzioni, vedi Inizia. Devi seguire questo passaggio una sola volta.
- Invia la richiesta: crea il corpo della richiesta utilizzando la mappatura dei dati definita nella sezione precedente. Per informazioni su endpoint, intestazioni e formattazione delle richieste, consulta Effettua una richiesta API.
- Comprendi la risposta: una volta ricevuta una risposta dall'API, comprendi il piano di percorso e il significato di ogni parametro. Consulta Interpreta una risposta.
Perfeziona il piano del percorso
Tradurre la logistica reale in costi e vincoli dell'API è un'attività complessa. Il piano di percorso iniziale potrebbe non corrispondere ai tuoi scopi commerciali o alle aspettative dei conducenti. Il perfezionamento del piano di percorso è il processo iterativo di test dei percorsi restituiti e di aggiustamento dei parametri fino a trovare una configurazione che raggiunga i tuoi obiettivi.
Modifica obiettivi e vincoli
Se il piano di percorso generato non soddisfa le tue esigenze, puoi modificare alcuni parametri per ottenere risultati diversi. La restrizione o l'allentamento dei parametri modifica il modo in cui gli obiettivi in conflitto vengono risolti nel piano di percorso. L'allentamento dei parametri è un modo efficiente per scoprire i parametri che causano errori nei piani di percorso.
La tabella seguente elenca i problemi di routing più comuni e i parametri che puoi regolare per risolverli.
| Scenario | Parametro | Aggiustamento | Descrizione |
|---|---|---|---|
| Una spedizione importante viene saltata | shipments[].penaltyCost |
Aumenta il valore o aggiungi costi di penalità ad altre spedizioni | Se la spedizione è facoltativa, aumenta il costo della penalità per assegnarle la priorità. Se la spedizione è obbligatoria (non ha un costo di penalità), aggiungi i costi di penalità ad altre spedizioni meno critiche. In questo modo, diventano facoltativi, liberando tempo e capacità del veicolo per la spedizione importante. |
| Spedizione saltata a causa della tempistica | softStartTime/softEndTime |
Aggiungi finestre temporali flessibili | Le finestre temporali rigide eliminano le attività anche se sono in ritardo di un solo minuto. Le finestre flessibili consentono al conducente di arrivare leggermente in ritardo pagando un "costo" anziché non riuscire a completare l'assegnazione. |
| Spedizione saltata a causa del peso | loadLimits[].softMaxLoad e costPerUnitAbove |
Aggiungi richieste di carico flessibile | Consente a un veicolo di superare leggermente la sua capacità ideale (con una penalità) anziché lasciare un pacco. |
| Spedizione saltata a causa di un sovraccarico del parco risorse | model.vehicles[] o shipments[].timeWindows |
Aggiungi veicoli o allenta le finestre temporali | Se ci sono troppe spedizioni per la flotta attuale, soprattutto nelle ore di punta, aggiungi altri veicoli o amplia le finestre di consegna per distribuire il carico di lavoro. |
| Percorsi troppo lunghi o inefficienti | vehicles[].costPerKilometer/costPerHour |
Aggiungi costi o aumenta il loro valore | Indica all'API che il viaggio è costoso, incoraggiandola a eliminare le fermate distanti e isolate per creare percorsi più compatti per la flotta. |
| I turni dei conducenti sono troppo lunghi | vehicles[].routeDurationLimit o model.vehicles[] |
Aggiungi limiti di durata o aggiungi veicoli e limiti | Impone un limite massimo (ad esempio 8 ore) al tempo totale trascorso da un conducente sulla strada. L'aggiunta di veicoli da sola non ridurrà i percorsi, a meno che non applichi anche limiti di durata per forzare il solver a distribuire il workload su una flotta più grande. |
Aggiorna un piano di percorso
Spesso è necessario aggiornare un piano di percorso mantenendo invariata la base, ad esempio aggiungendo un ritiro alla pianificazione di un conducente attivo. Per farlo, utilizza i parametri di inserimento, che forniscono all'API un punto di partenza basato sulla soluzione precedente, consentendole di modificare il piano esistente anziché calcolarne uno nuovo da zero.
Di seguito sono riportati i diversi modi in cui puoi aggiornare un piano di route con i parametri di inserimento:
- Passa i percorsi di una risposta precedente nel campo
injectedFirstSolutionRoutesdella nuova richiesta. In questo modo, la ricerca di ottimizzazione viene velocizzata ed è utile per la ripianificazione prima dell'inizio delle operazioni giornaliere, ad esempio per l'integrazione delle spedizioni dell'ultimo minuto. - Controlla il grado di modifica utilizzando il campo
injectedSolutionConstraint. Questa opzione è utile quando le operazioni sono già in corso, in quanto ti consente di preservare la sequenza attuale del conducente o di correggere parti del piano che sono già state eseguite. - Assicurati che il percorso aggiornato rimanga assegnato al veicolo corretto impostando
interpretInjectedSolutionsUsingLabelssutrue. Questo è utile durante la sperimentazione quando si aggiungono o rimuovono spedizioni e veicoli, in quanto corrisponde ai percorsi utilizzando le etichette anziché gli indici. Ciò richiede che tutte le etichette dei veicoli e le etichette spedizione siano univoche.
Integra il tuo piano di percorso
Il piano di percorso finalizzato è un oggetto di dati che rappresenta una gestione ottimizzata delle risorse e delle attività, nel rispetto dei vincoli e degli obiettivi. Utilizza questo piano di percorso nelle tue operazioni quotidiane integrandolo nel tuo sistema. In genere, questo comporta la visualizzazione del piano di percorso per i gestori del parco risorse e l'invio di istruzioni passo passo ai conducenti.
Visualizzazione
Per consentire ai gestori del parco veicoli di verificare e monitorare il piano di percorso, puoi visualizzarlo nei seguenti modi:
Per consentire ai gestori del parco risorse di verificare e monitorare il piano di percorso, puoi visualizzarlo su una mappa della dashboard. A seconda della fase di sviluppo attuale, puoi visualizzare il piano di percorso nei seguenti modi:
- Esplora senza codice: puoi utilizzare l'app Route Optimization open source per vedere come l'API traduce i tuoi dati in percorsi fisici su una mappa. Questa applicazione web funge da strumento esplorativo che ti consente di creare scenari, ottimizzare i parametri dei vincoli e visualizzare i piani di percorso risultanti prima di scrivere il codice.
- Visualizza l'ordine delle visite:puoi mostrare la sequenza delle visite come punti numerati su una mappa per valutare i tuoi piani di ottimizzazione e invio nel tuo sistema. Per farlo, individua l'array
visitsall'interno di ogni percorso della risposta dell'API. Gli elementi di questo array sono ordinati esattamente come il conducente deve eseguirli. Puoi scorrere questo elenco, utilizzareshipmentIndexper recuperare le coordinate della posizione di ogni fermata e utilizzare la libreria di mappatura per visualizzare gli indicatori numerati sulla mappa in base al loro ordine nell'elenco. - Traccia il percorso fisico: puoi visualizzare il percorso esatto pianificato su una mappa per capire perché l'ottimizzatore ha scelto una sequenza specifica. Questa polilinea rappresenta il percorso previsto per la pianificazione e la valutazione, non il percorso in tempo reale seguito da un conducente. Imposta
populatePolylines: truenella richiesta per ottenere un campoencodedPolylineper ogni percorso e decodificalo utilizzando il metodogoogle.maps.geometry.encoding.decodePath()dell'API Maps JavaScript.
Assegnazione ai conducenti
Puoi integrare le indicazioni stradali passo passo nell'applicazione per i conducenti utilizzando l'SDK Navigation o fornire deep link all'app Google Maps per utenti finali.
- SDK Navigation: se hai un'applicazione per conducenti personalizzata, puoi integrare l'SDK Navigation per Android o iOS per le indicazioni stradali passo passo in-app.
Puoi integrare le informazioni sull'attività dalla risposta dell'API nel tuo sistema e utilizzare l'SDK per la navigazione. Per passare i percorsi dalla risposta dell'API all'SDK, imposta
populateTransitionPolylines: truenella richiesta. In questo modo viene generato unrouteTokenper ogni transizione nella risposta. - Fleet Engine: per una gestione avanzata del parco veicoli, puoi importare il piano di percorso generato dall'API in Fleet Engine per monitorare l'esecuzione del percorso in tempo reale. Mentre l'API fornisce una polilinea del percorso previsto per la valutazione, Fleet Engine associa la sequenza di visite pianificata al monitoraggio dei veicoli in tempo reale.