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