Professional Documents
Culture Documents
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
i probabilitatea cumulat
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
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
Probabilitatea
cumulat
0.0566
0.6097
1.0000
1.0000
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
(
)
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
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
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
-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, ,
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
)
)
, 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
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
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
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
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
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.
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, ( )
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
De exemplu, dac
rezult
(
(
(
(
)
)
)
)
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
10
10
deci
( )
*(
)(
( )
i gena 2 din
6
5
7
)(
)+
( )
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
( )
. Obinem
( )
. Obinem
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,
10
10
*(
)(
)(
)+
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
( )
. Obinem
( )
( )
i gena 1 din
7
9
2
( )
. Obinem
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
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
*(
)(
)+
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
( )
( )
,
. Obinem
i
5
10
Lista muchiilor
4+,5,8
3+,5,9
1+,6,10
2,3,7,10
4,5,8,9
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
, (
( )
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
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
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
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
( )
( )
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
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
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
3.7.
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
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
1
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
0
225
784
225
576
361
784
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