2、2.用轮盘赌策略确定个体的适应度,判断是否符合优化准则,若符合,输出最佳个体及其最优解,结束,否则,进行下一步3.依据适应度选择再生个体,适应度高的个体被选中的概率高,适应度低的个体被淘汰4.按照一定的交叉概率和交叉方法,生成新的个体5.按照一定的变异概率和变异方法,生成新的个体6.由交叉和变异产生新一代种群,返回步骤2算法的实现%基本遗传算法,一维无约束优化function[xv,fv]=mGA(fitness,a,b,NP,NG,Pc,Pm,eps)%待优化的目标函数:fitness%自变量下界:a%自变量上界:b%种群个体数:NP%最大
3、进化代数:NG%杂交常数:Pc%变异常数:Pm%自变量离散精度:eps%目标函数取最大值是的自变量值:xv%目标函数的最小值:fvL=ceil(log2((b-a)/eps+1));%码长x=zeros(NP,L);fori=1:NPx(i,:)=Initial(L);fx(i)=fitness(Dec(a,b,x(i,:),L));endfork=1:NGsumfx=sun(fx);Px=fx/sumfx;PPx=0;PPx(1)=Px(1);fori=2:NP%根据轮盘赌确定父亲PPx(i)=PPx(i-1)+PPx(i);endfori
4、=1:NPsita=rand();forn=1:NPifsita<=PPx(n)SelFather=n;break;endendSelmother=floor(rand()*(NP-1))+1;%随机选择母亲posCut=floor(rand()*(L-2))+1;%随机确定交叉点r1=rand();ifr1<=Pcnx(i,1:posCut)=x(SelFather,1:posCut);nx(I,(posCut+1):L)=x(Selmother,(posCut+1):L);r2=rand();ifr2<=Pm%变异posMut=round
5、(rand()*(L-1)+1);nx(i,posMut)=~nx(i,posMut);endelsenx(i,:)=x(SelFather,:);endendx=nx;fori=1:NPfx(i)=fitness(Dec(a,b,x(i,:),L);endendfv=-inf;fori=1:NPfitx=fitness(Dec(a,b,x(i,:),L));iffitx>fvfv=fitx;xv=Dec(a,b,x(i,:),L);endendendfunctionresult=Initial(length)%初始化函数fori=1:len
6、gthr=round();result(i)=round(r);endendfunctiony=Dec(a,b,x,L)%二进制转十进制base=2.^((L-1):-1:0);y=dot(base,x);y=a+y*(b-1)/(2^L-1)'end