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 Modellare la logica aziendale con gli attributi di transizione.
In questo esempio:
- Le consegne delle spedizioni A, B e C sono vicine tra loro sulla stessa strada.
- Altre release sono previste in futuro.
- Le consegne non hanno tempi di consegna specificati.
- Indipendentemente dal programma delle visite, il veicolo deve percorrere questa strada due volte: una la mattina sulla strada per il deposito e una la sera sulla strada di ritorno.
- La distanza e la durata complessiva del viaggio sono sempre le stesse, indipendentemente dal momento in cui vengono eseguite A, B e C.
In questa situazione, e per una richiesta che utilizza solo il costo per ora e il costo per chilometro, il percorso ottimizzato potrebbe prevedere la gestione di A e B al mattino e di C la sera e il costo della soluzione sarebbe lo stesso come se tutte tre le richieste fossero gestite contemporaneamente.
Costo per chilometro con una soglia
Per raggruppare le visite nelle vicinanze, devi prima selezionare una distanza di soglia. Si tratta della distanza massima tra due visite che ritieni vicine. Questo esempio utilizza una soglia di 100 metri che corrisponde approssimativamente a un isolato in un'area urbana. Puoi aumentare o diminuire la soglia in base alle esigenze della tua attività e alle preferenze dei tuoi conducenti.
Per raggruppare le visite nelle vicinanze a una distanza massima di 100 metri l'una dall'altra, imposta un costo elevato per i primi 100 metri di ogni transizione e un costo inferiore per gli eventuali metri aggiuntivi della transizione. Poiché i primi 100 metri sono i più costosi, l'ottimizzatore consente i risparmi maggiori 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 una corrispondenza per tutte le transizioni possibili, scegli un tag che non viene utilizzato nel
modello, ad esempio
UNUSED_TAG
. ImpostaTransitionAttributes.excluded_src_tag
eTransitionAttributes.excluded_dst_tag
su questo tag. - Configura
TransitionAttributes.distance_limit
con la distanza e i costi soglia:- Imposta
DistanceLimit.soft_max_meters
suDistanceLimit.soft_max_meters
. - Imposta
DistanceLimit.cost_per_kilometer_below_soft_max
sul costo per chilometro al di sotto della soglia. - Imposta
DistanceLimit.cost_per_kilometer_above_soft_max
sul costo per chilometro superiore alla 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 ulteriori informazioni, consulta Come associare 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, B all'andata e C al ritorno
In questa soluzione, le spedizioni sono suddivise nei due attraversamenti di questa strada. Due vengono pubblicate al primo passaggio e la terza al secondo. Esistono cinque 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 è calcolato come somma dei 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 sopra la soglia (1) moltiplicato per la distanza totale percorsa sopra 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'altra attraversata, il veicolo non si ferma affatto. Anche in questo caso, ci sono 5 transizioni, ma le loro lunghezze e le loro 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→other | 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 e l'esecuzione di tutte le visite in un 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 basso per chilometro al di sotto della soglia non funziona
Poiché vuoi preferire le transizioni brevi a quelle lunghe, potresti essere temptedo a assegnare un costo elevato per chilometro alle transizioni lunghe e mantenere basso il costo per chilometro per le transizioni brevi. Tuttavia, questo ha un effetto opposto: poiché i primi 100 metri della transizione sono i più economici, l'ottimizzatore utilizza questi metri "economici" con il massimo effetto preferendo le transizioni che hanno una lunghezza pari 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 superiore alla soglia | Costo elevato sotto la soglia | |||
---|---|---|---|---|
Soluzione 1 | Soluzione 2 | Soluzione 1 | Soluzione 2 | |
Chilometri al di sotto della 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 superiore alla 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. Puoi vedere che, quando utilizzi un costo elevato superiore alla soglia, il costo totale del percorso è ora più elevato per il percorso in cui sono raggruppate le visite, il contrario di ciò che volevi ottenere.