Documente Academic
Documente Profesional
Documente Cultură
rezolvata cu algoritmi
evolutivi
Catalin Stoean
catalin.stoean@inf.ucv.ro
http://inf.ucv.ro/~cstoean
Catalin
Inteligenta Artificiala
Stoean
Mutaţia Reproducerea
5/27
Catalin
Inteligenta Artificiala
Stoean
6/27
Catalin
Inteligenta Artificiala
Stoean
Funcţia obiectiv
7/27
Catalin
Inteligenta Artificiala
Stoean
Selecţia
Procesul de selecţie apare de două ori în cursul unei
parcurgeri a ciclului cât timp a algoritmului evolutiv
prezentat anterior.
Selecţia pentru reproducere (selecţia părinţilor), când
sunt aleşi părinţii generaţiei următoare
Selecţia pentru înlocuire (selecţia pentru supravieţuire),
care apare când indivizii care vor forma populaţia din
următoarea generaţie sunt aleşi dintre descendenţii
obţinuţi şi indivizii din populaţia curentă.
Modul în care creşte calitatea generală a soluţiilor depinde
de ambele tipuri de selecţie.
8/27
Catalin
Inteligenta Artificiala
Stoean
Selecţia turnir
Se selectează în mod aleator k indivizi şi sunt evaluaţi.
Cel mai bun dintre aceştia este selectat ca şi părinte pentru
populaţia din generaţia următoare.
Algoritmul de mai jos selectează N părinţi din generaţia curentă.
i=1
Cât timp i < N execută
Selectează k indivizi în mod aleator din întreaga populaţie
Selectează-l pe cel mai performant individ s din cei k
părinţi[i] = s
i=i+1
Sfârşit cât timp
10/27
Catalin
Inteligenta Artificiala
Stoean
11/27
Catalin
Inteligenta Artificiala
Stoean
Mutaţia
Acţionează asupra unui individ şi produce un altul.
După ce se aplică asupra unui individ, rezultatul
(descendent) conţine mici modificări faţă de individul
iniţial.
Operatorul face ca toate valorile unei gene să fie
disponibile pentru procesul de căutare.
Genele ale căror valori sunt considerate pentru a fi
schimbate sunt alese printr-o manieră probabilistă.
Un parametru al algoritmului evolutiv este dat de
probabilitatea de mutaţie.
12/27
Catalin
Inteligenta Artificiala
Stoean
1 3 5 2 6 4 7 8 1 3 7 2 6 4 5 8
14/27
Catalin
Inteligenta Artificiala
Stoean
Recombinarea
Recombinarea sau încrucişarea implică doi sau mai mulţi indivizi
(părinţi) aleşi cu o anumită probabilitate de încrucişare în
scopul de a genera unul, doi sau mai mulţi indivizi prin
combinarea genelor părinţilor.
Recombinarea reprezintă un operator stochastic devreme ce
alegeri precum ce părţi să fie moştenite de la un părinte şi ce
părţi de la alt părinte sau modul în care părţile acestea sunt
combinate sunt făcute în mod aleator.
Prin împreunarea a doi indivizi cu caracteristici diferite, este
obţinut un descendent (sau doi) care combină aceste
caracteristici.
15/27
Catalin
Inteligenta Artificiala
Stoean
1 3 5 2 6 4 7 8 1 3 5 8 6 7 4 2
8 5 6 7 4 3 2 1 8 5 6 1 3 2 4 7
16/27
Catalin
Inteligenta Artificiala
Stoean
17/27
Catalin
Inteligenta Artificiala
Stoean
18/27
Catalin
Inteligenta Artificiala
Stoean
Initializarea distantelor
19/27
Catalin
Inteligenta Artificiala
Stoean
Initializarea populatiei
Numarul de
orase
functie initializare() intoarce populatia
Pentru fiecare j = 0 pana la dimensiunea populatiei executa
M = {1, 2, …, n}
i=0
Cat timp (lungime(M) > 0) executa
g = (int)(lungime(M) * random(1))
individ[j][i++] = M[g]
Scoate elementul M[g] din multimea M
lungime(M)--;
Sfarsit cat timp
Sfarsit pentru
intoarce individ
20/27
Catalin
Inteligenta Artificiala
Stoean
Functia de evaluare
21/27
Catalin
Inteligenta Artificiala
Stoean
Selectia turnir
Mutatie
functie mutatie() intoarce populatie
Pentru i = 0 pana la dimensiunea_populatiei executa
Pentru j = 0 pana la lungime(individ) executa
p = random(1)
Daca (p < pm) atunci
x = (int)(lungime(individ) * random(1))
Cat timp (x == j) executa
x = (int)(lungime(individ) * random(1))
Sfarsit cat timp
temp = individ[x]
individ[x] = individ[j]
individ[j] = temp
Sfarsit daca
Sfarsit pentru
Sfarsit pentru
intoarce individ
23/27
Catalin
Inteligenta Artificiala
Stoean
Incrucisare
functie incrucisare() intoarce populatie
j = 0;
Pentru i = 0 pana la dimensiunea_populatiei executa
p = random(1)
Daca (p < pc) atunci
parinte[j++] = individ[i]
Sfarsit daca
Safrsit pentru
Punem in individ_nou toti indivizii care nu au fost alesi ca parinti.
Pentru (i = 0; i < j; i +=2)
punct_taietura = (int)(lungime(individ) * random(1))
Pentru k = 0 pana la punct_taietura executa
descendent1[k] = parinte[i][k]
descendent2[k] = parinte[i + 1][k]
Sfarsit pentru
24/27
Catalin
Inteligenta Artificiala
Stoean
Incrucisare (continuare)
functie incrucisare() intoarce populatie
…………
Pentru q = 0 pana la lungime(individ) executa
exista = fals;
Pentru k = 0 pana la punct_taietura executa
Daca parinte[i + 1][q] == descendent1[k])
exista = adevarat;
Sfarsit daca
Daca (!exista)
descendent1.[punct_taietura++] = parinte[i + 1][j];
Sfarsit daca
Sfarsit pentru
Sfarsit pentru
//analog se procedeaza pentru al doilea descendent
25/27
Catalin
Inteligenta Artificiala
Stoean
Incrucisare (continuare 2)
26/27
Catalin
Inteligenta Artificiala
Stoean
Algoritmul evolutiv
individ = initializare()
Pentru t = 0 pana la numarul total de generatii executa
individ = selectie_turnir(individ)
individ = incrucisare()
individ = mutatie()
Sfarsit pentru
27/27