ntregul proces poate fi asimilat din punct de vedere intuitiv cu modelul unui
peisaj adaptiv (dinamic) n spaiul 3D (0-x-y-z): un individ p(x,y,z)
planul x-y corespunde caracteristicilor individului
altitudinea lui p (valoarea lui pe axa 0z) corespunde nivelului de
adaptabilitate (fitness). a individului reprezentat de p.
Evoluia - procesul de avans al populaiei spre zone aflate la o altitudine
mai mare, acest avans fiind realizat pe baza mutaiilor i seleciei naturale
legtura problemele multimodale (puncte de optim local).
II. TIPURI DE PROBLEME REZOLVATE DE EC
Probleme de optimizare: sunt cunoscute modelul i datele de ieire dorite,
iar problema este de a determina datele de intrare care corespund
rezultatelor dorite. Exemple:
problema comis voiajorului;
problema planificrii activitilor;
probleme care pot fi formulate n termeni specifici claselor de probleme
de optimizare: problema celor N regine
Introducere
Ideea de a aplica principiile darwiniste ale evoluiei n rezolvarea automat a problemelor
(Problem Solving - PS) dateaz din anii 1940, naintea apariiei calculatoarelor electronice. n
1948 Turing propunea o tehnic de rezolvare a problemelor numit cutare genetic sau
evolutiv. n anii 1960 Fogel, Qwens i Walsh introduceau conceptul de programare evolutiv
(sau evoluionist), n timp ce Holland dezvolta algoritmii genetici. n aceeai perioad,
Rechenberg i Schwefel introduceau strategiile evolutive (evoluioniste) ca modaliti alternative
de rezolvare automat a problemelor. n anii 1990, Koza dezvolt o nou tehnic de cutare n
spaiul soluiilor, programarea genetic. n terminologia actual, ntregul spectru de metode de
rezolvare automat de inspiraie darwinist este desemnat prin termenul de calcul evolutiv
(evoluionist) i include subdomeniile: programare evolutiv, strategii evolutive, algoritmi
genetici i programare genetic.
Calculul evolutiv este un domeniu al informaticii inspirat din procesul evoluiei naturale;
ideea care st la baza calculului evolutiv este conexiunea evoluie natural tehnica de rezolvare
a problemelor de tip experiment-eroare (sau generare-testare). Cu alte cuvinte, ntr-un mediu dat,
indivizii constituii ntr-o populaie intr n competiie pentru a supravieui i a se reproduce.
Abilitatea indivizilor de a-i atinge aceste scopuri n mediul n care triesc este strict corelat cu
ansele lor de supravieuire i multiplicare i determin evoluia n timp a populaiei. n contextul
modalitii de rezolvare a problemelor de tip generare-testare stochastice, populaia este modelat
ca o colecie de elemente candidat la soluie. Calitatea candidailor la soluie, definit n termenii
gradului n care fiecare element rezolv problema, determin ansa lor de a fi meninui i utilizai
pentru construirea unor noi candidai.
Dac este cunoscut o funcie de tip calitate care trebuie maximizat, setul
iniial de candidai la soluie (elemente din mulimea ) poate fi generat aleator, fiind obinut
astfel populaia iniial, ( ). Pentru fiecare , reprezint calitatea
candidatului x (ca msur abstract de evaluare funcie de tip fitness). Populaia urmtoare este
determinat pe baza funciei de evaluare prin aplicarea urmtorului mecanism. Este selectat
, o submulime a lui format din cei mai buni membri ai populaiei curente, adic
din acele elemente cu cele mai bune scoruri obinute n urma evalurii prin . Membrii
mulimii genereaz populaia urmtoare prin aplicarea operatorilor de recombinare i/sau
mutaie. Operaia de recombinare (recombination) este definit pentru doi sau mai muli indivizi
din mulimea (numii prini) i are ca rezultat unul sau mai muli noi candidai la soluie
(numii copii). Operatorul mutaie este definit pe un element al mulimii i are drept rezultat
un nou candidat la soluie. Prin aplicarea operatorilor de recombinare i mutaie sunt generai noi
indivizi (numii progenituri ai mulimii ) care intr n competiie, pe baza msurii de fitness
(posibil i a vrstei), cu elementele populaiei pentru obinerea unui loc n populaia
urmtoare, . Procesul poate fi iterat fie pn la obinerea unui candidat suficient de bun (soluia
problemei, corespunznd unui punct de maxim al funciei ), fie pn la atingerea unei limite de
calcul date.
n cadrul acestui proces intervin dou elemente fundamentale care constituie baza
sistemelor evoluioniste:
operatorii de variaie (recombinare i mutaie), care asigur diversitatea necesar
crerii de indivizi cu caracteristici noi i
selecia, care foreaz creterea calitii indivizilor unei populaii.
Observaii
1. Schema prezentat mai sus corespunde familiei metodelor PS de tip generare-testare,
pe baza urmtoarelor consideraii. n cadrul algoritmilor evolutivi sunt procesai
simultan membrii unei ntregi populaii, combinarea informaiilor oferite de doi sau
mai muli candidai fiind realizat n principal prin operaia de recombinare. De
asemenea, algoritmii evolutivi sunt de tip stochastic.
2. Funcia de evaluare (de fitness) este o estimare de tip euristic a calitii fiecrui
membru al populaiei curente, iar procesul de cutare este dirijat de operatorii de
variaie i selecie.
Observaie. Spaiul fenotipurilor poate fi foarte diferit de cel al genotipurilor, cel n care
evolueaz un EA. O soluie este corespunztoare unui fenotip bun i este obinut prin
decodificarea celui mai bun (din punctul de vedere al funciei de evaluare) genotip rezultat n
urma aplicrii EA.
Observaie. Termenul reprezentare este utilizat n dou moduri diferite. n unele situaii
desemneaz transformarea aplicat spaiului fenotipurilor astfel nct s fie obinut spaiul
genotipurilor, caz n care termenul utilizat este i cel de codificare (n exemplul considerat mai
sus, fiecare genotip este codificarea binar a unui fenotip). Transformarea invers, aplicat
spaiului genotipurilor pentru a obine spaiul fenotipurilor este numit decodificare. Evident, n
acest caz reprezentarea trebuie s fie inversabil: fiecrui genotip trebuie s i corespund cel
puin un fenotip. n alte situaii, n definirea unei reprezentri accentul este pus cu precdere pe
structura de date utilizat pentru definirea spaiul genotipurilor i nu pe transformarea propriu-
zis. Aceast interpretare este legat spre exemplu de definirea operatorului mutaie pe spaiul
genotipurilor constituite din reprezentrile binare ale fenotipurilor.
Funcia de evaluare
Rolul funciei de evaluare (de fitness) este de a msura gradul de adaptabilitate a fiecrui
individ la mediul n care triete, mai exact este de definire a noiunii de calitate. Funcia de
evaluare st la baza procesului de selecie i, din perspectiva tehnicilor PS, reprezint modulul de
rezolvare a problemei date n contextul evolutiv. Din punct de vedere tehnic, este o funcie care
asociaz fiecrui genotip o msur a calitii i, n general, este derivat pe baza unei funcii de
tip calitate definit pe spaiul fenotipurilor. De exemplu, dac este funcia de calitate definit
pe spaiul fenotipurilor, format din numere din mulimea i fiecare genotip este reprezentarea
binar a unui fenotip, atunci funcia de evaluare n spaiul genotipurilor este definit prin,
Populaia
Rolul populaiei n dezvoltarea EA este de a menine o mulime de genotipuri
corespunztoare unor soluii posibile. O populaie este un multiset (o mulime de elemente nu
neaprat distincte) de genotipuri. Indivizii unei populaii sunt obiecte statice, n sensul c nu pot fi
modificai i nu se pot adapta mediului n care triesc. Aceste proprieti le are, n schimb
populaia. Dac este stabilit modul de reprezentare (spaiul genotipurilor), populaia poate fi
definit prin specificarea numrului de indivizi care o compun. n situaia unor EA compleci,
populaiei i este asociat i o structur spaial adiional, definit prin intermediul unei funcii
de tip distan sau prin relaii de tip vecintate. n astfel de cazuri, definirea populaiei trebuie
nsoit de specificarea structurii spaiale asociate. Operatorii genetici de selecie (selecia
indivizilor care interschimb material genetic prini- i selecia populaiei la momentul de timp
urmtor) sunt definii la nivelul unei populaii i, n general, construcia lor presupune consultarea
ntregii populaii curente. De exemplu, cel mai bun individ al unei populaii date poate fi selectat
pentru a genera populaia urmtoare sau cel mai slab individ al unei populaii date este nlocuit cu
unul nou. n cele mai multe situaii, EA folosesc populaii de dimensiune constant pe tot
parcursul evoluiei.
Diversitatea unei populaii este msurat n termenii numrului de indivizi distinci ai
populaiei. Exist mai multe variante de definire a msurii de diversitate: numrul valorilor
distincte ale funciei de evaluare (dei, dac , nu rezult ), numrul
fenotipurilor diferite reprezentate n cadrul populaiei (dei prezena unui fenotip n spaiul iniial
nu garanteaz prezena unui singur genotip n spaiul EA: n cadrul populaiei, repetarea unui
genotip este echivalent fie cu selectarea pentru includere a unui fenotip de mai multe ori, la
generarea populaiei iniiale, respectiv cu selectarea repetat a unui genotip n construirea unei noi
populaii, de exemplu datorit valorii mari a funciei de evaluare corespunztoare lui), numrul
genotipurilor diferite din populaie (un genotip corespunde unui singur fenotip i valoarea funciei
de evaluare corespunztoare lui este unic), msuri bazate pe entropia populaiei .a.m.d.
Operatorul mutaie
Mutaia este operator unar (cu aritate 1), n urma aplicrii acestuia asupra unui genotip
rezult o variant mutant, numit progenitur sau copil. Operatorul mutaie este ntotdeauna
stochastic, rezultatul depinznd de o serie de alegeri aleatoare. n general aceste alegeri constau n
utilizarea unui generator de numere aleatoare din diferite distribuii de probabilitate i sunt numite
extrageri aleatoare. Rolul mutaiei n calculul evolutiv depinde de tipul de algoritm implementat.
De exemplu, n cazul algoritmilor genetici, mutaia are rolul de a mprospta structura genetic
a unei populaii, n cazul programrii evolutive este unicul operator de variaie care dirijeaz
procedura de cutare, n timp ce n cazul programrii genetice n general nu este folosit.
Din studiul teoretic al convergenei algoritmilor evolutivi rezult c optimul global al
funciei obiectiv poate fi obinut n situaia n care operatorii de variaie utilizai asigur obinerea
oricrui genotip soluie potenial a problemei de optim (Eiben, Smith, 2003). Cea mai simpl
cale de a asigura ndeplinirea acestei codiii este de a utiliza un operator mutaie care s permit
modificarea oricrei alele dintr-un cromozom cu orice variant posibil, cu o probabilitate nenul.
n literatura de specialitate exist ns i opinii conform crora rezultatele teoretice relative la
comportamentul EA au o importan practic redus i multe implementri EA nu posed
proprietile cerute de acestea.
Operatorul de recombinare
Un operator de variaie binar (cu aritate 2) este numit operator de recombinare sau
ncruciare i are ca efect obinerea unuia sau a dou genotipuri urma direct prin combinarea
informaiei purtate de dou genotipuri printe. Recombinarea este un operator stochastic: alegerea
acelor pri ale genotipurilor prini care vor fi combinate i modalitatea de recombinare rezult
n urma unor extrageri aleatoare. Rolul recombinrii difer de la o clas de algoritmi evolutivi la
alta: n cadrul algoritmilor genetici este cel mai utilizat operator de variaie (probabilitatea de
efectuarea a unei ncruciri este n general mult mai mare dect probabilitatea apariiei unei
mutaii), n programarea genetic este n general unicul operator de variaie folosit, n timp ce n
programarea evolutiv nu este implementat.
n dezvoltri de tip EA pot fi folosii i operatori de recombinare de aritate mai mare dect
2 (n generarea urmailor sunt folosii mai mult de dou genotipuri printe). Astfel de operatori
sunt uor de implementat dar nu au corespondent biologic. Dei o serie de studii indic utilitatea
acestora n tratarea unor probleme particulare, aceti operatori sunt rar folosii.
Prin mperecherea a dou genotipuri printe cu caracteristici diferite i superioare calitativ
pot fi obinute progenituri care s mbine caracteristicile celor doi prini. Acest principiu are un
fundament biologic extrem de solid: a fost utilizat de cultivatorii de plante i cresctorii de
animale pentru a produce specii cu randament superior sau care s prezinte caracteristici
mbuntite. Aplicarea EA determin crearea de urmai direci prin ncruciri aleatoare, fiind
acceptat ideea c unii dintre acetia pot avea nsuiri nedorite, majoritatea pot fi calitativ similari
sau chiar inferiori prinilor i doar o mic parte dintre ei pot avea caracteristici superioare
prinilor.
Iniializarea
n majoritatea EA, crearea populaiei iniiale este realizat prin generare aleatoare de
fenotipuri i apoi obinerea multisetului de genotipuri asociat. De asemenea, n funcie de
problema particular de rezolvat, generarea populaiei iniiale poate fi realizat i pe baza unor
euristici care s asigure obinerea unor indivizi cu adaptabilitate ridicat.
Condiia terminal
Condiia terminal n EA este stabilit n funcie de tipul de problem de rezolvat, n felul
urmtor. Dac problema are o valoare de optim cunoscut, atunci un posibil criteriu de oprire este
atingerea acelei valori sau atingerea acelei valori cu o eroare dat . Dar, deoarece algoritmii
evolutivi sunt stochastici i nu garanteaz atingerea valorii optime, criteriul poate s nu fie
satisfcut la nici o iteraie, deci el trebuie reformulat. Cele mai utilizate opiuni sunt:
atingerea unui numr maxim de iteraii (generaii);
atingerea unui numr maxim de evaluri ale calitii indivizilor;
pentru o anumit perioad de timp (un numr de iteraii specificat sau un numr de
evaluri specificat) calitatea populaiei curente nu este semnificativ mbuntit
(este sub un prag dat);
diversitatea populaiei scade sub un prag dat.
n situaia n care problema de rezolvat nu are un optim cunoscut, poate fi utilizat oricare
din variantele menionate mai sus.
Evoluia cutare direct-cutare stochastic cuprinde dou tehnici care reduc din
dezavantajele cutrilor directe, i anume metode de tip hill climbing i simulated annealing.
Metodele de tip hill climbing utilizeaz o tehnic de iterativitate mbuntit. Aceasta
se aplic unui singur punct din spaiul de cutare. La o iteraie este selectat un nou punct aflat
ntr-o vecintate a punctului curent procesat. Dac acest punct determin o valoare mai bun (din
punct de vedere al criteriului de optim considerat) pentru funcia obiectiv, el devine punct curent.
n caz contrar, este selectat o alt vecintate a punctului curent, procesul desfurndu-se ulterior
similar. Algoritmul se ncheie cnd nici un punct vecin celui curent nu aduce mbuntiri
valorilor funciei obiectiv. Metodele de acest tip conduc de obicei la valori de optim local,
depinznd de punctul de start. n plus, nu se pot furniza informaii referitoare la eroarea relativ a
soluiei calculate. Pentru a crete performanele unor astfel de modele, acestea se utilizeaz pentru
un numr mare de punct de start.
Metodele de tipsimulated annealing elimin o mare parte din dezavantajele algoritmilor
hillclimbing, n sensul c soluiile nu depind de punctul de start i sunt de obicei apropiate de
punctul de optim global. Pentru aceasta, este considerat o probabilitate de acceptare a punctului
selectat drept urmtor punct curent, egal cu 1 dac noul punct furnizeaz o valoare mai bun
pentru funcia obiectiv considerat. n unele situaii, probabilitatea de a accepta un nou punct este
o funcie cu valori corespunztoare funciei obiectiv pentru punctul curent i noul punct selectat.
De asemenea, fa de tehnica hill climbing, este considerat un parametru de tip temperatura
sistemului, care influeneaz probabilitatea de acceptare a unui nou punct ca punct curent: cu ct
acest parametru este mai sczut, cu att ansele de acceptare sunt mai mici. Pe parcursul execuiei
algoritmului, temperatura sistemului scade; algoritmul se ncheie pentru o temperatur mic,
pentru care nu se mai accept nici o modificare a soluiei (probabilitatea de acceptare a unui nou
punct este 0).
procedure hillclimbing
begin
t=0
repeat
local=false
selecteaz aleator un punct curent vc
evalueaz vc
repeat
selecteaz nr puncte din vecintatea lui vc prin modificarea fiecrui bit al lui vc
selecteaz un punct vn dintre cei nr generai anterior, cu funcia obiectiv maxim
if f(vc)<f(vn) vc=vn
else local=true
until local
V(t)= vc
t=t+1
until t=MAX
end.
Variabila local are rolul de a semnala eventuala apropiere de un punct de maxim local,
determinat atunci cnd nu se mai fac modificri ale punctului curent (cnd nici un vecin al
punctului curent nu furnizeaz o valoare mbuntit a funciei obiectiv).
procedure simulated_annealing
begin
t=0
iniializeaz temperatura sistemului T
selecteaz aleator un punct curent vc
evalueaz vc
repeat
repeat
selecteaz vn n vecintatea lui vc (prin modificarea unui bit din vc)
if f(vc)<f(vn) vc=vn
else
if random[0,1) <exp{(f(vn)-f(vc)/T} vc=vn
until (condiie de terminare dat de T)
t=t+1
T=g(T,t)
until (criteriu de stop)
end.
Dac funcia de optimizat depinde de mai multe variabile, fiecare dintre ele este
reprezentat conform observaiei de mai sus, un cromozom fiind constituit din concatenarea
fiecrei reprezentri binare corespunztoare unei variabile.
Exemple. Fie . Lungimea intervalului este 15,1. Dac precizia dorit este
de 4 zecimale, atunci domeniul considerat trebuie divizat n 15,1 104=151000 intervale, deci
m=18.
a) Fie . Atunci
Rezult
i
ntr-adevr,
b) Fie . Atunci
Obinem
i
ntr-adevr,
% functia obiectiv
function [val]=f_obiectiv(x);
val=x.^1/3-3*sin(7*x+0.2)+2*cos(x/5-0.4)+1;
end
% implementarea algoritmului
function [val,v]=hillclimbing(a,b,nz,MAX);
% aici a=-1 si b=1, pentru a rezolva problema data
[y,m]=repr_sir_bin(0,a,b,nz);
V=[];
%m este numarul de biti pe care este reprezetat un numar din [a,b] cu
%precizia de nz zecimale
for t=1:MAX
local=0;
vc=unifrnd(a,b);
valm=f_obiectiv(vc);
if (t==1)
val=valm;
v=vc;
end;
while(local==0)
%calculul vecinilor, insotit de valorile functiei obiectiv
[y,m]=repr_sir_bin(vc,a,b,nz);
valc=f_obiectiv(vc);
ny=zeros(m,m+1);
for i=1:m
ny(i,1:m)=y(1:m);
ny(i,i)=not(y(i));
vn=repr_reale(ny(i,1:m),m,a,b);
ny(i,m+1)=f_obiectiv(vn);
end;
nys=sortrows(ny,m+1);
if(nys(m,m+1)>valc)
vc=repr_reale(nys(m,1:m),m,a,b);
valm=nys(m,m+1);
else
local=1;
end;
end;
if(valm>val)
val=valm;
v=vc;
timp=t;
end;
V=[V vc];
end;
disp(v);
disp(val);
plot_obiectiv(V,timp,a,b);
end
function []=plot_obiectiv(V,timp,a,b);
figure
x=a:0.001:b;
plot(x,x.^1/3-3*sin(7*x+0.2)+2*cos(x/5-0.4)+1,'k-');
hold on
[xx dim]=size(V);
disp(dim);
for i=1:dim
x=V(i);
y=f_obiectiv(V(i));
plot(x,y,'rs');
hold on
end;
x=V(timp);
y=f_obiectiv(V(timp));
plot(x,y,'bs');
end
La un apel
hillclimbing(-1,1,4,5);
i evoluia
La un apel
hillclimbing(-1,1,4,2);
pot fi obinute rezultatul:
punctul n care este atins maximul -0.2495
maximul calculat 5.7169
i evoluia
La un alt apel
hillclimbing(-1,1,4,2);
i evoluia
function [val,v]=hillclimbing(a,b,nz,MAX);
[y,m]=repr_sir_bin(0,a,b,nz);
V=[];
%m este numarul de biti pe care este reprezetat un numar din [a,b]x[a,b]
%cu precizia de nz zecimale
for t=1:MAX
local=0;
vc=unifrnd(a,b,1,2);
valm=f_obiectiv(vc(1),vc(2));
if (t==1)
val=valm;
v=vc;
end;
while(local==0)
%calculul vecinilor, insotit de valorile functiei obiectiv
for i=1:2
[y((i-1)*m+1:i*m),m]=repr_sir_bin(vc(i),a,b,nz);
end;
valc=f_obiectiv(vc(1),vc(2));
ny=zeros(2*m,2*m+1);
for i=1:2*m
ny(i,1:2*m)=y(1:2*m);
ny(i,i)=not(y(i));
vn(1)=repr_reale(ny(i,1:m),m,a,b);
vn(2)=repr_reale(ny(i,m+1:2*m),m,a,b);
ny(i,2*m+1)=f_obiectiv(vn(1),vn(2));
end;
nys=sortrows(ny,2*m+1);
if(nys(2*m,2*m+1)>valc)
vc(1)=repr_reale(nys(2*m,1:m),m,a,b);
vc(2)=repr_reale(nys(2*m,m+1:2*m),m,a,b);
valm=nys(2*m,2*m+1);
else
local=1;
end;
end;
if(valm>val)
val=valm;
v=vc;
timp=t;
end;
V=[V;vc];
end;
disp(v);
disp(val);
disp(timp);
plot_obiectiv(V,timp,a,b);
end
function [val]=f_obiectiv(x,y);
val=exp(-x^2-y^2)+y*cos(5*x)-x*sin(3*y);
end
function []=plot_obiectiv(V,timp,a,b);
figure
[X,Y] = meshgrid([a:0.01:b]);
Z = exp(-X.^2-Y.^2)+Y.*cos(5*X)-X.*sin(3*Y);
plot3(X,Y,Z,'y');
grid on
hold on
[dim xx]=size(V);
disp(dim);
for i=1:dim
x=V(i,1);
y=V(i,2);
z=f_obiectiv(x,y);
if(i==timp)
plot3(x,y,z,'ks');
hold on
else
plot3(x,y,z,'g.');
hold on
end;
end;
end
La un apel hillclimbing(-2,2,5,75);
pot fi obinute rezultatele:
x=-1.9102, y=-1.6250
valoarea maxim: 3.4989.
n urmtoare figur este prezentat un exemplu de evoluie posibil a algoritmului
hillclimbing aplicat pentru 75 de puncte de start.
2.4. Exemple de aplicare a EA
% operatorul mutatie
function [y]=mutatie(x);
y=x;
y(1)=-x(1);
y(2)=f_obiectiv(y(1));
end
% operatorul de incrucisare
function [y]=crossover(x1,x2);
y=x1;
y(1)=(x1(1)+x2(1))/2;
y(2)=f_obiectiv(y(1));
end
% mecanismul de selectie a parintilor
function [parinti]=selectie(pop);
[dim,xx]=size(pop);
d=round(dim/2);
% dim trebuie sa fie multiplu de 4, pentru ca d sa fie par
% va rezulta un singur copil din incrucisare
parinti=zeros(d,2);
for i=1:d
p1=unidrnd(dim);
p2=unidrnd(dim);
while(p2==p1)
p2=unidrnd(dim);
end;
if(pop(p1,2)>pop(p2,2))
parinti(i,:)=pop(p1,:);
else parinti(i,:)=pop(p2,:);
end;
end;
end
function []=EA_maxim(dim,pc,pm,Max,eps);
% dim este dimensiunea populatiei,multiplu de 4
% pc este probabilitatea de efectuare a
% unei incrucisari, pm este probabilitatea de efectuare a unei mutatii,
% Max este numarul maxim de iteratii(generatii)
%daca diferenta dintre valorile maxime ale
%functiei obiectiv de la o generatie la alta este in modul<eps --->stop
[pop]=genereaza_ini(dim);
evalmed= mean(pop(:,2));
t=0;
V=[];
er=1;
plot_obiectiv(pop);
while((t<Max)&&(er>eps))
[popN,evalmed1]=trecere(pop,pc,pm);
pop=popN;
er=abs(evalmed1-evalmed);
%disp(evalmed1);
%disp(er);
evalmed=evalmed1;
V=[V evalmed];
t=t+1;
if (t==20)
plot_obiectiv(pop);
end;
end;
plot_obiectiv(pop);
figure
i=1:t;
plot(i,V(i),'r-');
disp(t);
disp(popN(dim,:));
end
function []=plot_obiectiv(pop);
figure
x=-1:0.001:1;
plot(x,x.^1/3-3*sin(7*x+0.2)+2*cos(x/5-0.4)+1,'k-');
hold on
[dim,xx]=size(pop);
for i=1:dim
x=pop(i,1);
y=pop(i,2);
plot(x,y,'rs');
hold on
end;
end
function [pop]=genereaza_ini(N,dim);
pop=zeros(dim,N+1);
% fiecare membru al populatiei este o permutare pe 1,2,..,N
% la care este adaugata valoarea functiei obiectiv N-numarul de perechi
% de regine care se ataca reciproc
for i=1:dim
x=gen_perm(N);
pop(i,1:N)=x;
pop(i,N+1)=valoare(x);
end;
end
% recombinarea
function [y1,y2]=crossover(x1,x2,poz);
[m,p]=size(x1);
N=p-1;
y1=x1;y2=x2;
y1=copiaza_rest(y1,x2,poz,N);
y2=copiaza_rest(y2,x1,poz,N);
y1(N+1)=valoare(y1(1:N));
y2(N+1)=valoare(y2(1:N));
%disp(y1);
%disp(y2);
end
function [y]=copiaza_rest(y,x,poz,N)
i=poz+1;
while(i<=N)
for j=1:N
if(~ismember(x(j),y(1:i-1)))
y(i)=x(j);
i=i+1;
break;
end;
end;
end;
end
% mutatia
function [y]=mutatie(x,poz1,poz2);
[m,p]=size(x);
N=p-1;
y=x;
y(poz1)=x(poz2);
y(poz2)=x(poz1);
y(N+1)=valoare(y(1:N));
end
% algoritmul evolutiv
function []=EA_Queens(N,dim,pm,Max);
% N este umarul de regine, dim este dimensiunea populatiei, pm este
% probabilitatea de efectuare a unei mutatii si Max este numarul maxim
%de iteratii(generatii)
[pop]=genereaza_ini(N,dim);
evalmax=0;
t=0;
V=[];
while(evalmax<N*(N-1)/2 && t<Max)
[popN,evalmax]=trecere(pop,pm);
pop=popN;
disp(popN(dim,:));
V=[V popN(dim,N+1)];
t=t+1;
end;
figure
i=1:t;
plot(i,V(i),'ro:');
axis([0 t V(1)-1 (N*(N-1)/2)+5]);
figure
for i=0:N
plot( [0 N],[i i],'k-');
plot( [i i],[0 N],'k-');
hold on
end;
hold on
for i=1:N
x=i;
y=pop(dim,i);
k=x-1:0.1:x;
l=y-1:0.1:y;
plot(k,l,'bv');
hold on
k=x:-0.1:x-1;
l=y-1:0.1:y;
plot(k,l,'bv');
hold on
end;
axis([0 N 0 N]);
end
% operatorul de mutatie
function [y]=mutatie(x,poz);
y=x;
y(poz)=not(x(poz));
end
% operatorul de incrucisare
function [y1,y2]=crossover(x1,x2,poz);
[m,p]=size(x1);
y1=x1;y2=x2;
y1(1:poz)=x1(1:poz);
y1(poz+1:m)=x2(poz+1:m);
y2(1:poz)=x2(1:poz);
y2(poz+1:m)=x1(poz+1:m);
end
% selectia parintilor
function [parinti]=selectie(pop,val,cost,costM);
[N,m]=size(pop);
parinti=zeros(N,m);
i=0;
for i=1:N
p1=unidrnd(N);
p2=unidrnd(N);
%functia de fitness - suma vi*gi, gi=1,
%daca a fost ales obiectul i, 0 altfel
if(pop(p1,:)*val>=pop(p2,:)*val)
parinti(i,:)=pop(p1,:);
else
parinti(i,:)=pop(p2,:);
end;
end;
end
else
popN(i,:)=x1;
popN(i+1,:)=x2;
end;
end;
%aplica mutatia
for i=1:N
prm=unifrnd(0,1);
if(prm<=pm)
cont=1;
%trebuie ca progentitura sa fie solutie admisibila
while(cont)
poz=unidrnd(m);
x=popN(i,:);
[y]=mutatie(x,poz);
[OK,sum]=verifica(y,cost,costM);
if(OK==1)
popN(i,:)=y;
cont=0;
end;
end;
end;
end;
end
La apelul
GA_Knapsack('date.txt',500,0.8,1.0/8);
fiierul date.txt conine urmtoarele informaii:
Numrul de componente:
16
Valoarea obinut la alegerea fiecrei componente
4.5 6 8 5.4 10.2 3.2 4.2 8.3 3.2 4.5 9 10.9 5 6.2 7 8.2
La apelul
GA_Knapsack('date4.txt',2000,0.9,1.0/8);
fiierul date4.txt conine urmtoarele informaii:
Numrul de componente:
32
Valoarea obinut la alegerea fiecrei componente
2.5 6 8 3.4 10.2 3.2 4.2 8.3 3.2 4.5 9 10.9 5 6.2 7 8.2 9.2 1.3 4 5 8.9 0.4 7.3 4.1 8
3 11 2.5 3 1.2 5 2.3
0 1 1 0 1 0 0 1 0 0 1 1 0 1 1 1
1 0 0 1 1 0 1 0 1 0 1 0 0 0 1 0
while(local==0)
%calculul vecinilor, insotit de valorile functiei obiectiv
for i=1:2
[y((i-1)*m+1:i*m),m]=repr_sir_bin(vc(i),a,b,nz);
end;
valc=f_obiectiv(vc(1),vc(2));
ny=zeros(2*m,2*m+1);
for i=1:2*m
ny(i,1:2*m)=y(1:2*m); ny(i,i)=not(y(i));
vn(1)=repr_reale(ny(i,1:m),m,a,b); vn(2)=repr_reale(ny(i,m+1:2*m),m,a,b);
ny(i,2*m+1)=f_obiectiv(vn(1),vn(2));
end;
nys=sortrows(ny,2*m+1);
if(nys(2*m,2*m+1)>valc)
vc(1)=repr_reale(nys(2*m,1:m),m,a,b);
vc(2)=repr_reale(nys(2*m,m+1:2*m),m,a,b);
valm=nys(2*m,2*m+1);
else
local=1;
end;
end; %while (local==0)
if(valm>val)
val=valm; v=vc; timp=t;
end;
V=[V;vc];
end; %for i=1:MAX
disp(v); disp(val); disp(timp); plot_obiectiv(V,timp,a,b);
end
function []=plot_obiectiv(V,timp,a,b);
figure, [X,Y] = meshgrid([a:0.01:b]);
Z = exp(-X.^2-Y.^2)+Y.*cos(5*X)-X.*sin(3*Y); plot3(X,Y,Z,'y');
grid on hold on
[dim xx]=size(V);
for i=1:dim
x=V(i,1); y=V(i,2); z=f_obiectiv(x,y);
if(i==timp)
plot3(x,y,z,'ks'); hold on
else
plot3(x,y,z,'g.'); hold on
end;
end;end
La un apel hillclimbing(-2,2,5,75); pot fi obinute rezultatele:
x=-1.9102, y=-1.6250, valoarea maxim: 3.4989.
Componentele unui EA
Algoritmi genetici. Reprezentri
cromozomiale.
Componentele EA
1. Reprezentarea (definirea membrilor populaiei) - stabilirea unei conexiuni
ntre contextul problemei particulare de rezolvat i spaiul n care evolueaz
tehnica PS considerat.
Fenotipuri : soluiile posibile n contextul problemei de rezolvat
Genotipuri (cromozomi): reprezentarea fenotipurilor n context EA;
conin valori (alele), plasate n poziii numite variabile sau gene.
2. Funcia de evaluare (fitness) - msoar gradul de adaptabilitate a fiecrui
individ la mediul n care triete. St la baza proceselor de selecie i este
derivat pe baza unei funcii de tip calitate definit pe spaiul fenotipurilor.
3. Populaia multiset de genotipuri; menine o mulime de genotipuri, n
general de dimensiune constant, corespunztoare unor soluii posibile
Operatorii de selecie: definii la nivel de populaie.
Variaia n cadrul unei populaii individ, calitate, entropie etc.
4. Mecanismul de selectare a prinilor - permite celor mai buni indivizi s se
reproduc, fr a-i exclude pe cei mai slabi. Selecia este probabilist i
depinde de calitatea indivizilor
Rolul: foreaz mbuntirea calitii globale a populaiei de la o
generaie la alta.
5. Operatorii de variaie stochastici: rezultatul este funcie de alegeri aleatoare.
Recombinarea: produce unul sau dou genotipuri copil prin combinarea
informaiei din dou genotipuri printe i este stochastic
Mutaia: produce o variant mutant a unui genotip, numit progenitur
sau copil
6. Mecanismul de selectare a membrilor generaiei urmtoare - este aplicat
fiecrui individ aparinnd populaiei curente sau mulimii progeniturilor pe baza
unei fucii de decizie.
Supravieuire generaional
Supravieuire bazat pe calitate
7. Definirea modulului de iniializare (determinarea populaiei iniiale) sunt
generate aleator fenotipurile i apoi este obinut reprezentarea prin genotipuri
8. Definirea condiiei terminale
atingerea unui numr maxim de iteraii (generaii);
atingerea unui numr maxim de evaluri ale calitii indivizilor;
pentru o anumit perioad de timp calitatea populaiei curente nu este
semnificativ mbuntit (este sub un prag dat);
diversitatea populaiei scade sub un prag dat.
ALGORITMI GENETICI (GA)
Respect structura unui EA
Reprezentarea soluiilor. Reprezentarea binar
Alegerea unei anumite reprezentri depinde de problema particular de
rezolvat i este foarte important pentru ca GA s furnizeze soluii apropiate
de cele optime.
Clase de probleme:
probleme n care ordinea apariiei evenimentelor este important.
Aceast situaie apare, de exemplu, cnd evenimentele utilizeaz
resurse limitate sau se desfoar ntr-o anumit perioad de timp.
Exemplu: problema planificrii activitilor;
probleme n care apare dependena de adiacen. Exemplu:
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.
Algoritmi genetici. Operatori de
variaie
Operatorul mutaie. Reprezentarea binar
Mutaia n reprezentarea prin permutri
Recombinarea uniform n reprezentarea binar i
pe iruri de numere ntregi
Algoritmi genetici.
Operatorul de recombinare n
reprezentarea prin permutri
Operatorul PMX
Operatorul OCX
Operatorul ECX
Operatorul CX
x1 1 2 4 6 5 7 3 9 10 8
y1 10 5 2 7 9 1 3 8 6 4
x1 1 2 4 6 5 7 3 9 10 8
y1 10 5 2 7 9 1 3 8 6 4
x1 1 2 4 6 5 7 3 9 10 8
y1 10 5 2 7 9 1 3 8 6 4
Recombinarea multipl
Mecanisme de selecie.
Selecia prinilor. Selecia
supravieuitorilor
Determinarea distribuiei de probabilitate de selecie
Exemplu de implementare
1 18 1 0 0 1 0 324
2 20 1 0 1 0 0 400
3 28 1 1 1 0 0 784
4 18 1 0 0 1 0 324
5 28 1 1 1 0 0 784
Mecanismului SUS
Problema JSS
Ipoteze de lucru:
n cadrul fiecrei sarcini, activitile respect o relaie de preceden din
punctul de vedere al execuiei, astfel nct dou sau mai multe activiti nu
pot fi executate simultan; cu alte cuvinte, fiecare sarcin este definit de un
set ordonat de operaii, ordinea fiind predefinit;
activitile nu i pot ntrerupe execuia;
la fiecare moment de timp, pe oricare main, poate fi executat o singur
operaie.
Problema JSS
Problema JSS
Problema JSS
Mecanismul de selecie
[2 1 4 3 2 1 3 4 1 2 3 4 4 1 2 3 2 1 3 4]
Problema JSS. Exemplu de test
permutare=(3 1 20 18 13 6 9 17 8 10 15 2 4 12 14 5 19 7 11 16)
3 2 5 0 1 3 10 4 11 0 13 4
5 14 9 3 17 7 24 11 27 5 3 10
14 9 17 7 5 10 27 16 33 35 12 40
17 18 26 10 15 17 33 19 35 40 20 47
26 6 31 17 10 24 35 7 44 47 8 51
Problema JSS. Exemplu de test
0 9 3
0 5 3 8 7 17 0 13 4
3 6 8
3 1 6 17 11 20 11 3 16
9 2 11
6 17 10 20 4 21 17 8 21
11 14 15
10 10 17 24 19 26 21 12 26
15 18 24
17 15 24 26 16 32 26 20 33
Problema JSS. Exemplu de test
Problema optimizrii portofoliilor.
Rezolvare prin tehnica de tip
gradient.
Randamentul / riscul unui portofoliu
S1 S2 S3 S4 S5 S6 S7 S8 S9 S10
A1 1.2 1.3 1.4 1.5 1.1 1.2 1.1 1.0 1.0 1.1
A2 1.3 1.0 0.8 0.9 1.4 1.3 1.2 1.1 1.2 1.1
A3 0.9 1.1 1.0 1.1 1.1 1.3 1.2 1.1 1.0 1.1
A4 1.1 1.1 1.2 1.3 1.2 1.2 1.1 1.0 1.1 1.2
A5 0.8 0.75 0.65 0.75 0.8 0.9 1.0 1.1 1.1 1.2
Rezolvarea RISCMIN1M prin tehnica celei mai
rapide descreteri. Exemplu
S1 S2 S3 S4 S5 S6 S7 S8 S9 S10
A1 1.2 1.3 1.4 1.5 1.1 1.2 1.1 1.0 1.0 1.1
A2 1.3 1.0 0.8 0.9 1.4 1.3 1.2 1.1 1.2 1.1
A3 0.9 1.1 1.0 1.1 1.1 1.3 1.2 1.1 1.0 1.1
A4 1.1 1.1 1.2 1.3 1.2 1.2 1.1 1.0 1.1 1.2
A5 0.8 0.75 0.65 0.75 0.8 0.9 1.0 1.1 1.1 1.2
Exemplu - excluderea situaiei de tip short selling
Exemplu considerarea situaiei de tip short
selling
ALGORITMI GENETICI
Introducere
AG sunt metode de cautare stocastice care mimeaza
evolutia naturala biologica
Opereaza pe o populatie de solutii potentiale
aplicand principiul supravietuirii celui mai bun
(teoria evolutionista Darwin) pentru a produce
aproximari din ce in ce mai bune ale solutiei.
Fiecare individ al populatiilor se descrie printr-un
singur cromozom
Genotipul fiecarui individ contine un singur
cromozom
Tehnici de inteligen computaional n electronic, G. Oltean 2 /24
ALGORITMI GENETICI
Introducere cont.
In fiecare generatie este creat un nou set de indivizi
(aproximatori, cautatori) in urma selectiei celor mai
adecvati indivizi si combinarea acestora pentru a da
nastere la noi indivizi utilizand operatori
imprumutati din genetica
Are loc evolutia populatiei de indivizi care astfel
devin mai adecvati (potriviti) mediului decat
indivizii din care au fost creati, similar cu adaptarea
naturala.
Sunt modelate procese naturale:
selectie,
recombinare,
mutatie.
Tehnici de inteligen computaional n electronic, G. Oltean 3 /24
ALGORITMI GENETICI
Structura unui AG
Reprezentarea variabilelor
Specifica AG este notiunea de cromozom, ce contine toate informatiile
necesare reprezentarii unui individ.
Un cromozom este compus din gene variabila a problemei de optimizat
Cromozom generic in care fiecare gena reprezinta o variabila:
Functia de adecvare
Functia de adecvare (fitness) se determina in concordanta cu valoarea functiei
obiectiv definita pentru problema de optimizare de rezolvat.
Formularea problemei de optimizare este de tipul minimizeaza sau maximizeaza
(se poate trece de la una la cealalta utilizand semnul minus in fata functiei)
Exemplu de problema de minimizare
Gaseste x care minimizeaza F ( x ) pentru x D
Problema de minimizare
Selection _ probability (i ) =
Fitness(i )
N
Fitness(i)
i =1
Tehnici de inteligen computaional n electronic, G. Oltean 16 /24
ALGORITMI GENETICI
Selection _ probability (i ) =
Fitness(i )
N
Fitness(i)
i =1
Tehnici de inteligen computaional n electronic, G. Oltean 17 /24
ALGORITMI GENETICI
Recombinare
Produce noi indivizi (urmasi) prin combinarea informatiilor
continute de doi sau mai multi parinti
Combinarea valorilor variabilelor parintilor
Tipuri de recombinari:
discreta
pentru valori reale:
recombinare intermediara
recombinare liniara
recombinare liniara extinsa
pentru valori binare (incrucisare - crossover):
incrucisare cu un singur puncte / cu doua puncte / cu puncte multiple
incrucisare uniforma
etc.
Recombinare intermediara
Var U
j = a Var + (1 a )Var , j = 1, 2, ..., Nvar
j j
P1
j j
P2
Aria posibila a
urmasilor
Mutatia
Indivizii (urmasii) sunt modificati aleator
Mutatie
Pentru variabile reale
Pentru variabile binare
Mutatia
Reinsertia
Generarea noii populatii
Reinsertie globala
Numar urmasi > numar parinti: toti parintii sunt inlocuiti de urmasi
Numar urmasi < numar parinti: se inlocuiesc parinti in mod aleator
Numar urmasi < numar parinti: se inlocuiesc parintii cu cel mai scazut
grad de adecvare
Numar urmasi > numar parinti: se inlocuiesc toti parintii cu cei mai buni
urmasi
Reinsertie locala
Algoritmi genetici
1.1 Generaliti
Algoritmii genetici fac parte din categoria algoritmilor de calcul evoluionist i sunt inspirai de teoria
lui Darwin asupra evoluiei. Idea calculului evoluionist a fost introdus n 1960 de I. Rechenberg n
lucrarea intitulat Evolution strategies.
Algoritmii genetici au fost aplicai cu succes ntr-o varietate de aplicaii care necesit optimizarea
global a soluiei. Algoritmii genetici se refer la un model introdus i analizat de J. Holland n 1975
i sunt proceduri adaptive care gsesc soluia problemei pe baza unui mecanism de selecie natural i
evoluie genetic. Algoritmul este des folosit pentru probleme n care gsirea soluiei optime nu este
uoar sau cel puin ineficient datorit caracteristicilor cutrii probabilistice. Algoritmii genetici
codific o soluie posibil la o problem specific ntr-o singur structur de date numit
cromozom i aplic operatori genetici la aceste structuri astfel nct s menin informaiile critice.
Algoritmii genetici pornesc de la o mulime iniial de soluii (de obicei aleas aleator) numit n
literatur populaie. n aceast populaie fiecare individ este numit cromozom i reprezint o
soluie posibil a problemei. n aproape toate cazurile cromozomul este un ir de simboluri (de obicei
reprezentat ca un ir de bii). Aceti cromozomi evolueaz pe durata iteraiilor succesive numite
generaii. n fiecare generaie, cromozomii sunt evaluai utiliznd unele msuri de potrivire (fitness).
Pentru crearea urmtoarei populaii cei mai buni cromozomi din generaia (populaia) curent sunt
selectai i noii cromozomi sunt formaii folosind unul dintre cei trei operatori genetici eseniali:
selecia, crossover i mutaia.
Selecia asigur c anumii cromozomi din generaia curent sunt copiai n acord cu valoarea funciei
lor de potrivire n noua generaie ceea ce nseamn c cromozomii cu o importan mare au o
probabilitate mare s contribuie la formarea noii generaii. Crossover este un alt operator genetic care
reprezint procesul prin care pe baza a doi cromozomi din populaia curent sunt formai doi
cromozomi pentru populaia urmtoare. Mutaia este procesul prin care un cromozom din populaia
curent este modificat i salvat n noua populaie.
1 of 6
Laboratorul 5 nvare Automata Algoritmi genetici
Algoritmii genetici au dou componente principale care depind de problema abordat: codificarea
problemei i funcia de evaluare (de fitness). Cromozomii care reprezint codificarea problemei
trebuie ntr-o oarecare msur s conin informaiile despre soluia problemei i depind foarte mult
de problem. Exist mai multe codificri, care au fost utilizate cu succes cum ar fi codificarea binar
(cromozomul este format din iruri de 0 sau 1 care reprezint binar soluia problemei) sau codificarea
prin valoare (cromozomul este format dintr-un ir de valori vector ntregi sau reale care pe ansamblu
reprezint soluia problemei). De exemplu un cromozom poate avea urmtoare form (reprezentat
prin valoare):
Funcia de evaluare numit i funcia de fitness (potrivire) este funcia care ne permite s dm o
ncredere la fiecare cromozom din populaie. Aceast funcie este de obicei funcia care reprezint
descrierea problemei.
Cnd trebuie s rezolvm o problem, de obicei ne uitm dup anumite soluii care sunt mai bune
dect alte soluii obinute anterior. Spaiul tuturor soluiilor fezabile este numit spaiul de cutare sau
spaiul strilor. Problemele abordate folosind algoritmi genetici sunt de obicei probleme pentru care
cutarea n spaiul soluiilor este o problem complicat sau chiar (NP-complet). De obicei nu tim
unde s ne uitm dup soluie i de unde s ncepem. Soluiile obinute folosind algoritmi genetici
sunt de obicei considerate ca soluii bune deoarece nu este ntotdeauna posibil s cunoatem care este
optimul real.
2 of 6
Laboratorul 5 nvare Automata Algoritmi genetici
n aceast metod fiecare individ din populaia curent este reprezentat printr-un spaiu proporional
cu valoarea funciei lui de evaluare. Prin eantionri aleatoare succesive din acest spaiu de
reprezentare a cromozomilor asigur c cei mai buni cromozomi au anse mai mari s fie selectai la
un anumit pas dect cei cu mai slabi. Aceast metod de selecie va avea probleme n momentul n
care valoarea funciei de evaluare difer foarte mult de la un cromozom la altul. De exemplu dac cel
mai bun cromozom are valoare funciei de evaluare mare (care va ocupa 90% din spaiul de
reprezentare) iar restul cromozomilor au valori ale funciilor de evaluare foarte mici aceast metod
va selecta de foarte multe ori cromozomul cel mai bun ducnd n final la degenerarea populaiei.
( M fitness ( ci )) 2
P(ci ) = e 2 2
unde P(.) reprezint probabilitatea calculat pentru cromozomul ci, M reprezint media, care aici
este valoarea maxim care poate fi obinut de ctre funcia de evaluare i care reprezint
dispersia sau panta cu care scade probabilitatea, iar fitness(ci) reprezint valoarea funciei de
evaluare pentru acel cromozom. De exemplu dac valoare maxim a funciei de evaluare este 1,
M va fi 1 iar pentru dispersie propunem o valoare ntre 0.3-0.5.
3. n al treilea pas aceast probabilitate calculat este comparat cu o probabilitate aleas aleator
n domeniul [0,1] (Probabilitatea lui Gauss ntoarce valori n acest domeniu).
4. Se verific dac probabilitatea lui Gauss calculat pentru cromozomul ales este mai mare
dect probabilitatea aleas aleator:
3 of 6
Laboratorul 5 nvare Automata Algoritmi genetici
Aceast metod asigur posibilitatea lurii n considerare i a cromozomilor care nu au obinut valori
mari pentru funcia de evaluare (ofer anse mai mari de evoluie i cromozomilor mai slabi).
1.4.1 Selecia
Pentru acest operator genetic de obicei se selecteaz doar un singur cromozom din populaia. Acest
cromozom este copiat n noua populaie fr nici o modificare. Aceast metod se mai folosete i
pentru a nu pierde cromozomul care a obinut cea mai bun valoare la funcia de evaluare (elitism) n
populaia curent. De asemenea, acest operator se aplic i pentru ali cromozomi selectai pe baza
metodelor de selecie propuse dar de obicei acest operator apare de un numr mic de ori la generarea
noii populaii.
1.4.2 Mutaia
Mutaia este un alt operator genetic important i reprezint un proces prin care cromozomul curent i
modific ocazional una sau mai multe valori ntr-un singur pas. Mutaia depinde de asemenea de
codificarea cromozomului. Mutaia alege doar un singur candidat i aleator modific unele valori ale
acestuia (modificnd doar semnul acelei valori sau uneori se modific i valoarea in cazul
reprezentrii prin valoare sau se schimb doar valoarea n cazul reprezentrii binare). Mutaia
funcioneaz prin alegerea aleatoare a numrului de valori care vor fi schimbate i a modului de
modificare a acestora. Prezentm un exemplu de modificare a 2 cromozomi primul avnd trei puncte
de modificare iar al doilea doar dou puncte de modificare. n funcie de dimensiunea cromozomului
se alege numrul de puncte pentru care se aplic mutaia.
4 of 6
Laboratorul 5 nvare Automata Algoritmi genetici
1.4.3 Crossover
Crossover poate fi vzut ca crearea urmtoarei populaii folosind populaia curenta. Acest operator
depinde foarte mult de tipul de codificare al cromozomilor. Metoda de crossover este aplicat la o
pereche de prini alei folosind una din metodele prezentate. Cu o probabilitate pc prinii sunt
recombinai pentru a forma doi noi copii care vor fi introdui n noua populaie. De exemplu lum 2
prini din populaia curent, i mprim i ncrucim componentele astfel nct s producem 2 noi
candidai. Aceti candidai n urma ncrucirii trebuie s reprezenta o soluie posibil pentru
parametrii problemei noastre de optimizare de aceea de obicei se interschimb valori de pe aceleai
poziii. Utiliznd un punct de recombinare putem crea noii candidai prin combinarea primei pri din
primul printe cu a doua parte din al doilea printe. Dup recombinare se poate face aleator o mutaie
pe noii candidai obinuii. Dac dimensiunea cromozomului este mare se pot alege mai multe puncte
de recombinare. Prezentm un exemplu cu dou puncte de recombinare:
5 of 6
Laboratorul 5 nvare Automata Algoritmi genetici
Obs.
6 of 6
1. Fie funcia ( ) ( ) { } , care trebuie maximizat (un genotip este un vector
binar cu 7 componente).
a. Scriei o funcie MATLAB pentru generarea aleatoare a unei populaii (pop) cu dimensiunea dim; calitatea
fiecrui individ este memorat la sfritul fiecrei reprezentri cromozomiale; (1 punct)
b. Pentru o probabilitate de recombinare dat (pc), scriei o funcie de recombinare utiliznd operatorul de
ncruciare multi-punct pentru 2 puncte de ncruciare care genereaz o nou populaie (popc), pe baza
populaiei pop. Populaia rezultat are tot dim indivizi (este utilizat i recombinarea asexuat i calitatea fiecrui
individ este memorat la sfritul fiecrei reprezentri cromozomiale) (2 puncte)
3. Fie problema rucsacului de tip 0-1, enunat n cele ce urmeaz. Fiind date m obiecte, fiecare avnd
asociate o valoare i respectiv un cost de selecie, trebuie determinat un set de obiecte cu proprietatea c este de
valoare maxim (unde valoarea unei mulimi de obiecte este definit ca suma valorilor obiectelor ce o compun) i
costul (definit ca suma costurilor obiectelor setului) este sub un prag dat, Cmax. O soluie posibil este dat de un
set de obiecte selectate astfel nct costul lui este inferior valorii Cmax. Dac val este vectorul valorilor asociate
celor m obiecte i cost este vectorul costurilor, reprezentarea unui candidat la soluie poate fi realizat printr-un
vector (v) de m elemente, unde
() {
() ()
() ()
Fiecare genotip v corespunde unui numr { } i v este reprezentarea binar a lui R-1 i cu
proprietatea c nu este depit pragul Cmax.
a. Scriei o funcie MATLAB pentru generarea aleatoare a unei populaii (pop) cu dimensiunea dim; calitatea
fiecrui individ este memorat la sfritul fiecrei reprezentri cromozomiale; costurile i valorile de selecie ale
fiecrui obiect sunt memorate ntr-un fiier text, creat naintea generrii populaiei (1 punct)
b. Scriei o funcie MATLAB care selecteaz o populaie de prini din populaia generat (pop) prin
aplicarea seleciei de tip rulet cu distribuia de probabilitate exponenial, dat prin ( )
( )
unde este un parametru care asigur faptul c ( ) (pop trebuie sortat cresctor n
funcie de meritul indivizilor naintea aplicrii procedurii de selecie). (2 puncte)
Implementarea utiliznd un vector care mentine indicia ciclurilor la nivel de
gen (poziie)
function [x2,y2]=cx_copil(x1,y1)
%vectorul c pastreaza indexul ciclului in care se afla fiecare gena
[~,m]=size(x1);
[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)
c1=zeros(1,m);
continua=1;i=1;index=1;
while(continua)
a=y1(i);
c1(i)=index;
while(x1(i)~=a)
[~,j]=ismember(a,x1);
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
Exemplu:
x1=[ 4 8 13 16 2 19 10 9 7 11 17 18 12 5 20 3 6 15 1 14]
y1=[ 2 5 19 4 17 11 20 9 3 1 16 18 8 6 12 13 10 7 15 14]
>> cx_copil(x1,y1);
Indecsii ciclurilor:
1 2 3 1 1 3 2 4 3 3 1 5 2 2 2 3 2 3 3 6
Progeniturile:
4 5 13 16 2 19 20 9 7 11 17 18 8 6 12 3 10 15 1 14
2 8 19 4 17 11 10 9 3 1 16 18 12 5 20 13 6 7 15 14
Implementarea utiliznd un vector care mentine indicia ciclurilor la nivel de
alel (valoare)
function [x2,y2]=cx_copil_alela(x1,y1)
%vectorul c pastreaza indexul ciclului in care se afla fiecare alela
[~,m]=size(x1);
[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)
[~,j]=ismember(i,x1);
x2(j)=y1(j);
y2(j)=x1(j);
end;
end;
end;
disp('Progeniturile:');
disp(x2);
disp(y2);
end
function [c1,index]=cicluri(x1,y1,m)
c1=zeros(1,m);
gata=0;i=1;index=1;
while(~gata)
a1=x1(i);
c1(a1)=index;
a=y1(i);
while(y1(i)~=a1)
a=y1(i);
[~,j]=ismember(a,x1);
c1(a)=index;
i=j;
end;
gata=1;
for k=1:m
if(c1(x1(k))==0)
i=k;index=index+1;
gata=0;
break;
end;
end;
end;
end
x1=[ 4 8 13 16 2 19 10 9 7 11 17 18 12 5 20 3 6 15 1 14]
y1=[ 2 5 19 4 17 11 20 9 3 1 16 18 8 6 12 13 10 7 15 14]
>> cx_copil_alela(x1,y1);
Indecsii ciclurilor:
3 1 3 1 2 2 3 2 4 2 3 2 3 6 3 1 1 5 3 2
Progeniturile:
4 5 13 16 2 19 20 9 7 11 17 18 8 6 12 3 10 15 1 14
2 8 19 4 17 11 10 9 3 1 16 18 12 5 20 13 6 7 15 14
Sunt obinute aceleai progenituri, difer doar modul de interpretare ai indicilor din cicluri
4. Optimizarea portofoliilor de aciuni. Abordri clasice i de natur
genetic
Funciile randament, respectiv risc, definite prin relaiile (4.2), respectiv (4.5) sunt
reprezentate matriceal prin
unde
devine
cu restricia
.
Constanta pozitiv semnific raportul dintre randament i risc.
O problem des ntlnit n practic este aceea n care este selectat un nivel
acceptabil de risc, , i este maximizat randamentul ateptat. Modelul matematic revine la
problema de minimizare cu constrngeri RANDAMENTMAX1:
RANDAMENTMAX1:
Minimizeaz
cu restriciile
cu restricia
.
O serie de metode care rezolv problema minimizrii unei funcii de mai multe
variabile utilizeaz vectorul derivatelor pariale de ordinul I, numit gradient. Dac V este
funcie de m variabile, atunci gradientul lui V, notat sau , este definit prin
.
Gradientul funciei obiectiv din relaia (4.14) este
(4.16) V 2BT Q 2BT QBx 2BT Q Bx
unde
unde
unde
Vxx 2BT QB i
R x R x este o matrice cu rangul 1, pentru orice i,j, 1 i, j n 1 ,
T
R x R x i , j
T R R
xi x j
unde
R r T Bx
V Bx Q Bx i
T
.
Vacc 2
Rezult
Fx BT r 2 V Va Vx
Fxx 2 Vx Vx V Va Vxx
T
unde Vx Vx este matrice de rangul I; pentru orice i,j, 1 i, j n 1 ,
T
Vx Vx i , j
T V V
xi x j
.
Observaii.
1. n cadrul problemelor enuate n acesast seciune, nu este impus codiia ca
fiecare s fie pozitiv. O valoare negativ a unei fraciuni de investiii are
semnificaia urmtoare: strategia optim de investiie implic vnzarea de tip short
selling, adic vnzarea unor active pe care investitorul nu le deine, prin mprumutul
acestora de la broker cu intenia de a le returna ulterior. Aceast strategie este
efectiv doar n situaia n care preul aciunilor este n scdere, deoarece
achiziionarea lor la un moment de timp ulterior investiiei curente implic un cost
mai mic dect preul obinut prin vnzarea activelor mprumutate la momentul
efecturii investiiei curente.
2. n general, soluia unei probleme de risc minim nu implic situaia de tip
short selling dac randamentul dorit este ales corespunztor, adic n
conformitate cu randamentele medii calculate pentru activele care vor fi
incluse n portofoliu.
Condiii de optimalitate
Fie F x1 , x2 ,..., xn funcie de variabile, continu i difereniabil. Caracterizarea
punctului de minim atins de F este realizat n termenii vectorului gradient i a matricei
Hessian
T
F F F
F , ,..., , notat n continuare cu g sau cu Fx , respectiv
x1 x 2 x n
F
2
2F , matrice notat n continuare cu G sau Fxx
x x 1i n
i j 1 j n
Definiia 4.1. Matricea simetric A este pozitiv definit dac i numai dac, pentru
orice x 0 , are loc relaia,
xT Ax 0 .
Cutarea univariant
Metoda implic utilizarea unei metode directe de cutare (ca, de exemplu, metoda
biseciei) pentru generarea unei secvene de tip minimizarea unidimensional a lui F astfel
nct, la fiecare etap i, 1 i n , F este minimizat n raport cu x i . Cu alte cuvinte, punctul
optim este cutat de-a lungul direciilor date de fiecare coordonat pe rnd. Dei uneori
metoda funcioneaz eficient, ea nu poate fi general aplicabil deoarece nu este
convergent.
Metoda celei mai rapide descreteri de tip perfect line search este descris astfel
(Bartholomeu-Biggs, 2005):
Pn cnd
are proprietatea
cnd
Metoda Newton
Tehnica celei mai abrupte descreteri are inconvenientul c nu folosete informaia
dat de cea de-a doua derivat. Pot fi obinute metode mai eficiente pe baza proprietii
funciilor ptratice, Qx , de a avea matricea Hessian constant. Fie
(4.22) Qx x T Ax b T x c .
1
2
Gradientul este
Qx Ax b .
Punctul staionar rezult prin rezolvarea sistemului de ecuaii liniare
(4.23) Ax b .
Soluia sistemului (4.23) este punct de minim dac matricea Hessian, A, este pozitiv
definit. Dac A este negativ definit, soluia sistemului (4.23) este punct de maxim. Dac
A este oarecare, soluia lui (4.23) este punct a. Dac A este nesingular, atunci (4.22) are
un unic punct staionar.
Principiile expuse mai sus pot fi aplicate pentru minimizarea unei funcii generale,
F x . Fie x k estimaia punctului de minim al lui F la momentul curent i g k F x k ,
G k 2 F x k . Utiliznd dezvoltarea Taylor n jurul lui x k obinem
(4.24) F x k p Qp F x k p T g k p T G k p i
1
2
(4.25) F x k p Qp g k G k p
Rezult c, dac G k este pozitiv definit,
(4.26) p G k g k
T
Metoda Newton
Selecteaz x 0 , estimare iniiale a punctului de minim al lui F x i 0
Repet pentru k 0,1,2,...
g k F x k , G k 2 F x k
Dac G k este pozitiv definit, atunci calculeaz p k G k g k
T
Altfel p k g k
calculeaz s * astfel nct F x k sp k ndeplinete condiiile Wolfe 2 i 3
(Bartholomeu-Biggs, 2005)
aplic regula de actualizare x k 1 x k s * p k
Pn cnd F x k 1
Observaie. n cazul problemei RISCMIN1M, matricea Hessian corespunztoare
funciei obiectiv este
deci este matrice constant (nu depinde de x). G este pozitiv definit i simetric. Constanta
M din propoziia 4.1 (convergena metodei celei mai rapide descreteri) poate fi setat
astfel.
Pentru .
n continuare obinem
Deoarece dac
Rezult c
Exemplul 1
n tabelul 4.1 este prezentat istoricul randamentelor corespunztoare aciunilor A1,
A2, A3, A4, A5 pe o perioad de 10 sptmni. (Bartholomeu-Biggs, 2005)
S1 S2 S3 S4 S5 S6 S7 S8 S9 S10
A1 1.2 1.3 1.4 1.5 1.1 1.2 1.1 1.0 1.0 1.1
A2 1.3 1.0 0.8 0.9 1.4 1.3 1.2 1.1 1.2 1.1
A3 0.9 1.1 1.0 1.1 1.1 1.3 1.2 1.1 1.0 1.1
A4 1.1 1.1 1.2 1.3 1.2 1.2 1.1 1.0 1.1 1.2
A5 0.8 0.75 0.65 0.75 0.8 0.9 1.0 1.1 1.1 1.2
Tabelul 4.1
if(caz==0)
R=citeste_date(nume);
[n,m]=size(R);
[Q,rmed,alpha,B]=parametri(R);
else
n=5;
In1=eye(n-1);
ul=-ones(1,n-1);
B=[In1; ul];
alpha=zeros(n,1);
alpha(n)=1;
rmed=[-0.028, 0.366, 0.231, -0.24, 0.535]';
Q=[1.0256 -0.4340 0.0202 -0.1968 -0.0311;
-0.4340 1.1049 -0.0783 0.2347 -0.1776;
0.0202 -0.0783 0.4328 -0.1236 -0.1895;
-0.1968 0.2347 -0.1236 8.0762 1.0093;
-0.0311 -0.1776 -0.1895 1.0093 2.9007];
end;
% calcul matrice Hessian
H=2*B.'*Q*B+2*(ro/(Rp^2))*(B.'*rmed)*(B.'*rmed).';
%disp(H);
[V,D]=eig(H);
% valoarea proprie maxima a matricei Hessian pentru stabilirea
%valorii cu care este actualizat xk din teorema de convergenta
Maxim=max(max(D));
rata=1/(Maxim);
k=1;er=1;
x0=ones(n-1,1);
x0=x0/(n-1);
while((k<=NM)&&(er>=eps))
val=fgrad(Q,rmed,alpha,B,ro,Rp,x0);
er=norm(val);
x=x0-rata*val;
x0=x;
k=k+1;
end;
disp(['Eroarea: ' num2str(er)]);
[vall,V]=fobiectiv(Q,rmed,alpha,B,ro,Rp,x);
y=alpha+B*x;
disp('Portofoliul calculat:');disp(y);
disp(['Riscul minim calculat: ' num2str(V)]);
disp(['Randamentul calculat: ' num2str(rmed.'*y)]);
disp(['Randamentul predictionat: ' num2str(Rp)]);
disp(['Numarul de iteratii: ' num2str(k)]);
end
La apelul GRAD_riscmin1('portofoliu1.txt',100,1.15,10^-5*sqrt(5),50000,0);
La apelul GRAD_riscmin1('',10,0.25,10^-5*sqrt(5),10000,1);
4.4. Abordarea GA pentru problema optimizrii portofoliilor de n aciuni
Maximizeaz
.
Pentru comparaie vor fi folosite datele din tabelul 4.1 i cele din exemplul 2.
Vor fi tratate att situaiile de tip short selling, ct i situaiile n care acest
lucru este evitat. Aa cum am menionat n 4.2, dac randamentul prognozat este ales
n conformitate cu randamentele medii calculate , n general soluia unei
probleme de risc minim nu implic situaia de tip short selling pentru activele care vor fi
incluse n portofoliu.
La fiecare moment de timp, populaia este constituit din dim indivizi. Fiecrui
fenotip y (portofoliu) i corespunde un cromozom definit de un ir cu n-1 numere reale,
nsoit de informaia calitatea evaluat n termenii funciei obiectiv. Din punct de vedere al
reprezentrii, este utilizat un vector x, cu
Operatorul de mutaie ales este cel de tip fluaj, cu o probabilitate de mutaie mic i
cu de asemenea foarte mic (aici a fost ales ). Operatorul este
implementat n dou variante.
2. Varianta n care este exclus situaia de tip short selling. Cu o rat pm, fiecare
gen din fiecare cromozom sufer o mutaie prin adugarea unei valori generate din
repartiia normal de medie 0 i varian , dar astfel nct cromozomul rezultat s
corespund unei soluii fezabile (s fie ndeplinite condiiile 4.28). Dac prin modificarea
valorii unei gene, a, rezult un cromozom, x, care nu aparine setului soluiilor fezabile,
atunci a este ajustat astfel nct x s ndeplineasc 4.28: dac a rezult negativ, atunci a
este setat pe valoarea 0, respectiv dac suma valorilor genelor lui x, sv, este supraunitar, a
este modificat astfel nct sv s devin 1 (implicit suma investit n ultima aciune a
portofoliului devine 0).
3. Varianta general: cu o rat pm, fiecare gen din fiecare cromozom sufer o
mutaie prin adugarea unei valori generate din repartiia normal de medie 0 i varian
. Este impus o restricie prin care valoarea fiecrei alele s fie n intervalul
deci, n modul, s fie subunitar, pentru a menie semnificaia fiecrei valori de
fraciune investit n aciunea corespunztoare. De asemenea, pentru ca
s fie n , trebuie ca .
Selecia prinilor este realizat pe baza algoritmului SUS, prin utilizarea distribuiei
de probabilitate de selecie de tip rang liniar, cu presiunea de selecie s. La fiecare generaie
sunt selectai dim prini. Mecanismul de supravieuire este implementat astfel: generaia
urmtoare este dat de multisetul progeniturilor, eventual mutante, dar n care cel mai bun
individ al generaiei curente, bx, nlocuiete cel mai slab cromozom copil, dac nici unul
dintre indivizii generai n urma aplicrii operatorilor de variaie nu are calitatea cel puin
egal cu cea a lui bx.
Este prezentat n continuare implementarea algoritmului n cea de a doua variant
de generare a unei perechi de cromozomi din bazinul de recombinare (orice pereche de
cromozomi alei ca prini este unic). Pentru prima variant, n funcia crossover sunt
generate aleator perechi de cromozomi, pentru care se impune doar condiia ca cei
doi cromozomi s ocupe poziii diferite n multisetul prinilor.
function [R]=citeste_date(nume);
R=load(nume);
end
function [Q,rmed,alpha,B]=parametri(R);
%n actiuni observate in m saptamani
[n,m]=size(R);
rmed=zeros(n,1);
for i=1:n
rmed(i)=mean(R(i,:));
end;
Q=cov(R')*(m-1)/m;
In1=eye(n-1);
ul=-ones(1,n-1);
B=[In1; ul];
alpha=zeros(n,1);
alpha(n)=1;
end
function [val,V]=fobiectiv(Q,rmed,alpha,B,ro,Rp,x);
val=((alpha+B*x).')*Q*(alpha+B*x)+(ro/(Rp^2))*((rmed.')*alpha-
Rp+(rmed.')*B*x)^2;
%disp(val);
V=((alpha+B*x).')*Q*(alpha+B*x);
%disp(V);
end
function [pop]=gen_ini(dim,n,Q,rmed,alpha,B,ro,Rp);
pop=zeros(n,dim);
for i=1:dim
x=zeros(n-1,1);
for j=1:n-1
gata=0;
while(~gata)
r=unifrnd(0,1);
if(sum(x)+r<=1)
x(j)=r;
gata=1;
end;
end;
if(sum(x)==1)
break;
end;
end;
pop(1:n-1,i)=x(1:n-1);
[val,V]=fobiectiv(Q,rmed,alpha,B,ro,Rp,x(1:n-1));
pop(n,i)=-val;
end;
end
function [pop]=gen_ini_short_selling(dim,n,Q,rmed,alpha,B,ro,Rp);
pop=zeros(n,dim);
for i=1:dim
x=zeros(n-1,1);
gata=0;
while(~gata)
for j=1:n-1
x(j)=unifrnd(-1,1);
end;
if((sum(x)>=0)&&(sum(x)<=2))
pop(1:n-1,i)=x(1:n-1);
[val,V]=fobiectiv(Q,rmed,alpha,B,ro,Rp,x(1:n-1));
pop(n,i)=-val;
gata=1;
end;
end;
end;
end
function [parinti]=selectie_SUS_rang_l(pop,s);
[n,dim]=size(pop);
p=rang_l(pop,s);
q=zeros(dim,1);
for i=1:dim
q(i)=sum(p(1:i));
end;
parinti=zeros(n,dim);
i=1;k=1;r=unifrnd(0,1/dim);
while(k<=dim)
while(r<=q(i))
parinti(1:n,k)=pop(1:n,i);
r=r+1/dim;
k=k+1;
end;
i=i+1;
end;
end
function [p]=rang_l(pop,s);
[n,dim]=size(pop);
p=zeros(1,dim);
for i=1:dim
p(i)=(2-s)/dim+(2*i*(s-1)/(dim*(dim+1)));
end;
end
function [popN]=crossover1(pop,pc,p,Q,rmed,alpha,B,ro,Rp);
[n,dim]=size(pop);
poz=[];
popN=zeros(n,dim);
for i=1:2:dim
ok=0;
while(~ok)
p1=unidrnd(dim-1);
p2=p1;
while(p1>=p2)
p2=unidrnd(dim);
end;
if(~ismember([p1 p2],poz,'rows'))
poz=[poz;[p1 p2]];
ok=1;
end;
end;
% nu pot fi generate aceleasi perechi de parinti la treceri diferite
x=pop(1:n-1,p1);
y=pop(1:n-1,p2);
r=unifrnd(0,1);
if(r<=pc)
x1=p*x+(1-p)*y;
popN(1:n-1,i)=x1(1:n-1);
[val,V]=fobiectiv(Q,rmed,alpha,B,ro,Rp,x1(1:n-1));
popN(n,i)=-val;
y1=p*y+(1-p)*x;
popN(1:n-1,i+1)=y1(1:n-1);
[val,V]=fobiectiv(Q,rmed,alpha,B,ro,Rp,y1(1:n-1));
popN(n,i+1)=-val;
else
popN(1:n,i)=pop(1:n,p1);
popN(1:n,i+1)=pop(1:n,p2);
end;
end;
end
function [popN]=mutatie(pop,pm,t,Q,rmed,alpha,B,ro,Rp,caz);
% mutatia intr-un cromozom, la nivel de gena revine la aplicarea
operatiei
% de fluaj
[n,dim]=size(pop);
popN=pop;
for i=1:dim
efectuat=0;
if(caz==0)
% fara short selling
for j=1:n-1
r=unifrnd(0,1);
if(r<=pm)
fluaj=normrnd(0,t/3);
a=pop(j,i)+fluaj;
efectuat=1;
if(a<0)
a=0;
end;
s=sum(popN(1:n-1,i));
if(s+fluaj>1)
xx=s+fluaj-1;
a=a-xx;
end;
popN(j,i)=a;
end;
end;
else
%cu short selling
for j=1:n-1
r=unifrnd(0,1);
if(r<=pm)
gata=0;
while(~gata)
fluaj=normrnd(0,t/3);
if(fluaj>0)
a=min([pop(j,i)+fluaj 1]);
else
a=max([pop(j,i)+fluaj -1]);
end;
s=sum(popN(1:n-1,i));
if((s+fluaj>=0)&&(s+fluaj<=2))
popN(j,i)=a;
efectuat=1;
gata=1;
end;
end;
end;
end;
end;
if(efectuat)
[val,V]=fobiectiv(Q,rmed,alpha,B,ro,Rp,popN(1:n-1,i));
popN(n,i)=-val;
end;
end;
end
function [rezultat]=selectie_generatie_urmatoare(pop,popN);
[n,dim]=size(pop);
fob=pop(n,1:dim);
fobN=popN(n,1:dim);
rezultat=popN;
[max1,i]=max(fob);
[max2,j]=max(fobN);
if(max1>max2)
[min1,k]=min(fobN);
rezultat(1:n,k)=pop(1:n,i);
end;
end
function [x]=GA_riscmin1(nume,dim,ro,Rp,s,pc,pm,p,t,NM,caz);
% nume=numele fisierului din care sunt prelute datele
% dim=dimensiunea populatiei, numar par
% ro=din functia obiectiv
% Rp=randamentul prognozat
% s=constrangerea de selectie pentru distributia de selectie rang liniar
% pc=probabilitatea de recombinare
% p=ponderea la recombinarea prin medie
% pm=probabilitatea de mutatie
% t=pragul de la fluaj
% NM=numarul de iteratii
% caz=0, pentru exemplul1, fara short selling
% caz=1, pentru exemplul2, cu short selling
%GA_riscmin1('portofoliu1.txt',500,100,1.15,1.8,0.8,0.01,0.7,0.1,20,0);
%GA_riscmin1('',500,10,0.25,1.8,0.8,0.02,0.7,0.1,20,1);
if(caz==0)
R=citeste_date(nume);
[n,m]=size(R);
[Q,rmed,alpha,B]=parametri(R);
pop=gen_ini(dim,n,Q,rmed,alpha,B,ro,Rp);
else
n=5;
In1=eye(n-1);
ul=-ones(1,n-1);
B=[In1; ul];
alpha=zeros(n,1);
alpha(n)=1;
rmed=[-0.028, 0.366, 0.231, -0.24, 0.535]';
Q=[1.0256 -0.4340 0.0202 -0.1968 -0.0311;
-0.4340 1.1049 -0.0783 0.2347 -0.1776;
0.0202 -0.0783 0.4328 -0.1236 -0.1895;
-0.1968 0.2347 -0.1236 8.0762 1.0093;
-0.0311 -0.1776 -0.1895 1.0093 2.9007];
pop=gen_ini_short_selling(dim,n,Q,rmed,alpha,B,ro,Rp);
end;
pop1=sortrows(pop.',n);
pop=pop1.';
T=[];
T1=[];
for nrit=1:NM
%populatia sortata crescator dupa -fobiectiv
[parinti]=selectie_SUS_rang_l(pop,s);
[popN]=crossover1(parinti,pc,p,Q,rmed,alpha,B,ro,Rp);
% operatia de mutatie este realizata functie de caz - cu sau fara
%short selling
[popNou]=mutatie(popN,pm,t,Q,rmed,alpha,B,ro,Rp,caz);
[rezultat]=selectie_generatie_urmatoare(pop,popNou);
pop1=sortrows(rezultat.',n);
pop=pop1.';
[val,V]=fobiectiv(Q,rmed,alpha,B,ro,Rp,pop(1:n-1,dim));
T=[T V];
T1=[T1 val];
end;
disp(['riscul minim:' num2str(T(NM))]);
disp(['minimul functiei obiectiv MINRISC1:' num2str(T1(NM))]);
disp('Fractiunile investite');
disp([pop(1:n-1,dim);1-sum(pop(1:n-1,dim))]);
disp('Randamentul obtinut:');
Rr=(rmed.')*(alpha+B*pop(1:n-1,dim));
disp(Rr);
figure
i=1:NM;
plot(i,T1(i),'-rs','LineWidth',2,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','y',...
'MarkerSize',8);
figure
i=1:NM;
plot(i,T(i),'-rs','LineWidth',2,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','m',...
'MarkerSize',8);
end
i portofoliul obinut:
Variant de implementare, cu considerarea situaiei de tip short selling pentru
datele din exemplul 2
randamentul este
i portofoliul obinut: