2011-09-26 12 views
6

Sto scrivendo un algoritmo genetico. La mia popolazione sviluppa rapidamente una monocoltura. Sto usando una piccola popolazione (32 individui) con un piccolo numero di geni discreti (24 geni per individuo) e un approccio di accoppiamento incrociato a punto singolo. Combinalo con una strategia di selezione della ruota della roulette ed è facile vedere come tutta la diversità genetica si perde in poche decine di generazioni.Prevenire consanguineità e la monocoltura in algoritmo genetico (domanda newbie)

Quello che vorrei sapere è, qual è la risposta adeguata? Non ho conoscenze di livello accademico su GA e solo alcune soluzioni mi vengono in mente:

  1. Utilizzare una popolazione più ampia. (lento)
  2. Utilizzare i controlli di runtime per impedire l'in-breeding. (lento)
  3. Utilizzare più punti di incrocio. (non molto efficace)
  4. Aumentare il numero di mutazioni.

Quali sono le risposte adeguate alla situazione?

risposta

3

Guarderei una popolazione più grande, 32 individui individuali sono una popolazione molto piccola. Di solito eseguo GA con una popolazione almeno nel numero di cromosomi^2 (per esperienza) per ottenere una buona distribuzione iniziale di individui.

Un possibile modo per velocizzare le cose con una popolazione più ampia consiste nel generare thread diversi (1 per individuo, eventualmente in lotti) durante l'esecuzione della funzione fitness (di solito la parte più costosa di un GA).

Supponendo che una popolazione di 32 e un sistema Quad core, genera thread in gruppi di 8 (2 thread per CPU si intersecano bene) e si dovrebbe essere in grado di eseguire circa 4 * più veloce.

Pertanto, se si dispone di un limite di tempo su quanto tempo per eseguire il GA, questa può essere una soluzione.

+0

che sto facendo progressi in movimento la mia funzione di fitness per la GPU utilizzando CUDA. Ho aumentato la popolazione a 4096 e ho ottenuto risultati migliori. Mi piace la tua regola di population_size> num_genes^2. – ahoffer

+0

Grazie, ma ricorda che è solo una regola empirica personale, e non ho dati per eseguirne il backup a parte l'istinto e l'esperienza personale. :) – NWS

3

È possibile aggiungere a questo:

  • selezione torneo invece di roulette
  • isola separata schema a più della popolazione, con la migrazione
  • riavvio
  • incorporando idee dalla stima degli algoritmi di distribuzione (EDA) (ricampionamento il dominio in prossimità di aree promettenti per introdurre nuovi individui)
+0

+1 soprattutto per la separazione dell'isola –

Problemi correlati