MATLAB(1)基于遗传算法解决最优化问题及相应的MATLAB遗传工具箱使用

MATLAB(1)基于遗传算法解决最优化问题及相应的MATLAB遗传工具箱使用


        摘要:本文将简明扼要的介绍一下遗传算法,并以一个简单的二元一次方程组求解为例,演示用MATLAB工具箱快捷地实现遗传算法。

        对于取最小值的最优化问题,遗传算法借鉴生物遗传现象使具有一定数量的候选解的种群向更好的解进化,该方法是通过种群进化,使得适应度函数代入估计参数后达到最值来得到最优解。借鉴生物种群的进化,遗传算法先随机产生一组初始解,作为初始种群,以数值解为例,这些解都是通过二进制代码存储在计算机中,类似于染色体,于是可以进行生物上的交叉、变异、遗传等。通过对第一代个体选择,保留一些个体并让上一代解“组合”、“变异”、“遗传”,由此产生下一代的解。而每一代中都有个体被淘汰,淘汰的指标就是适应度函数。生物法则“适者生存”,通过目标来建立适应度函数,在每一代中挑选适应度函数值大的个体留下来,对比目标的容许误差,达到目标容许误差,或达到预先设定的遗传代数,则停止计算,返回最优解。
      遗传算法的一个很大的特点就是能跳出极值。对于一些多峰的问题,一些算法极其容易陷入局部最优解而得不到全局最优解。而归功于遗传算法中的变异交叉步骤,遗传算法在每一代中都能不受上一代最优解控制的产生新解,由此为跳出局部最优解提供了途径。
     此外,还有一点想要说明的是,笔者在阅读一些相关资料时,发现准则是适应度函数是取最大值,而实际应用中是让适应度函数取最小值,至少在MATLAB中是这样的。我个人还是比较认可第一种的,因为“适者生存”嘛,自然是适应度高的解应当生存下来。对于第二种,我猜想可能是在实际应用中,为了方便,不区分适应度函数和目标函数,二者混用,确实表达的是一个意思。所幸,这一点在运用时并不会产生什么麻烦。
     起初接触遗传算法时,想到要自己设置种群规模,规定交叉变异遗传方式等等就颇为头疼,幸好后面发现MATLAB有自带的遗传工具箱,下面我就举个简单的例子来演示一下如何使用MATLAB的遗传工具箱。
     对于求解方程组:{x-y-3=0;  3x-8y-14=0}
     为近似求解上述方程组,令 f1=x-y-3; f2=3x-8y-14; f=f1^2+f2^2; 则问题转换为求解使得f取最小值的x,y变量值,f即可当做适应度函数。使用MATLAB2015a的遗传工具箱实现求解。
        首先根据对问题的转换,编写m文件如下:
      
     然后在命令窗口输入:   >>optimtool('ga')    通过此命令来打开遗传工具箱,初始界面如下:
 
    可以看到工具箱主要分为两栏,左边主要是求解的函数的基本信息,右边是对遗传算法中参数的设置。在此例中,我们在Fitness function中输入句柄函数格式@ga1,又因为此例中变量的数目为2(x,y),所以在 number of variables中输入2,而对于下面的Constrains(约束), 由于在此例中变量的取值范围为整个实数域,因而没有约束条件,该部分保持空白即可。

        对于右边对遗传算法参数的设置,我一般都只是更改Population size(种群的规模), Generations(遗传算法运行的总代数,可以理解为遗传到多少代时停止),Stall generations(停滞的代数,可以理解为当连续遗传多少代后适应度函数的加权平均值变化小于Function tolerance时停止计算),Function tolerance(适应度函数值偏差),其他的我基本都是用默认设置,不做更改。当然,有时,也会根据实验对其他参数进行调试,如对精英数量,交叉比例等。在此例中,我们设置Population size 为100,Generations和Stall generations均为200,Function tolerance为1e-100. 同时在Plot functions中勾选best fitness 和best individual如下:

           然后点击偏左下方的Start按钮,运行,最后的结果将显示在左下方的final point中。一次运行的结果如下:



          由于此题的方程组非常简单,笔算可得解为x=2,y=-1, 对比遗传算法的结果可以知道解是非常逼近真实值的,而且智能算法的时间复杂度低,运行效率高。当然在使用遗传算法时,由于算法对初始种群的选取是随机的,因而每次计算结果可能不同,读者必须运行多次,分析结果,将离群点排除后取均值是个不错的选择。
  • 32
    点赞
  • 268
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
遗传算法(Genetic Algorithm)是一种通过模拟自然界进化过程来搜索最优解算法。而YALMIP(Yet Another LMI Parser)是一款用于最优化问题中的线性矩阵不等式(Linear Matrix Inequalities,LMI)的工具包。 遗传算法是通过模拟生物进化过程中的选择、交叉和变异等操作来搜索解空间中的最优解。它首先通过随机生成一组初始解(个体),然后通过适应度函数评估每个个体的适应度(解的优劣),并根据适应度选择一些优秀的个体作为父代,再通过交叉和变异操作生成新的个体,重复上述步骤直到满足终止条件。 YALMIP是一款MATLAB的工具包,它提供了一种简单而强大的语言来定义和最优化问题,尤其是线性矩阵不等式问题。YALMIP可以将最优化问题用高层次的语言描述,然后将其转化为标准的线性矩阵不等式形式,并利用内部的优化解器来解问题。 将遗传算法与YALMIP结合使用可以实现更有针对性的优化。可以使用遗传算法来搜索最优初始解,然后将其传入YALMIP作为初始解进行进一步的优化解。通过这种方式,可以在很短的时间内找到较优的解,从而提高解效率。 总结来说,遗传算法是一种搜索最优解优化算法,而YALMIP是一款用于解线性矩阵不等式问题的工具包。通过将两者结合使用,可以提高解效率并找到更优的解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值