资源描述:
《遗传算法matlab代码》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、functionyouhuafunD=code;N=50; %Tunablemaxgen=50; %Tunablecrossrate=0.5;%Tunablemuterate=0.08;%Tunablegeneration=1; num=length(D);fatherrand=randint(num,N,3);score=zeros(maxgen,N);whilegeneration<=maxgen ind=randperm(N-2)+2;%随机配对交叉 A=fatherrand(:,ind(1:(N-2)/
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;%%两点交叉% forkk=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:rndtm
3、p,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
4、);%求得N个个体的评价函数 score(generation,:)=scoreN; [scoreSort,scoreind]=sort(scoreN); sumscore=cumsum(scoreSort); sumscore=sumscore./sumscore(end); childind(1:2)=scoreind(end-1:end); fork=3:N tmprnd=rand; tmpind=tmprnd difind=[0,diff(tmpind)]; if~any(di
5、find) difind(1)=1; end childind(k)=scoreind(logical(difind)); end fatherrand=fatherrand(:,childind); generation=generation+1;end%scoremaxV=max(score,[],2);minV=11*300-maxV;plot(minV,'*');title('各代的目标函数值');F4=D(:,4);FF4=F4-fatherrand(:,1);FF4=max
6、(FF4,1);D(:,5)=FF4;saveDDataDfunctionD=codeloadyouhua.mat%propertiesF2andF3F1=A(:,1);F2=A(:,2);F3=A(:,3);if(max(F2)>1450)
7、
8、(min(F2)<=900) error('DATApropertyF2exceedit''srange(900,1450]')end%getgrouppropertyF1ofdata,accordingtoF2valueF4=zeros(size(F1));forite=11:-1:1 i
9、ndex=find(F2<=900+ite*50); F4(index)=ite;endD=[F1,F2,F3,F4];functionScoreN=scorefun(fatherrand,D)F3=D(:,3);F4=D(:,4);N=size(fatherrand,2);FF4=F4*ones(1,N);FF4rnd=FF4-fatherrand;FF4rnd=max(FF4rnd,1);ScoreN=ones(1,N)*300*11;%这里有待优化fork=1:N FF4k=FF4rnd(:,k); forite=1:11
10、 F0index=find(FF4k==ite); if~isempty(F0index) tmpMat=F3(F0index); tmpSco=sum