天天看点

MATLAB遗传算法工具箱举例(一)

简单一元函数优化

利用遗传算法计算以下函数的最小值:

MATLAB遗传算法工具箱举例(一)

选择二进制编码,遗传算法参数设置如下:

种群大小 最大遗传代数 个体长度 代沟 交叉概率 变异概率
40 20 20 0.95 0.7 0.01

遗传算法优化程序代码:

clc
clear
%%画出函数图
figure(1);
hold on;
lb=1;ub=2;%函数自变量范围[1,2]
ezplot('sin(10*pi*X)/X',[lb,ub]);
xlabel('自变量/X')
ylabel('函数值/Y')

%%定义遗传算法参数
Nind=40;%种群大小
Maxgen=20;%最大遗传代数
Preci=20;%个体长度
Ggap=0.95;%代沟
px=0.7;%交叉概率
pm=0.01;%变异概率
trace=zeros(2,Maxgen);
FieldD=[Preci;lb;ub;1;0;1;1];
Chrom=crtbp(Nind,Preci);

%%优化
gen=0;
X=bs2rv(Chrom,FieldD);
ObjV=sin(10*pi*X)./X;
while gen<Maxgen
    FitnV=ranking(ObjV);
    SelCh=select('sus',Chrom,FitnV,Ggap);
    SelCh=recombin('xovsp',SelCh,px);
    SelCh=mut(SelCh,pm);
    X=bs2rv(SelCh,FieldD);
    ObjVSel=sin(10*pi*X)./X;
    [Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);
    X=bs2rv(Chrom,FieldD);
    gen=gen+1;
    
    [Y,I]=min(ObjV);
    trace(1,gen)=X(I);
    trace(2,gen)=Y;
end
plot(trace(1,:),trace(2,:),'bo');
grid on;
plot(X,ObjV,'b*');
hold off

figure(2);
plot(1:Maxgen,trace(2,:));
grid on
xlabel('遗传代数')
ylabel('解的变化')
title('进化进程')
bestY=trace(2,end);
bestX=trace(1,end);
fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\n'])
           

计算结果:

MATLAB遗传算法工具箱举例(一)
MATLAB遗传算法工具箱举例(一)

继续阅读