使用遗传算法解决多变量函数优化问题!

        很多朋友在碰到多变量值优化的问题的时候不能很好的将问题转化,利用有效编码的方法将解的个数,解的编码很好的很合理的进行设计,因此不能利用遗传算法进行问题的求解!

       其实,简单的来说,就是将多个变量的数值编码编排进去,进行组合,只需要增长基因个体的长度,但是要明确每个变量具体的位置,然后让每个变量转化成二进制的等长编码,组合在一起,就可以来运算了!

       当然,我们要利用一个矩阵去跟踪每组迭代的结果的大小:

trace = zeros(3,MAXGEN);

       然后,要构造一个译码矩阵FieldD,由bs2rv函数将种群Chrom根据译码矩阵换成时值向量,返回十进制的矩阵:

       且FieldD矩阵的结构如下:

FieldD=[len;lb;ub;code;scale;lbin;ubin];每个变量的含义最好搞清楚,不然得到的结果就不好了!
ObjV = Y.*sin(2*pi*X)+X.*cos(2*pi*Y); 当然我们也要有一个比较好的代价函数
这个是函数的主体部分:
while gen < MAXGEN
    FitnV = ranking(-ObjV);
    Selch = select(‘sus‘,Chrom,FitnV,GGAP);
    Selch = recombin(‘xovsp‘,Selch,px);
    Selch = mut(Selch,pm);
    XY = bs2rv(Selch,FieldD);
    X = XY(:,1);Y = XY(:,2);
    ObjvSel = Y.*sin(2*pi*X)+X.*cos(2*pi*Y);
    [Chrom,ObjV] = reins(Chrom,Selch,1,1,ObjV,ObjvSel);
    XY = bs2rv(Chrom,FieldD);
    gen = gen + 1;
    
    [Y,I] = min(ObjV);
    trace(1:2,gen) = XY(I,:);
    trace(3,gen) = Y;
end

当然我们也要先将目标函数显示出来,看看基本的函数的形式:

使用遗传算法解决多变量函数优化问题!

 

还有就是设计遗传算法的参数估计:基本上也都差不太多,更我上一篇博客基本一样!

NIND = 40;
MAXGEN = 50;
PRECI = 20;
GGAP = 0.95;
px = 0.7;
pm = 0.01;

 

经遗传算法之后,这个最优解的位置是:(图中标记蓝点的位置)
使用遗传算法解决多变量函数优化问题!

算法的迭代次数和优化的趋势是:

使用遗传算法解决多变量函数优化问题!

 

最优解是:X = -1.2624 Y = 1.9999 Z = -3.2563

使用遗传算法解决多变量函数优化问题!

上一篇:AChartEngine应用之PieChart(动态饼图,允许产生动态数据并显示)


下一篇:利用注解 + 反射消除重复代码(Java项目)