关于遗传算法的几点概念性理解

注:建议先看一些科普的再看本文,本文只是为了自己理解和备份,如果能启发他人,那就是最大的荣幸,故文字写的比较精简,算法参考《MATLAB智能算法30个案例分析》(史峰等)第二章

概念

遗传算法(GA,Genetic Algorithm),也称为进化算法。遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法。其主要特点是直接对结构对象进行操作,因此不同于其他求解最优解的算法,遗传算法不存在求导和对函数连续性的限定,采用概率化的寻优方法,不需要确定的规则就能自动获取和指导优化的搜索空间,自适应地调整搜索方向。[引用CSDN博主「冉冉云」]

目标

对于一个函数F(x1,x2,x3,x4),变量数目任意,这里以4个数为例,编码采用实数编码。

初始化种群

随机产生一群满足约束条件的解(个体),如:

个体1(解1):(1,2,3,4)

个体2(解2):(2,2,4,4)

个体3(解3):(2,2,5,4)

个体4(解4):(1,5,3,5)

...

所有个体组成一个种群,所以遗传算法需要定义种群规模,即个体数目。

进化操作

选择

把个体(解)代入目标函数,看看是不是离目标(最值)接近,越接近的个体(解)越容易保留下来。

譬如:计算发现个体1-个体3更好,保留。个体4(解4)淘汰

个体1(解1):(1,2,3,4)

个体2(解2):(2,2,4,4)

个体3(解3):(2,2,5,4)

交叉(以前我一直想不明白,直到看了算法具体运行)

对于实数编码,解的数组就是染色体,如个体1的染色体即为(1,2,3,4)

那么交叉就选择两个进行交叉,由于两个解都是选择后的,离最优解接近,所以交叉后就可能是更优解了譬如:

个体1 2的3号染色体交叉

交叉前:

个体1(解1):(1,2,3,4)

个体2(解2):(2,2,4,4)

交叉后:

个体1(解1):(1,2,4,4)

个体2(解2):(2,2,3,4)

变异(确保跳出局部解)

操作同上,直接贴图了。

关于遗传算法的几点概念性理解

继续进化

 

 

小结

因此,遗传算法不能保证一定能求得最优解,而只能以一定的概率求最优解。

个人觉得关键是选择和进化(不断淘汰不符合条件的),如果初始能穷举所有的可行解,那么交叉和变异意义不大了,但正式不可能穷举,引入了交叉变异。

通过以上描述,我们不难看出,遗传算法不能保证一定能求得最优解,而只能以一定的概率求最优解。但是使用遗传算法时,我们可以不用关心具体如何去找最优解,要做的只是简单的否定一些表现不好的个体。这一优点也是遗传算法能够取得广泛应用的原因之一。[引用CSDN博主「冉冉云」]

学习资源

https://www.cnblogs.com/LoganChen/p/7509702.html

https://www.zhihu.com/question/23293449/answer/120220974

学习笔记

交叉概率一般取为0.4-0.99..
变异概率一般取为0.0001-0.1.
遗传代数一般取100-500.