matlab遗传算法

时间:2011-12-29 06:01:21
【文件属性】:

文件名称:matlab遗传算法

文件大小:51KB

文件格式:DOC

更新时间:2011-12-29 06:01:21

遗传算法

关于一些遗传的算法 D=code; N=50; % Tunable maxgen=50; % Tunable crossrate=0.5; %Tunable muterate=0.08; %Tunable generation=1; num = length(D); fatherrand=randint(num,N,3); score = zeros(maxgen,N); while generation<=maxgen ind=randperm(N-2)+2; % 随机配对交叉 A=fatherrand(:,ind(1:(N-2)/2)); B=fatherrand(:,ind((N-2)/2+1:end)); % 多点交叉 rnd=rand(num,(N-2)/2); ind=rnd tmp=A(ind); A(ind)=B(ind); B(ind)=tmp; % % 两点交叉 % for kk=1:(N-2)/2 % rndtmp=randint(1,1,num)+1; % tmp=A(1:rndtmp,kk); % A(1:rndtmp,kk)=B(1:rndtmp,kk); % B(1:rndtmp,kk)=tmp; % end fatherrand=[fatherrand(:,1:2),A,B]; % 变异 rnd=rand(num,N); ind=rnd [m,n]=size(ind); tmp=randint(m,n,2)+1; tmp(:,1:2)=0; fatherrand=tmp+fatherrand; fatherrand=mod(fatherrand,3); % fatherrand(ind)=tmp; %评价、选择 scoreN=scorefun(fatherrand,D);% 求得N个个体的评价函数 score(generation,:)=scoreN; [scoreSort,scoreind]=sort(scoreN); sumscore=cumsum(scoreSort); sumscore=sumscore./sumscore(end); childind(1:2)=scoreind(end-1:end); for k=3:N tmprnd=rand; tmpind=tmprnd difind=[0,diff(tmpind)]; if ~any(difind) difind(1)=1; end childind(k)=scoreind(logical(difind)); end fatherrand=fatherrand(:,childind); generation=generation+1; end % score maxV=max(score,[],2); minV=11*300-maxV; plot(minV,'*');title('各代的目标函数值'); F4=D(:,4); FF4=F4-fatherrand(:,1); FF4=max(FF4,1); D(:,5)=FF4;


网友评论

  • 感觉这个写的有点混乱,还有几处符号写错了