gusucode.com > 《遗传算法工具箱及应用》的源代码 > 《遗传算法工具箱及应用》的源代码/gatbx/gatbx-example/gatbx/yj4.m
%定义遗传算法参数 NVAR=20; %变量维数 RANGE=[0;200]; %变量范围 GGAP=0.8; %代沟(Generation gap) XOVR=1; %交叉率 MUTR=1/NVAR; %变异率 MAXGEN=500; %最大遗传代数(Maximum number of generations) INSR=0.9; %插入率 SUBPOP=8; %子种群数 MIGR=0.2; %迁移率 MIGGEN=20; %在子种群与迁移之间20代 NIND=20; %个体数目(Number of individuals) SEL_F='sus'; %选择函数名 XOV_F='recdis'; %重组函数名 MUT_F='mutbga'; %变异函数名 OBJ_F='objharv'; %目标函数名 FieldDD=rep(RANGE,[1,NVAR]); %译码矩阵 gen=0; trace=zeros(MAXGEN,2); %遗传算法性能跟踪 Chrom=crtrp(SUBPOP*NIND,FieldDD); %创建初始种群 ObjV=objharv(Chrom); %计算目标函数值 while gen<MAXGEN %代循环 FitnV=ranking(ObjV,[2 1],SUBPOP); %分配适应度值(Assign fitness values) SelCh=select(SEL_F,Chrom,FitnV,GGAP,SUBPOP); %选择 SelCh=recombin(XOV_F,SelCh,XOVR,SUBPOP); %重组 SelCh=mutate(MUT_F,SelCh,FieldDD,[MUTR],SUBPOP); %变异 ObjVOff=feval(OBJ_F,SelCh); %计算目标函数值 [Chrom, ObjV]=reins(Chrom,SelCh,SUBPOP,[1 INSR],ObjV,ObjVOff); %替代 gen=gen+1; [trace(gen,1),I]=min(ObjV); trace(gen,2)=mean(ObjV); %在子种群之间迁移个体 if(rem(gen,MIGGEN)==0) [Chrom, ObjV]=migrate(Chrom,SUBPOP,[MIGR, 1, 1],ObjV); end end [Y,I]=min(ObjV); %输出最优解及其序号,Y为最优解,I为种群的序号 figure(1);plot(Chrom(I,:)); hold on;grid; plot(Chrom(I,:),'bo') figure(2);plot(-trace(:,1)); hold on; plot(-trace(:,2),'-.'); legend('解的变化','种群均值的变化'); xlabel('迭代次数')