www.gusucode.com > matlab编程遗传算法计算匹配电路源码程序 > code1/code/MATLAB源代码/ga_bandpass.m
function [] = ga_bandpass() %UNTITLED 此处显示有关此函数的摘要 % 此处显示详细说明 NIND=20; %个体数目,或每个子种群的个体数目 MAXGEN=200; %最大遗传代数 GGAP=0.9; %选择算子的选择比例 SUBPOP=10; %子种群数 MIGR=0.2; %迁移率 MIGGEN=20; %每隔多少代进行迁移 INSR=0.9; %插入率 BaseV=crtbase([5 10],[9 2500]); Chrom=crtbp(SUBPOP*NIND,BaseV); %创建种群 %Chrom=optimize_Chrom(Chrom,NIND,SUBPOP); %将之前的最优解插入种群 trace=zeros(MAXGEN,2); %用于跟踪算法的解 ObjV=bandpassS21_test2(Chrom); %计算目标函数值 gen=0; %代数计数器 mutation_probability=0.1; %设置变异率的初始值 crossover_probability=0.6; %设置交叉率的初始值 while gen<MAXGEN [crossover_probability,mutation_probability]=mut_crossover_change_with_ObjV(gen,crossover_probability,mutation_probability,trace);%根据目标值的改变大小选择强交叉若变异或者弱交叉强变异 % mutation_probability=mutation_change_by_gen(gen); %根据代数确定变异率 FitnV=ranking(ObjV,[2,1],SUBPOP); %基于排序的适应度分配,目标值最小的适应度为2,最大的适应度为0 SelCh=select('sus',Chrom,FitnV,GGAP,SUBPOP); %随机遍历抽样 SelCh=recombin('recdis',SelCh,crossover_probability,SUBPOP); %离散重组,离散重组不需要指定交叉概率 % SelCh=multiple_recombin_by_recdis( SelCh,crossover_probability ); %离散多重重组 SelCh=mutate('mut',SelCh,BaseV,mutation_probability,SUBPOP); %离散变异 % SelCh=mut_change_with_ObjV(SelCh,mutation_probability,BaseV); %离散变异,根据个体的目标值确定变异率 ObjVSel=bandpassS21_test2(SelCh); %计算子代的目标函数值 [Chrom,ObjV]=reins(Chrom,SelCh,SUBPOP,[1 INSR],ObjV,ObjVSel); %重插入子代的新种群 gen=gen+1; %代数计数器加1 trace(gen,1)=min(ObjV); %跟踪最优解 trace(gen,2)=sum(ObjV)/length(ObjV); %跟踪平均解 if (rem(gen,MIGGEN)==0) %在子种群之间迁移个体 [Chrom,ObjV]=migrate(Chrom,SUBPOP,[MIGR,1,0],ObjV); end end plot(trace(:,1));hold on;grid; %最优解的曲线 %plot(trace(:,2),'-.');grid; %平均解的曲线 legend('解的变化','均值的变化'); [BestObjV,Location]=min(ObjV) %找出最优解 BestIndividual=Chrom(Location,:); %最优解的基因 BestIndividual(6:15)=(BestIndividual(6:15)+1)/10; BestIndividual end