You are on page 1of 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
+. Un fenotip (numr din cuprins
refer la maximizarea funciei ( )
, cu *
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
+. Prin apelul funciei
iniial este generat aleator, din distribuia uniform pe *
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

Observaii
1. Trecerea unui ir de cifre dintr-o baz dat n baza 10 poate fi realizat prin apelul
funciei MATLAB
numar=base2dec(sir_cifre,baza_data)
Exemple:
numar = base2dec('0011110',2), rezult numar =30
numar = base2dec('0002113',4), rezult numar = 151
2. Trecerea unui numr scris n baza 10 ntr-o alt baz, cu rezultat un ir de cifre n acea
baz, poate fi realizat prin apelul funciei
sir_baza = dec2base(numar,baza)
Exemple:
sir_baza = dec2base(20,2), rezult sir_baza =10100
sir_baza = dec2base(151,4), rezult sir_baza = 2113
Probabilitatea de selecie a prinilor este calculat astfel:
1. Pentru fiecare cromozom
, corespunztor fenotipului , se calculeaz
( );
performana sa prin funcia de evaluare
2. Se calculeaz performana ntregii populaii ca sum a performanelor membrilor:
( )
3. Pentru fiecare cromozom

, se calculeaz 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; se genereaz pozitie, un numr aleator n
intervalul , - i sunt efectuate operaiile (m=5 dimensiunea reprezentrii binare):
copiaz primele pozitie elemente din n , respectiv din n
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
% anterior
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;
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,na]=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
1
0 1 0
2
1 1 0
3
1 0 1
4
0 0 0

0
0
0
0

0
1
1
0

Valoarea
Probabilitate
funciei obiectiv a de selecie
64
0.0566
625
0.5531
441
0.3903
0
0

Populaia selectat pentru recombinare i populaia rezultat


Bazinul de mperechere selectat i modul de mperechere
Indice
Valoarea
Cromozom
mperecherea
cromozom
funciei obiectiv
1
1 1 0 0 1
625
Cromozomii 1 i 2,
punctul
de ncruciare 4
2
1 1 0 0 1
625
3
1 0 1 0 1
441
Cromozomii 3 i 4,
punctul de ncruciare 3
4
1 1 0 0 1
625

Probabilitatea
cumulat
0.0566
0.6097
1.0000
1.0000

Indivizii rezultai (copiii)


Valoarea
Cromozom
funciei obiectiv
1 1 0 0 1
625
1 1 0 0 1
625
1 1 0 0 1
625
1 0 1 0 1
441

Efectuarea operaiei de mutaie


Indivizii rezultai
(generaia urmtoare)
Valoarea
mperecherea
Cromozom
funciei
obiectiv
Mutaii efectuate n primul 1 1 1 0 0
784
cromozom, genele 3 i 5 1 1 0 0 1
625
1 1 0 0 1
625
1 0 1 0 1
441

Populaia urmailor direci i modul de efectuare a mutaiei


Indice
Cromozom
cromozom
1
2
3
4

3.2.

1
1
1
1

1
1
1
0

0
0
0
1

0
0
0
0

1
1
1
1

Valoarea
funciei
obiectiv
625
625
625
441

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 (fezabile) i, reciproc, n spaiul genotipurilor pot fi reprezentate toate soluiile
posibile. n practic, soluiile fezabile sunt cele care respect constrngerile problemei particulare
de rezolvat, generarea lor nefiind 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
( )
( )
( )
( )
(
)
*
+, atunci
unde
este operatorul logic sau exclusiv. De exemplu, dac
i reprezentrile binare standard i respectiv Gray sunt prezentate n tabelul urmtor.
Numr
Cod binar std.
Cod Gray
Numr
Cod binar std.
Cod Gray

0
0000
0000
8
1000
1100

1
0001
0001
9
1001
1101

2
0010
0011
10
1010
1111

3
0011
0010
11
1011
1110

4
0100
0110
12
1100
1010

5
0101
0111
13
1101
1011

6
0110
0101
14
1110
1001

7
0111
0100
15
1111
1000

n urmtoarele funcii MATLAB sunt prezentate obinerea codificrii Gay a unui numr
*
+, respectiv obinerea acelui numr din
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, vest, est) revine la determinarea unei secvene de deplasri ctre nord, sud,
vest, respectiv est cu cte o unitate (corespunztoare unei conexiuni), fiecare tip de deplasare
+ (fiecare element corespunde
putnd fi codificat cu o valoare din mulimea cu elemente *
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
(
), unde
p gene este deci vectorul
.
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
) corespunde, prin permutarea (
), irului (
), n timp ce n
irul (
) ( este n poziia 3, este
varianta alternativ de reprezentare corespunde irului (
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
78
106
127
190
-96
2

-44
124
157

1
206
124
-77
-97
-25
51
132
92
Mutatie efectuata in
118
-40
110
Gena 1
Cromozom rezultat
-37
-40
110
Mutatie efectuata in
190
-96
2
Gena 4
Cromozom rezultat
190
-96
2
Mutatie efectuata in
1
206
124
Gena 2
Cromozom rezultat
1
-60
124
Mutatie efectuata in
51
132
92
Gena 4
Cromozom rezultat
51
132
92

-76
70
68
cromozomul
-44
-44
cromozomul
157
168
cromozomul
-76
-76
cromozomul
68
-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
- i, prin aplicarea
presupunem c, pentru
, valoarea genei i aparine intervalului ,
(
)
(
),
operatorului mutaie asupra cromozomului
este obinut
,
unde
.
Mutaia uniform presupune modificarea fiecrei gene
din fiecare cromozom,
-. Deci, dac
cu probabilitatea pm, prin generarea aleatoare uniform a cte unui numr din ,
gena i,
a cromozomului x a fost selectat pentru mutaie,
este generat aleator, cu
-. Altfel,
distribuie uniform, n ,
. 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, ,

)) rezultatul fiind apoi adus pe intervalul ,


-. Motivul alegerii unei
(distribuie notat (
) s fie n
astfel de distribuii este urmtorul. Probabilitatea ca un numr generat aleator (
,
- , 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
-, atunci ele pot fi generate din
exemplu, inferioare unui prag dat t, deci n intervalul ,
), unde
distribuia (
.
Observaie. n general, pentru distribuia
(
(
(

(
)

), au loc proprietile
)
)

O variant de implementare a acestui operator pentru o deviaie standard dat,


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;

, este
-

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
1.5066
-0.6180
-1.2062
3.2035
2.4874
3.1164
-0.5215
0.9505
-1.1020
-0.8075
1.5848
-1.7097
1.6709
-0.2899
-0.3135
3.2492
-1.2787
-1.6245
-1.0862
3.0128
-1.2506
Mutatie efectuata in cromozomul
-0.8075
1.5848
-1.7097
Gena 4
Cromozom rezultat
-0.8075
1.5848
-1.7097
Mutatie efectuata in cromozomul
3.2492
-1.2787
-1.6245
Gena 3
Cromozom rezultat
3.2492
-1.2787
-1.5721
Mutatie efectuata in cromozomul
-1.0862
3.0128
-1.2506
Gena 4
Cromozom rezultat
-1.0862
3.0128
-1.2506

2.4376
1.5835
-0.2953
-0.8396
-0.7389
1.9637
-1.3113
1.3935
-0.7389
-0.6407
-1.3113
-1.3113
1.3935
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
3
4
2
3
6
1
3
8
7
2
8
6

4
1
8
4
3

8
7
7
2
1

3
5
5
5
5

7
6
2
6
7

2
8
4
1
4

3
7
4
4
5

1
4
7
1
7

7
2
2
7
8

8
6
6
8
1

5
8
8
3
3

Mutatie efectuata in cromozomul


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

6
3
1
5
4

2
1
3
2
2

4
5
5
6
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 comisvoiajorului), 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
-. Procesul presupune selectarea a dou
probabilitate (rat) pc, setat n general n intervalul ,
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
) i
Holland n 1975. Recombinarea este aplicat cte unei perechi de cromozomi printe (
presupune efectuarea urmtoarelor operaii: selectarea aleatoare a unei gene, poz, i obinerea
progeniturile
astfel :
copiaz primele poz elemente din , respectiv n , 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.
) i presupune
Recombinarea este aplicat cte unei perechi de cromozomi printe (
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
) i presupune obinerea progeniturile
printe (
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
0
0
1
1
0
0
0
1
0
0
0
1
0
0
0
1
1
0
0
1
1
Parintii:
0
0
1
0
0
1
Incrucisare asexuata
Urmasii:
0
0
1
0
0
1

1
1
1
0
1
0
0
1

0
0
1
1
0
0
0
0

1
1
1
0
1
1
0
1

1
1

0
0

1
1

1
1

0
0

1
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,
, - i m dimensiunea reprezentrii (numrul de gene
1996). Vom considera n continuare
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 n , respectiv
( )
( ) (
) ( )
( )
( ) (
) ( )

De exemplu, dac
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 n , 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
prezentat n 2.4 (n rezolvarea problemei optimizrii unei funcii de o variabil).

a fost

) o pereche de cromozomi
Recombinarea aritmetic total este descris astfel. Fie (
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
) o
recombinare pentru rezolvarea problemelor bazate pe dependena de adiacen. Fie (
) progeniturile calculate i m numrul genelor unui
pereche de cromozomi printe, (
cromozom. O variant de implementare a acestui operator este descris astfel (Whitley, 2000).
( )
( )
Pas 1. Alege aleator
puncte de ncruciare, efectueaz

Pas 2. Calculeaz mulimea alelelor din secvena de gene


din cel de-al doilea
printe,
care
nu
au
fost
deja
copiate
n
prima
progenitur,
*(
)|
( )
+ *(
)|
( )
+
)
Pas 3. Pentru fiecare (
, scopul este de a copia a n prima progenitur. Pentru
( ) (b este valoarea genei p din prima
aceasta putem proceda astfel: calculeaz
progenitur, , care a fost copiat din poziia alelei a din cel de-al doilea printe; din construcia
mulimii A, rezult c valoarea a nu a fost copiat nc n ) i cu proprietatea c ( )
(poziia acestei gene, b, din cel de-al doilea printe).
3.1 Dac n poziia i din prima progenitur nu a fost plasat nici o valoare ( ( ) nu este
completat ), seteaz ( )
(a poate fi plasat n gena i).
( ) i cu proprietatea c ( )
3.2 n caz contrar, determin
( ( ) este deja
completat )
Dac poziia j n este neocupat, seteaz ( )
.
Altfel i=j i reia 3.2.
Pas 4. 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

10

10

Construcia primului copil, , este realizat astfel.


Dup aplicarea primului pas, obinem
6
5
7
3
La pasul 2 rezult
La pasul 3:
Deoarece
9

deci

( )

*(

)(

( )
i gena 2 din
6
5
7

)(

)+

nu are nc valoare, seteaz


3

( )
Deoarece ( )
i gena 4 din
are valoarea
i seteaz ( )
. Obinem
9
6
5
7
3
2

Deoarece
9

( )
1

( )
i gena 3 din
6
5
7

( )

( )

, rezult

nu are nc valoare, seteaz


3
2

( )

. Obinem

( )

. Obinem

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 1 i 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.
Construcia celui de-al doilea copil,

, este realizat astfel.

10

10

Dup aplicarea primului pas, obinem


7
9
2
1
La pasul 2 rezult

*(

)(

)(

)+

La pasul 3:

deci

( )
Deoarece ( )
i gena 6 din
are valoarea
i seteaz ( )
. Obinem
6
7
9
2
1

Deoarece
6

Deoarece
3
6

( )

, rezult

( )

( )

( )
i gena 8 din
7
9
2

nu are nc valoare, seteaz


1
5

( )

. Obinem

( )

( )
i gena 1 din
7
9
2

nu are nc valoare, seteaz


1
5

( )

. Obinem

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
5
4
7
2
Pozitiile:
1
4

6
1

4
3

8
6

5
8

Urmasii:
2
3
5
4

1
7

7
2

5
6

4
3

6
8

8
1

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

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, ( )
seteaz ( )
. Obinem
2
3
1
7
5
0
0
0

Deoarece
2
3

din

( )
1

( )
i gena 6 din
7
5
4

nu are nc valoare>0, seteaz


0
0

( )

( )
,

. Obinem

La pasul 4 vor fi plasate n , n ordinea genelor rmase fr valori, alelele 6 i 8 (alelele


ce nu au fost copiate nc n prima progenitur). Rezult
2
3
1
7
5
4
6
8

Operatorul de recombinare a 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.
Pas 1. Construiete tabela de muchii.
Pas 2. Alege aleator o gen, i, i copiaz valoarea acesteia, v, n cromozomul progenitur.
.
REPET Pas 3 Pas 5 PN CND TOATE GENELE CROMOZOMULUI URMA AU
FOST COMPLETATE (AU PRIMTI CTE O VALOAREA)
) , lista vecinilor elementului curent
Pas 3. Determin (
.

) nc necopiate n cromozomul urma. Dac


Pas 4. Examineaz elementele din (
) conine cel puin un element a+, atunci selecteaz primul
exist o muchie comun, adic (
a cu aceast proprietate pentru copiere n cromozomul rezultat. Altfel, alege pentru copiere acea
(
) cu proprietatea c | ( )|
valoarea
. Valoarea
(
) | ( )|. Seteaz
copiat n cromozomul printe nu va mai fi consultat ulterior: ea este eliminat din celelalte liste
de adiacen.
)
Pas 5. Dac (
, este examinat pentru expandare cellalt capt al cromozomului
urma, altfel este ales aleator un nou element (o nou alel).
De exemplu, fie
1
2
4
10

i
5

10

cromozomii selectai pentru ncruciare.


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

Lista muchiilor
4+,5,8
3+,5,9
1+,6,10
2,3,7,10
4,5,8,9

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


cromozomilor
i
(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
Aleatoriu
1 9 9 9 9 9 9 9 9 9
2,8
2
Valoare comun
1 2 9 9 9 9 9 9 9 9
4,9
4
Lista cea mai scurt
1 2 4 9 9 9 9 9 9 9
6,10
6
Valoare comun
1 2 4 6 9 9 9 9 9 9
5,8
8
Lista cea mai scurt
1 2 4 6 8 9 9 9 9 9
10
10 Singurul element
1 2 4 6 8 10 9 9 9 9
5,9
5
Aleator (listele cu vecinii
1 2 4 6 8 10 5 9 9 9
nc necopiai au aceeai
lungime)
3,7
3
Aleator (listele cu vecinii
1 2 4 6 8 10 5 3 9 9
nc necopiai au aceeai
lungime)
7,9
7
Valoare comun
1 2 4 6 8 10 5 3 7 9
9
9
Singurul element rmas
1 2 4 6 8 10 5 3 7 9
neselectat
Operatorul de recombinare de ordine (Order Crossover) a fost propus n (Davis, 1991)
pentru rezolvarea problemelor n care spaiul genotipurilor este dat printr-un set de permutri
) o pereche de cromozomi printe,
semnificnd ordinea apariiei unor evenimente. Fie (
(
) progeniturile calculate i m numrul genelor unui cromozom. Procedura de recombinare
revine la parcurgerea urmtorilor pai.
( )
Pas 1. Alege aleator
puncte de ncruciare, efectueaz ( )

Pas 2. 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
,

10

10

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

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
) o pereche de cromozomi printe, (
) progeniturile calculate,
din fiecare printe. Fie (
m numrul genelor unui cromozom i nrcicluri numrul ciclurilor calculate. Pentru fiecare
) (pereche ordonat) se
(alegerile impare), elementele ciclurilor din (
(
)(pereche
regsesc n aceleai poziii n
ordonat), n timp ce, pentru fiecare
)(pereche ordonat) se regsesc n
(alegerile pare), elementele ciclurilor din (
(
)
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
Pas 1. Iniializeaz ciclul curent cu secvena vid,
()
Pas 2. Fie i prima gen din nc neutilizat;
()
Pas 3. Calculeaz
()
Pas 4. Determin
* +
Pas 5.
Pas 6. Repet Pas 3 - Pas 5 pn cnd ( )
.
De exemplu, fie
Ciclurile identificate sunt:

, (

) o pereche de cromozomi printe prezentai mai jos.


(

( )

Grafic, procedura de identificare a ciclurilor poate fi figurat astfel.

x1 1

2 4 6 5 7 3 9 10

y1 10 5 2 7 9 1
x1 1

3 8

2 4 6 5 7 3 9 10

y1 10 5 2 7 9 1

x1

y1

10

3 8 6

5 7

3 9 10 8

Rezult cromozomii:
x2

y2

10

3
3

8
9

10

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
9
8
7
Indecsii ciclurilor:
1
2
2
Progeniturile:
6
8
7
9
1
8
Parintii:
10
2
5
9
7
12
Indecsii ciclurilor:
1
2
1
Progeniturile:
10
7
5
9
2
12

10
3

5
6

7
1

9
5

3
10

4
4

2
2

10
3

5
6

1
7

9
5

3
10

4
4

2
2

7
3

9
6

6
5

4
1

11
10

12
11

1
4

8
2

3
8

3
7

9
6

6
5

4
1

11
10

12
11

1
4

2
8

8
3

Parintii:
13
4
10
7
3
1
11
8
Indecsii ciclurilor:
1
2
2
1
Progeniturile:
13
1
11
7
3
4
10
8

14
4

6
6

8
13

3
9

2
5

1
10

11
14

5
12

9
7

12
2

4
14

6
6

8
13

3
9

5
2

10
1

14
11

12
5

9
7

2
12

Recombinarea multipl
Operatorii de recombinare multipl presupun obinerea de progenituri prin utilizarea ntuplurilor 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 timp, 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,

( ). Probabilitatea de selectare a individului

prin funcia de evaluare


este

pentru ncruciare

( )
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 ncorporeaz
informaiile calitate medie i respectiv deviaie standard n cadrul 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.
Pas 1. 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


Pas 2. 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:
Pas 1. 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


Pas 2. genereaz aleator un numr
[ ]; i=1; k=1;
Pas 3. 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
1
2
3
4

1
1
0
1

1
0
0
1

0
0
0
1

0
1
0
0

1
1
0
0

Valoarea
Probabilitate Probabilitatea
funciei obiectiv a de selecie cumulat
FPS
625
0.3531
0.3531
361
0.2040
0.5571
0
0
0.5571
784
0.4429
1.0000

Populaia selectat pentru recombinare i populaia rezultat


Bazinul de mperechere selectat i modul de mperechere
Indivizii rezultai (copiii)
Indice
Valoarea
Valoarea
Cromozom
mperecherea
Cromozom
cromozom
funciei obiectiv
funciei obiectiv
1
1 1 0 0 1
625
729
Cromozomii 4 i 2, punctul 1 1 0 1 1
de ncruciare 2
2
1 0 0 1 1
361
1 0 1 0 0
400
3
1 1 1 0 0
784
841
Cromozomii 3 i 1, punctul 1 1 1 0 1
de ncruciare 3
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.
Pas 1. Pentru
execut 1.1, 1.2 i 1.3
1.1. genereaz aleator k indivizi din populaie n setul S (cu sau fr nlocuire);
( )
( ), cel mai bun individ din S;
1.2. calculeaz
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; 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 este uor de controlat constrngerea seleciei 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 elitismul.
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
1
0
0
0
1
1
0
1
0
1
1
1
1
1
1
1
1
1

si valorile functiei obiectiv


0
0
256
0
0
144
0
0
64
1
1
961
1
1
961
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
0
1
1
1
1
0
1
1

1
1
1
0
0
1

1
0
1
0
1
0

1
0
1
0
1
0

225
784
225
576
361
784

Operatia de mutatie Populatia rezultata


0
1
1
1
1
1
0
1
1
1
1
0
1
0
0
1
1
1

1
0
1
0
1
0

1
0
1
0
1
0

225
784
225
576
361
784

Generatia urmatoare
1
1
1
1
1
1
0
1
1
1
1
0
1
0
0
1
1
1

1
0
1
0
1
0

1
0
1
0
1
0

961
784
225
576
361
784

You might also like