www.gusucode.com > matlab编程遗传算法计算匹配电路源码程序 > code1/code/MATLAB源代码/ga_lowpass.m
function [] = ga_lowpass() NIND=100; %个体数目 MAXGEN=200; %最大遗传代数 GGAP=0.9; %选择算子的选择比例 BaseV=crtbase([1 1 1 1 1],[1000 100 1000 100 1000]); Chrom=crtbp(NIND,BaseV); %创建种群 trace=zeros(MAXGEN,2); %用于跟踪算法的解 ObjV=lowpassS21_test2(Chrom); %计算目标函数值 gen=0; %代数计数器 %mutation_probability=0.1; %设置变异率的初始值 crossover_probability=0.8; %设置交叉率的初始值 while gen<MAXGEN % if gen>10 % if (trace((gen-10),1)-trace(gen,1))<=1 %弱交叉强变异,弱化优势型选择算子 % crossover_probability=0.4; % mutation_probability=0.3; % else %强交叉弱变异,强化优势型选择算子 % crossover_probability=0.8; % mutation_probability=0.1; % end % end mutation_probability=mutation_change_by_gen(gen); %根据代数确定变异率 FitnV=ranking(ObjV); %基于排序的适应度分配,目标值最小的适应度为2,最大的适应度为0 SelCh=select('sus',Chrom,FitnV,GGAP); %随机遍历抽样 SelCh=recombin('recdis',SelCh,crossover_probability); %离散重组 % SelCh=multiple_recombin_by_recdis( SelCh,crossover_probability ); %离散重组 SelCh=mut(SelCh,mutation_probability,BaseV); % SelCh=mut_change_with_ObjV(SelCh,mutation_probability,BaseV); %离散变异 ObjVSel=lowpassS21_test2(SelCh); %计算子代的目标函数值 [Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入子代的新种群 gen=gen+1; %代数计数器加1 trace(gen,1)=min(ObjV); %跟踪最优解 trace(gen,2)=sum(ObjV)/length(ObjV); %跟踪平均解 end plot(trace(:,1));hold on;grid; %最优解的曲线 %plot(trace(:,2),'-.');grid; %平均解的曲线 legend('解的变化','均值的变化'); [BestObjV,Location]=min(ObjV) %找出最优解 BestIndividual=Chrom(Location,:) %最优解的基因 end