Questa guida mostra i possibili utilizzi degli attributi di transizione. Ti insegnerà come modellare scenari reali su due esempi: incorporare il tempo necessario per parcheggiare il veicolo nei percorsi ottimizzati e assicurarti che ogni percorso termini con una visita a una località specifica.
Prima di iniziare
Utilizza gli attributi di transizione per aggiungere costi e ritardi specifici del modello a determinate transizioni nei percorsi ottimizzati. Questi costi e ritardi vengono aggiunti alle durate e ai costi delle transizioni calcolati dai dati della mappa in base ai parametri del veicolo utilizzato.
Una transizione è il tratto del percorso che collega una località alla successiva.
Una posizione si riferisce a uno dei seguenti punti nel percorso di un veicolo:
- Il punto di partenza del percorso.
- Una fermata in cui viene effettuato un ritiro o una consegna.
- Il punto di arrivo del percorso.
Definisci tutti gli attributi di transizione per il modello aggiungendoli all'elenco
ShipmentModel.transition_attributes
.
Ogni elemento dell'elenco definisce un insieme di attributi di transizione e viene associato alle transizioni nei percorsi utilizzando i tag relativi alla posizione di partenza e alla posizione di destinazione della transizione. Per scoprire di più sugli attributi di transizione, consulta la documentazione di riferimento per TransitionAttributes
.
Modellare scenari reali
Questa sezione mostra due piccoli esempi di come implementare vincoli aziendali reali utilizzando gli attributi di transizione.
Ora di prenotazione del parcheggio
In questo scenario, il conducente deve parcheggiare il veicolo prima di poter visitare la località A. La stazione di ricarica B si trova nelle vicinanze e il conducente può utilizzare lo stesso posto di parcheggio per entrambe le visite. Se il conducente visita B subito dopo A, risparmia tempo perché non deve lasciare il parcheggio e parcheggiare di nuovo il veicolo. Nell'API Route Optimization, puoi utilizzare gli attributi di transizione per aggiungere tempo extra per parcheggiare il veicolo solo quando il conducente si sposta da un parcheggio all'altro.
Quando modelli il tempo di parcheggio separatamente dalle durate delle visite, i percorsi in cui le visite che utilizzano lo stesso parcheggio sono raggruppate richiedono meno tempo. Il modello diventa più preciso e l'ottimizzatore preferisce i percorsi in cui le visite sono raggruppate.
Per farlo in una richiesta all'API Route Optimization:
Utilizza
VisitRequest.duration
solo per il tempo necessario per effettuare la visita. Ad esempio, per consegnare il pacco e raccogliere la firma del cliente.Per ogni posto auto distinto utilizzato nel modello, utilizza un nuovo tag che non viene utilizzato per altri elementi nel modello, ad esempio
PARKING_123
.Aggiungi questo tag a quanto segue:
VisitRequest.tags
in tutte le richieste di visita che utilizzano questo posto auto.Vehicle.start_tags
se il veicolo inizia il percorso in questo parcheggio.Vehicle.end_tags
se il veicolo inizia o termina il percorso in questo parcheggio.
Per ogni nuovo tag parcheggio, aggiungi una voce a
ShipmentModel.transition_attributes
che aggiunge un ritardo per il parcheggio quando arrivi da un altro parcheggio procedendo come segue:Imposta
TransitionAttributes.excluded_src_tag
eTransitionAttributes.dst_tag
suPARKING_123
.Imposta
TransitionAttributes.delay
sul tempo necessario per parcheggiare il veicolo.
Ad esempio, quando il tag di una stazione di ricarica è
PARKING_123
e il parcheggio del veicolo richiede 150 secondi, aggiungi la seguente voce aShipmentModel.transition_attributes
:{ "excluded_src_tag": "PARKING_123", "dst_tag": "PARKING_123", "delay": "150s" }
Pulizia obbligatoria al termine del percorso
In questo caso, il veicolo deve essere pulito alla fine del percorso, con i seguenti vincoli aggiuntivi:
- La pulizia viene eseguita in un'officina specializzata prima del ritorno al deposito dei veicoli. Il percorso ottimizzato utilizza la stazione di pulizia migliore in base alla sua posizione e alle località dei ritiri e delle consegne effettuati dal veicolo.
- Dopo la pulizia, il veicolo non deve effettuare altri ritiri o consegne.
- Il tempo necessario per raggiungere la stazione di ricarica e pulire il veicolo viene conteggiato nelle ore di lavoro del conducente e deve rientrare nella durata massima del percorso.
Modelli questo requisito consentendo solo percorsi vuoti o la cui ultima visita è in una struttura di pulizia. Nell'API Route Optimization, lo fai vietando le transizioni al waypoint di fine del percorso da qualsiasi posizione, tranne che dalla struttura di pulizia o dal punto di partenza del percorso:
- Scegli due nuovi tag che non vengono utilizzati nel modello, ad esempio
CLEANED
eROUTE_END
. Il primo è per le località in cui il veicolo è o diventa pulito, mentre il secondo è per la fine del percorso. - Per ogni veicolo, aggiungi una nuova spedizione solo per la consegna che rappresenti la visita
a un centro di pulizia con i seguenti attributi:
- Ogni sede della struttura di pulizia deve essere rappresentata come una richiesta di visita per la consegna di questa spedizione.
- Aggiungi
CLEANED
aVisitRequest.tags
di ogni richiesta di visita della spedizione del centro di pulizia. Indica che un veicolo che lascia questa stazione è pulito. Le altre richieste di visita nel modello non devono utilizzare questo tag in modo che il veicolo sia considerato "non pulito" al momento della partenza. - Consenti all'ottimizzatore di saltare questa spedizione quando il veicolo non è in uso impostando il valore
penalty_cost
su un numero ridotto.
Per ogni veicolo, aggiungi
CLEANED
aVehicle.start_tags
. Questo valore viene utilizzato per contrassegnare il veicolo come pulito prima di effettuare ritiri o consegna, supponendo che sia stato pulito alla fine del giorno lavorativo precedente, e per consentirgli di passare dal waypoint di partenza direttamente al waypoint di destinazione. Anche se questi percorsi non si verificano nella pratica, consentire questo scenario aiuta l'ottimizzatore a cercare percorsi ottimizzati in modo più efficiente.Per ogni veicolo, aggiungi
ROUTE_END
aVehicle.end_tags
.Aggiungi una nuova voce a
ShipmentModel.transition_attributes
che impedisca ai veicoli di arrivare al waypoint di fine del veicolo quando non sono puliti, con le seguenti proprietà:Imposta
TransitionAttributes.excluded_src_tag
suCLEANED
.Imposta
TransitionAttributes.dst_tag
suROUTE_END
.Imposta
TransitionAttributes.delay
su un valore elevato. Se imposti un ritardo superiore alla durata massima del percorso, impedisci in modo efficace all'ottimizzatore di utilizzare questa transizione in un percorso.
Ad esempio, quando la scala temporale del modello è di un giorno lavorativo, puoi utilizzare un ritardo di 24 ore (86400 secondi) per vietare la transizione alla fine del percorso da qualsiasi luogo, ad eccezione di una stazione di pulizia e dell'inizio del percorso:
{ "excluded_src_tag": "CLEANED", "dst_tag": "ROUTE_END", "delay": "86400s" }
Come scegliere tra ritardi e costi
La scelta tra ritardi e costi dipende dalla natura della logica e dei vincoli aziendali implementati. L'impostazione
TransitionAttributes.delay
è ideale per implementare vincoli rigidi o per esprimere un compromesso in termini di
tempo impiegato.
TransitionAttributes.cost
è più adatto per l'implementazione di preferenze flessibili o compromessi espressi come un
costo aggiuntivo. Puoi combinare ritardi e costi in modo arbitrario quando sono coinvolti sia il tempo impiegato sia il costo.
L'esempio di pulizia del veicolo utilizza un ritardo molto lungo, perché la pulizia del veicolo alla fine del percorso è un requisito obbligatorio e il lungo ritardo impedisce all'ottimizzatore di ignorarlo. Se imposti solo un costo, l'ottimizzatore potrebbe scegliere di saltare la pulizia, se trova un modo per compensare il costo altrove, ad esempio consegnando più spedizioni nel tempo "risparmiato" non pulendo il veicolo.
L'esempio di parcheggio utilizza un breve ritardo che corrisponde al tempo aggiuntivo necessario per parcheggiare il veicolo. Puoi anche utilizzare costi in combinazione con i ritardi, se il conducente si ferma in un parcheggio a pagamento.
Come aggiungere un attributo di transizione che corrisponda a tutte le richieste di visita
Gli esempi precedenti utilizzano attributi di transizione che corrispondono a località con un determinato tag o a località che non lo hanno. Ma cosa succede se devi aggiungere attributi di transizione che si applicano a tutte le transizioni?
Non puoi semplicemente omettere i tag, perché ogni messaggio
TransitionAttributes
debe avere uno di
TransitionAttributes.src_tag
e
TransitionAttributes.excluded_src_tag
e uno di
TransitionAttributes.dst_tag
e
TransitionAttributes.excluded_dst_tag
.
Tuttavia, puoi associare tutti i tag impostando
TransitionAttributes.excluded_src_tag
o
TransitionAttributes.excluded_dst_tag
su un tag che non viene utilizzato nel modello. Verranno associate tutte le località
che non dispongono di questo tag, ma poiché hai scelto intenzionalmente un tag che non viene
utilizzato da nessuna località, questi attributi di transizione corrisponderanno a tutte le località.