Sunteți pe pagina 1din 34

3.

Algoritmi genetici

3.1.Introducere. Prezentare general

Algoritmii genetici (GA) au fost dezvoltai iniial de Holland (Holland, 1975) ca un
instrument de studiu al comportamentului de tip adaptiv. Chiar dac nu ntotdeauna corect (De
Jong), GA sunt n general considerai ca aparinnd clasei metodelor de optimizare.
Un GA clasic (sau canonic) este caracterizat astfel. Reprezentarea populaiei este
realizat prin intermediul irurilor binare, operatorul de selecie a unui individ n multisetul
prinilor este proporional cu valoarea funciei de evaluare calculat pentru acel individ,
probabilitatea efecturii unei mutaii este sczut, accentul fiind pus pe procesul de recombinare,
de inspiraie biologic, ca mijloc de generare a noi candidai la soluie.
Un exemplu simplu relativ la evoluia unui GA este prezentat n (Goldberg, 1989) i se
refer la maximizarea funciei ()

, cu * +. Un fenotip (numr din cuprins


ntre 0 i 31) este reprezentat printr-un ir binar de lungime 5 (pe 5 bii pot fi reprezentate
numerele din cuprins ntre 0 i

). Dimensiunea populaiei,dim, este 4. Populaia


iniial este generat aleator, din distribuia uniform pe * +. Prin apelul funciei
MATLAB genereaza_ini(dim) este generat pop, populaia iniial. Reprezentarea cromozomial
a fiecrui fenotip x pe m bii (aici ) este y, obinut prin apelul funciei repr_bin(x,m).
Pentru un cromozom dat, y, reprezentat pe m bii, fenotipul corespunztor lui este calculat prin
funcia MATLAB repr_int(y,m).

function [pop]=genereaza_ini(dim);
pop=zeros(dim,6);
%fiecare membru al populatiei este un numar natural, cuprins inte 0 si
%31,reprezentat printr-un sir binar de dimensiune 5
%la care este adaugata valoarea functiei obiectiv
for i=1:dim
%genereaza dim numere intre 0 si 31, distribuite uniform - functia
%unidrnd cu primul parametru N genereaza uniform numere de la 1 la N
%genereaza numere de la 1 la
x=unidrnd(32)-1;
pop(i,1:5)=repr_bin(x,5);
%evaluarea fiecarui membru al populatiei prin intermediul functiei
%obiectiv
pop(i,6)=f_obiectiv(x);
end;
disp(pop);
end

function [y]=repr_bin(x,m);
y=bitget(x,m:-1:1);
end

function [x]=repr_int(y,m);
x=0;
% fiecare bit al lui x, initializat cu 0,este setat conform
% reprezentarii y
for i=1:m
x=bitset(x,m-i+1,y(i));
end;
end

function [val]=f_obiectiv(x);
val=x^2;
end

Probabilitatea de selecie a prinilor este calculat astfel:
1. Pentru fiecare cromozom

, corespunztor fenotipului

, este calculat
performana sa, prin funcia de evaluare

);
2. Este determin performana ntregii populaii
(


3. Pentru fiecare cromozom

, este calculat probabilitatea de selecie,


i probabilitatea cumulat



Observaie. Evident, o parte a cromozomilor populaiei curente poate fi selectat de mai
multe ori. Acest lucru corespunde intuitiv ideii conform creia cei mai buni cromozomi genereaz
mai muli copii, iar cei mai slabi dispar.

Pentru o populaie dat, pop, prin apelul funciei MATLAB selectie_parinti(pop) este
realizat calculul probabilitii de selecie, al probabilitii cumulate, al numrului de apariii a
fiecrui individ n bazinul de mperechere i este implementat o modalitate de alegere a acestuia,
pe baza unei proceduri de tip rulet (prezentat mai amplu n 3.6).
Bazinul de mperechere (multisetul prinilor) este creat prin selecii aleatoare pe baza
distribuiei de probabilitate cumulat astfel. Procesul de selecie const n rotirea ruletei de dim
ori. De fiecare dat este selectat un cte un singur cromozom astfel:
1. Se genereaz aleator un numr ,-;
2. Dac

este selectat

; altfel, este selectat cromozomul

, cu proprietatea



function [parinti,p,q]=selectie_parinti(pop);
[dim,m]=size(pop);
% aici m este 6, adica numarul de biti+1(valoarea fitness)
p=zeros(dim,1);
p(1:dim)=pop(1:dim,6);
s=sum(p);
p(1:dim)=p(1:dim)/s;
q=zeros(dim,1);
for i=1:dim
q(i)=sum(p(1:i));
end;
parinti=zeros(dim,m);
for k=1:dim
r=unifrnd(0,1);
pozitie=1;
for i=1:dim
if(r<q(i))
pozitie=i;
break;
end;
end;
parinti(k,1:m)=pop(pozitie,1:m);
end;
end

Indivizii selectai n populaia de prini interschimb material genetic prin aplicarea
operatorului de ncruciare. Prinii sunt mperecheai aleator, din fiecare pereche rezultnd doi
copii astfel. Fie

perechea de puncte selectate. Este generat pozitie, un numr aleator n


intervalul ,- i sunt efectuate operaiile (m=5 dimensiunea reprezentrii binare)
copiaz primele pozitie elemente din

, respectiv din


copiaz n ultimele m- pozitie +1 poziii din

, respectiv

, ultimele m- pozitie
+1 elementele din

, respectiv

.
Funcia MATLAB crossover(pop) furnizeaz copiii populaiei pop, popN, obinui pe baza
mecanismului explicat mai sus.

function [popN]=crossover(pop);
[dim,n]=size(pop);
popN=zeros(dim,n);
m=n-1;V=[];
for k=1:dim/2
% determinarea a doi indivizi distincti si care nu au fost selectati
% anetrior
poz=zeros(2,1);
for i=1:2
poz(i)=unidrnd(dim);
while(ismember(poz(i),V))
poz(i)=unidrnd(dim);
end;
V=[V poz(i)];
end;
% incrucisarea celor doi indivizi; rezulta y1,y2
disp('Incrucisare intre indivizii din pozitiile');
disp(poz);
x1=pop(poz(1),1:n);y1=x1;
x2=pop(poz(2),1:n);y2=x2;
% genereaza pozitia din care se face interschimbul
pozitie=unidrnd(4);
disp('Punctul de incrucisare');
disp(pozitie);
y1(pozitie+1:m)=x2(pozitie+1:m);
y2(pozitie+1:m)=x1(pozitie+1:m);
y1(m+1)=f_obiectiv(repr_int(y1(1:m),m));
y2(m+1)=f_obiectiv(repr_int(y2(1:m),m));
popN(2*(k-1)+1,1:n)=y1(1:n);
popN(2*k,1:n)=y2(1:n);
end;
end

Multisetul urmailor direci rezultai este supus operaiei de mutaie, efectuate cu
probabilitatea pm. n cadrul unui GA clasic, operatorul mutaie este aplicat astfel. Pentru fiecare
gen din fiecare cromozom este generat r, un numr aleator n intervalul ,-. Dac ,
atunci gena respectiv sufer o mutaie (valoarea este schimbat din 0 n 1, respectiv din 1 n 0).
n general probabilitatea efecturii unei mutaii este foarte mic (de exemplu 0.001). n exemplul
nostru, deoarece numrul de indivizi este foarte mic, am considerat . Apelul funciei
MATLAB mutatie(pop,pm) determin obinerea unei noi populaii, popN, n urma efecturii
mutaiei asupra populaiei curente pop.

function [popN]=mutatie(pop,pm);
[dim,n]=size(pop);
popN=pop;
m=n-1;
for i=1:dim
efectuat=0;
for k=1:m
r=unifrnd(0,1);
if(r<pm)
disp('Mutatie efectuata in cromozomul'); disp(i);
disp('Gena');disp(k);
popN(i,k)=not(popN(i,k));
efectuat=1;
end;
if(efectuat)
popN(i,n)=f_obiectiv(repr_int(popN(i,1:m),m));
end;
end;
end

ntr-un GA clasic, selecia supravieuitorilor este de tip generaie, n sensul c, la fiecare
moment de timp, noua populaie rezult prin nlocuirea populaiei curente cu urmaii direci i
care au suferit eventuale mutaii. n urmtoarea surs MATLAB este descris generarea
populaiei iniiale i obinerea urmtoarei generaii, conform mecanismelor descrise mai sus.

function []=o_iteratie();
dim=4;
[pop]=genereaza_ini(dim);
disp('Populatia initiala si valorile functiei obiectiv');
disp(pop);
[parinti,p,q]=selectie_parinti(pop);
disp('Probabilitatile de selectie');
disp(p);
disp('Probabilitatile cumulate');
disp(q);
disp('Bazinul de imperechere si valorile functiei obiectiv');
disp(parinti);
disp('Operatia de incrucisare');
popN=crossover(parinti);
disp('Copii rezultati');
disp(popN);
disp('Operatia de mutatie');pm=0.01;
[popN]=mutatie(popN,pm);
disp('Populatia rezultata');
disp(popN);
end

La o execuie a acestei funcii pot fi obinute urmtoarele date.



Populaia iniial
Indice
cromozom
Cromozom Valoarea
funciei obiectiv
Probabilitate
a de selecie
Probabilitatea
cumulat
1 0 1 0 0 0 64 0.0566 0.0566
2 1 1 0 0 1 625 0.5531 0.6097
3 1 0 1 0 1 441 0.3903 1.0000
4 0 0 0 0 0 0 0 1.0000



Populaia selectat pentru recombinare i populaia rezultat
Bazinul de mperechere selectat i modul de mperechere Indivizii rezultai (copiii)
Indice
cromozom
Cromozom Valoarea
funciei
obiectiv
mperecherea Cromozom Valoarea
funciei
obiectiv
1 1 1 0 0 1 625 Cromozomii 1
i 2, punctul de
ncruciare 4
1 1 0 0 1 625
2 1 1 0 0 1 625 1 1 0 0 1 625
3 1 0 1 0 1 441 Cromozomii 3
i 4, punctul de
ncruciare 3
1 1 0 0 1 625
4 1 1 0 0 1 625 1 0 1 0 1 441

Efectuarea operaiei de mutaie
Populaia urmailor direci i modul de efectuare a mutaiei Indivizii rezultai (generaia
urmtoare)
Indice
cromozom
Cromozom Valoarea
funciei
obiectiv
mperecherea Cromozom Valoarea
funciei
obiectiv
1 1 1 0 0 1 625 Mutaii
efectuate n
primul
cromozom,
genele 3 i 5
1 1 1 0 0 784
2 1 1 0 0 1 625 1 1 0 0 1 625
3 1 1 0 0 1 625 1 1 0 0 1 625
4 1 0 1 0 1 441 1 0 1 0 1 441


3.2. Reprezentarea cromozomial

Reprezentarea cromozomial presupune identificarea spaiului fenotipurilor i definirea
spaiului genotipurilor, ntre cele dou spaii existnd o coresponden biunivoc. Alegerea unei
anumite reprezentri depinde de problema particular de rezolvat. Problema alegerii unei
reprezentri adecvate este una din cele mai importante i dificile n dezvoltarea unui algoritm
evolutiv care s furnizeze o soluie foarte apropiat de cea optim. n continuare sunt prezentate o
serie dintre cele mai utilizate modaliti de reprezentare cromozomial.

Reprezentarea binar
Reprezentarea binar este una dintre primele (ca istoric) dintre cele utilizate n construirea
unui GA. n literatura de specialitate au fost raportate o serie de situaii de utilizare abuziv a
reprezentrii binare, aproape independent de problema de rezolvat, fapt care a condus la
dezvoltri GA eronate.
Pentru o problem particular, prima etap n construcia unei reprezentri binare este
stabilirea dimensiunii reprezentrii i semnificaia acesteia n obinerea unui fenotip. n alegerea
corespondenei fenotip-genotip n reprezentarea binar trebuie inut cont de faptul c modul de
codificare trebuie s asigure faptul c fiecare ir de bii din spaiul genotipurilor corespunde unei
soluii valide i, reciproc, n spaiul genotipurilor pot fi reprezentate toate soluiile posibile. n
practic, validitatea soluiilor corespunde restriciilor impuse n problema particular de rezolvat
i nu este ntotdeauna posibil. n literatura de specialitate au fost raportate o serie de strategii de
tratare a problemelor de optimizare cu restricii, din punctul de vedere al spaiului soluiilor
fezabile (Eiben, Smith, 2003; Michalewicz, Schoenauer, 1996; Joines, Houck, 1994; Goldberg,
1989).
n cazul unor clase de probleme care conin variabile de tip decizie boolean,
reprezentarea binar este cea mai natural (de exemplu, problema de tip 0-1 a rucsacului,
prezentat n 2.4). Dac informaia codificat nu este de tip boolean, poate fi reprezentat de
exemplu similar celor prezentate n 2.3 i 3.1, dar, n multe situaii, pot fi obinui GA superiori
ca performane prin utilizarea reprezentrilor directe (pe mulimile sau ), similar primelor
dou probleme rezolvate n 2.4.
Una din problemele utilizrii reprezentrii binare este aceea c bii diferii au n general
semnificaii diferite. Reprezentarea binar standard a numerelor din are dezavantajul c
distana Hamming ntre dou numere ntregi consecutive nu este ntotdeauna 1, unde distana
Hamming ntre dou iruri de aceeai dimensiune este definit ca numrul de poziii ale cror
valori corespunztoare difer. De exemplu, n reprezentarea prezentat n 3.1, numrului
i corespunde reprezentarea . Probabilitatea ca, prin k modificri succesive ale valorii unui
bit, s fie obinut numrul vecin

, reprezentat prin irul este evident inferioar


probabilitii de a fi obinut numrul vecin

, reprezentat prin irul . Distana


Hamming dintre reprezentrile binare ale fenotipurilor i

este 5 (maxim), n timp ce


distana Hamming dintre reprezentrile binare ale fenotipurilor i

este 1. O variant de
reprezentare binar care s rezolve aceast problem (n cazul fenotipurilor numere din mulimea
) este codificarea Gray.
Codificarea Gray furnizeaz reprezentri ale numerelor din prin intermediul irurilor
binare astfel nct distana Hamming dintre oricare dou numere ntregi consecutive s fie 1. Fie
* +

. Fie i

reprezentarea binar standard, dat de un


ir de bii,

( )

. Reprezentarea Gray a lui ,

, este obinut astfel,

()

()

()

()

( )
unde este operatorul logic sau exclusiv. De exemplu, dac * +, atunci
i reprezentrile binare, standard i respectiv Gray sunt prezentate n tabelul urmtor.

Numr 0 1 2 3 4 5 6 7
Cod binar std. 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1
Cod Gray 0 0 0 0 0 0 0 1 0 0 1 1 0 0 1 0 0 1 1 0 0 1 1 1 0 1 0 1 0 1 0 0
Numr 8 9 10 11 12 13 14 15
Cod binar std. 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1
Cod Gray 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 0 0 1 1 0 0 0

n urmtoarele funcii MATLAB sunt prezentate obinerea codificrii Gay a unui numr
din

+, respectiv obinerea acelui numr din

a cu proprietatea c i
corespunde un cod Gray dat.

function [y]=repr_int_Gray(x,m);
y=zeros(1,m);
y(1)=bitget(x,m);
for i=2:m
y(i)=xor(bitget(x,m-i+1),bitget(x,m-i+2));
end;
disp(y);
end

function [x]=repr_Gray_int(y,m);
z=zeros(m,1);
z(1)=y(1);
val=z(1);
for i=2:m
if(y(i))
val=not(val);
end;
z(i)=val;
end;
x=0;
for i=1:m
x=bitset(x,m-i+1,z(i));
end;
disp(x);
end


Reprezentarea prin intermediul numerelor ntregi
Aa cum am precizat n seciunea de mai sus, reprezentarea binar nu este ntotdeauna
potrivit n cazul problemelor n care unui fenotip i corespunde un cromozom n care fiecare
gen are mai mult de 2 valori (nu este de tip boolean). O astfel de reprezentare este utilizat, de
exemplu, n cadrul problemelor de optimizare a funciilor cu variabile lund valori n mulimea
numerelor ntregi. Problema de optimizare poate fi fr restricii (o variabil poate avea ca
valoare orice numr ntreg) sau, n cele mai multe cazuri, poate fi astfel nct variabilele s fie
restricionate la un set finit de valori. De exemplu, problema determinrii unui drum de la un
punct de start S ntr-o reea de puncte n care conexiunile posibile sunt sus, jos, stnga i respectiv
dreapta (nord, sud, est, vest) revine la determinarea unei secvene de deplasri ctre nord, sud, est,
respectiv vest cu cte o unitate (corespunztoare unei conexiuni), fiecare tip de deplasare putnd
fi codificat cu o valoare din mulimea cu elemente *+(fiecare element corespunde unui
punct cardinal).
Alegerea unei codificri i a operatorilor de variaie definii pe mulimea genotipurilor
trebuie fcut, dac este posibil, pe baza unor relaii naturale ntre valorile pe care le poate lua
fiecare atribut (variabil). Astfel de relaii pot fi evideniate uor n cazul atributelor ordinale (de
exemplu cu valori ntr-o mulime de numere ntregi: de exemplu 2 este mai similar cu 3 dect
cu 312 ), dar pot fi greu de identificat n cazul atributelor cardinale (de exemplu, dac punctele
cardinale sunt reprezentate prin numerele 0,1,2 i 3, faptul 0 este mai similar cu 1 dect cu 3 pe
mulimea nu poate fi transpus corespunztor pentru elementele din spaiul punctelor cardinale).

Reprezentarea prin intermediul numerelor reale
n multe situaii practice, reprezentarea unui candidat la soluie este realizat prin
intermediul unui ir de numere reale. n general este preferat aceast reprezentare atunci cnd
fenotipurile provin dintr-o distribuie continu. Genotipul corespunztor unui candidat soluie cu
p gene este deci vectorul (

), unde

.

Reprezentarea prin intermediul permutrilor
Permutrile sunt utilizate pentru reprezentri cromozomiale n probleme n care trebuie
stabilit ordinea apariiei unor secvene de evenimente. O consecin imediat este c, n timp ce
ntr-un GA clasic este permis ca gene diferite s aib aceleai valori (alele), n cazul reprezentrii
prin permutri, cromozomii cu proprietatea c dou sau mai multe gene posed aceeai valoare nu
corespund unor soluii fezabile. Evident, n acest caz operatorii de variaie trebuie definii astfel
nct rezultatul aplicrii acestora s corespund unor soluii admisibile.
n alegerea operatorilor de variaie este important clasa din care face parte problema
particular de rezolvat. n general, problemele care sunt rezolvate genetic utiliznd cromozomi
permutri sunt de dou tipuri. n prim clas de probleme, ordinea apariiei evenimentelor este
important. Aceast situaie apare, de exemplu, cnd evenimentele utilizeaz resurse limitate sau
se desfoar ntr-o anumit perioad de timp. Cea mai comun problem din aceast clas este
problema planificrii activitilor, a crei rezolvare prin intermediul GA este prezentat n finalul
capitolului. O a doua clas de probleme este cea n care apare dependena de adiacen, cel mai
comun exemplu din aceast clas fiind problema comis-voiajorului, n care, pentru n orae
interconectate date, trebuie determinat un drum de lungime (distan) minim care s treac prin
toate cele n orae, cu revenire n oraul de start. Diferena dintre cele dou clase de probleme este
dat de faptul c, evident, n cazul celei de-a doua clase, punctul de start (n cazul problemei
comis-voiajorului oraul de plecare) nu este important.
Pentru reprezentarea permutrilor sunt utilizate n general dou variante: n prima
variant, cel de-al i-lea element al reprezentrii semnific evenimentul care se produce n acea
poziie a secvenei, iar n varianta alternativ,valoarea celui de-al i-lea element reprezint poziia
din secven n care se produce evenimentul i. De exemplu, n prima variant de reprezentare
irul (

) corespunde, prin permutarea (), irului (

), n timp ce n
varianta alternativ de reprezentare corespunde irului (

) (

este n poziia 3,

este
n poziia 1,

este n poziia 4 i

este n poziia 2).



3.3. Operatorul mutaie

Mutaia este acel operator genetic prin care, dintr-un singur printe este obinut un singur
copil prin aplicarea unei modificri aleatoare a reprezentrii (genotipului). Operatorul mutaie
depinde de modalitatea de reprezentare cromozomial i are asociat un parametru, pm, care
reprezint rat de aplicare. n continuare vom prezenta o serie de modaliti de alegere a
operatorului mutaie n funcie de reprezentarea cromozomial. O serie de consideraii privind
setarea ratei de mutaie sunt prezentate n capitolul 5.

Operatorul mutaie n reprezentarea binar
Cel mai utilizat operator de mutaie n reprezentarea binar consider fiecare gen a
fiecrui cromozom pentru inversarea valorii asociate (din 0 n 1, respectiv din 1 n 0) cu o
probabilitate pm n general mic. Numrul valorilor modificate nu este fixat, dar, n medie, dac
populaia conine dim cromozomi cu cte n gene, este egal cu .
De exemplu, dac n cromozomul printe

este aplicat operatorul de mutaie genelor 2, 3 i 7, rezult cromozomul copil

Un exemplu de astfel de operator este utilizat n 3.1 i implementat prin intermediul
funciei MATLAB mutatie(pop,pm).
Setarea ratei de mutaie depinde n general de rezultatul dorit, n sensul n care aplicaia
trebuie s conduc fie la obinerea unei populaii n care toi indivizii sunt buni (valoare mare a
funciei de evaluare), fie la obinerea unei populaii cu un singur individ cu adaptare foarte bun
la mediu. n general, n cele mai multe dezvoltri GA care folosesc reprezentarea binar pentru
construirea spaiului genotipurilor, parametrul pm este setat n urmtoarele limite: ntr-o
generaie, n medie, este modificat o singur gen a unui singur cromozom din populaie,
respectiv n populaia curent este modificat, n medie, cte o gen din fiecare cromozom.

Operatorul mutaie n reprezentarea prin iruri de numere ntregi
n cazul reprezentrii cromozomiale pe mulimea numerelor ntregi sunt dou modaliti
uzuale de a defini mutaia.
Prima dintre ele este resetarea aleatoare prin care, cu probabilitatea pm, valoarea fiecrei
gene este modificat prin generarea aleatoare a unei valori din mulimea valorilor admisibile
pentru gena respectiv. Acest operator este utilizat n situaia n care genele codific atribute de
tip cardinal (n acest caz valorile admisibile ale unei gene trebuie s poat fi selectate cu aceeai
probabilitate ntr-o operaie de mutaie).
n continuare este prezentat implementarea unui operator de mutaie prin resetare
aleatoare pentru o populaie cu dim indivizi n-dimensionali, fiecare atribut fiind cu valori n
mulimea de numere ntregi { }. Probabilitatea de mutaie este pm.

function [popN]=mutatie_intregi_ra(pop,pm,M,N);
[dim,n]=size(pop);
popN=pop;
for i=1:dim
efectuat=0;
for k=1:n
r=unifrnd(0,1);
if(r<pm)
disp('Mutatie efectuata in cromozomul'); disp(pop(i,:));
disp('Gena');disp(k);
% este generat aleator un numar intreg intre M si N:
% genereaza aleator un numar R intre 1 si N-M+1
% aduna la R valoarea M-1
popN(i,k)=M-1+unidrnd(N-M+1);
efectuat=1;
end;
end;
if(efectuat)
disp('Cromozom rezultat');disp(popN(i,:));
end;
end;
end

function []=test_mutatie_intregi_ra(dim,n,pm,M,N);
% generarea populatiei care sufera mutatie
pop=zeros(dim,n);
for i=1:dim
for k=1:n
pop(i,k)=unidrnd(N-M+1)+M-1;
end;
end;
disp('Populatia initiala');disp(pop);
%aplicarea mutatiei
popN=mutatie_intregi_ra(pop,pm,M,N);
end

Exemplu de aplicare: la un apel test_mutatie_intregi_ra(6,4,1/6,-100,230), pot fi obinute
urmtoarele rezultate:

Populatia initiala
118 -40 110 -44
78 106 127 124
190 -96 2 157
1 206 124 -76
-77 -97 -25 70
51 132 92 68
Mutatie efectuata in cromozomul
118 -40 110 -44
Gena 1
Cromozom rezultat
-37 -40 110 -44
Mutatie efectuata in cromozomul
190 -96 2 157
Gena 4
Cromozom rezultat
190 -96 2 168
Mutatie efectuata in cromozomul
1 206 124 -76
Gena 2
Cromozom rezultat
1 -60 124 -76
Mutatie efectuata in cromozomul
51 132 92 68
Gena 4
Cromozom rezultat
51 132 92 -74

O alt variant de definire este prin intermediul mutaiei de tip fluaj. Operatorul este
utilizat n cazul atributelor de tip ordinal i, cu o probabilitate p, adaug/scade o anumit cantitate
(de obicei mic) la/din valoarea fiecrei gene a fiecrui cromozom. n general valorile cu care
sunt modificate alelele sunt generate aleator dintr-o distribuie de medie 0 i astfel nct
probabilitatea apariiei unei valori mici s fie mult mai mare dect probabilitatea generrii unei
valori mari. Mutaia de tip fluaj necesit setarea parametrilor ce caracterizeaz distribuia de
probabilitate (ce fel de distribuie este, ce statistici sunt cunoscute, probabilitatea p) din care sunt
generate valorile ce modific alelele, deci a numrului de pai efectuai de operatorul mutaie n
spaiul de cutare. Determinarea unei setri potrivite a acestor parametri este n general un proces
dificil, n general fiind preferat utilizarea n tandem a mai multor operatori de mutaie de acest
tip. De aceea, o variant alternativ este de a utiliza un operator mutaie resetare aleatoare cu rat
foarte mic mpreun cu un operator fluaj care s efectueze modificri mici asupra alelelor.
Un exemplu de implementare a unui operator de tip fluaj este prezentat n urmtoarea
seciune.

Operatorul mutaie n reprezentarea prin iruri de numere reale
n cazul reprezentrii cromozomiale prin iruri de numere din reprezentate n virgul
mobil sunt utilizai n general urmtorii operatori. Fie n numrul genelor unui cromozom i
presupunem c, pentru , valoarea genei i aparine intervalului ,

- i, prin aplicarea
operatorului mutaie asupra cromozomului (

) este obinut (

),
unde

- .
Mutaia uniform presupune modificarea fiecrei gene din fiecare cromozom,
cu probabilitatea pm, prin generarea aleatoare uniform a cte unui numr din ,

-. Deci, dac
gena i, a cromozomului x a fost selectat pentru mutaie,

este generat aleator, cu


distribuie uniform, n ,

-. Altfel,

. Acest tip de operator este corespondentul mutaiei


prin resetare aleatoare n cazul reprezentrii cromozomiale prin iruri de numere ntregi.
Mutaia neuniform, cu distribuie fixat, este una dintre cele mai des utilizate n
reprezentrile cromozomiale n virgul mobil i este corespondentul operatorului de mutaie
fluaj. Operatorul este proiectat astfel nct cantitatea de informaie modificat s fie mic.
Aplicarea lui asupra unei gene i, , presupune modificarea valorii curente cu o valoare
generat de obicei din distribuia gaussian cu medie 0 i deviaie standard specificat, ,
(distribuie notat (

)) rezultatul fiind apoi adus pe intervalul ,

-. Motivul alegerii unei


astfel de distribuii este urmtorul. Probabilitatea ca un numr generat aleator (

) s fie n
, - , respectiv n , - este aproximativ 95.45%, respectiv 99.73%. n figura de mai
jos este prezentat grafic aceast proprietate, pentru distribuia (

) .

Cu alte cuvinte, deoarece valorile cu care sunt modificate alelele trebuie s fie, de
exemplu, inferioare unui prag dat t, deci n intervalul , -, atunci ele pot fi generate din
distribuia (

), unde .

Observaie. n general, pentru distribuia (

), au loc proprietile
( )
( )
( )

O variant de implementare a acestui operator pentru o deviaie standard dat, , este
prezentat n continuare. Pentru uurina nelegerii operatorului, am considerat ,

-
, - .

function [popN]=mutatie_creep_fp(pop,pm,a,b,sigma);
[dim,n]=size(pop);
popN=pop;
for i=1:dim
efectuat=0;
for k=1:n
r=unifrnd(0,1);
if(r<pm)
disp('Mutatie efectuata in cromozomul'); disp(pop(i,:));
disp('Gena');disp(k);
% R este generat normal, cu medie 0 si deviatie sigma
R=normrnd(0,sigma);
popN(i,k)=pop(i,k)+R;
if(popN(i,k)<a)
popN(i,k)=a;
else if (popN(i,k)>b)
popN(i,k)=b;
end;
end;
efectuat=1;
end;
end;
if(efectuat)
disp('Cromozom rezultat');disp(popN(i,:));
end;
end;
end

function []=test_mutatie_creep_fp(dim,n,pm,a,b,sigma);
% generarea populatiei care sufera mutatie este realizata
% aleator, uniforma pe [a,b]
pop=zeros(dim,n);
for i=1:dim
for k=1:n
pop(i,k)=unifrnd(a,b);
end;
end;
disp('Populatia initiala');disp(pop);
%aplicarea mutatiei
popN=mutatie_creep_fp(pop,pm,a,b,sigma);
end

Exemplu de aplicare: la un apel test_mutatie_creep_fp(8,4,1/8,-2,3.5,0.3) pot fi obinute
urmtoarele rezultate:

Populatia initiala
-1.9676 1.1593 2.0915 2.4376
1.5066 -0.6180 -1.2062 1.5835
3.2035 2.4874 3.1164 -0.2953
-0.5215 0.9505 -1.1020 -0.8396
-0.8075 1.5848 -1.7097 -0.7389
1.6709 -0.2899 -0.3135 1.9637
3.2492 -1.2787 -1.6245 -1.3113
-1.0862 3.0128 -1.2506 1.3935
Mutatie efectuata in cromozomul
-0.8075 1.5848 -1.7097 -0.7389
Gena 4
Cromozom rezultat
-0.8075 1.5848 -1.7097 -0.6407
Mutatie efectuata in cromozomul
3.2492 -1.2787 -1.6245 -1.3113
Gena 3
Cromozom rezultat
3.2492 -1.2787 -1.5721 -1.3113
Mutatie efectuata in cromozomul
-1.0862 3.0128 -1.2506 1.3935
Gena 4
Cromozom rezultat
-1.0862 3.0128 -1.2506 1.3375

Operatorul mutaie n reprezentarea prin permutri
n cazul reprezentrii cromozomiale prin permutri, operatorul mutaie poate fi aplicat
doar la nivel de cromozom (aplicarea lui la nivel de gen determin obinerea unui ir care nu este
permutare), deci rata de mutaie corespunde probabilitii modificrii unui genotip, nu a unei
gene. Cele mai utilizate variante de definire a mutaiei sunt prezentate n continuare (Syswerda,
1992).
Mutaia prin interschimbare revine la selectarea aleatoare a dou gene dintr-un cromozom
i interschimbarea valorilor asociate acestora. Un exemplu de implementare a fost prezentat n
2.1 (rezolvarea problemei celor 8 regine).
Mutaia prin inserare presupune selectarea aleatoare a dou gene, ,
memorarea alelei din gena j, A, deplasarea cu o poziie ctre dreapta a valorilor genelor
i plasarea valorii A pe poziia i+1.Evident, dac , mutaia nu modific nimic n
cromozom.
Urmtoarele funcii MATLAB implementeaz acest tip de mutaie.

function [popN]=mutatie_perm_inserare(pop,pm);
[dim,n]=size(pop);
popN=pop;
for i=1:dim
efectuat=0;
r=unifrnd(0,1);
if(r<pm)
disp('Mutatie efectuata in cromozomul'); disp(pop(i,:));
p=zeros(1,2);
p(1)=unidrnd(n);
p(2)=unidrnd(n);
while(p(1)==p(2))
p(2)=unidrnd(n);
end;
poz=sort(p);
disp('Pozitiile:');
disp(poz);
popN(i,1:poz(1))=pop(i,1:poz(1));
popN(i,poz(1)+1)=pop(i,poz(2));
popN(i,poz(1)+2:poz(2))=pop(i,poz(1)+1:poz(2)-1);
popN(i,poz(2)+1:n)=pop(i,poz(2)+1:n);
disp('Cromozom rezultat');disp(popN(i,:));
end;
end;
end

function []=test_mutatie_perm_inserare(dim,n,pm);
% presupunem ca un cromozom este o permutarea a mutimii {1,2,...,n}
% dim este dimensiunea populatiei

% generarea populatiei care sufera mutatie
% este similara problemei celor n regine
pop=genereaza_ini(n,dim);
disp('Populatia initiala');disp(pop);
%aplicarea mutatiei
[popN]=mutatie_perm_inserare(pop,pm);
end

La un apel test_mutatie_perm_inserare(10,8,0.2) poate fi obinut urmtorul rezultat.


Populatia initiala
5 1 6 4 8 3 7 2
3 4 2 1 7 5 6 8
3 6 1 8 7 5 2 4
3 8 7 4 2 5 6 1
2 8 6 3 1 5 7 4
3 1 7 8 5 6 2 4
7 4 2 6 8 3 1 5
4 7 2 6 8 1 3 5
4 1 7 8 3 5 2 6
5 7 8 1 3 4 2 6

Mutatie efectuata in cromozomul
3 6 1 8 7 5 2 4
Pozitiile:
5 8
Cromozom rezultat
3 6 1 8 7 4 5 2
Mutatie efectuata in cromozomul
4 1 7 8 3 5 2 6
Pozitiile:
1 5
Cromozom rezultat
4 3 1 7 8 5 2 6
Mutatie efectuata in cromozomul
5 7 8 1 3 4 2 6
Pozitiile:
1 2
Cromozom rezultat
5 7 8 1 3 4 2 6

Mutaia prin amestec presupune repoziionarea fiecrei alele n mod aleatoriu, pentru o
secven de gene ale unui cromozom sau pentru ntreg cromozomul. De exemplu, pentru
cromozomul
4 3 1 7 8 5 2 6
prin amestecul aleator al valorilor genelor 3,4,5 i 6 poate rezulta cromozomul copil
4 3 7 1 5 8 2 6.

Mutaia prin inversiune presupune selectarea aleatoare a dou gene, , i
inversarea ordinii n secvena dintre cele dou poziii. De exemplu, pentru cromozomul
4 3 1 7 8 5 2 6
i poziiile 3 i 6, rezult cromozomul copil
4 3 5 8 7 1 2 6.
n rezolvarea problemelor bazate pe dependena de adiacen (din clasa problemei comis-
voiajorului), inversiunea unui subir aleator ntr-un cromozom este cea mai mic modificare ce
poate fi adus acelui cromozom i corespunde reprezentrii Gray n cazul spaiului genotipurilor
iruri binare. Aceast variant este cea mai des utilizat cnd datele problemei de rezolvat sunt
reprezentate prin permutri.

3.4. Operatorul de recombinare

Recombinarea (ncruciarea) este procesul crerii de noi soluii candidat pe baza
informaiei coninute n dou (sau mai multe) soluii candidat prini i este una dintre cele mai
importante caracteristici ale GA.
Operatorul de recombinare este de obicei aplicat n manier probabilist, cu o
probabilitate (rat) pc, setat n general n intervalul ,-. Procesul presupune selectarea a dou
soluii candidat printe, generarea aleatoare a unui numr din , ), r, i compararea lui cu rata
de recombinare, pc. Dac , indivizii noi sunt creai prin recombinarea celor doi prini, n
caz contrar sunt creai asexuat, adic prin duplicarea prinilor.
Spre deosebire de rata de mutaie, pm, prin care este controlat secvena de gene
modificate, rata de ncruciare, pc, corespunde ansei ca perechea de prini selectat s fie
supus operaiei de recombinare.

Recombinarea n reprezentarea prin iruri binare
n cazul reprezentrii binare exist trei modaliti uzuale de definire a operatorului de
recombinare, toate genernd o pereche de progenituri pe baza unei perechi de cromozomi printe.
n literatura de specialitate sunt menionate, de asemenea, extensii ale acestora la cazul utilizrii
n-tuplurilor de prini, , respectiv la situaia obinerii unei singure progenituri (Eiben, van
Kemenade, Kok, 2000).

ncruciarea uni punct este primul operator propus pentru recombinare, introdus de
Holland n 1975. Recombinarea este aplicat cte unei perechi de cromozomi printe (

) i
presupune efectuarea urmtoarelor operaii: selectarea aleatoare a unei gene, poz, i obinerea
progeniturile

astfel :
copiaz primele poz elemente din

, respectiv

, respectiv


copiaz n ultimele m-poz+1 poziii din

, respectiv

, ultimele m-poz+1
elementele din

, respectiv

, unde m este lungimea reprezentrii


n figura urmtoare este reprezentat ncruciarea uni punct.


Un exemplu de implementare a acestui tip de operator a fost prezentat n 2.4 (n
rezolvarea problemei rucsacului de tip 0-1).

ncruciarea multipunct este o extensie natural a operatorului de recombinare uni punct.
Recombinarea este aplicat cte unei perechi de cromozomi printe (

) i presupune
selectarea aleatoare a N gene i obinerea progeniturile

prin copierea alternativ a


secvenelor din cromozomii fiecrui printe.
n figura urmtoare este reprezentat ncruciarea multipunct pentru situaia .


ncruciarea uniform (Syswerda, 1989) este aplicat cte unei perechi de cromozomi
printe (

) i presupune obinerea progeniturile

prin consultarea fiecrei gene n mod


independent i atribuirea valorii corespunztoare din gena unuia dintre prini, ales aleator.
Implementarea este realizat n felul urmtor. Fie m este dimensiunea reprezentrii prin iruri
binare i p un parametru dat (n general ). Pentru fiecare gen , este generat
aleator, din distribuia uniform, o valoarea v. Dac , atunci

()

()

()

(),
cu alte cuvinte primul descendent direct motenete valoarea genei de la primul printe, iar cel
de-al doilea de la al doilea printe. n caz contrar, copierea este invers,

()

()

()

(). Urmtoarea funcie MATLAB implementeaz acest tip de recombinare. Deoarece prin
aceast funcie dorim s exemplificm operaia de ncruciare uniform i nu modul de selecie a
prinilor, vom presupune c populaia de prini este disponibil (n cazul nostru generat aleator
pentru dimensiunea reprezentrii m i volumul datelor dim) i mperecherea se face n ordinea
apariiei indivizilor n populaie.

function [popN]=crossover_rbinara_uniform(pc,dim,m,p);
% pop este populatia de parinti
pop=genereaza_ini_binar(m,dim);
disp('Populatia de parinti:');
disp(pop);
[dim,m]=size(pop);
popN=pop;
for k=1:2:dim
x1=pop(k,1:m);
y1=pop(k+1,1:m);
r=unifrnd(0,1);
disp('Parintii:');
disp(x1);disp(y1);
if(r<=pc)
disp('Incrucisarea este realizata pe baza valorilor:');
for i=1:m
v=unifrnd(0,1);
disp(v);
if(v<=p)
popN(k,i)=pop(k,i);
popN(k+1,i)=pop(k+1,i);
else
popN(k,i)=pop(k+1,i);
popN(k+1,i)=pop(k,i);
end;
end;
else
disp('Incrucisare asexuata');
end;
disp('Urmasii:');
disp(popN(k,1:m));disp(popN(k+1,1:m));
end;
end

La un apel crossover_rbinara_uniform(0.7,8,6,0.5) poate fi obinut urmtorul rezultat.

Populatia de parinti:
0 0 1 1 0 1
0 0 1 1 0 1
1 0 0 1 1 1
0 1 0 0 1 0
0 0 1 1 0 1
0 0 0 0 0 1
1 1 0 0 0 0
0 1 1 1 0 1

Parintii:
0 0 1 1 0 1
0 0 1 1 0 1
Incrucisare asexuata
Urmasii:
0 0 1 1 0 1
0 0 1 1 0 1

Parintii:
1 0 0 1 1 1
0 1 0 0 1 0
Incrucisarea este realizata pe baza valorilor:
0.4186 0.8462 0.5252 0.2026 0.6721 0.8381
Urmasii:
1 1 0 1 1 0
0 0 0 0 1 1
Parintii:
0 0 1 1 0 1
0 0 0 0 0 1
Incrucisarea este realizata pe baza valorilor:
0.6813 0.3795 0.8318 0.5028 0.7095 0.4289
Urmasii:
0 0 0 0 0 1
0 0 1 1 0 1

Parintii:
1 1 0 0 0 0
0 1 1 1 0 1
Incrucisarea este realizata pe baza valorilor:
0.1897 0.1934 0.6822 0.3028 0.5417 0.1509
Urmasii:
1 1 1 0 0 0
0 1 0 1 0 1

Recombinarea n reprezentarea prin iruri de numere ntregi
n cazul n care spaiul genotipurilor este format din iruri de numere ntregi, operatorii de
ncruciare sunt similari celor definii pentru reprezentarea prin iruri binare (Eiben, Smith,
2003). O alt alegere, de exemplu recombinarea aritmetic (prezentat n seciunea urmtoare),
poate avea ca rezultat cromozomi care nu aparin spaiului soluiilor fezabile (nu sunt iruri de
numere ntregi).

Recombinarea n reprezentarea prin iruri de numere reale (virgul mobil)
n acest caz sunt dou clase de operatori de ncruciare folosii uzual, i anume
recombinarea de tip discret i recombinarea aritmetic.

Recombinarea de tip discret este clasa operatorilor definii similar reprezentrii prin iruri
binare, cu meniunea c, n acest caz, o alel este un numr real, nu 0 sau 1. Acest tip de
ncruciare are dezavantajul c nu sunt obinute valori noi pentru genele cromozomilor urmai,
singurul operator care poate introduce valori noi ale genelor rmnnd cel de mutaie.

Recombinarea aritmetic este clasa operatorilor prin aplicarea crora sunt obinui
cromozomi cu alele noi, rezultate prin combinarea aritmetic (prin medie ponderat) a alelelor
cromozomilor prini. n literatura de specialitate sunt prezentate o serie de variante ale
operatorilor aparinnd acestei clase, cei mai utilizai fiind prezentai n continuare (Michalewicz,
1996). Vom considera n continuare ,- i m dimensiunea reprezentrii (numrul de gene
ale unui cromozom). Acest parametru este fie generat aleatoriu, fie predefinit (n general n jurul
valorii ).

Recombinarea aritmetic simpl este aplicat cte unei perechi de cromozomi printe
(

) i presupune obinerea progeniturile

prin selectarea aleatoare a unei gene


, i efectuarea operaiilor
copiaz primele i-1 elemente din

, respectiv

, respectiv

()

() ( )

()

()

() ( )

()
De exemplu, dac i

( )

( )
rezult

( )

( )


Recombinarea aritmetic singular opereaz asupra unei perechi de cromozomi printe
(

) i determin obinerea cromozomilor

n modul urmtor. Este selectat aleator o


gen , i sunt efectuate urmtoarele operaii:
copiaz primele i-1 elemente din

, respectiv

, respectiv

()

() ( )

()

()

() ( )

()
copiaz n ultimele m-i poziii din

, respectiv

, ultimele m-i elementele din

,
respectiv


De exemplu, dac i

( )

( )
rezult

( )

( )

Un exemplu de implementare a acestui tip de operator pentru a fost
prezentat n 2.4 (n rezolvarea problemei optimizrii unei funcii de o variabil).

Recombinarea aritmetic total este descris astfel. Fie (

) o pereche de cromozomi
printe. Progeniturile

sunt obinute prin:

()

() ( )

()

()

() ( )

()
Evident, pentru , cei doi cromozomi rezultai sunt identici.
De exemplu, dac i

( )

( )
rezult

( )

( )

Recombinarea n reprezentarea prin permutri
n cazul n care spaiul genotipurilor este format din permutri, au fost propui o serie de
operatori de recombinare, care au ca scop transmiterea unei cantiti ct mai mare de informaie
de la prini la copii, cu precdere din categoria informaiei comune prezente n cromozomii
prini. n continuare sunt prezentai civa dintre cei mai utilizai operatori de recombinare pe
spaiul genotipurilor permutri.

Operatorul PMX (Partially Mapped Crossover) a fost propus n (Goldberg, Lingle, 1985)
pentru rezolvarea problemei comis-voiajorului i este unul dintre cei mai utilizai operatori de
recombinare pentru rezolvarea problemelor bazate pe dependena de adiacen. Fie (

) o
pereche de cromozomi printe, (

) progeniturile calculate i m numrul genelor unui


cromozom. O variant de implementare a acestui operator este descris astfel (Whitley, 2000).
Pas1. Alege aleator

puncte de ncruciare, efectueaz

()

()


Pas2. Calculeaz mulimea alelelor din secvena de gene

din cel de-al doilea


printe, care nu au fost deja copiate n prima progenitur,
*( )|

()

+ *( )|

()

+
Pas3. Pentru fiecare ( ) , calculeaz

() (valoarea genei p din prima


progenitur care a fost copiat n poziia lui a din cel de-al doilea printe, a nefiind copiat nc n

), cu proprietatea c

() (poziia lui b din cel de-al doilea printe).


3.1 Dac n poziia i din prima progenitur nu a fost plasat nici o valoare, seteaz

() .
3.2 n caz contrar, determin cu proprietatea c

() , unde

()
Dac poziia j n

este neocupat, seteaz

() .
Altfel i=j i reia 3.2.
Pas4. La acest moment au fost copiate n prima progenitur alelele secvenei de gene

din ambii prini. Genele rmase fr valori n prima progenitur sunt ocupate, n
ordine, de alelele nc necopiate din cel de-al doilea printe.
Cel de-al doilea copil este construit similar, plecnd de la secvena de alele din cel de-al
doilea printe i copiind restul elementelor din primul printe.

De exemplu, fie

1 2 4 6 5 7 3 9 10 8

10 5 3 7 9 2 1 8 6 4

Construcia primului copil,

, este realizat astfel.


Dup aplicarea primului pas, obinem

6 5 7 3

La pasul 2 rezult *() () ()+

La pasul 3:

()
Deoarece

() i gena 2 din

nu are nc valoare, seteaz

() . Obinem

9 6 5 7 3

()
Deoarece

() i gena 4 din

are valoarea

() , rezult

()
deci i seteaz

() . Obinem

9 6 5 7 3 2

()
Deoarece

() i gena 3 din

nu are nc valoare, seteaz

() . Obinem

9 1 6 5 7 3 2

La pasul 4 vor fi plasate n

, n ordinea genelor rmase fr valori, alelele 10, 8 i 4


(alelele din

ce nu au fost copiate nc n prima progenitur). Rezult

10 9 1 6 5 7 3 8 2 4

Observaie. Dintre relaiile de adiacen comune celor doi prini, ntre 1i 2, ntre 4 i 6
i ntre 3 i 7, nu este regsit n primul urma relaia de adiacen dintre 6 i 4, deci operatorul
PMX nu are neaprat proprietatea de a pstra relaiile comune existente ntre prini. Operatorii
de recombinare descrii pentru reprezentrile prin iruri binare, respectiv prin iruri de numere
ntregi, dar i operatorul de recombinare de tip discret definit pentru reprezentri prin iruri de
numere reale posed proprietatea de a pstra intacte n urmai relaiile de adiacen comune
existente n cromozomii printe.




1 2 4 6 5 7 3 9 10 8

10 5 3 7 9 2 1 8 6 4

Construcia celui de-al doilea copil,

, este realizat astfel.


Dup aplicarea primului pas, obinem

7 9 2 1

La pasul 2 rezult *() () ()+

La pasul 3:

()
Deoarece

() i gena 6 din

are valoarea

() , rezult

()
deci i seteaz

() . Obinem

6 7 9 2 1

()
Deoarece

() i gena 8 din

nu are nc valoare, seteaz

() . Obinem

6 7 9 2 1 5

()
Deoarece

() i gena 1 din

nu are nc valoare, seteaz

() . Obinem

3 6 7 9 2 1 5

La pasul 4 vor fi plasate n

, n ordinea genelor rmase fr valori, alelele 4, 10 i 8


(alelele din

ce nu au fost copiate nc n cea de-a doua progenitur). Rezult

3 6 4 7 9 2 1 5 10 8

Funcie MATLAB PMX(m) genereaz, pentru dou permutri aleatoare de dimensiune m,
progeniturile rezultate n urma aplicrii operatorului PMX.

function [x2,y2]=PMX(m);
x1=gen_perm(m);
y1=gen_perm(m);
while(x1==y1)
y1=gen_perm(m);
end;
disp(x1);
disp(y1);
p(1)=unidrnd(m-1);
p(2)=unidrnd(m);
while(p(2)==p(1))
p(2)=unidrnd(m);
end;
poz=sort(p);disp(poz);
x2=PMX1(x1,y1,poz(1),poz(2));
y2=PMX1(y1,x1,poz(1),poz(2));
disp(x2);
disp(y2);
end
function [x2]=PMX1(x1,y1,p1,p2);
[n,m]=size(x1);
x2=zeros(1,m);
x2(p1:p2)=x1(p1:p2);
disp(x2);
for p=p1:p2
a=y1(p);
if(~ismember(a,x2))
b=x2(p);
for t=1:m
if(y1(t)==b)
i=t;break;
end;
end;
if(x2(i)==0)
x2(i)=a;
else
j=cauta(x2,y1,i,m);
while(x2(j))
i=j;
j=cauta(x2,y1,i,m);
end;
x2(j)=a;
end;
end;
end;
for i=1:m
if(~ismember(y1(i),x2))
for j=1:m
if(x2(j)==0)
x2(j)=y1(i);break;
end;
end
end;
end;
end

function [j]=cauta(x2,y1,i,m);
c=x2(i);
for t=1:m
if(y1(t)==c)
j=t;break;
end;
end;
end

La apelul PMX(8), un rezultat posibil este:

Cromozomii initiali:
2 3 1 7 6 4 8 5
5 4 7 2 1 3 6 8

Pozitiile:
1 4

Urmasii:
2 3 1 7 5 4 6 8
5 4 7 2 6 3 8 1

Observaie. n acest caz, pentru construcia primului copil algoritmul este aplicat astfel.

2 3 1 7 6 4 8 5

5 4 7 2 1 3 6 8

Construcia primului copil,

, este realizat astfel.


Dup aplicarea primului pas, obinem

2 3 1 7 0 0 0 0

La pasul 2 rezult *() ()+

La pasul 3:

()
Deoarece

() i gena 4 din

are valoarea

() , rezult

()
deci . Deoarece

() , i rezult . n continuare,

() , i
seteaz

() . Obinem

2 3 1 7 5 0 0 0

()
Deoarece

() i gena 6 din

nu are nc valoare>0, seteaz

() . Obinem

2 3 1 7 5 4 0 0

La pasul 4 vor fi plasate n

, n ordinea genelor rmase fr valori, alelele 6 i 8 (alelele


din

ce nu au fost copiate nc n prima progenitur). Rezult

2 3 1 7 5 4 6 8


Operatorul de recombinarea muchiilor (Edge Crossover) este dezvoltat pe baza ideii c
un cromozom copil trebuie creat utiliznd exclusiv perechi de alele (secvene de dou alele
vecine- muchii) prezente cel puin ntr-unul dintre prini. Cea mai utilizat versiune a acestui
operator este cel propus n (Whitley, 2000) i este proiectat astfel nct s asigure pstrarea
tuturor muchiilor comune prinilor n cromozomul urma. n acest scop este meninut o list a
adiacenelor (tabela de muchii) n care, pentru fiecare valoare v, sunt memorate toate alelele a
vecine cu v ntr-unul dintre genotipurile printe; dac a i v sunt vecine n ambii prini, atunci
proprietatea este marcat adugnd dup a simbolul +. Pentru o valoare dat, v, vom nota cu
() lista alelelor vecine cu v ntr-unul dintre prini i cu |()| numrul elementelor listei ().
Procedura de recombinare are ca rezultat crearea unui singur cromozom urma n modul urmtor.
Pas1. Construiete tabela de muchii.
Pas2. Alege aleator o gen, i, i copiaz valoarea acesteia, v, n cromozomul progenitur.
.
REPET
Pas3. Determin () , lista vecinilor elementului curent .
Pas4. Examineaz elementele din () nc necopiate n cromozomul urma. Dac
exist o muchie comun, adic () conine cel puin un element a+, atunci selecteaz primul
a cu aceast proprietate pentru copiere n cromozomul rezultat. Altfel, alege pentru copiere acea
valoarea () cu proprietatea c |()|
()
|()|. Seteaz . Valoarea
copiat n cromozomul printe nu va mai fi consultat ulterior: ea este eliminat din celelalte liste
de adiacen.
Pas5. Dac () , este examinat pentru expandare cellalt capt al cromozomului
urma, altfel este ales aleator un nou element (o nou alel).
PN CND TOATE GENELE CROMOZOMULUI URMA AU FOST COMPLETATE

De exemplu, fie i

1 2 4 6 5 7 3 9 10 8

10 5 3 7 9 2 1 8 6 4

cromozomii selectai pentru ncruciare.
Tabela muchiilor este prezentat mai jos.
Element Lista muchiilor Element Lista muchiilor
1 2+,8+ 6 4+,5,8
2 1+,4,9 7 3+,5,9
3 5,7+,9 8 1+,6,10
4 2,6+,10 9 2,3,7,10
5 3,6,7,10 10 4,5,8,9

n urmtoarea figur este prezentat o modalitatea de obinere a rezultatului recombinrii
cromozomilor

(datorit alegerilor aleatoare cromozomul rezultat, nu este, desigur, unica


variant de urma).
Alegeri posibile ElC Tipul selectrii ElC Cromozomul urma n construcie, r
1,2,,10 1 Aleator
1
2,8 2 Valoare comun
1 2
4,9 4 Lista cea mai scurt
1 2 4
6,10 6 Valoare comun
1 2 4 6
5,8 8 Lista cea mai scurt
1 2 4 6 8
10 10 Singurul element
1 2 4 6 8 10
5,9 5 Aleator (listele cu vecinii
nc necopiai au aceeai
lungime)
1 2 4 6 8 10 5
3,7 3 Aleator (listele cu vecinii
nc necopiai au aceeai
lungime)
1 2 4 6 8 10 5 3
7,9 7 Valoare comun
1 2 4 6 8 10 5 3 7
9 9 Singurul element rmas
neselectat
1 2 4 6 8 10 5 3 7 9

Operatorul de recombinarea de ordine (Order Crossover) a fost propus n (Davis, 1991)
pentru rezolvarea problemelor n care spaiul genotipurilor este dat printr-un set de permutri
semnificnd ordinea apariiei unor evenimente. Fie (

) o pereche de cromozomi printe,


(

) progeniturile calculate i m numrul genelor unui cromozom. Procedura de recombinare


revine la parcurgerea urmtorilor pai.
Pas1. Alege aleator

puncte de ncruciare, efectueaz

()

()


Pas2. Copiaz n

valorile din

care nu au fost deja copiate n

la pasul 1, ncepnd
cu gena

pn la gena m i apoi din poziia 1 n poziia


Cel de-al doilea copil este construit similar, plecnd de la secvena de alele din cel de-al
doilea printe i copiind restul elementelor din primul printe similar procedeului descris pentru
crearea primei progenituri.
De exemplu, fie

1 2 4 6 5 7 3 9 10 8

10 5 3 7 9 2 1 8 6 4

Construcia primului copil,

, este realizat astfel.


Dup aplicarea primului pas, obinem

6 5 7 3
Dup efectuarea pasului 2 rezult

10 9 2 6 5 7 3 1 8 4

Construcia celui de-al doilea urma, , este realizat astfel.
Dup aplicarea primului pas, obinem

7 9 2 1
n final rezult

4 6 5 7 9 2 1 3 10 8

Operatorul recombinare ciclic (CX, Cycle Crossover) este dezvoltat pe baza ideii c un
cromozom copil trebuie creat pstrnd ct mai bine posibil informaia relativ la poziia absolut
n care apare o valoare n cromozomii printe. Procedura de generare a progeniturilor grupeaz
elementele n cicluri. Un ciclu este o secven de alele cu proprietatea c fiecare element apare n
pereche cu un alt element al aceluiai ciclu n perechea de cromozomi printe. Dup partajarea
prinilor n cicluri, cromozomii rezultai sunt construii prin alegerea alternativ a cte unui ciclu
din fiecare printe. Fie (

) o pereche de cromozomi printe, (

) progeniturile calculate,
m numrul genelor unui cromozom i nrcicluri numrul ciclurilor calculate. Pentru fiecare
(alegerile impare), elementele ciclurilor din (

) (pereche ordonat) se
regsesc n aceleai poziii n (

)(pereche ordonat), n timp ce, pentru fiecare


(alegerile pare), elementele ciclurilor din (

)(pereche ordonat) se regsesc n


aceleai poziii n (

) (pereche ordonat).
O variant de implementare a acestui operator a fost prezentat n (Oliver, Smith, Holland,
1987) pentru rezolvarea problemei comis-voiajorului, modalitatea de partiionare n cicluri fiind
descris astfel.
Ct timp nu au fost asignate toate alelele unui ciclu, execut
Pas1. Iniializeaz ciclul curent cu secvena vid,
Pas2. Fie i prima gen din

nc neutilizat;

()
Pas3. Calculeaz

()
Pas4. Determin

()
Pas5. *+
Pas6. Repet Pas3-Pas5 pn cnd

() .

De exemplu, fie , (

) o pereche de cromozomi printe prezentai mai jos.


Ciclurile identificate sunt:

( )

( )

()

Grafic, procedura de identificare a ciclurilor poate fi figurat astfel.
x1
y1
1 2 4 6 5 7 3 9 10 8
10 5 2 7 9 1 3 8 6 4
x1
y1
1 2 4 6 5 7 3 9 10 8
10 5 2 7 9 1 3 8 6 4

1 2 4 6 5 7 3 9 10 8
10 5 2 7 9 1 3 8 6 4
x1
y1
1 5 2 6 9 7 3 8 10 4
10 2 4 7 5 1 3 9 6 8
x2
y2
Rezult cromozomii:

n continuare este prezentat implementarea acestui operator. Partiionarea n cicluri este
realizat prin atribuirea indicelui ciclului din care face parte fiecrei alele din fiecare cromozom,
conform algoritmului descris mai sus.

function [x2,y2]=CX(m);
x1=gen_perm(m);
y1=gen_perm(m);
while(x1==y1)
y1=gen_perm(m);
end;
%x1=[1 2 4 6 5 7 3 9 10 8];
%y1=[10 5 2 7 9 1 3 8 6 4];
disp('Parintii:');
disp(x1);
disp(y1);
[c,nrcicluri]=cicluri(x1,y1,m);
disp('Indecsii ciclurilor:');
disp(c);
x2=x1;y2=y1;
for t=2:2:nrcicluri
for i=1:m
if(c(i)==t)
x2(i)=y1(i);
y2(i)=x1(i);
end;
end;
end;
disp('Progeniturile:');
disp(x2);
disp(y2);
end

function [c1,index]=cicluri(x1,y1,m);
i=1;index=1;continua=1;
c1=zeros(1,m);
while(continua)
a=y1(i);
c1(i)=index;
while(x1(i)~=a)
for k=1:m
if(x1(k)==a)
j=k;break;
end;
end;
c1(j)=index;
a=y1(j);
end;
continua=0;
for k=1:m
if(c1(k)==0)
i=k;index=index+1;
continua=1;
break;
end;
end;
end;
end

Prezentm n continuare cteva rezultate posibile obinute la apelul CX(10), CX(12) i
CX(14).

Parintii:
6 1 8 10 5 7 9 3 4 2
9 8 7 3 6 1 5 10 4 2
Indecsii ciclurilor:
1 2 2 3 1 2 1 3 4 5
Progeniturile:
6 8 7 10 5 1 9 3 4 2
9 1 8 3 6 7 5 10 4 2

Parintii:
10 2 5 7 9 6 4 11 12 1 8 3
9 7 12 3 6 5 1 10 11 4 2 8
Indecsii ciclurilor:
1 2 1 2 1 1 3 1 1 3 2 2
Progeniturile:
10 7 5 3 9 6 4 11 12 1 2 8
9 2 12 7 6 5 1 10 11 4 8 3

Parintii:
13 4 10 7 14 6 8 3 2 1 11 5 9 12
3 1 11 8 4 6 13 9 5 10 14 12 7 2
Indecsii ciclurilor:
1 2 2 1 2 3 1 1 4 2 2 4 1 4
Progeniturile:
13 1 11 7 4 6 8 3 5 10 14 12 9 2
3 4 10 8 14 6 13 9 2 1 11 5 7 12


Recombinarea multipl
Operatorii de recombinare multipl presupun obinerea de progenituri prin utilizarea n-
tuplurilor de prini, . Astfel de operatori sunt uor de implementat, dar, spre deosebire de
recombinarea a doi cromozomi printe, nu au echivalent biologic. Din punct de vedere tehnic
utilizarea recombinrii multiple poate amplifica efectele ncrucirii. Operatorii de recombinare
multipl sunt clasificai n funcie de mecanismul care st la baza combinrii informaiei
cromozomilor printe, astfel:
bazai pe frecvena alelelor: de exemplu votul p-sexual, care generalizeaz
ncruciarea uniform;
bazai pe segmentarea i recombinarea secvenelor: ncruciarea diagonal, care
generalizeaz recombinarea multi-punct;
bazai pe operaii asupra alelelor numere reale n virgul fix: recombinarea de tip
baricentru, care generalizeaz operatorii de recombinare artitmetic.
n general creterea aritii operatorului de ncruciare de la 2 la n nu garanteaz obinerea
unor EA superiori ca performan, dar, n multe situaii raportate n literatura de specialitate
(Eiben, Schippers, 1993) utilizarea mai multor prini pentru recombinare s-a dovedit
avantajoas.

3.5. Modele de populaie

n literatura de specialitate au fost evideniate dou modele de GA: modelul generaional
i modelul strilor stabile. Exemplul prezentat la nceputul capitolului implementeaz un model
generaional.
La fiecare moment de tip, adic la fiecare generaie, populaia este de dimensiune , iar
bazinul de ncruciare (format din mulimea cromozomilor alei pentru a se reproduce) este, de
asemenea, de dimensiune . n continuare sunt create progenituri prin aplicarea
operatorilor de variaie. Populaia curent este nlocuit n ntregime cu progeniturile rezultate
(generaia urmtoare), fiecare copil fiind evaluat prin intermediul funciei de fitness asociate.
n cadrul modelelor cu stri stabile, doar o parte din progenituri nlocuiesc o parte din
membrii populaiei curente pentru a forma generaia urmtoare. n acest caz indivizi din
populaia curent sunt nlocuii cu indivizi noi. Procentul modificrilor din populaie este

i
se numete decalajul dintre generaii. De exemplu, unul din modelele intens studiate este modelul
GENITOR propus n (Whitley, 2000), unde decalajul dintre generaii este

.

3.6. Mecanismul de selectare a prinilor

Selecia proporional cu calitatea indivizilor (valorile funciei de evaluare), FPS
Principiul acestui mecanism de selectare a prinilor (numit FPS: Fitness Proportional
Selection) este urmtorul. Pentru fiecare cromozom

, este calculat performana sa,


prin funcia de evaluare

). Probabilitatea de selectare a individului

pentru ncruciare
este


Cu alte cuvinte, probabilitatea de selectare a individului depinde de valoarea absolut a
calitii individuale comparativ cu valoarea absolut a calitii populaiei curente. Numrul
prinilor este egal cu . Pentru fiecare individ

, numrul de apariii n multisetul


prinilor este, n medie,


unde este

valoarea medie a funciei obiectiv calculat pentru populaia curent. Evident, aceste
valori nu sunt numere din mulimea ; ele reprezint realizri ale unei variabile aleatoare cu o
anumit distribuie de probabilitate.
Mecanismul de selecie FPS (Holland, 1992) are o serie de inconveniente, din care
menionm:
indivizii mult superiori restului populaiei (din punct de vedere a valorii funciei
de evaluare) vor domina ntreaga populaie ntr-un timp relativ scurt, proprietate
cunoscut drept convergen prematur;
dac indivizii din populaie sunt astfel nct valorile funciei de evaluare sunt
comparabile, atunci nu exist aproape nici o constrngere de selecie, iar selecia
urmeaz legea de repartiie uniform; indivizii cu valori ale funciei de evaluare
uor superioare restului populaiei nu vor fi favorizai, n consecin, pe parcursul
evoluiei GA, cnd indivizii mai slabi dispar i ncepe s se instaleaz procesul de
convergen, performana indivizilor generaiei curente nu este semnificativ
mbuntit;
mecanismul se comport diferit pe versiuni translatate, respectiv transpuse, ale
unei aceeai funcii de evaluare.
Ultimele dou inconveniente pot fi eliminate prin utilizarea unei proceduri de mprire n
ferestre. Aceasta presupune ca, la fiecare moment de timp t, pentru fiecare cromozom


, al populaiei curente

corespunztor fenotipului

, scderea valorii funciei de evaluare


(

) cu o valoare

, care depinde ntr-un anume mod de istoria recent a evoluiei GA. O


alegere frecvent este cea n care

semnific media mobil a calitii celui mai slab individ pe


parcursul ultimelor p generaii,

()


O alt variant foarte utilizat este sigma scalarea (Goldberg, 1989), care incorporeaz
informaiile calitate medie i respectiv deviaie standard n carul populaiei curente

|
()

|
(()


() (() (

) )
unde c este un parametru dat (de obicei ).

Selecia rangurilor
Selecia pe baza funciei rang este o metod alternativ inspirat de FPS. Procedura
menine o valoare constant a constrngerii de selecie prin sortarea populaiei n funcie de
valorile funciei fitness i alocarea cte unei probabiliti de selecie fiecrui individ, n funcie de
rangul ocupat n irul sortat i nu de valoarea curent a funciei de evaluare a acelui individ.
Presupunem n continuare c este dimensiunea populaiei curente sortate, primul individ (cel cu
rang 1) este cel mai slab i individul cu rang este cel mai bun.
Formele uzuale de calcul al probabilitii de selecie a unui individ sunt urmtoarele.
Fie este un parametru dat. Pentru fiecare cromozom

, al populaiei
curente sortate

, probabilitatea de selecie este setat liniar,

( )
( )

Aceast variat de definire a probabilitii de selecie are la baz presupunerea c, n
medie, un individ cu calitatea apropiat de media valorilor funciei de evaluare, deci aflat la
jumtatea irului ordonat, trebuie s aib, relativ la ntreaga populaie, o ans de a se reproduce:
pentru

( )


O alt variant de stabilire a probabilitii de selecie corespunde situaiei n care
constrngerea de selecie trebuie s fie mai mare, n sensul c probabilitatea de selecie a
indivizilor cu calitatea peste medie trebuie s fie semnificativ mai mare dect a celorlali. n acest
caz este utilizat o distribuie de tip exponenial:

)
()


unde este un parametru care asigur faptul c



Mecanisme de implementare a distribuiei de probabilitate a seleciei
Urmtoarele mecanisme de proiectare a distribuiei de probabilitate pentru selectarea
prinilor au la baz ideea c, n varianta ideal, bazinul de recombinare format din cromozomii
care interschimb material genetic corespunde exact distribuiei de probabilitate de selecie. n
practic acest deziderat nu poate fi atins, deoarece populaia are un numr finit de indivizi.
Bazinul de recombinare poate fi ales astfel nct s corespund unei probe din distribuia de
probabilitate a seleciei prinilor, dar nu o poate reflecta exact.

Mecanismul de selecie a prinilor de tip rulet este o variant de construcie a bazinului
de recombinare astfel nct s corespund unei probe din distribuia de probabilitate a seleciei.
Distribuia de probabilitate poate fi n general de tip FPS sau bazat pe ranguri. O variat de
implementare a fost prezentat n 3.1 pentru distribuia de selecie de tip fitness (FPS) i
corespunde urmtorului algoritm.

Pas1. Pentru fiecare cromozom

:
1.1 evalueaz performana sa, prin funcia de evaluare

);
1.2 calculeaz probabilitatea de selecie din mecanismul de tip FPS sau cea bazat pe
ranguri,

i probabilitatea cumulat


Pas2. Pentru execut 2.1 i 2.2
2.1. genereaz aleator un numr ,-;
2.2 dac

parinte(k)=

;
altfel, este selectat cromozomul

, , cu proprietatea

:
parinte(k)=



O variant mai bun pentru construcia unui bazin de ncruciare ct mai apropiat de o
instan a distribuiei de probabilitate a seleciei este algoritmul SUS (Stochastic Universal
Sampling). Spre deosebire de mecanismul de tip rulet, n care o rulet cu un bra este rotit de
ori, mecanismul SUS asigur o rotire a unei rulete cu brae echidistante.
Algoritmul este urmtorul.

Pas1. Pentru fiecare cromozom

:
1.1 evalueaz performana sa, prin funcia de evaluare

);
1.2 calculeaz probabilitatea de selecie din mecanismul de tip FPS sau cea bazat pe
ranguri,

i probabilitatea cumulat


Pas2. genereaz aleator un numr [

]; i=1; k=1;
Pas3. Ct timp execut 3.1 i 3.2
3.1. ct timp

execut 3.1.1, 3.1.2 i 3.1.3


3.1.1. parinte(k)=

;
3.1.2.

;
3.1.3. ;
3.2.

Deoarece r este generat aleator n intervalul [

] i, dup fiecare selecie efectuat este


mrit cu

, numrul de copii ale fiecrui cromozom

n bazinul de recombinare este cel puin


,

- i cel mult ,

- , unde ,- este partea ntreag a numrului real x.



n urmtoarea funcie MATLAB este implementat algoritmul SUS pentru selecia
prinilor n cadrul problemei prezentate n 3.1, cu probabilitatea de selecie corespunztoare
mecanismului FPS standard.

function [parinti,p,q]=selectie_SUS(pop);
[dim,m]=size(pop);
p=zeros(dim,1);
p(1:dim)=pop(1:dim,6);
s=sum(p);
p(1:dim)=p(1:dim)/s;
q=zeros(dim,1);
for i=1:dim
q(i)=sum(p(1:i));
end;
parinti=zeros(dim,m);
i=1;k=1;r=unifrnd(0,1/dim);
while(k<=dim)
while(r<=q(i))
parinti(k,1:m)=pop(i,1:m);
r=r+1/dim;
k=k+1;
end;
i=i+1;
end;
end

Pstrnd celelalte funcii neschimbate, la o iteraie a algoritmului GA cu implementarea
seleciei SUS poate fi obinut rezultatul:

Populaia iniial
Indice
cromozom
Cromozom Valoarea
funciei obiectiv
Probabilitate
a de selecie
FPS
Probabilitatea
cumulat
1 1 1 0 0 1 625 0.3531 0.3531
2 1 0 0 1 1 361 0.2040 0.5571
3 0 0 0 0 0 0 0 0.5571
4 1 1 1 0 0 784 0.4429 1.0000

Populaia selectat pentru recombinare i populaia rezultat
Bazinul de mperechere selectat i modul de mperechere Indivizii rezultai (copiii)
Indice
cromozom
Cromozom Valoarea
funciei
obiectiv
mperecherea Cromozom Valoarea
funciei
obiectiv
1 1 1 0 0 1 625 Cromozomii 4
i 2, punctul de
ncruciare 2
1 1 0 1 1 729
2 1 0 0 1 1 361 1 0 1 0 0 400
3 1 1 1 0 0 784 Cromozomii 3
i 1, punctul de
ncruciare 3
1 1 1 0 1 841
4 1 1 1 0 0 784 1 1 0 0 0 576

Nu este efectuat nici o operaiei de mutaie.



Selecia de tip turneu
n situaiile n care dimensiunea populaiei este foarte mare sau populaia este distribuit
n sisteme paralele, calculul probabilitilor de selecie de tip FPS poate dura foarte mult sau
poate fi imposibil. Selecia de tip turneu este un operator cu proprietatea important c nu
necesit informaii globale relativ la populaia curent i presupune definirea unei relaii de ordine
pe doi (sau n general k, unde ) indivizi. Aplicarea operatorului de selecie de tip turneu
pentru selectarea a prini revine la implementarea urmtorului algoritm.

Pas1. Pentru execut 1.1, 1.2 i 1.3
1.1. genereaz aleator k indivizi din populaie n setul S (cu sau fr nlocuire);
1.2. calculeaz ()

(), cel mai bun individ din S;


1.3. parinte(i)=;

Un astfel de operator de selecie a fost implementat n 2.4 pentru rezolvarea problemei
rucsacului de tip 0-1, unde i generarea este fr nlocuire.
Probabilitatea de selecie a unui individ n sistemul turneu depinde de urmtorii factori:
rangul (poziia ocupat n cadrul populaiei);
dimensiunea turneului, k; cu ct k este mai mare, cu att este mai mare
probabilitatea de a include n turneu indivizi cu calitate superioar mediei;
p, probabilitatea de a selecta cel mai bun individ din turneu, p; n cele mai multe
situaii i conform algoritmului prezentat, , adic turneul este determinist,
dar pot fi folosite i variante stochastice, n care i, evident, constrngerea
de selecie este sczut;
modul de alegere a indivizilor pentru turneu; dac alegerea se face fr nlocuire,
n cazul turneului determinist, cei mai slabi k-1 indivizi din populaie nu vor fi
niciodat selectai, indiferent de faptul c generare este aleatoare; n caz contrar,
poate fi selectat i cel mai slab individ (evident, cu o probabilitate extrem de
mic).
Deoarece, pentru selectarea a indivizi este necesar organizarea a turnee, acest
operator de selecie are acelai inconvenient ca i selecia de tip rulet: indivizii selectai nu
respect distribuia de probabilitate teoretic. n ciuda acestui inconvenient, operatorul de selecie
de tip turneu este unul dintre cei mai utilizai n GA, datorit simplitii implementrii i a
faptului c constrngerea seleciei este uor de controlat prin modificarea dimensiunii turneului, k.

3.7. Selecia generaiei urmtoare

Mecanismul de selectare a generaiei urmtoare (numit i schimbul de generaii) este
responsabil de modalitatea de a selecta, din indivizi ai populaiei curente i
progenituri (eventual mutante) indivizi care s formeze generaia urmtoare. Aa cum am
menionat i n capitolul 2, exist dou clase de mecanisme care s asigure schimbul de generaii.

Schimbul de generaii bazat pe vrst
Ideea care st la baza schimbului de generaii efectuat n funcie de factorul vrst este de
a asigura prezena fiecrui individ ntr-un numr fixat de generaii i nu n funcie de calitatea
indivizilor. Un mecanism de acest tip este utilizat de obicei n cazul GA simpli.
Deoarece, n general, numrul urmailor, , este egal cu dimensiunea populaiei, ,
strategia schimb populaia curent cu multisetul de progenituri (eventual mutante) create,
indiferent dac populaia curent i/sau multisetul progeniturilor conin indivizi care se repet
(sunt mutiseturi de cromozomi, nu mulimi n sens matematic).
La polul opus este strategia care const n crearea unui singur cromozom copil la fiecare
ciclu i nlocuirea celui mai btrn individ al populaiei curente cu noul cromozom creat. O
astfel de strategie este de corespunde unei organizri FIFO (First-In-First-Out) a cromozomilor. O
alternativ la aceast strategie utilizat n modelele cu stri stabile revine la selectarea aleatoare a
unui individ din populaie i nlocuirea lui cu cromozomul copil nou creat. Aplicarea acestei
strategii conduce la obinerea de GA cu performane care pot varia foarte mult comparativ cu GA
generaionali, motivul principal fiind acela c probabilitatea ca cel mai bun individ din populaie
s fie eliminat la o alegere aleatoare este mult superioar situaiei strategiei FIFO de eliminare a
celui mai vechi individ (De Jong, Sarma, 1992; Smith, Vavac,1999).

Schimbul de generaii bazat pe calitatea indivizilor
Schimbul de generaii dirijat de valorile funciei de evaluare poate fi realizat prin strategii
utilizate i n selectarea prinilor, cele mai utilizate fiind FPS, selecia de tip turneu i varianta
stochastic a seleciei bazate pe ranguri. n plus fa de acestea, sunt uzual folosite mecanismul
GENITOR i elimtismul.
Schema de substituire GENITOR presupune nlocuirea celor mai slabi indivizi din
populaia curent. Acest mecanism conduce la mbuntirea semnificativ a calitii globale a
populaiei (msurat ca media calitii indivizilor care compun populaia), dar are dezavantajul c
poate conduce la convergen prematur. Din acest motiv modelul este utilizat pentru populaii de
dimensiuni mari sau n cazul populaiilor care nu conin duplicate.
Elitismul este o strategie utilizat n combinaie cu scheme de substituire bazate pe vrst
i scheme stochastice de nlocuire bazate pe funcia de evaluare, scopul fiind acela de a evita
pierderea celor mai bine adaptai indivizi la schimbul de generaii. Aceasta presupune urmrirea
celui mai bun individ din populaia curent, b: dac b este ales pentru nlocuire i nici unul dintre
urmaii care sunt selectai pentru schimbul de generaii nu are valoarea funciei obiectiv cel puin
egal cu cea corespunztoare lui b, atunci b este meninut n generaia urmtoare i este eliminat
unul dintre urmaii selectai pentru nlocuire.

n urmtoarea funcie MATLAB este implementat o schem de tip elitist pentru selecia
generaiei urmtoare n cadrul problemei prezentate n 3.1.

function [generatieN]=schimba_generatii(pop,popN);
% in ultimul argument, din fiecare linie este situat meritul individului
% corespunzator liniei
generatieN=popN;
[dim,n]=size(pop);
[max1,i]=max(pop(:,n));
[max2,j]=max(popN(:,n));
if(max1>max2)
[min1,k]=min(popN(:,n));
generatieN(k,:)=pop(i,:);
end;
end

n urmtorul exemplu, populaia generat la momentul iniial conine individul cel mai
bun,
1 1 1 1 1
cu valoarea funciei obiectiv 961 (marcat cu rou). n urma operaiilor de ncruciare i mutaie,
populaia rezultat are drept cel mai bun individ
1 1 1 0 0
cu valoarea funciei obiectiv 784 i un cel mai slab individ
0 1 1 1 1
cu valoarea funciei obiectiv 225 (marcat cu albastru). Selectarea generaiei urmtoare (de la
momentul de timp 1) consider populaia rezultat n urma aplicrii operatorilor de variaie i
nlocuiete cel mai slab individ din aceasta cu individul cel mai bun al populaiei de la momentul
0 (acesta nefiind membru n multisetul urmailor).
Rezult o evoluie de tipul urmtor.

Populatia initiala si valorile functiei obiectiv
0 0 1 1 1 49
1 0 0 0 0 256
0 1 1 0 0 144
0 1 1 1 0 196
0 1 0 0 0 64
1 1 1 1 1 961

Bazinul de imperechere si valorile functiei obiectiv
1 0 0 0 0 256
0 1 1 0 0 144
0 1 0 0 0 64
1 1 1 1 1 961
1 1 1 1 1 961
1 1 1 1 1 961

Operatia de incrucisare
Incrucisare intre indivizii din pozitiile
2
5

Punctul de incrucisare
3

Incrucisare intre indivizii din pozitiile
3
6

Punctul de incrucisare
2

Incrucisare intre indivizii din pozitiile
1
4

Punctul de incrucisare
3

Copii rezultati
0 1 1 1 1 225
1 1 1 0 0 784
0 1 1 1 1 225
1 1 0 0 0 576
1 0 0 1 1 361
1 1 1 0 0 784

Operatia de mutatie -
Populatia rezultata
0 1 1 1 1 225
1 1 1 0 0 784
0 1 1 1 1 225
1 1 0 0 0 576
1 0 0 1 1 361
1 1 1 0 0 784

Generatia urmatoare
1 1 1 1 1 961
1 1 1 0 0 784
0 1 1 1 1 225
1 1 0 0 0 576
1 0 0 1 1 361
1 1 1 0 0 784