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

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

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

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

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
  • 14
    点赞
  • 139
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值