Algoritmi Genetici
Laboratorul 3
Algoritmi Genetici
Metoda este inspurată din teoria evoluţionistă a lui Darwin. Lucrează cu o populaţie de soluţii candidat, care evoluează şi se adaptează unui mediu (în cazul de faţă, mediul este funcţia de optimizat). Genotipul suferă modificări:
- în urma mutaţiei (modificarea unei gene din codificarea unui individ)
- în urma recombinării codului genetic a doi indivizi)
După principiul evoluţionist survival of the fittest, de la o generaţie la alta se va favoriza supravieţuirea celor mai buni (bine adaptaţi) indivizi.
Terminologie
- individ (cromozom) = soluţie candidat, codificată ca la laboratorul 2
- cromozomii sunt compuşi din gene (trăsături)
- fiecare genă se găseşte în cromozom la o poziţie (locus / loci)
- diferitele valori pe care le poate lua o gena se numesc allele
Pseudocod
begin
t := 0
initialize the population P(t)
evaluate P(t)
while (not termination-condition) do
begin
t := t + 1
select P(t) from P(t -1)
alter P(t)
evaluate P(t)
end
end
Componente
Trebuie definite:
- reprezentarea solutiilor problemei
- o metoda de a genera populatia initiala
- metoda de selectie
- functia de evaluare
- operatorii genetici
- valorile parametrilor algoritmului genetic (dimensiunea populatiei, probabilitatile de aplicare a operatorilor, etc.)
- criteriul de oprire
- Funcţia fitness
- Măsoară cât de bine adaptat (fit) la mediu este un individ. Aceasta se bazează pe funcţia de optimizat. Trebuie să fie pozitivă şi cu atât mai mare cu cât individul este mai bun (motiv: vezi procedura de selecţie).
- Indicii pentru obţinerea unei funcţii fitness cu proprietăţile precizate, pe baza unei funcţii de test oarecare:
- o problemă de minimizare a unei funcţii f(x) este echivalentă cu problema de maximizare a funcţiei -f(x) sau a funcţiei 1/f(x)
- o funcţie f(x) care are şi valori negative poate fi "translată" cu o constantă C, astfel încât f(x)+C sa fie mereu pozitiv (trebuie ca: C >= abs(min(f(x))))
- Iniţializarea populaţiei
- Se generează un număr pop_size de soluţii candidat, reprezentate ca la laboratorul 2. Generarea poate fi aleatoare, sau poate folosi o altă metodă (de exemplu Hill Climbing) pentru asigurarea unei calităţi mai ridicate a candidaţilor iniţiali.
- Evaluarea populaţiei
- Fiecare soluţie candidat este decodificată şi se va calcula pentru ea funcţia fitness (care poate fi diferită de funcţia obiectiv!)
- Selecţia noii generaţii din cea anterioară
- Selecţia se face în funcţie de fitness, favorizându-se supravieţuirea celor mai buni indivizi. Exemple de selecţie:
-
Roata norocului
Indivizii sunt selectaţi în noua populaţie cu o probabilitate proporţională cu fitness-ul.
Prepare the "fortune wheel": for (i := 0; i < pop_size; i++) compute the fitness of the individual vi compute the total fitness of the population: F := sum(fitness(vi)) for (i := 0; i < pop_size; i++) compute the probability of selecting the individual vi: pi = fitness(vi)/F compute the cumulative probability: qi+1 = sum(pj), 0 <= j <= i q0 := 0 The actual selection: for (i := 0; i < pop_size; i++) fortune := random(0,1) select the vj for which qj <= fortune < qj+1 new_population[i] := vj
Unii indivizi pot avea mai multe copii în noua populaţie, alţii pot avea 0. -
Turneu
Indivizii "se luptă" în grupuri de câte m, alese aleator. Cei mai buni n din fiecare grup sunt selectaţi.
-
Bazată pe ierarhie
Este asemănătoare selecţiei de tip roata norocului, cu diferenţa că probabilitatea de selecţie nu este proporţională cu fitness-ul, ci depinde de poziţia individului în lista ordonată a indivizilor din populaţie. Această variantă reduce şansa ca indivizii slabi să fie "sufocaţi" de cei cu fitness foarte mare.
-
Roata norocului
- Alterarea indivizilor
-
Se face prin intermediul operatorilor genetici, de încrucişare şi mutaţie.
-
Încrucişarea
Combină trăsăturile a doi cromozomi părinţi, rezultând urmaşi care moştenesc parţial aceste trăsături. Afectează cromozomii cu o probabilitate pc. Numărul de indivizi care participă la încrucişări într-o generaţie este estimat de pc * pop_size.
Selectarea indivizilor care vor suferi incrucisare:
for each individual vi if (rand(0,1) < pc) select vi for crossoverVariante:
- Încrucişarea cu un punct de tăiere, ales aleator. Exemplu:
01 001011 _\ 01 111100 10 111100 / 10 001011
- Încrucişarea cu n puncte de tăiere, generate aleator. Exemplu (n=3):
01 0 010 11 _\ 01 1 010 00 10 1 111 00 / 10 0 111 11
- Încrucişare uniformă: pentru fiecare locus, se selectează probabilist gena unuia dintre părinţi.
- Încrucişarea cu un punct de tăiere, ales aleator. Exemplu:
-
Mutaţia
Alterează una sau mai multe gene alese arbitrar dintr-un cromozom. Probabilitatea de mutaţie este dată de parametrul pm. Numărul de gene care suferă mutaţie este estimat de pm * chromosome_length * pop_size. Aplicarea mutaţiei:
for each individual vi for each locus l if (rand(0,1) < pm) mutate gene vi[l]Dacă se foloseşte reprezentarea ca şir de biţi, mutaţia constă în schimbarea valorii bitului respectiv din 0 în 1 sau invers.
Exemplu:
00100100 00100000
-
Încrucişarea
- Parametrii "standard"
- pop_size = 50 indivizi
- probabilitatea de mutaţie pm = 0.01
- probabilitatea de încrucişare pc = 0.25
- Criterii de oprire
- atingerea unui număr TMAX de iteraţii
- nici o îmbunătăţire a soluţiei în ultimele TW (sau TW(t)) iteraţii
- ...
Temă
Implementaţi un algoritm genetic pentru a găsi punctele de extrem ale funcţiilor propuse la laboratorul 1.
Ilustraţi prin grafice modul în care evoluează soluţiile. Graficul trebuie sa exprime fitness-ul maxim, minim si mediu din fiecare generatie.
Realizaţi un scurt raport (format text) care să precizeze:
- timpul minim, mediu şi maxim de execuţie
- cea mai buna şi cea mai slaba soluţie, precum si media soluţiilor obţinute după un număr de rulări.