Documente Academic
Documente Profesional
Documente Cultură
Terminologie
Algoritm
Exerciţiu:
Se consideră funcţia f ( x, y ) x 2 y 6 , cu x, y [0,15] . Să se minimizeze f
utilizând un algoritm genetic cu selecţia tip roată de ruletă, încrucişarea într-un punct
după bitul de rang 5 şi fără mutaţie. Se va calcula o iteraţie, plecând de la populaţia
iniţială P0.
P0:
Individ nr. x y
1 0 0
2 1 10
3 4 0
4 8 6
5 3 5
Rezolvare:
Utilizăm codificarea binară. Pentru aceasta, vom trece în baza 2 toate valorile posibile ale
genelor, adică numerele întregi din intervalul [0,15]. Numărul de biţi pe care se poate
face codificarea celor 16 valori este 4 (deoarece 2 4 16 ).
Algoritmul genetic va utiliza selecţia tip roată de ruletă şi încrucişarea într-un punct.
Dimensiunea populaţiei, după cum rezultă din P0, este egală cu 5. Forma particulară a
algortmului va fi:
1. Iniţializarea populaţiei iniţiale cu P0; nr_iter=0;
Repetă:
2. Selecţia ruletă
a) calcul fitness; f i f ( x i , y i ) , cu i 1..5
5
| fi |
b) calcul probabilităţi; p i
S
,S | fi | , i 1..5
i 1
c) generarea numerelor aleatoare şi alegerea părinţilor
3. Încrucişarea
4. Înlocuirea generaţiei curente cu urmaşii creaţi prin încrucişare;
nr_iter=nr_iter+1;
Până când nr_iter=1.
Iteraţia 1.
Pasul 2.
a) Calculăm fitness-ul pentru toţi indivizii din generaţia curentă:
f 1 f ( x1 , y1 ) 0 2 0 6 6
f 2 25
f 3 2
f 4 10
f 5 13
5
S | f i | 56
i 1
b) Calculăm probabilităţile de selecţie pentru fiecare individ, în vederea aplicării selecţiei
de tip ruletă:
| f 1 | 25
p1 0.107
S 56
p 2 0.446
p 3 0.036
p 4 0.179
p 5 0.232
5
Observaţie: pi 1.
i 1
c) Vom alege părinţii după principiul roţii de ruletă. Calculăm sumele parţiale normalizate
pentru fiecare individ şi le reprezentăm grafic:
q1 p1 0.107
q 2 p1 p 2 0.107 0.446 0.554
q3 0.589
q 4 0.768
q5 1
Împărţirea roţii de ruletă în funcţie de probabilităţi este prezentată în figura 3.1.
Fig. 3.2. Roata de ruletă divizată în funcţie de probabilităţile de selecţie
0.589
Fig. 3.3. Desfăşurarea sumelor parţiale normalizate
Pasul 3. Se utilizează încrucişarea într-un punct. Secţionăm indivizii după bitul de rang 5
(conform cerinţei) şi interschimbăm intre cei doi indivizi biţii care urmează după aceasta:
Păstrăm 5 indivizi dintre urmaşii astfel rezultaţi şi înlocuim generaţia curentă cu aceştia.
Pasul 4.
P1:
Individ codificat x_binar y_binar x_zecimal y_zecimal
00011010 0001 1010 1 10
00011010 0001 1010 1 10
00011101 0001 1101 1 13
00110010 0011 0010 3 2
00110110 0011 0110 3 6
Observaţie: Calculând fitness-ul pentru indivizii din noua generaţie, vom obţine
f 1 f ( x1 , y1 ) 25
f 2 25
f 3 31
f 4 7
f 5 15
Parametrii de intrare:
@functie_fitness – referinţa către un fişier .m în care se calculează funcţia pentru
problema de rezolvat;
nr_var – numărul de variabile independente ale funcţiei obiectiv.
Parametrii de ieşire:
x – punctul final (individul cel mai performant găsit);
val_fitness – valoarea funcţiei obiectiv în punctul x (scorul individului x).
k 1
Fişierul .m care calculează această funcţie trebuie să accepte un vector de trei
componente, corespunzătoare celor trei variabile din sumă. Pentru a scrie fişierul, se
parcurg următorii paşi (vezi lucrarea 1):
1. Selectaţi comanda New din meniul File
2. Alegeţi opţiunea M-file. Se va deschide un fişier .m nou în editorul Matlab
3. În fişierul astfel creat, scrieţi
function y= functie1(x)
y=0;
for j=1:1:3
y=y+x(j)^2;
end
4. Salvaţi fişierul. Pentru a evita problemele de compatibilitate, se obişnuieşte
denumirea fişierelor cu numele funcţiei (aici vom crea deci fişierul functie1.m).
>> [x val_fitness]=ga(@functie1,3)
Rezultatul va fi:
x =
val_fitness =
2.5943e-005
g = -5:0.05:5;
[x,y] = meshgrid(g);
z= 20*size(x,2)+x.^2+y.^2-10*(cos(x.*2.*pi)+cos(y.*2.*pi));
surfc(x,y,z)
shading interp
camlight headlight
Fig. 3.4. Graficul funcţiei Rastrigin
După cum se observă, funcţia prezintă foarte multe minime locale, ceea ce face ca
metodele de gradient să eşueze în găsirea minimului global. Pentru n=3, acesta este în
punctul de coordonate(0,0,0).
Pentru a căuta minimul acestei funcţii cu AG, deschideti un fişier .m, scrieţi următoarele
comenzi şi salvaţi-l cu numele rastrigin.m:
function y= rastrigin(x)
y = 10.0 * size(x,2) + sum(x .^2 - 10.0 * cos(2 * pi .* x),2);
x =
1.0e-003 *
val_fitness =
1.1739e-006
3. Fie funcţia
30 2
1 sin x k
2
k 1
f 3 ( x) ,
30
1 0.001 x k
2
k 1
reprezentată grafic în figura 3.5 cu ajutorul comenzilor:
g = -10:0.1:10;
[x,y] = meshgrid(g);
z = (1-power(sin(sqrt(x.^2+y.^2)),2))./(1+0.001.*(x.^2+y.^2));
surfl(x,y,z)
shading interp
colormap copper
Dorim să găsim maximul acestei funcţii cu ajutorul AG. Pentru aceasta, având în vedere
faptul că funcţia ga din toolbox-ul GADS minimizează funcţia pe care o primeşte ca
parametru, scriem în fişierul funcţie3.m:
function y= functie3(x)
y = (-1)*((1-power(sin(sqrt(sum(x.^2,2))),2))./(1+0.001.*sum(x.^2,2)));
Rezulatul va fi:
-0.9952
După cum se observă, rezultatul obţinut este apropiat de maximul global de valoare 1,
însă are semnul schimbat (deoarece în fişierul funcţiei obiectiv am schimbat semnul,
pentru a transforma problema într-una de maximizare).
Observaţie: Sintaxa funcţiei ga aşa cum a fost prezentată iniţial, conţine parametrul de
intrare opţiuni. Prin acesta se pot stabili diferiţi parametri ai AG, cum ar fi rata de
încrucişare, metoda de selecţie, recombinare sau mutaţie, numărul de generaţii,
dimensiunea populaţiei, etc. Atunci când nu se specifică acest parametru, se utilizează
setările implicte. Opţiunile vor fi aprofundate în cadrul lucrării 4.