Matlab遗传算法大纲

Matlab遗传算法大纲

遗传算法简介

遗传算法,顾名思义,模拟自然界物竞天择,万物竞自由的种群迭代时在遗传基因方面的进化过程,无法适应环境的种群个体被淘汰,剩下的就是比较适合当下环境的个体 适应度较大,成为了最优解。

算法流程

种群初始化

对种群初始化分为两步实际也不是两步各有交叉:对基因进行编码、对初始种群结构进行设置。

  • 设置种群结构与参数
    种群的结构有:种群的数目(如非多种群遗传算法均为1),种群中个体的数目,个体中染色体的数目(实际为编码的个数,与你的变量个数或者变量的精度有关)。
    种群的最大遗传数目(与你的问题计算复杂程度有关),染色体的交叉概率(通常设为0.7左右),基因的变异概率(通常为0.01左右),遗传代沟(不同的选择操作可能没有该参数)。
  • 基因编码
    基因编码常用的有很多种,但解决实际问题最最常用的有两大种:二进制编码和实数编码。
    二进制编码常用于TSP问题,解决0-1规划等问题。可以使用谢菲尔德大学的Matlab遗传算法工具箱中bs2rv()函数转化为十进制数,转化时需要设置变量范围。
    实数编码可以设置范围与约束进行随机生成。
计算初始种群适应度

适应度是遗传算法的关键,是你成为上帝的决定因素。有的遗传算法是求最小值,如果需求是最大值需要对目标函数进行变换,相反数或者倒数均可。有的版本的遗传算法是求最大值,具体情况还需要观察具体程序中对最优适应度的选取(不能只观察最外层记录值中的min或者max,需要对每个操作进行检查)
下文中均取最大值

种群选择操作

对种群中优良个体进行选择,个体的适应度越高选取到的概率越大,常用轮盘赌法、锦标赛法,随机遍历采样法等。

染色体交叉

随机的从种群中选取两个个体,通过对染色体的交换组合,产生更优秀的个体。强强结合,小孩会更强?貌似在这里也有一定合理性。交叉概率即为每一轮发生交叉的概率。常采用单点交叉算子,两点交叉算子等。单点交叉算子中具体操作为选取一个个体的染色体 α % \alpha\% α%与另一个染色体的 α % \alpha\% α%进行交换产生的两个新染色体。 α % \alpha\% α% [ 0 , 1 ] [ 0,1 ] [0,1]区间的随机数。

个体变异

个体变异,学过生物学的一定知道了,为了维持总群的多样性,也是在一定程度上避免困于极小值,变异产生更加优秀的个体加入种群。同样的,变异概率为每一轮发生变异的概率。值得注意的是,变异是对染色体上的基因也就是编码数进行操作的。常用的变异算子有离散变异,实值变异等。

记录种群适应度

在一轮进化过程中,经历了上述的选择,交叉,变异操作,对当前种群中个体重新进行适应度计算,找出这次进化后的种群最优个体,记录适应度,再重新对当前种群进行迭代进化。在不断的迭代中,若种群最优值收敛于某值,该值即为最优值。

遗传的不足

首先是参数的设定过于主观,经验化,算法的实际效率很低,无法解决很复杂的问题,最终解可能无法收敛,在使用时还是要看具体的进化过程,求解效果如何,并非也不可能适用于所有问题

参考文章

本文内容参考下列文章,如有任何问题还请联系该账号


[1]史峰. MATLAB智能算法30个案例分析[M]. 北京航空航天大学出版社, 2011.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月球蓬蒿人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值