Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- clear,clc;
- numcykle=1000; % pocet cyklov hladania
- lpop=500; % velkost populacie - kolko retazcov naraz testujem
- psub = 5; %pocet subpopulacii
- migr = 50; %pocet generacii, po ktorych nastane migracia
- minFit = -10.^11;
- Space=[ones(1,5)*(0);ones(1,5)*10000000]; % rozsah prvkov v retazci
- Pop = zeros(lpop/psub,5,psub);
- Fit = zeros(lpop/psub,psub);
- for i=1:psub
- Pop(:,:,i)=genrpop((lpop/psub),Space);
- end
- grafFit=zeros(1,numcykle);
- for j=1:numcykle
- for i=1:psub
- for x=1:lpop/psub
- Fit(x,i)=0.04*Pop(x,1,i) + 0.07*Pop(x,2,i) + 0.11*Pop(x,3,i) + 0.06*Pop(x,4,i) + 0.05*Pop(x,5,i);
- end
- for i=1:psub
- for x=1:lpop/psub
- a = (Pop(x,1,i) + Pop(x,2,i) + Pop(x,3,i) + Pop(x,4,i) + Pop(x,5,i));
- if a > 10000000
- Fit(x,i) = Fit(x,i) - (a - 10000000);
- end
- a = (Pop(x,1,i) + Pop(x,2,i));
- if a > 2500000
- Fit(x,i) = Fit(x,i) - (a - 2500000);
- end
- a = (-Pop(x,4,i) + Pop(x,5,i));
- if a > 0
- Fit(x,i) = Fit(x,i) - a;
- end
- a = (-0.5*Pop(x,1,i) - 0.5*Pop(x,2,i) + 0.5*Pop(x,3,i) + 0.5*Pop(x,4,i) - 0.5*Pop(x,5,i));
- if a > 0
- Fit(x,i) = Fit(x,i) - a;
- end
- end
- BestSub(i,:)=selbest(Pop(:,:,i),Fit(:,i)*(-1),1);
- FitSub(i)=0.04*BestSub(i,1) + 0.07*BestSub(i,2) + 0.11*BestSub(i,3) + 0.06*BestSub(i,4) + 0.05*BestSub(i,5);
- GrafSub(j,i)=FitSub(i);
- %x = (lpop/psub-10)/2;
- Best=selbest(Pop(:,:,i),Fit(:,i)*(-1),lpop/psub*0.15);
- Work=selrand(Pop(:,:,i),Fit(:,i)*(-1),(lpop/psub*0.7));
- Work = [Work;Best];
- Work=crossov(Work,4,0);
- Work=mutx(Work,0.1,Space);
- Work=muta(Work,0.3,ones(1,5)*100000,Space);
- Pop(:,:,i)= [Best;Work];
- %disp(Pop(:,:,i));
- end
- if mod(numcykle,migr)
- for i=1:psub-1
- Best=selbest(Pop(:,:,i),Fit(:,i)*(-1),1);
- Rand=selrand(Pop(:,:,i+1),Fit(:,i)*(-1),1);
- Pop(end,:,i)= [];
- Pop(:,:,i) = [Pop(:,:,i);Rand];
- Pop(end,:,i+1) = [];
- Pop(:,:,i+1) = [Pop(:,:,i+1);Best];
- end
- Best=selbest(Pop(:,:,i+1),Fit(:,i)*(-1),1);
- Rand=selrand(Pop(:,:,1),Fit(:,i)*(-1),1);
- Pop(end,:,1) = [];
- Pop(:,:,1) = [Pop(:,:,1);Best];
- Pop(end,:,i+1) = [];
- Pop(:,:,i+1) = [Pop(:,:,i+1);Rand];
- end
- end
- BestOne=selbest(BestSub(:,:),FitSub(:)*(-1),1);
- GrafFit(j)=0.04*BestOne(1) + 0.07*BestOne(2) + 0.11*BestOne(3) + 0.06*BestOne(4) + 0.05*BestOne(5);
- end
- disp(BestOne);
- for b=1 : psub
- plot(GrafSub(b,:));
- hold on;
- end
- %plot(GrafFit);
- %hold on;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement