Questa pagina descrive il ciclo di vita di un piano di route utilizzando l'API Route Optimization, a partire dall'identificazione delle esigenze di routing fino a un piano di route integrato nel sistema.
Quando segui le fasi del piano di route, puoi raggiungere i seguenti obiettivi:
- Mappare le operazioni della flotta: traduci la flotta fisica, i vincoli complessi e gli obiettivi commerciali in codice per l'API.
- Ottimizzare i piani di route per la tua attività: scopri come perfezionare il piano di route in modo che possa soddisfare i tuoi obiettivi e migliorare le operazioni quotidiane.
- Eseguire il deployment in produzione: implementa il piano di route includendolo nelle operazioni quotidiane.
Il seguente diagramma mostra il ciclo di vita di un piano di route.
La fase di implementazione di un piano di route 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. Copre le fasi da 2 a 4.
Le fasi del ciclo di vita di una route sono le seguenti:
- Definisci l'ambito del problema: identifica e organizza gli obiettivi, le risorse, le attività e i vincoli per avere un quadro completo delle operazioni prima di iniziare a utilizzare l'API.
- Mappa i dati: traduci la realtà aziendale in parametri API in modo che il piano di route rifletta il modo in cui vuoi che la tua flotta operi.
- Crea una richiesta e ottieni un piano di route: inserisci i dati nell'API e ottieni il piano di route ottimizzato.
- Perfeziona il piano di route: testa il piano di route e modificalo regolando i vincoli e gli obiettivi per assicurarti che soddisfi tutte le tue esigenze.
- Integra il piano di route: collega il piano di route ai sistemi esistenti per fornire indicazioni di navigazione utili.
Definisci l'ambito del problema
Prima di utilizzare l'API, devi organizzare i dettagli delle operazioni quotidiane in categorie di dati chiare. In questo modo puoi iniziare la procedura di implementazione con chiarezza sulle risorse e sulle attività attuali, sui vincoli e sugli obiettivi che vuoi raggiungere con la tua flotta.
Identifica le risorse e le attività
Un passaggio importante nella pianificazione del piano di route è l'identificazione delle risorse e delle attività, ovvero dei veicoli e delle spedizioni.
| I veicoli | Le spedizioni |
|---|---|
|
|
Identifica i vincoli
I vincoli sono i limiti e le restrizioni su come puoi utilizzare i veicoli e su come devi gestire le spedizioni. Determinano la maggior parte delle operazioni e sono fondamentali per la creazione di un piano di route ottimizzato.
In genere, i vincoli rientrano in due categorie:
| Vincoli rigidi | Vincoli flessibili |
|---|---|
| Si tratta di limiti che non possono essere superati. Ad esempio, un camion non può trasportare più peso della 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, in genere a 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 ti dispiace superare questi limiti per ottenere una route migliore. |
I vincoli comuni includono:
- Limiti di capacità: il peso, il volume o il numero massimo di articoli che un veicolo può trasportare.
- Finestre temporali: gli intervalli di tempo specifici in cui una località è aperta per una visita o gli orari di lavoro specifici di un conducente.
- Costi: il costo di gestione di un veicolo o di salto di una spedizione. Uno degli obiettivi principali dell'API è generare un piano di route conveniente.
- Pause dei conducenti: periodi di riposo dei conducenti in genere richiesti dalle leggi sul lavoro dopo un determinato numero di ore di lavoro.
Stabilisci gli scopi commerciali
Una volta stabilite le risorse e le attività e le relative limitazioni, è 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 una route.
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 la giornata lavorativa prima? | Vuoi il percorso più breve per risparmiare carburante o preferisci una route più veloce che potrebbe essere più lunga a causa dell'utilizzo delle autostrade? | Vuoi ridurre al minimo le ore totali lavorate o dare la priorità all'arrivo in orari specifici che possono allungare il tempo trascorso sulla route? | 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 per restituire un piano di route che tenga conto della realtà aziendale.
Utilizza i parametri nelle tabelle successive per mappare le risorse, le attività, i vincoli, e gli obiettivi mappati nella sezione Definisci l'ambito del problema.
Legenda delle variabili
| Concetto del mondo reale | Parametro API | Descrizione |
|---|---|---|
| Conducente o veicolo | model.vehicles[] |
Rappresenta un singolo veicolo della flotta. |
| Località del deposito |
vehicles[].startWaypointvehicles[].endWaypoint
|
La località in cui il veicolo inizia e termina la route. |
| 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 pacco | model.shipments[] |
Rappresenta un job. Può essere un pickup, una delivery o entrambi. |
| Località dell'attività |
pickups[].arrivalWaypointdeliveries[].arrivalWaypoint
|
La posizione geografica in cui si svolge il job. |
| Tempo 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 assegnata. |
| Dimensioni del pacco | shipments[].loadDemands |
La quantità di capacità del veicolo consumata da una spedizione. |
| Restrizione del veicolo | 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. |
| Limite di durata del turno | vehicles[].routeDurationLimit |
Imposta un limite rigido o flessibile alla durata del lavoro di un conducente specifico (ad esempio, massimo 8 ore), indipendentemente dall'ora di fine globale. |
| Pause dei conducenti | vehicles[].breakRule |
Applica regole di riposo specifiche, ad esempio 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, la route è limitata alle strade legali e vengono determinate le velocità utilizzate per calcolare i tempi di percorrenza. |
Mappatura degli obiettivi
| Obiettivo del mondo reale | Parametro API | Descrizione |
|---|---|---|
| Riduci al minimo le dimensioni della flotta | vehicles[].fixedCost |
Applica un costo una tantum per l'utilizzo di un veicolo. Un costo fisso elevato impone a una route di dare la priorità all'utilizzo di un numero inferiore di veicoli rispetto all'aumento della distanza totale o del tempo di lavoro. |
| Riduci al minimo la distanza | vehicles[].costPerKilometer |
Applica un costo per ogni chilometro percorso. Dà la priorità alle route 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 il tempo di percorrenza e i tempi 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 trascorso in movimento. In questo modo si distingue tra il tempo trascorso nel traffico (costoso) e l'attesa a una fermata(potenzialmente più economica). |
| Dai la priorità a determinate attività | shipments[].penaltyCost |
Applica un costo se una spedizione specifica viene saltata. Se imposti un valore elevato, le attività critiche avranno la priorità rispetto a quelle facoltative. |
Crea la richiesta e ottieni una risposta
L'utilizzo dell'API Route Optimization per generare un piano di route prevede i seguenti passaggi:
- Configura l'ambiente: configura il progetto cloud Google, attiva l'API e configura l'autenticazione. Per istruzioni, consulta la sezione Guida introduttiva. Devi eseguire 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 la sezione Effettuare una richiesta API richiesta.
- Comprendi la risposta: una volta ricevuta una risposta dall'API, comprendi il piano di route e il significato di ogni parametro. Consulta la sezione Interpretare una risposta.
Perfeziona il piano di route
La traduzione della logistica del mondo reale in costi e vincoli API è un'attività complessa. Il piano di route iniziale potrebbe non corrispondere agli obiettivi commerciali o alle aspettative dei conducenti. Il perfezionamento del piano di route è il processo iterativo di test delle route restituite e di regolazione dei parametri fino a trovare una configurazione che raggiunga i tuoi obiettivi.
Regola gli obiettivi e i vincoli
Se il piano di route generato non soddisfa le tue esigenze, puoi modificare determinati parametri per ottenere risultati diversi. La limitazione o l'allentamento dei parametri modifica il modo in cui vengono risolti gli obiettivi in conflitto nel piano di route e l'allentamento dei parametri è un modo efficace per scoprire i parametri che causano errori nei piani di route.
La seguente tabella elenca i problemi di routing comuni e i parametri che puoi regolare per risolverli.
| Scenario | Parametro | Aggiustamento | Descrizione |
|---|---|---|---|
| Una spedizione importante viene saltata | shipments[].penaltyCost |
Aumenta il suo valore o aggiungi costi di penalità ad altre spedizioni | Se la spedizione è facoltativa, aumenta il costo di penalità per darle la priorità. Se la spedizione è obbligatoria (non ha costi di penalità), aggiungi costi di penalità ad altre spedizioni meno critiche. In questo modo diventano facoltative, il che libera tempo e capacità del veicolo per la spedizione importante. |
| Spedizione saltata a causa dei tempi | softStartTime / softEndTime |
Aggiungi finestre temporali flessibili | Le finestre temporali rigide eliminano le attività che sono in ritardo anche di un solo minuto. Le finestre flessibili consentono al conducente di arrivare leggermente fuori programma pagando un "costo" anziché non riuscire ad assegnare l'attività. |
| Spedizione saltata a causa del peso | loadLimits[].softMaxLoad e costPerUnitAbove |
Aggiungi richieste di carico flessibili | Consente a un veicolo di superare leggermente la sua capacità ideale (con una penalità) anziché lasciare un pacco. |
| Spedizione saltata a causa del sovraccarico della flotta | model.vehicles[] o shipments[].timeWindows |
Aggiungi veicoli o allenta le finestre temporali | Se ci sono troppe spedizioni per la flotta attuale, soprattutto durante le ore di punta, aggiungi altri veicoli o amplia le finestre di consegna per distribuire il carico di lavoro. |
| Le route sono troppo lunghe 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 route più strette per la flotta. |
| I turni dei conducenti sono troppo lunghi | vehicles[].routeDurationLimit o model.vehicles[] |
Aggiungi limiti di durata o aggiungi veicoli e limiti | Applica un limite rigido (ad esempio, 8 ore) al tempo totale trascorso da un conducente sulla strada. L'aggiunta di soli veicoli non accorcia le route a meno che non applichi anche limiti di durata per forzare il risolutore a distribuire il carico di lavoro sulla flotta più grande. |
Aggiorna un piano di route
Spesso devi aggiornare un piano di route mantenendo la base invariata, 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 diversi modi per aggiornare un piano di route con i parametri di inserimento:
- Passa le route di una risposta precedente nel campo
injectedFirstSolutionRoutesdella nuova richiesta. In questo modo si velocizza la ricerca di ottimizzazione ed è utile per la riprogrammazione prima dell'inizio delle operazioni quotidiane, 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 conservare la sequenza corrente del conducente o di correggere le parti del piano già eseguite. - Assicurati che la route aggiornata rimanga assegnata al veicolo corretto impostando
interpretInjectedSolutionsUsingLabelssutrue. Questa opzione è utile durante la sperimentazione quando aggiungi o rimuovi spedizioni e veicoli, in quanto associa le route utilizzando le etichette anziché gli indici. Per questo è necessario che tutte le etichette di veicoli e spedizioni siano univoche.
Integra il piano di route
Il piano di route finalizzato è un oggetto dati che rappresenta una gestione ottimizzata delle risorse e delle attività, rispettando i vincoli e gli obiettivi. Utilizza questo piano di route nelle operazioni quotidiane integrandolo nel tuo sistema. In genere, questo comporta la visualizzazione del piano di route per i responsabili della flotta e l'invio di indicazioni passo passo ai conducenti.
Visualizzazione
Per consentire ai responsabili della flotta di verificare e monitorare il piano di route, puoi visualizzarlo nei seguenti modi:
Per consentire ai responsabili della flotta di verificare e monitorare il piano di route, puoi visualizzarlo su una mappa della dashboard. A seconda della fase di sviluppo attuale, puoi visualizzare il piano di route nei seguenti modi:
- Esplora senza codice: puoi utilizzare l'app open source Route Optimization app per vedere come l' API traduce i tuoi dati in percorsi fisici su una mappa. Questa applicazione web funge da strumento di esplorazione che ti consente di creare scenari, ottimizzare i parametri dei vincoli e visualizzare i piani di route risultanti prima di scrivere qualsiasi codice.
- Mostra l'ordine delle visite: puoi mostrare la sequenza delle visite come punti numerati su una mappa per valutare i piani di ottimizzazione e spedizione nel tuo sistema. Per farlo, individua l'array
visitsall'interno di ogni route della risposta dell'API. Gli elementi di questo array sono ordinati esattamente come il conducente dovrebbe eseguirli. Puoi scorrere questo elenco, utilizzareshipmentIndexper recuperare le coordinate della località di ogni fermata e utilizzare la libreria di mappatura per visualizzare indicatori numerati sulla mappa in base al loro ordine nell'elenco. - Disegna la route fisica: puoi visualizzare il percorso pianificato esatto 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 la route in tempo reale percorsa da un conducente. Imposta
populatePolylines: truenella richiesta per ottenere un campoencodedPolylineper ogni route e decodificalo utilizzando il metodogoogle.maps.geometry.encoding.decodePath()dell'API Maps JavaScript.
Invia ai conducenti
Puoi integrare le indicazioni passo passo nella tua applicazione per conducenti utilizzando l'SDK Navigation o fornire deep link all'app per utenti finali Google Maps.
- SDK Navigation: se hai un'applicazione per conducenti personalizzata, puoi integrare
l'SDK Navigation per Android o
iOS per indicazioni passo passo in-app.
Puoi integrare le informazioni sulle attività dalla risposta dell'API nel tuo sistema e utilizzare l'SDK per la navigazione. Per passare le route dalla risposta dell'API all'SDK, imposta
populateTransitionPolylines: truenella richiesta. In questo modo viene generato unrouteTokenper ogni transizione nella risposta. - Fleet Engine: per la gestione avanzata della flotta, puoi importare il piano di route generato dall' API in Fleet Engine per monitorare l'esecuzione della route in tempo reale. Sebbene l'API fornisca una polilinea del percorso previsto per la valutazione, Fleet Engine associa la sequenza di visite pianificata al monitoraggio dei veicoli in tempo reale.