Questo esempio mostra come utilizzare gli attributi di transizione per dare la priorità ai percorsi in cui i ritiri e le consegne nelle vicinanze vengono eseguiti dallo stesso veicolo in un unico blocco di tempo. Per scoprire di più sugli attributi di transizione, consulta Modella la logica di business con gli attributi di transizione.
In questo esempio:
- Le consegne delle spedizioni A, B e C sono vicine tra loro sulla stessa strada.
- Le consegne aggiuntive si trovano più avanti lungo il percorso.
- Le consegne non hanno tempi di consegna specificati.
- Indipendentemente dalla pianificazione delle visite, il veicolo deve percorrere questa strada due volte: una volta al mattino, nel tragitto dal deposito, e una volta alla sera, nel tragitto di ritorno.
- La distanza totale percorsa e la durata del percorso sono sempre le stesse, indipendentemente da quando vengono eseguite le attività A, B e C.

In questo caso, per una richiesta che utilizza solo il costo orario e il costo per chilometro, il percorso ottimizzato potrebbe prevedere la gestione di A e B al mattino e di C alla sera, con un costo della soluzione identico a quello che si avrebbe se tutte e tre le località venissero gestite contemporaneamente.
Costo per chilometro con una soglia
Per raggruppare le visite nelle vicinanze, devi prima selezionare una distanza di soglia. Questa è la distanza massima tra due visite che consideri vicine. Questo esempio utilizza una soglia di 100 metri, che corrisponde all'incirca a un isolato in un'area urbana. Puoi aumentare o diminuire la soglia in base alle tue esigenze aziendali e alle preferenze dei tuoi conducenti.
Per raggruppare le visite vicine entro 100 metri l'una dall'altra, imposta un costo elevato per i primi 100 metri di ogni transizione e un costo inferiore per ogni metro aggiuntivo della transizione. Poiché i primi 100 metri sono i più costosi, l'ottimizzatore ottiene i maggiori risparmi utilizzando transizioni più brevi della soglia di 100 metri, anche se ciò significa estendere la lunghezza complessiva del percorso.
Per configurare i costi, aggiungi una nuova voce a ShipmentModel.transition_attributes con le seguenti proprietà:
- Per trovare tutte le transizioni possibili, scegli un tag che non viene utilizzato in nessun punto del modello, ad esempio
UNUSED_TAG. ImpostaTransitionAttributes.excluded_src_tageTransitionAttributes.excluded_dst_tagsu questo tag. - Configura
TransitionAttributes.distance_limitcon la distanza e i costi della soglia:- Imposta
DistanceLimit.soft_max_meterssulla soglia selezionata. - Imposta
DistanceLimit.cost_per_kilometer_below_soft_maxsul costo per chilometro al di sotto della soglia. - Imposta
DistanceLimit.cost_per_kilometer_above_soft_maxsul costo per chilometro al di sopra della soglia.
- Imposta
{
"model": {
"transitionAttributes": [
{
"excluded_dst_tag": "UNUSED_TAG",
"excluded_src_tag": "UNUSED_TAG",
"distanceLimit": {
"softMaxMeters": 100,
"costPerKilometerBelowSoftMax": 50,
"costPerKilometerAboveSoftMax": 1,
}
}
]
}
}
Il tag #unused_tag# non deve essere utilizzato da spedizioni o veicoli per corrispondere a tutte le transizioni possibili. Per saperne di più, consulta Come soddisfare tutte le richieste di visita.
Come funziona un costo elevato al di sotto della soglia
Questa sezione mostra in che modo il costo al di sotto e al di sopra della soglia influisce sul costo complessivo delle diverse soluzioni dello scenario di esempio.
Soluzione 1: esegui A e B all'andata e C al ritorno
In questa soluzione, le spedizioni sono suddivise nei due attraversamenti di questa strada. Due vengono consegnati durante il primo attraversamento e il restante durante il secondo. Esistono 5 transizioni:
| Transizione | Distanza | Sotto la soglia | Sopra la soglia | ||
|---|---|---|---|---|---|
| Distanza | Costo | Distanza | Costo | ||
| depot →A | 1000 m | 100 m | 5 | 900 m | 0,9 |
| A→B | 50 m | 50 m | 2,5 | 0 m | 0 |
| B→other | 1030 m | 100 m | 5 | 930 m | 0,93 |
| other→C | 1000 m | 100 m | 5 | 900 m | 0,9 |
| C→depot | 1080 m | 100 m | 5 | 980 m | 0,98 |
| Totale | 450 m | 22,5 | 3710 m | 3,71 | |
Il costo complessivo viene calcolato sommando i due costi per chilometro:
- il costo per chilometro al di sotto della soglia (50) moltiplicato per la distanza totale percorsa al di sotto della soglia (450 m = 0,45 km),
- il costo per chilometro oltre la soglia (1) moltiplicato per la distanza totale percorsa oltre la soglia (3710 m = 3,71 km).
Il costo complessivo è quindi 0,45 * 50 + 3,71 * 1 = 22,5 + 3,71 = 26,21.
Soluzione 2: esegui A, B, C all'andata, niente al ritorno
In questa soluzione, a differenza della soluzione 1, tutte e tre le spedizioni vengono consegnate "come gruppo" durante un unico attraversamento della strada. Nell'altro attraversamento, il veicolo non si ferma affatto. Anche in questo caso, ci sono 5 transizioni, ma le loro lunghezze e composizioni sono diverse:
| Transizione | Distanza | Sotto la soglia | Sopra la soglia | ||
|---|---|---|---|---|---|
| Distanza | Costo | Distanza | Costo | ||
| depot →A | 1000 m | 100 m | 5 | 900 m | 0,9 |
| A→B | 50 m | 50 m | 2,5 | 0 m | 0 |
| B→C | 30 m | 30 m | 1,5 | 0 m | 0 |
| C→altro | 1000 m | 100 m | 5 | 900 m | 0,9 |
| other→depot | 2080 m | 100 m | 5 | 1980 m | 1,98 |
| Totale | 380 m | 19 | 3780 m | 3,78 | |
Utilizzando lo stesso calcolo della soluzione 1, il costo complessivo è 0,38 * 50 + 3,78 * 1 = 19 + 3,78 = 22,78 ed eseguire tutte le visite in un unico blocco di tempo ha un costo inferiore rispetto all'esecuzione in due gruppi. Puoi rafforzare questo effetto aumentando DistanceLimit.cost_per_kilometer_below_soft_max.
Perché un costo per chilometro basso al di sotto della soglia non funziona
Poiché vuoi preferire le transizioni brevi a quelle lunghe, potresti avere la tentazione di assegnare un costo per chilometro elevato alle transizioni lunghe e mantenere il costo per chilometro basso per le transizioni brevi. Tuttavia, questo ha un effetto inverso: poiché i primi 100 metri della transizione sono i più economici, l'ottimizzatore utilizza questi metri "economici" per ottenere il massimo effetto preferendo transizioni che hanno un valore vicino o superiore a 100 metri.
Puoi vedere questo effetto nelle due soluzioni di esempio. Se scambi il costo per chilometro al di sotto e al di sopra della soglia, i costi del percorso cambiano:
| Costo elevato sopra la soglia | Costo elevato sotto la soglia | |||
|---|---|---|---|---|
| Soluzione 1 | Soluzione 2 | Soluzione 1 | Soluzione 2 | |
| KM sotto la soglia | 0,45 | 0,38 | 0,45 | 0,38 |
| Costo per KM inferiore alla soglia | 1,00 | 1,00 | 50,00 | 50,00 |
| KM sopra la soglia | 3,71 | 3,78 | 3,71 | 3,78 |
| Costo per km oltre la soglia | 50,00 | 50,00 | 1,00 | 1,00 |
| Costo totale | 185,95 | 189,38 | 26,21 | 22,78 |
Per ogni versione, il costo totale più basso delle due soluzioni è evidenziato in grassetto. Come puoi vedere, quando utilizzi un costo elevato sopra la soglia, il costo totale del percorso è ora più alto per il percorso in cui le visite sono raggruppate, il che è l'opposto di ciò che volevi ottenere.