遗传算法个人理解


前言

遗传算法(GA)是模拟生物在自然环境中的遗传和进化的过程而形成的自适应全局优化搜索算法。遗传算法借鉴了遗传学的自然选择(物竞天择)、遗传、变异等机制,实现了目标函数的优化。简单来说,遗传算法是对现有的群体进行选择、交叉遗传、部分变异的操作,来找到最优化的解。

一、遗传算法要点

1.主要术语

1、选择
选择群体当中的哪些个体进行遗传,一般选择较优的解进行遗传,比如选择前十的较优解两两交叉遗传,这个根据具体情况选择需要的个体。相当于选择动物的父母群体进行遗传。
2、交叉
交叉类似于子代会继承父母的一部分基因。就拿简单的父母两个交叉遗传来说,子代会有两个,每个子代都拿父母的一部分。比如:0000 1111 和 1111 0000 进行交叉遗传,每个子代拿前四后四,就可以生成两个子代 0000 0000 和 1111 1111 。当然这个很简单和理想,复杂点的可以随机挑选,或者交替选择。
3、变异
类比动物的基因变异,子代从父母交叉继承的结果,可能会产生些许变异,模拟生物的进化。比如上面的子代 0000 0000 和 1111 1111,如果产生一个基因的变异,就可能变成 0001 0000 和 1111 0111。

还有很多术语没有解释,因为我不专业。。。我也不习惯用。比如染色体是一个解的编码,解的每个编码字段是基因。

2.主要参数

1、群体规模 NP
也就是群体数量,染色体(可行解)的数目。根据目标函数的选择域进行选择,太小会容易陷入局部最优解,太多会影响算法复杂度。
2、变异概率pm
变异是为了保持多样性,概率太高就会变成随机搜索,所以通常取较小的值[0.001,0.1]。
3、最大进化代数G
最大进化代数也是算法结束的一个标志,一般根据具体情况确定。
4、交叉概率pc
交叉概率控制交叉遗传的频率,太大可以增强搜索能力,但是在高性能模式下破坏性增大;太小了算法比较迟钝,需要更多进化代数才能达到效果,一般取[0.25,1]。

三、算法流程

1、初始化。 设置最大进化代数G和初始群体数目NP。
2、基因编码。 这个最关键的部分。可以用二进制编码,也可以用实数编码。比如有多维数据的,就是对应多种基因,同一维的多值数据成为等位基因;如果是一维数据,就可以考虑用二进制编码。
3、个体评价。 计算出群体的个体评价,也就是目标函数值。
4、选择运算。 按照一定规则选出将要作为父母的个体,一般都会选择较优的解。
5、交叉运算。 将选出来的个体按照一定概率进行交换部分基因,产生新的个体。
6、变异运算。 对于第5步产生的新个体,按照概率随机变异一个或者几个基因。
7、条件判断。 是否达到最大进化代数或者获取最优解。是,就结束,否则返回3。

举个栗子

1、求背包问题
把N件物品放入容量为V的背包,每个物品有各自的容量和价值,求背包能装下的最大价值。这个就可以使用二进制编码,二进制的0,表示物品的有无;目标函数就是携带物品的总价值。比较麻烦的一点,有可能最大价值超过了背包容量,对于这种解,应该加一个惩罚机制,降低这类解的选择,或者之间抛弃。设定好初始值以后,就可以遍历寻找最优解了。
2、求函数的最大最小值f(x,y,z)
这个可以按照x,y,z进行三维编码就好了,可能还有取值域的限制,但是总体应该比背包问题简单。

总结

初始学习遗传算法,觉得很很头疼,因为专业术语太多了。后面自己实现以后,就抛弃了那些术语。遗传算法我也是看着《智能优化算法及其MATLAB实例》写的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值