资源描述:
《matlab基本遗传算法应用实例.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、基本遗传算法应用实例。用基本遗传算法求下面函数的最大值个体数目取50,最大进化代数取100,离散精度取0.001,杂交概率取0.9,变异概率取0.0041、在editor中建立基本遗传算法函数:GA程序如下:function[xv,fv]=GA(fitness,a,b,NP,NG,pc,pm,eps)%待优化的目标函数:fitness%自变量下界:a%自变量上界:b%种群个体数:NP%最大进化代数:NG%杂交概率:pc%自变量概率:pm%自变量离散精度:eps%目标函数取最小值时的自变量值:xm%目标函数的最小值:fvL=ceil(log2((b-
2、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=sum(fx);%所有个体适应值之和px=fx/sumfx;%所有个体适应值的平均值ppx=0;ppx(1)=px(1);fori=2:NP%用于轮盘赌策略的累加ppx(i)=ppx(i-1)+px(i);endfori=1:NPsita=rand();forn=1:NPifsita
3、<=ppx(n)SelFather=n;%根据轮盘赌策略确定的父亲break;endendSelmother=floor(rand()*(NP-1))+1;%随机选择母亲posCut=floor(rand()*(L-2))+1;%随机选择交叉点r1=rand();ifr1<=pc%交叉nx(i,1:posCut)=x(SelFather,1:posCut);nx(i,(posCut+1):L)=x(Selmother,(posCut+1):L);r2=rand();ifr2<=pm%变异posMut=round(rand()*(L-1)+1);nx
4、(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);endendfunctionresult=Initial(length)%初始化函数fori=1:length
5、r=rand();result(i)=round(r);endfunctiony=Dec(a,b,x,L)%二进制编码转换为十进制编码base=2.^((L-1):-1:0);y=dot(base,x);y=a+y*(b-a)/(2^L-1);%[xv,fv]=GA(@fitness,0,30,50,100,0.9,0.04,0.01)2、建立目标函数文件fitness.m文件:functionF=fitness(x)F=x^3-60*x^2+900*x+100;3、在命令窗口输入:[xv,fv]=GA(@fitness,0,30,100,500,
6、0.9,0.04,0.01)4、结果(结果不唯一)xv=10fv=4100