Ciclo di vita del piano di itinerario

Questa pagina descrive il ciclo di vita di un piano di itinerario utilizzando l'API Route Optimization, a partire dall'identificazione delle tue esigenze di routing fino alla creazione di un piano di itinerario integrato nel tuo sistema.

Se segui le fasi del piano dell'itinerario, puoi raggiungere i seguenti obiettivi:

  • Mappa le operazioni della flotta:traduci la tua flotta fisica, i vincoli complessi e gli obiettivi aziendali in codice per l'API.
  • Ottimizza i piani di itinerario per la tua attività:scopri come perfezionare il tuo piano di itinerario 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 tue operazioni quotidiane.

Il seguente diagramma mostra il ciclo di vita di un piano di itinerario.

Un diagramma di flusso del ciclo di vita di un piano di itinerario spiegato nel testo di seguito

La fase di implementazione di un piano di itinerari si verifica quando integri per la prima volta l'API o quando i requisiti aziendali cambiano in modo significativo. Vengono trattate le fasi da 1 a 5.

La fase delle operazioni giornaliere è più leggera e la rifinitura è minima. Sono trattate le fasi da 2 a 4.

Le fasi del ciclo di vita di un percorso sono le seguenti:

  1. Definisci l'ambito del problema:identifica e organizza obiettivi, risorse, attività e vincoli per avere un quadro completo delle operazioni prima di iniziare a utilizzare l'API.
  2. Mappa i tuoi dati:traduci la tua realtà aziendale in parametri API in modo che il programma di itinerario rifletta il modo in cui vuoi che operi il tuo parco risorse.
  3. Crea una richiesta e ottieni un piano di itinerario: inserisci i tuoi dati nell'API e ottieni il piano di itinerario ottimizzato.
  4. Perfeziona il piano del percorso:prova il piano del percorso e modificalo aggiustando i vincoli e gli obiettivi per assicurarti che soddisfi tutte le tue esigenze.
  5. Integra il piano di itinerario: collega il piano di itinerario ai tuoi sistemi esistenti per fornire una navigazione utile.

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 l'implementazione con chiarezza su quali sono le tue risorse e i tuoi compiti attuali, quali sono i vincoli e quali sono gli obiettivi che vuoi raggiungere con la tua flotta.

Identificare le risorse e le attività

Un passaggio importante durante la pianificazione del piano di itinerario è l'identificazione delle risorse e delle attività, ovvero dei veicoli e delle spedizioni.

I veicoli Le spedizioni
  • Numero:quanti veicoli hai?
  • Posizioni:dove iniziano e terminano i viaggi dei veicoli?
  • Orario:quali sono gli orari di lavoro dei conducenti dei veicoli?
  • Capacità:quali sono i limiti dei tuoi veicoli?
  • Costi:quali sono i costi di gestione della flotta?
  • Località:dove si trovano i punti di ritiro e consegna?
  • Richieste:qual è il peso o la dimensione dei pacchi?
  • Vincoli: esistono finestre temporali specifiche per la consegna?
  • Tempo di servizio:per quanto tempo l'autista deve parcheggiare e scaricare?
  • Requisiti:la spedizione richiede un tipo di veicolo o un autista specifico?

Identificare i vincoli

I vincoli sono i limiti e le restrizioni sull'utilizzo dei tuoi veicoli e sulla gestione delle 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 autista non può effettuare un ritiro dopo la chiusura di un negozio. Queste sono preferenze che possono essere violate se necessario, di solito a un costo di penalità. Ad esempio, potresti preferire caricare un camion solo all'80% della capacità o effettuare la consegna prima di un orario target, ma non ti preoccupa superare questi limiti per ottenere un percorso 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 orari specifici in cui una sede è aperta per una visita o gli orari specifici del turno di un autista.
  • Costi:il costo di gestione di un veicolo o di mancata spedizione. Uno degli obiettivi principali dell'API è generare un piano di itinerari conveniente.
  • Pause del conducente:periodi di riposo del conducente in genere richiesti dalle leggi sul lavoro dopo un determinato numero di ore lavorative.

Definisci i tuoi scopi commerciali

Una volta stabilite le risorse, 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 conta di più quando pianifichi un percorso.

Di seguito sono riportati alcuni esempi di obiettivi 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 in anticipo? 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 lavorate o dare la priorità all'arrivo in orari specifici, il che può allungare il tempo trascorso in viaggio? Vuoi ridurre al minimo le spese operative come salari 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 itinerario 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 della tua flotta.
Località dei depositi vehicles[].startWaypoint
vehicles[].endWaypoint
La posizione in cui il veicolo inizia e termina il percorso.
Orario di apertura model.globalStartTime
model.globalEndTime
L'orario di inizio più presto e l'orario 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[].arrivalWaypoint
deliveries[].arrivalWaypoint
La località geografica in cui si svolge il lavoro.
Tempo di servizio pickups[].duration
deliveries[].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 loadDemand di una spedizione supera il limite rimanente, non viene assegnato.
Dimensioni pacchetto shipments[].loadDemands La quantità di capacità del veicolo consumata da una spedizione.
Limitazione 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 questo periodo di tempo, la spedizione viene ignorata.
Limite di durata del turno vehicles[].routeDurationLimit Imposta un limite rigido o flessibile alla durata del lavoro di un determinato autista (ad esempio, massimo 8 ore), indipendentemente dall'ora di fine globale.
Pause del conducente vehicles[].breakRule Applica regole di riposo specifiche, come pause obbligatorie dopo un determinato numero di ore di lavoro.
Limitazioni stradali vehicles[].travelMode Specifica la modalità di viaggio (ad esempio, DRIVE o BICYCLE). Limita il percorso a strade legali e determina le velocità utilizzate per calcolare i tempi di percorrenza.

Mappatura degli obiettivi

Obiettivo nel mondo reale Parametro API Descrizione
Ridurre al minimo le dimensioni del parco risorse vehicles[].fixedCost Applica un costo una tantum per l'utilizzo di un veicolo. Un costo fisso elevato costringe un percorso a dare la priorità all'utilizzo di meno veicoli rispetto all'aumento della distanza totale o del tempo di lavoro.
Ridurre al minimo la distanza vehicles[].costPerKilometer Applica un costo per ogni chilometro percorso. Dà la priorità ai percorsi più brevi per risparmiare carburante e ridurre l'usura.
Ridurre al minimo il tempo totale vehicles[].costPerHour Applica un costo per ogni ora di attività del veicolo (inclusi i tempi di viaggio e attesa). Dà la priorità al completamento più rapido.
Ridurre al minimo il tempo di guida vehicles[].costPerTraveledHour Applica un costo specifico per il tempo trascorso in movimento. In questo modo si distingue tra l'attesa nel traffico (costosa) e l'attesa a una fermata(potenzialmente più economica).
Assegnare la priorità a determinate attività shipments[].penaltyCost Applica un costo se una spedizione specifica viene saltata. Se imposti questo valore su Alto, 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 itinerario prevede i seguenti passaggi:

  1. Configura l'ambiente:configura il progetto Google Cloud, attiva l'API e configura l'autenticazione. Per istruzioni, vedi Guida introduttiva. Devi seguire questo passaggio una sola volta.
  2. 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.
  3. Comprendi la risposta: una volta ricevuta una risposta dall'API, comprendi il piano dell'itinerario e il significato di ogni parametro. Vedi Interpretare una risposta.

Perfezionare il piano dell'itinerario

Tradurre la logistica reale in costi e vincoli dell'API è un'attività complessa. Il piano dell'itinerario iniziale potrebbe non corrispondere agli obiettivi della tua attività o alle aspettative dell'autista. Per perfezionare il piano di percorso, devi testare in modo iterativo i percorsi restituiti e modificare i parametri finché non trovi una configurazione che ti consenta di raggiungere i tuoi obiettivi.

Modificare obiettivi e vincoli

Se il piano del percorso generato non soddisfa le tue esigenze, puoi modificare alcuni parametri per ottenere risultati diversi. Stringere o allentare i parametri modifica il modo in cui gli obiettivi in conflitto vengono risolti nel piano del percorso e allentare i parametri è un modo efficace per scoprire i parametri che causano errori nei piani del percorso.

La seguente tabella elenca i problemi di routing comuni e i parametri che puoi modificare per risolverli.

Scenario Parametro Aggiustamento Descrizione
Una spedizione importante viene saltata shipments[].penaltyCost Aumentarne il valore o aggiungere costi di penalità ad altre spedizioni Se la spedizione è facoltativa, aumenta il costo della penalità per assegnarle la priorità. Se la spedizione è obbligatoria (non prevede costi di penalità), aggiungi i costi di penalità alle spedizioni altre, meno critiche. In questo modo diventano facoltativi, il che libera tempo e capacità del veicolo per la spedizione importante.
Spedizione saltata a causa della tempistica softStartTime/softEndTime Aggiungere finestre temporali flessibili Le finestre temporali rigide eliminano le attività che sono in ritardo anche di un solo minuto. Le finestre morbide consentono al conducente di arrivare leggermente in ritardo pagando un "costo" anziché non completare l'assegnazione.
Spedizione saltata a causa del peso loadLimits[].softMaxLoad e costPerUnitAbove Aggiungere richieste di carico flessibile Consente a un veicolo di superare leggermente la sua capacità ideale (con una penalità) anziché lasciare indietro un pacco.
Spedizione saltata a causa del sovraccarico della flotta model.vehicles[] o shipments[].timeWindows Aggiungere veicoli o finestre di riposo 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.
I percorsi sono troppo lunghi o inefficienti vehicles[].costPerKilometer/costPerHour Aggiungere costi o aumentarne il valore Indica all'API che i viaggi sono costosi, incoraggiandola a eliminare le fermate distanti e isolate per creare percorsi più brevi per la flotta.
I turni di guida sono troppo lunghi vehicles[].routeDurationLimit o model.vehicles[] Aggiungere limiti di durata o veicoli e limiti Applica un limite massimo (ad esempio, 8 ore) al tempo totale trascorso da un autista sulla strada. L'aggiunta di veicoli da sola non accorcia i percorsi, a meno che tu non applichi anche limiti di durata per forzare il risolutore a distribuire il carico di lavoro su una flotta più grande.

Aggiorna un piano di itinerario

Spesso è necessario aggiornare un piano di itinerario mantenendo la base invariata, ad esempio aggiungendo un ritiro all'itinerario di un autista 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 itinerario con i parametri di inserimento:

  • Trasferisci le route da una risposta precedente nel campo injectedFirstSolutionRoutes della nuova richiesta. In questo modo la ricerca dell'ottimizzazione è più rapida ed è utile per la riprogrammazione prima dell'inizio delle operazioni giornaliere, ad esempio per integrare le spedizioni dell'ultimo minuto.
  • Controlla il grado di variazione utilizzando il campo injectedSolutionConstraint. Questa opzione è utile quando le operazioni sono già in corso, in quanto consente di conservare la sequenza attuale dell'autista o correggere le parti del piano che sono già state eseguite.
  • Assicurati che l'itinerario aggiornato rimanga assegnato al veicolo corretto impostando interpretInjectedSolutionsUsingLabels su true. Ciò è utile durante la sperimentazione quando si aggiungono o rimuovono spedizioni e veicoli, in quanto abbina i percorsi utilizzando le etichette anziché gli indici. Ciò richiede che tutte le etichette di veicoli e spedizioni siano univoche.

Integrare il piano dell'itinerario

Il piano di itinerario definitivo è un oggetto 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, ciò comporta la visualizzazione del piano di itinerario per i gestori della flotta e l'invio di indicazioni stradali dettagliate agli autisti.

Visualizzazione

Per consentire ai gestori della flotta di verificare e monitorare il tuo piano di itinerario, puoi visualizzarlo nei seguenti modi:

Per consentire ai gestori della flotta di verificare e monitorare il tuo piano di itinerario, puoi visualizzarlo su una mappa della dashboard. A seconda della fase di sviluppo in cui ti trovi, puoi visualizzare il piano dell'itinerario nei seguenti modi:

  • Esplora senza codice:puoi utilizzare l'app di ottimizzazione del percorso 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 di vincolo e visualizzare i piani di itinerario risultanti prima di scrivere qualsiasi codice.
  • Visualizzare l'ordine delle visite:puoi mostrare la sequenza delle visite come punti numerati su una mappa per valutare i tuoi piani di ottimizzazione e spedizione nel tuo sistema. Per farlo, individua l'array visits all'interno di ogni percorso della risposta dell'API. Gli elementi di questo array sono ordinati esattamente come devono essere eseguiti dal conducente. Puoi scorrere questo elenco, utilizzare shipmentIndex per recuperare le coordinate della posizione di ogni fermata e utilizzare la libreria di mappatura per visualizzare indicatori numerati sulla mappa in base al loro ordine nell'elenco.
  • Disegna l'itinerario fisico: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 l'itinerario in tempo reale seguito da un conducente. Imposta populatePolylines: true nella richiesta per ottenere un campo encodedPolyline per ogni percorso e decodificalo utilizzando il metodo google.maps.geometry.encoding.decodePath() dell'API Maps JavaScript.

Invio agli autisti

Puoi integrare la navigazione passo passo nella tua applicazione per i conducenti utilizzando l'SDK Navigation oppure fornire deep link all'app Google Maps per utenti finali.

  • SDK Navigation:se hai un'applicazione per autisti personalizzata, puoi integrare l'SDK Navigation per Android o iOS per indicazioni stradali 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 gli itinerari dalla risposta dell'API all'SDK, imposta populateTransitionPolylines: true nella richiesta. In questo modo viene generato un routeToken per ogni transizione nella risposta.
  • Fleet Engine: Per la gestione avanzata della flotta, puoi importare il piano di itinerario generato dall'API in Fleet Engine per monitorare l'esecuzione dell'itinerario in tempo reale. Mentre l'API fornisce una polilinea del percorso previsto per la valutazione, Fleet Engine accoppia la sequenza pianificata di visite con il monitoraggio in tempo reale del veicolo.