Algoritmo di colonia di formiche


13

Sono uno studente che lavora su un simulatore di colonie di formiche per un progetto di corso. L'algoritmo per esso è (ovviamente) un algoritmo di colonia di formiche. So che ci sono varie forme dell'algoritmo ma tutte erano troppo dettagliate matematicamente per noi, quindi abbiamo adottato un approccio in cui abbiamo:

  • Una formica nasce in una colonia e deve raccogliere cibo da una fonte per sostenere la colonia.
  • Tutte le formiche sono simili.
  • L'area in cui si muove la formica è una griglia di 1000x1000, quindi ogni punto della griglia funge da punto valido per l'occupazione di una formica. Ora, tutti gli algoritmi che ho riscontrato coinvolgono il trattamento di vertici e bordi separatamente, ma poiché stiamo limitando il movimento delle formiche a solo quattro direzioni (su, giù, a sinistra, a destra) immagino che non importa dove mettiamo il feromone.
  • I punti della griglia sopra menzionati memorizzano il feromone.
  • Una formica fa cadere il feromone solo se trasporta cibo.
  • Per una formica in una posizione (i, j), decide dove spostarsi nel passaggio successivo prendendo in considerazione le quantità di feromoni sui suoi quattro nodi adiacenti in una semplice formula probabilistica, ovvero la probabilità di viaggiare verso un nodo è data da (quantità di feromone in un particolare nodo adiacente) / (somma di quantità di feromone in 4 nodi adiacenti).
  • Una formica non può tornare nella posizione da cui è appena arrivata. Può farlo solo se si trova in un sito che ha cibo o è nella sua colonia.

Ora la mia preoccupazione è (e ciò che sta realmente accadendo nel nostro programma) che quando una PRIMA formica raggiunge una posizione che ha cibo e lo prende, allora il nostro algoritmo funziona, può spostarsi ovunque! Questo perché lascerà solo una scia di feromoni, una volta che avrà il cibo e non prima e dato che è la prima formica, non c'è traccia esistente.

Se la formica può spostarsi ovunque, anche le formiche che raggiungono la fonte di cibo dopo tenderanno a seguirla. ANCHE SE non si sta spostando indietro verso la colonia. Ciò vanifica lo scopo dell'intero algoritmo.

Quindi le mie domande sono

  • La preoccupazione di cui sopra è valida? Se no, allora perché? Se sì, allora come gestirlo?
  • Dobbiamo apportare alcune modifiche alla nostra comprensione di base dell'algoritmo per farlo funzionare davvero?
  • Quali sono alcune altre cose sottili ma importanti che i principianti come me potrebbero perdere in questo caso?

1
Se costruissi una colonia di formiche, avrei due tipi di segni di feromoni: "normale", sempre lasciato dove viaggia una formica, e "cibo", lasciato solo da una formica che trasporta cibo. Una formica si muove verso una maggiore concentrazione di feromone "normale" se trasporta cibo, altrimenti verso segni di "cibo". Inoltre renderei le formiche "affamate" e "saziate"; una formica affamata viaggia verso segni "alimentari" ma lontano da segni "normali", al fine di cercare nuove fonti alimentari. (Mi piacerebbe anche fare la griglia esagonale, ma non è questo il punto.)
9000

Mentre ci sono molte varianti, penso che la maggior parte degli algoritmi della colonia di formiche supponga che la formica possa ricordare di essere tornata a casa. IOW, conosce già i nodi che ha visitato. Il feromone entra in gioco per le formiche che viaggiano a caso.
Dunk

Hai mai giocato a simant ?

"So che ci sono varie forme dell'algoritmo, ma tutte erano troppo dettagliate matematicamente per noi, quindi abbiamo adottato un approccio in cui abbiamo ..." Sei sicuro che stai effettivamente facendo il compito che ti è stato assegnato se non potessi ' capisci gli algoritmi?
Doval,

@ Doval: non ci resta che fare un progetto a nostra scelta. Non eravamo vincolati a un campo in alcun modo. Il corso è introduttivo in C ++. I nostri istruttori vogliono solo che abbiamo esperienza nello sviluppo di software.
transistor

Risposte:


6

Non è così che funziona ACO. L'ACO fa cadere i feromoni solo dopo che le formiche si sono mosse attraverso tutti i punti della griglia. Quindi valuti qualcosa (forse il tempo di viaggio totale) e poi lasci cadere i feromoni per le buone formiche e ripeti.

In genere non si spostano due volte sullo stesso vertice, sebbene sia possibile personalizzarlo per la specificità dell'implementazione.

I feromoni non vengono rilasciati ad ogni mossa, cadono dopo che si muovono ovunque e qualcosa viene valutato per determinare quali sono le formiche migliori. Le formiche che sono meglio quindi rilasciano i fereomoni (forse le migliori formiche con il 25% di prestazioni).


Non sono d'accordo - ACO può funzionare rilasciando pheremone ad ogni passo, specialmente quando l'obiettivo è simulare una colonia di formiche (algoritmi ACO per risolvere problemi diversi da "questo è ciò che fa una colonia di formiche" prendere provvedimenti per rendere l'algoritmo più efficiente, ma non necessariamente come le formiche vere).
Pickup Logan,

1

Le implementazioni che ho visto da altri, e quelle che ho scritto per me stesso, hanno sempre avuto le formiche rilasciare i feromoni lungo il percorso che hanno percorso per arrivare al cibo, una volta che hanno raggiunto il cibo. Cioè, le formiche marciano dalla loro colonia al cibo seguendo una camminata casuale; i percorsi seguiti dalle formiche dalla colonia al cibo vengono quindi contrassegnati usando i feromoni solo dopo che le formiche sono riuscite a raggiungere il cibo. Il viaggio di ritorno non viene simulato esplicitamente. In generale, più formiche seguono il loro corso prima che i feromoni vengano depositati per l'attuale iterazione. I feromoni vengono quindi distribuiti per i percorsi di successo e inizia un nuovo round.

Di solito, le probabilità della formica di entrare in un dato nodo sono ponderate dalla quantità di feromoni per qualche misura di "bontà". Ad esempio, la misura della bontà potrebbe essere qualcosa di simile all'inverso della distanza tra la formica e il cibo - questo manterrà le formiche che cercano di spostarsi verso il cibo, indipendentemente dai precedenti depositi di feromoni. La bontà potrebbe essere ulteriormente ponderata per tenere conto di altri fattori, ad esempio alcuni nodi potrebbero essere più facili da percorrere rispetto ad altri. E come sottolinea Enderland, in genere esiste una qualche forma di "selezione" del percorso una volta che tutte le formiche hanno eseguito con successo i loro corsi, dove solo una parte dei percorsi "migliori" viene scelta per il deposito di feromoni. Tuttavia, dovresti comunque ottenere percorsi ragionevoli anche senza selezione,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.