Documente Academic
Documente Profesional
Documente Cultură
% 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
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
3. function [parinti]=selectie_turneu(pop,val,cost,costM);-pentru biletul 2,cel cu rucsacul
[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
4. Ruleta pentru cea cu rucsacul
function [p]=rang_exp(pop,s);
[dim,c]=size(pop); %populatia este sortata functie de merit
p=zeros(1,dim);
for i=1:dim
p(i)=(1-exp(-i))/c;
end;
end
function [parinti,p,q]=selectie_parinti_ruleta_FPS(dim);
[pop]=genereaza_ini(dim); pop=sortrows(pop,9);[p]=rang_exp(pop,s);
[dim,m]=size(pop); q=zeros(dim,1);
for i=1:dim
q(i)=sum(p(1:i));
end;
parinti=zeros(dim,m);
for k=1:dim
r=unifrnd(0,1); pozitie=1;
for i=1:dim
if(r<=q(i))
pozitie=i; break;
end;
end;
parinti(k,1:m)=pop(pozitie,1:m);
end;
end.