Ottimizzazione con colonie di formiche: come una traccia di feromone trova un percorso breve
Stigmergia, l’esperimento del doppio ponte, il sistema di formiche di Dorigo, il ruolo dei parametri α, β e ρ e le varianti migliorate, su un giro tra i capoluoghi di regione cechi e su 60 città, a confronto con la ricottura.
Serie Basi di IA Parte 29 di 52
- Mappa dell’intelligenza artificiale: che cos’è ciascuna cosa e come si incastra tutto
- Breve storia dell’intelligenza artificiale: da Turing ai modelli linguistici
- Dati, modello, addestramento, inferenza: i concetti di base su un unico esempio
- Come leggere la notazione matematica: simboli, indici, sommatorie e quantificatori
- Insiemi e relazioni: i mattoncini con cui si costruiscono le definizioni nell’IA
- Funzioni e applicazioni: perché ogni modello di IA è una funzione
- Logica e dimostrazioni: le regole con cui si ragiona nell’IA
- Grafi e alberi: la struttura su cui poggiano la ricerca e le reti neurali
- Algebra lineare per l’apprendimento automatico: vettori, matrici e perché l’IA soprattutto moltiplica
- Derivate, gradiente e regola della catena: come un modello capisce in quale direzione imparare
- Discesa del gradiente: come impara un modello
- Che cos’è la probabilità: dal lancio di un dado agli assiomi di Kolmogorov
- Probabilità condizionata e teorema di Bayes: come cambiare una stima quando scopri qualcosa di nuovo
- Variabile aleatoria e funzione di ripartizione: una sola funzione che dice tutto sulla distribuzione
- Funzione di densità e funzione di massa: perché una variabile continua ha probabilità zero in un punto
- Valore atteso, varianza e covarianza: dove si trova una distribuzione, quanto è larga e che cosa è legato a che cosa
- Panoramica delle distribuzioni di probabilità: Bernoulli, binomiale, Poisson, uniforme, normale ed esponenziale
- Legge dei grandi numeri e teorema del limite centrale: perché le medie si comportano in modo così prevedibile
- Statistica e stima dei parametri: massima verosimiglianza, MAP e intervalli di confidenza
- Teoria dell’informazione: entropia, entropia incrociata e divergenza KL — da dove vengono le funzioni di perdita
- Ricerca nello spazio degli stati: BFS, DFS, UCS e A* con animazioni
- Giochi e avversari: minimax, potatura alfa-beta e Monte Carlo tree search
- Soddisfacimento di vincoli: backtracking, propagazione dei vincoli e AC-3 su un sudoku e una mappa delle regioni ceche
- Logica e sistemi basati sulla conoscenza: concatenazione in avanti e all’indietro, risoluzione e sistemi esperti
- Pianificazione: STRIPS, il mondo dei blocchi, euristiche dal rilassamento e pianificazione negli agenti IA
- Ricerca locale e ricottura simulata: un commesso viaggiatore tra i capoluoghi di regione cechi
- Algoritmi genetici: popolazione, incrocio, mutazione e selezione su uno zaino per l’escursione
- Strategie evolutive e programmazione genetica: dalla regola di un quinto alla legge di Keplero
- Ottimizzazione con colonie di formiche: come una traccia di feromone trova un percorso breve
- Ottimizzazione a sciame di particelle: inerzia, esperienza propria ed esperienza dello sciame
- Neuroevoluzione: evoluzione dei pesi e della forma delle reti neurali e l’algoritmo NEAT
- Insiemi fuzzy e funzioni di appartenenza: come scrivere «un po’ caldo»
- Logica fuzzy e probabilità: perché «un po’ caldo» non significa «probabilmente caldo»
- Logica fuzzy: t-norme, implicazioni e regole SE–ALLORA
- Controllo fuzzy: Mamdani e Sugeno, dal ventilatore al pendolo inverso su un carrello
- Clustering fuzzy: l’algoritmo fuzzy c-means e i punti tra i cluster
- Sistemi neuro-fuzzy (ANFIS): regole fuzzy che imparano dai dati
- Catene di Markov: matrice di transizione, distribuzione stazionaria e PageRank
- Modelli di Markov nascosti: l’algoritmo di Viterbi e il casinò disonesto
- Reti bayesiane: perché l’erba è bagnata e che cosa significa per l’irrigatore
- Filtro di Kalman: come stimare da misure imprecise dove si trova un’auto e a che velocità va
- Tipi di apprendimento automatico: supervisionato, non supervisionato, semi-supervisionato e altri
- Prompt, contesto e RAG: come dare a un modello le informazioni giuste
- Autoencoder variazionali (VAE): immagini nuove da uno spazio latente continuo
- Reti generative avversarie (GAN): il falsario contro il detective
- Modelli di diffusione: come il rumore puro diventa un’immagine
- Processi decisionali di Markov: stati, azioni, ricompense ed equazioni di Bellman
- Q-learning e DQN: imparare il valore delle azioni, dalla tabella alla rete neurale
- Policy gradient e PPO: imparare direttamente la politica
- Come funziona un agente IA: un modello linguistico in un ciclo con strumenti
- Programmare con agenti IA: incarico, test e controllo
- Valutazione e sicurezza dei sistemi di IA: come misurare e come sorvegliare
Programma completo della serie 52 di 83 argomenti pubblicati
- Come una colonia trova il percorso più breve anche se nessuna formica lo conosce.
- Come il sistema di formiche costruisce i giri a partire da feromone e distanze, e perché il feromone deve evaporare.
- Dove falliscono gli algoritmi a formiche e come li salvano le varianti migliorate e la ricerca locale.
Utile sapere prima: Ricerca locale e ricottura simulata: un commesso viaggiatore tra i capoluoghi di regione cechi
Una formica da sola non ha una mappa, non sa contare e vede a malapena pochi centimetri davanti a sé. Eppure la colonia trova in modo affidabile il percorso più breve dal formicaio al cibo. Nessuna formica lo conosce: nasce dal modo in cui tutte insieme marcano il terreno. All’inizio degli anni Novanta Marco Dorigo, del Politecnico di Milano, si accorse che lo stesso trucco si poteva applicare al problema del commesso viaggiatore. Nacque così l’ottimizzazione con colonie di formiche e, con essa, l’intero campo dell’intelligenza di sciame.
Riprende l’articolo Ricerca locale e ricottura simulata. Risolviamo lo stesso compito — un giro tra i capoluoghi di regione con un ottimo di 1 060,4 km —, così vedremo come se la cavano le formiche contro la ricottura.
1. Comunicare con le tracce
Definizione — stigmergia
La stigmergia è una comunicazione indiretta attraverso l’ambiente: un individuo modifica l’ambiente e questa modifica influenza ciò che faranno in seguito gli altri (o lui stesso). Il termine fu introdotto da Pierre-Paul Grassé nel 1959 studiando la costruzione dei termitai.
Le formiche non si dicono niente, si lasciano messaggi sul terreno. Ovunque passino depongono feromone, una traccia odorosa che col tempo evapora. Una formica a un bivio va con maggiore probabilità dove la traccia ha un odore più forte. Come un sentiero battuto nell’erba: più gente ci passa, più diventa evidente e più altri lo percorreranno.
2. L’esperimento del doppio ponte
Nel 1989 Goss, Deneubourg e i loro colleghi costruirono per delle formiche argentine due ponti tra il formicaio e il cibo, uno lungo il doppio dell’altro. Dopo un po’ la maggior parte della colonia passava per quello più corto. Perché? Una formica che ha scelto il ramo corto arriva prima al cibo e, quando torna, il ramo corto è già marcato dalla parte del cibo. Il percorso corto si marca più in fretta e comincia a vincere.
Definizione — modello della scelta del ramo (Deneubourg et al.)
Se all’inizio sul ramo corto e su quello lungo ci sono quantità di feromone A e B, una formica sceglie il ramo corto con probabilità
P = (k + A)h / ((k + A)h + (k + B)h),
dove k stabilisce quanto fortemente una formica reagisce a una traccia debole e h > 1 amplifica le differenze. La formica depone feromone all’inizio del ramo scelto e alla sua fine quando arriva.
Finché c’è poco feromone (meno di k), le formiche scelgono quasi a caso. Man mano che aumenta, decide sempre di più. L’esponente h = 2 fa sì che il doppio del feromone significhi un’attrazione quattro volte maggiore: un piccolo vantaggio si gonfia in fretta fino a diventare una netta prevalenza.
P = (k + A)h / ((k + A)h + (k + B)h)
- P
- la probabilità che la formica successiva prenda il ramo corto: la formica non decide con certezza, solo con un peso; il ramo lungo riceve il resto 1 − P
- A
- feromone sul ramo corto: l’unica cosa che la formica «sa» del percorso; più ce n’è, più il ramo corto attira
- B
- feromone sul ramo lungo: nel denominatore compete con il corto, quindi decide il rapporto tra le tracce, non la loro quantità assoluta
- k
- una «soglia di attenzione»: si somma allo stesso modo a entrambi i rami, così le prime molecole di feromone cambiano a malapena il rapporto; senza di essa la primissima formica deciderebbe per l’intera colonia
- h
- l’amplificatore: una potenza maggiore di 1 esagera la differenza; è proprio lei a trasformare un piccolo vantaggio casuale in retroazione positiva
Esempio — come decidono k = 30 e h = 2
Sul ramo corto ci sono A = 20 unità di feromone, su quello lungo B = 10:
P = (30 + 20)2 / ((30 + 20)2 + (30 + 10)2) = 2 500 / (2 500 + 1 600) = 2 500 / 4 100 ≈ 0,610.
- Tracce uguali (A = B, per esempio entrambe nulle): P = 0,500, puro caso.
- Cinque unità contro zero: P = 352 / (352 + 302) ≈ 0,576; una piccola traccia non decide quasi nulla, è il lavoro di k.
- A = 60, B = 10: P = 8 100 / (8 100 + 1 600) ≈ 0,835, già una netta prevalenza.
- Senza amplificazione (h = 1), con A = 20 e B = 10 verrebbe solo 50 / 90 ≈ 0,556 invece di 0,610.
Una simulazione del modello (k = 30, h = 2, dieci formiche per passo, ramo corto di 5 passi, lungo di 10) mostra la quota di feromone sul ramo corto in otto colonie:
Sette colonie si sono stabilizzate sul ramo corto, una su quello lungo: le primissime formiche hanno scelto per caso il ramo lungo e la retroazione positiva lo ha «bloccato». Su cento colonie, 85 sono finite sul ramo corto e 9 su quello lungo. Quando i due rami sono lunghi uguali, le colonie si dividono più o meno a metà (46 e 42): la simmetria la rompe il caso. La lunghezza del percorso sposta dunque il risultato, ma non lo garantisce. Vedremo la stessa debolezza nell’algoritmo.
3. Il sistema di formiche
Il sistema di formiche di Dorigo (Ant System, 1992) manda formiche virtuali su un grafo di città. Ciascuna costruisce un giro completo e, a seconda di quanto è corto, depone feromone sui suoi archi.
Definizione — giro e sua lunghezza
Sono date n città e distanze dij = dji > 0. Un giro è un ordine delle città π = (π1, …, πn) in cui ogni città compare esattamente una volta; la sua lunghezza è
L(π) = dπ1π2 + dπ2π3 + … + dπnπ1
— l’ultimo termine riporta il viaggiatore a casa. Un arco (i, j) appartiene al giro se i e j vi si susseguono direttamente. Il problema del commesso viaggiatore cerca il giro di lunghezza minima.
Definizione — regola di transizione
Una formica nella città i va in una città j non ancora visitata con probabilità
pij = τijα · ηijβ / ∑l τilα · ηilβ,
dove τij è il feromone sull’arco, ηij = 1 / dij è la visibilità (le città vicine sono più allettanti) e la somma corre su tutte le città non visitate l. I parametri α e β pesano la traccia rispetto alla distanza.
Una formica decide in base a due cose: quante compagne sono passate di lì (feromone) e quanto è lontano (visibilità). Non sceglie mai con certezza: favorisce soltanto alcune possibilità. Per questo ogni formica costruisce un giro un po’ diverso.
pij = τijα · ηijβ / ∑l ∈ Ni τilα · ηilβ
- pij
- la probabilità di un passo da i a j: estraiamo a sorte invece di scegliere il migliore, perché la colonia continui a provare anche altri giri
- τijα
- la memoria della colonia: il feromone porta l’esperienza delle formiche precedenti; l’esponente α dice quanto fidarsene (α = 0 la spegne del tutto)
- ηijβ
- avidità: η = 1 / d favorisce le città vicine; è un consiglio che abbiamo gratis fin dalla prima iterazione, quando il feromone non sa ancora niente
- ∑ … su Ni
- la somma dei pesi di tutte le città non ancora visitate: dividendo, i pesi diventano probabilità con somma 1; le città visitate non ci sono, quindi la formica non ci torna
Esempio — una decisione di una formica
Una formica si trova nella città i e le restano tre città: a 50, 100 e 150 km, con feromone τ = 1, 3 e 2. La costante nella visibilità si semplifica nella frazione, quindi calcoliamo con η = 100 / d, cioè 2, 1 e 2/3. Con α = 1 e β = 3:
- pesi: 1 · 23 = 8,000, 3 · 13 = 3,000, 2 · (2/3)3 ≈ 0,593;
- la loro somma 11,593;
- probabilità 0,690, 0,259 e 0,051.
Vince la città più vicina, pur avendo meno feromone. Con β = 1 verrebbe 0,316, 0,474 e 0,211: comanda il feromone. E con β = 0 decide solo la traccia: 0,167, 0,500 e 0,333 (proporzioni 1 : 3 : 2).
Definizione — aggiornamento del feromone
Dopo ogni iterazione il feromone evapora ovunque e ogni formica m aggiunge sugli archi del suo giro di lunghezza Lm una quantità proporzionale a 1 / Lm:
τij ← (1 − ρ) · τij + ∑m : (i, j) ∈ giro m Q / Lm,
dove ρ ∈ (0, 1) è il tasso di evaporazione.
I giri corti lasciano una traccia più forte, così gli archi che vi ricorrono spesso si rafforzano a poco a poco. L’evaporazione è dimenticare: una traccia che nessuno rinnova scompare. Senza di essa la colonia resterebbe aggrappata per sempre a ciò che ha scoperto nelle prime iterazioni.
τij ← (1 − ρ) · τij + ∑m : (i, j) ∈ giro m Q / Lm
- τij a sinistra
- il nuovo feromone sull’arco: ciò in base a cui decideranno le formiche della prossima iterazione
- (1 − ρ)
- evaporazione: ogni iterazione toglie a ogni traccia la stessa frazione ρ; l’esperienza vecchia si affievolisce così geometricamente e la colonia può riapprendere
- τij a destra
- il feromone finora: la memoria viene solo corretta, non si riparte da zero
- ∑m
- somma sulle formiche che hanno percorso l’arco: ogni formica aggiunge solo sugli archi del proprio giro; un arco usato da più formiche riceve di più: qui si contano i «voti» della colonia
- Q / Lm
- una ricompensa inversamente proporzionale alla lunghezza del giro: giro più corto = traccia più forte; la costante Q fissa solo la scala
Esempio — un aggiornamento
Un arco ha τ = 1, ρ = 0,3, Q = 1 000 e lo hanno percorso due formiche con giri lunghi 1 100 e 1 300 km:
τ ← 0,7 · 1 + 1 000 / 1 100 + 1 000 / 1 300 ≈ 0,700 + 0,909 + 0,769 = 2,378.
Un arco che nessuno ha percorso ha dopo la stessa iterazione solo 0,7. La formica con il giro più corto ha aggiunto di più (0,909 contro 0,769).
import random
def postav_okruh(start, n, tau, d, alfa=1, beta=3):
okruh, volna = [start], set(range(n)) - {start}
while volna:
i = okruh[-1]
kandidati = list(volna)
vahy = [tau[i][j] ** alfa * (1 / d[i][j]) ** beta for j in kandidati]
j = random.choices(kandidati, weights=vahy)[0]
okruh.append(j)
volna.remove(j)
return okruh
def aktualizuj(tau, okruhy, delka, rho=0.3, Q=1.0):
for radek in tau:
for j in range(len(radek)):
radek[j] *= 1 - rho # evaporazione
for okruh in okruhy:
L = delka(okruh)
for a, b in zip(okruh, okruh[1:] + okruh[:1]):
tau[a][b] += Q / L # giro più corto, traccia più forte
tau[b][a] += Q / L
L’intero sistema di formiche si limita poi ad alternare la costruzione dei giri e l’aggiornamento, e ricorda il miglior giro che qualcuno abbia mai costruito:
def mravenci_system(n, d, mravencu, iteraci, tau0):
tau = [[tau0] * n for _ in range(n)] # all’inizio uguale ovunque
nejlepsi = None
for it in range(iteraci):
okruhy = [postav_okruh(m % n, n, tau, d) for m in range(mravencu)]
aktualizuj(tau, okruhy, delka) # evaporazione + nuova traccia
kandidat = min(okruhy, key=delka)
if nejlepsi is None or delka(kandidat) < delka(nejlepsi):
nejlepsi = kandidat
return nejlepsi
4. Le formiche sui capoluoghi di regione
Liberiamo 13 formiche (una da ogni città) per 100 iterazioni con α = 1, β = 3 e ρ = 0,3. La mappa mostra il feromone sugli archi dopo la 1ª, la 5ª, la 20ª e la 100ª iterazione; più spessa è la linea, più feromone c’è:
Nella prima iterazione la traccia è distribuita quasi ovunque e il giro migliore misura 1 292,6 km. Già nella quinta iterazione una delle formiche trova l’ottimo di 1 060,4 km. Il feromone si concentra poi sugli archi dei giri buoni — le linee deboli spariscono, quelle forti restano — e la formica media costruisce un giro lungo circa 1 250 km. La colonia non converge del tutto, continua sempre a provare un po’.
Traccia dell’esecuzione per iterazioni: il giro migliore trovato finora e il giro medio delle tredici formiche nell’iterazione data:
| Iterazione | Migliore finora | Media dell’iterazione |
|---|---|---|
| 1 | 1 292,6 km | 1 477,7 km |
| 2 | 1 208,6 km | 1 424,0 km |
| 3 | 1 208,6 km | 1 450,0 km |
| 4 | 1 097,7 km | 1 376,7 km |
| 5 | 1 060,4 km | 1 330,2 km |
| 10 | 1 060,4 km | 1 267,7 km |
| 100 | 1 060,4 km | 1 247,2 km |
Il giro migliore migliora a salti (la terza iterazione non ha portato nulla di nuovo, la quarta ha tolto 111 km), mentre la media scende più lentamente e in modo irregolare: le formiche estraggono a sorte, quindi anche in una buona iterazione alcune costruiscono giri scadenti. La differenza tra la media e il migliore è proprio l’esplorazione che impedisce alla colonia di congelarsi del tutto.
Non sempre va così bene. Su venti esecuzioni con semi diversi solo 7 hanno trovato l’ottimo; la media è stata di 1 073,9 km e il risultato peggiore di 1 083,0 km. La ricottura, con 98 su 100 sullo stesso compito, è stata più affidabile. Per avere un’idea: il «vicino più prossimo» goloso, che va sempre nella città non visitata più vicina, dà da 1 120 a 1 336 km a seconda della partenza. Le formiche sono nettamente migliori, ma il sistema di formiche di base da solo non è un campione: per questo sono nate le sue varianti migliorate.
5. A che cosa servono α, β e ρ
Su tredici città si può risolvere molto anche senza feromone. La differenza la mostra solo un compito più grande: le stesse 60 città casuali dell’articolo sulla ricottura, 30 formiche, 150 iterazioni, media di tre esecuzioni:
| Impostazione | Lunghezza media | Migliore dei tre |
|---|---|---|
| α = 1, β = 3, ρ = 0,3 | 2 262,7 km | 2 194,0 km |
| α = 0 (senza feromone) | 3 049,8 km | 3 037,9 km |
| β = 0 (senza distanze) | 8 648,5 km | 8 422,4 km |
| ρ = 0,02 (il feromone quasi non evapora) | 2 374,5 km | 2 370,4 km |
| ρ = 0,9 (il feromone evapora quasi subito) | 2 274,1 km | 2 242,4 km |
- Senza feromone (α = 0) le formiche sono solo viaggiatori golosi casuali e non imparano nulla: giri più lunghi di un terzo.
- Senza distanze (β = 0) la colonia non ha nulla da cui partire: i primi giri sono del tutto casuali e il feromone che lasciano porta ad altri giri casuali.
- Un’evaporazione lenta mantiene troppo a lungo le tracce dei primi giri, scadenti, e la colonia impara lentamente. Un’evaporazione rapida, al contrario, dimentica anche ciò che è buono.
Per quanto tempo la colonia ricorda si può calcolare esattamente. Basta seguire un solo arco.
Teorema — feromone stazionario e tempo di dimezzamento dell’evaporazione
Se un arco riceve a ogni iterazione lo stesso incremento Δ ≥ 0, cioè τt+1 = (1 − ρ) τt + Δ, allora
τt = Δ/ρ + (1 − ρ)t (τ0 − Δ/ρ) → Δ/ρ per t → ∞.
Senza incremento (Δ = 0) la traccia scende alla metà in t½ = ln 2 / (−ln(1 − ρ)) iterazioni.
Dimostrazione. Sottraendo Δ/ρ da entrambi i membri della ricorrenza si ottiene τt+1 − Δ/ρ = (1 − ρ)(τt − Δ/ρ), perché (1 − ρ)Δ/ρ + Δ = Δ/ρ. Lo scarto da Δ/ρ viene dunque moltiplicato a ogni iterazione per il numero 1 − ρ ∈ (0, 1) e decresce geometricamente verso zero. Il tempo di dimezzamento è la soluzione di (1 − ρ)t = ½. ∎
τ* = Δ / ρ
- τ*
- il livello a cui si stabilizza il feromone dell’arco: apporto ed evaporazione sono in equilibrio
- Δ
- quanto riceve l’arco per iterazione: gli archi dei giri frequenti e corti hanno un Δ grande e quindi anche un livello alto
- ρ
- nel denominatore: un’evaporazione lenta lascia crescere molto le tracce e le differenze tra gli archi si livellano a lungo; una rapida le tiene basse e dipendenti solo dalle ultime iterazioni
Un arco con τ0 = 1 e ρ = 0,3: uno riceve a ogni iterazione Δ = 1, l’altro non lo usa nessuno.
| t | 0 | 1 | 2 | 3 | 5 | 10 |
|---|---|---|---|---|---|---|
| Δ = 1 | 1,00 | 1,70 | 2,19 | 2,53 | 2,94 | 3,27 |
| Δ = 0 | 1,00 | 0,70 | 0,49 | 0,34 | 0,17 | 0,03 |
L’arco usato si avvicina a 1/0,3 ≈ 3,33, quello inutilizzato in dieci iterazioni scende sotto tre centesimi. Il tempo di dimezzamento dell’evaporazione per le righe della tabella sopra: con ρ = 0,3 è di 1,94 iterazioni, con ρ = 0,02 ben 34,31 iterazioni — le tracce dei primi giri casuali dominano quindi ancora per decine di iterazioni — e con ρ = 0,9 solo 0,30 iterazioni, così la colonia ricorda praticamente solo l’ultimo turno.
L’impostazione migliore ha dato da 2 194 a 2 314 km, in modo paragonabile alla ricottura dell’articolo precedente, che sulle stesse città è finita tra 2 210 e 2 270 km.
6. Formiche migliori
- La strategia elitista aggiunge feromone extra sul miglior giro trovato finora, perché non vada perso.
- MAX–MIN Ant System (Stützle e Hoos, 2000) permette di deporre feromone solo alla formica migliore e mantiene τ tra un limite inferiore e uno superiore. Il limite inferiore garantisce che nessun arco scompaia del tutto, e così la colonia non si congela prematuramente, come quella che nell’esperimento del ponte è finita sul ramo lungo.
- Ant Colony System (Dorigo e Gambardella, 1997) sceglie con una certa probabilità direttamente l’arco migliore e toglie feromone già durante la costruzione del giro, perché le altre formiche provino altrove.
- Ricerca locale. In pratica ogni giro costruito da una formica viene ancora rifinito con mosse 2-opt dall’articolo sulla ricottura. Le formiche trovano una buona regione, l’hill climbing la perfeziona: negli anni Novanta questa combinazione era tra i metodi migliori per il commesso viaggiatore.
Definizione — strategia elitista e MAX–MIN Ant System
La strategia elitista aggiunge all’aggiornamento consueto ancora e · Q / Lbest su ogni arco del miglior giro trovato finora, di lunghezza Lbest; e è il numero di «formiche elitiste».
MAX–MIN Ant System depone feromone solo secondo l’unico giro migliore e taglia il risultato all’intervallo [τmin, τmax]:
τij ← min(τmax, max(τmin, (1 − ρ) τij + Δij)), dove Δij = 1 / Lbest per gli archi del giro migliore, altrimenti 0.
Come limite superiore Stützle e Hoos scelgono τmax = 1 / (ρ Lbest), esattamente il valore stazionario Δ/ρ del teorema sopra per un arco che si trova ogni volta nel giro migliore. Il limite inferiore è una piccola frazione di quello superiore; inoltre all’inizio il feromone viene impostato a τmax, perché le prime iterazioni esplorino il più ampiamente possibile.
Definizione — regole di Ant Colony System
Regola proporzionale pseudocasuale: una formica nella città i estrae q da [0, 1). Se q ≤ q0, va direttamente nella città con il peso maggiore, j = arg maxl ∈ Ni τil · ηilβ; altrimenti sceglie a sorte secondo la regola di transizione del sistema di formiche.
Aggiornamento locale: subito dopo il passaggio sull’arco (i, j), τij ← (1 − ξ) τij + ξ τ0, così un arco usato si indebolisce un po’ verso il valore iniziale τ0.
Aggiornamento globale dopo un’iterazione, solo sugli archi del giro migliore: τij ← (1 − ρ) τij + ρ / Lbest.
Dorigo e Gambardella (1997) nell’articolo originale usano q0 = 0,9, β = 2 e ρ = ξ = 0,1: in nove passi su dieci la formica prende quindi l’arco migliore e solo nel decimo esplora.
7. Dove lavorano le formiche
- Instradamento nelle reti. L’algoritmo AntNet (Di Caro e Dorigo, 1998) manda nella rete piccoli pacchetti-formica che misurano i ritardi e aggiornano le tabelle di instradamento. La rete si adatta così di continuo alla congestione.
- Percorsi dei veicoli e pianificazione. Consegna delle merci, raccolta dei rifiuti o ordine delle commesse in produzione: compiti affini al commesso viaggiatore, in cui gli algoritmi a formiche si usano insieme alla ricerca locale.
- Intelligenza di sciame. Una colonia di formiche è uno degli esempi di come da individui semplici e regole locali nasca un comportamento intelligente dell’insieme. Un altro, lo sciame di particelle, è il tema del prossimo articolo.
8. Riepilogo
- Le formiche comunicano con tracce nell’ambiente (stigmergia): un percorso più corto si marca più in fretta e la retroazione positiva lo rafforza.
- Nel modello del doppio ponte 85 colonie su 100 si stabilizzano sul ramo corto, ma il caso può bloccare anche quello lungo.
- Il sistema di formiche sceglie la città successiva in base al feromone τα e alla distanza ηβ; il feromone evapora al tasso ρ e i giri corti ne aggiungono di più.
- Sui capoluoghi di regione ha trovato l’ottimo, ma solo in 7 esecuzioni su 20; su 60 città se l’è cavata in modo paragonabile alla ricottura. Senza feromone e senza distanze, nettamente peggio.
- Le varianti usate nella pratica (MAX–MIN, ACS) impediscono il congelamento prematuro e combinano le formiche con la ricerca locale.
Vuoi provare di persona? Chiedi a un agente IA di scrivere una simulazione del doppio ponte e prova che cosa succede se a metà esperimento «chiudi» il ramo corto: la colonia riesce a tornare su quello lungo?
La vedi diversamente? Scrivi a support@coden-app.com.