
遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型是一种通过模拟自然进化过程搜索最优解(所找到的解是全局最优解)的方法。参数编码、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定五个要素组成了遗传算法的核心内容。1)种群初始化。我们需要首先通过随机生成的方式来创造一个种群一般该种群的数量为100\~500这里我们采用二进制将一个染色体(解)编码为基因型。随后用进制转化将二进制的基因型转化成十进制的表现型。2)适应度计算(种群评估)。这里我们直接将目标函数值作为个体的适应度。3)选择(复制)操作。根据种群中个体的适应度大小通过轮盘赌等方式将适应度高的个体从当前种群中选择出来。其中轮盘赌即是与适应度成正比的概率来确定各个个体遗传到下一代群体中的数量。具体步骤如下(1)首先计算出所有个体的适应度总和Σfi。(2)其次计算出每个个体的相对适应度大小fi/Σfi类似于softmax。(3)再产生一个0到1之间的随机数依据随机数出现在上述哪个概率区域内来确定各个个体被选中的次数。4)交叉(交配)运算。该步骤是遗传算法中产生新的个体的主要操作过程它用一定的交配概率阈值(pc一般是0.4到0.99)来控制是否采取单点交叉多点交叉等方式生成新的交叉个体。具体步骤如下(1)先对群体随机配对。(2)再随机设定交叉点的位置。(3)再互换配对染色体间的部分基因。5)变异运算。该步骤是产生新的个体的另一种操作。一般先随机产生变异点再根据变异概率阈值(pm,一般是0.0001到0.1)将变异点的原有基因取反。6)终止判断。如果满足条件(迭代次数一般是200\~500)则终止算法否则返回step2。我们首先从函数出发既然是寻找全局最优解我们可以想象一个多元函数的图像。遗传算法中每一条染色体对应着遗传算法的一个解决方案一般我们用适应性函数(fitness function)来衡量这个解决方案的优劣。所以从一个基因组到其解的适应度形成一个映射。可以把遗传算法的过程看作是一个在多元函数里面求最优解的过程。可以这样想象这个多维曲面里面有数不清的“山峰”而这些山峰所对应的就是局部最优解。而其中也会有一个“山峰”的海拔最高的那么这个就是全局最优解。而遗传算法的任务就是尽量爬到最高峰而不是陷落在一些小山峰。(另外值得注意的是遗传算法不一定要找“最高的山峰”如果问题的适应度评价越小越好的话那么全局最优解就是函数的最小值对应的遗传算法所要找的就是“最深的谷底”) clear all;close all;global rin yout timefG50;Size30;CodeL10;MinX(1)zeros(1);MaxX(1)10*ones(1);MinX(2)zeros(1);MaxX(2)30*ones(1);MinX(3)zeros(1);MaxX(3)100*ones(1);MinX(4)-0.5*ones(1);MaxX(4)0.5*ones(1);MinX(5)-0.5*ones(1);MaxX(5)0.5*ones(1);MinX(6)-0.5*ones(1);MaxX(6)0.5*ones(1);MinX(7)-0.5*ones(1);MaxX(7)0.5*ones(1);MinX(8)-0.5*ones(1);MaxX(8)0.5*ones(1);MinX(9)-0.5*ones(1);MaxX(9)0.5*ones(1);MinX(10)-0.5*ones(1);MaxX(10)0.5*ones(1);MinX(11)-0.5*ones(1);MaxX(11)0.5*ones(1);Eround(rand(Size,11*CodeL)); %Initial Code!BsJ0;for kg1:1:Gtime(kg)kg;for s1:1:SizemE(s,:);y10;y20;y30;y40;y50;y50;y60;y70;y80;y90;y100;y110;y120;m1m(1:1:CodeL);for i1:1:CodeLy1y1m1(i)*2^(i-1);endKfuzzy(s,1)(MaxX(1)-MinX(1))*y1/1023MinX(1);m2m(CodeL1:1:2*CodeL);for i1:1:CodeLy2y2m2(i)*2^(i-1);endKfuzzy(s,2)(MaxX(2)-MinX(2))*y2/1023MinX(2);m3m(2CodeL1:1:3CodeL);for i1:1:CodeLy3y3m3(i)*2^(i-1);endKfuzzy(s,3)(MaxX(3)-MinX(3))*y3/1023MinX(3);m4m(3CodeL1:1:4CodeL);for i1:1:CodeLy4y4m4(i)*2^(i-1);endKfuzzy(s,4)(MaxX(4)-MinX(4))*y4/1023MinX(4);m5m(4CodeL1:1:5CodeL);for i1:1:CodeLy5y5m5(i)*2^(i-1);endKfuzzy(s,5)(MaxX(5)-MinX(5))*y5/1023MinX(5);m6m(5CodeL1:1:6CodeL);for i1:1:CodeLy6y6m6(i)*2^(i-1);endKfuzzy(s,6)(MaxX(6)-MinX(6))*y6/1023MinX(6);m7m(6CodeL1:1:7CodeL);for i1:1:CodeLy7y7m7(i)*2^(i-1);endKfuzzy(s,7)(MaxX(7)-MinX(7))*y7/1023MinX(7);m8m(7CodeL1:1:8CodeL);for i1:1:CodeLy8y8m8(i)*2^(i-1);endKfuzzy(s,8)(MaxX(8)-MinX(8))*y8/1023MinX(8);m9m(8CodeL1:1:9CodeL);for i1:1:CodeLy9y9m9(i)*2^(i-1);endKfuzzy(s,9)(MaxX(9)-MinX(9))*y9/1023MinX(9);m10m(9CodeL1:1:10CodeL);for i1:1:CodeLy10y10m10(i)*2^(i-1);endKfuzzy(s,10)(MaxX(10)-MinX(10))*y10/1023MinX(10);m11m(10CodeL1:1:11CodeL);for i1:1:CodeLy11y11m11(i)*2^(i-1);endKfuzzy(s,11)(MaxX(11)-MinX(11))*y11/1023MinX(11);%*Step 1 : Evaluate BestJ*KfuzzyiKfuzzy(s,:);[Kfuzzyi,BsJ]mychap5_2f(Kfuzzyi,BsJ);BsJi(s)BsJ;end[OderJi,IndexJi]sort(BsJi);BestJ(kg)OderJi(1);BJBestJ(kg);JiBsJi1e-10;%Guarantee TempE(Size,:) belong to the best individualTempE(Size,:)BestS;ETempE;%*****************endBestfiBestSKfuzzyiBest_JBestJ(G)figure(1);plot(time,BestJ);xlabel(Times);ylabel(Best J);figure(2);plot(timef,rin,r,timef,yout,b);xlabel(Time(s));ylabel(rin,yout);