🚚 Ottimizzatore di Percorsi per la Supply Chain — Un Algoritmo Genetico all'Opera
Osserva un algoritmo genetico far evolvere i percorsi di consegna su una mappa di magazzini e clienti — selezione, crossover e mutazione riducono la distanza totale generazione dopo generazione.
Informazioni sull'Ottimizzatore di Percorsi per la Supply Chain
Instradare in modo efficiente una flotta di veicoli per le consegne è una versione di uno dei problemi più famosi dell'informatica: il Problema del Commesso Viaggiatore (TSP). Dato un deposito e un insieme di clienti, in quale ordine conviene visitarli per minimizzare la distanza totale percorsa? Oltre una manciata di tappe, verificare ogni ordine possibile è computazionalmente proibitivo — già 16 clienti danno luogo a oltre 650 miliardi di percorsi distinti. Il software logistico reale utilizza invece metaeuristiche che cercano in modo intelligente senza mai garantire la risposta perfetta, e l'algoritmo genetico (GA) è uno dei più antichi e intuitivi tra questi.
Questa simulazione fa evolvere generazione dopo generazione una popolazione di percorsi di consegna candidati. Ad ogni generazione, i percorsi vengono valutati in base alla distanza totale, i percorsi più adatti (più brevi) hanno maggiori probabilità di essere selezionati come genitori, il crossover per ordine combina due percorsi genitori in un percorso figlio valido, la mutazione per scambio sposta leggermente i percorsi dalla loro forma attuale, e l'elitismo garantisce che il singolo percorso migliore sopravviva inalterato. Osserva il percorso migliore disegnato dal vivo sulla mappa e il grafico della distanza nel tempo scendere man mano che la popolazione nel suo complesso diventa più adatta — a volte stabilizzandosi su un ottimo locale prima che una mutazione fortunata apra un varco.
Domande frequenti
Che cos'è un algoritmo genetico?
Un algoritmo genetico (GA) è un'euristica di ricerca ispirata alla selezione naturale. Invece di derivare una soluzione in modo analitico, un GA mantiene una popolazione di soluzioni candidate — qui, percorsi di consegna completi — e applica ripetutamente selezione, crossover e mutazione per generare nuovi candidati. Gli individui più adatti (percorsi più brevi) hanno maggiori probabilità di trasmettere la propria struttura alla generazione successiva. Nel corso di molte generazioni la qualità media della popolazione aumenta, anche se nessun singolo percorso viene mai risolto direttamente, perché la ricerca esplora in parallelo molte regioni dello spazio delle soluzioni e continua a ricombinare ciò che funziona.
Cosa fanno esattamente crossover e mutazione in questo caso?
Ogni percorso è una permutazione delle tappe presso i clienti, quindi un crossover ordinario produrrebbe percorsi non validi con clienti ripetuti o mancanti. Questa simulazione usa il crossover per ordine (OX): una porzione contigua di tappe viene copiata dal genitore A nelle stesse posizioni, e le tappe rimanenti vengono riempite dal genitore B nell'ordine in cui compaiono, saltando quelle già inserite. Questo garantisce una permutazione valida. La mutazione è una mutazione per scambio: con probabilità pari al tasso di mutazione, due tappe scelte casualmente in un percorso si scambiano di posto, spostando leggermente il percorso dalla sua forma attuale senza mai creare un tour non valido.
Perché l'elitismo è importante?
Selezione, crossover e mutazione sono tutti processi stocastici, quindi una generazione può per caso produrre una popolazione che, in media, è peggiore di quella precedente — il crossover può spezzare un buon percorso e la mutazione può danneggiarne uno quasi ottimale. L'elitismo copia il singolo percorso migliore della generazione corrente direttamente nella generazione successiva, senza alcuna modifica. Questo garantisce che la miglior distanza trovata finora non possa mai peggiorare da una generazione all'altra, motivo per cui la curva della "distanza migliore" nel grafico è sempre piatta o discendente, mai crescente.
Che relazione c'è con il vero Problema del Commesso Viaggiatore?
Si tratta di una piccola variante di instradamento veicoli del Problema del Commesso Viaggiatore (TSP): trovare il tour chiuso più breve che parte e termina in un deposito visitando ogni cliente esattamente una volta. Il TSP è NP-hard — il numero di percorsi possibili per N clienti è (N−1)!/2, che per soli 16 clienti supera i 650 miliardi. Gli algoritmi esatti (branch-and-bound, programmazione dinamica) possono risolvere istanze modeste ma scalano male. Gli algoritmi genetici, insieme ad altre metaeuristiche come il simulated annealing e l'ottimizzazione a colonie di formiche, rinunciano alla garanzia di ottimalità in cambio di un percorso solitamente molto buono trovato in una frazione del tempo — esattamente il compromesso che il software logistico reale adotta per flotte con decine o centinaia di tappe.
Perché il percorso a volte si blocca in un ottimo locale?
Se l'intera popolazione converge verso percorsi che condividono la stessa struttura di base, il crossover tra due genitori simili riproduce per lo più quella stessa struttura, e le piccole mutazioni per scambio raramente bastano a sfuggire da un ciclo localmente buono ma globalmente subottimale — per esempio un percorso con un incrocio evitabile. Questo fenomeno si chiama convergenza prematura: la diversità della popolazione crolla prima che venga trovato il miglior tour possibile. Aumentare il tasso di mutazione, ampliare la dimensione della popolazione o usare una nuova mappa per confrontare le esecuzioni sono modi per osservare questo compromesso tra esplorazione (diversità) e sfruttamento (perfezionare ciò che già funziona).
Che cos'è la selezione a torneo e perché usarla?
La selezione a torneo sceglie un piccolo sottoinsieme casuale della popolazione (un torneo, qui di dimensione 3) e seleziona come genitore il membro più adatto di quel sottoinsieme. È semplice, veloce, e la sua pressione selettiva è facile da regolare tramite la dimensione del torneo: un torneo più grande rende più probabile che il singolo individuo migliore domini la riproduzione (convergenza più rapida, rischio maggiore di convergenza prematura), mentre un torneo più piccolo mantiene più diversità. Questo evita alcune insidie della selezione proporzionale alla fitness (a ruota della fortuna), in cui un percorso con una distanza insolitamente breve può dominare immediatamente l'intera popolazione.
In che modo la dimensione della popolazione e il tasso di mutazione influenzano la velocità di convergenza?
Una popolazione più grande esplora una porzione maggiore dello spazio delle permutazioni dei percorsi per generazione ed è meno soggetta a perdere diversità utile per deriva casuale, ma ogni generazione costa più valutazioni della distanza. Un tasso di mutazione più alto introduce più casualità, aiutando a sfuggire dagli ottimi locali ma disturbando anche più spesso i buoni percorsi, il che può rallentare la convergenza o persino peggiorare temporaneamente la media della popolazione (l'elitismo protegge comunque il singolo percorso migliore). In pratica esiste un punto ottimale — dimensioni della popolazione grosso modo tra le decine e le poche centinaia e tassi di mutazione di pochi punti percentuali per gene tendono a convergere più rapidamente per problemi di questa dimensione.
Osserva un algoritmo genetico far evolvere i percorsi di consegna su una mappa di magazzini e clienti — selezione, crossover e mutazione riducono la distanza.
3D · renderer Three.js / WebGL · target 60 FPS · funziona interamente lato client, senza installazione