本文you清华大学硕士大神金天撰写,欢迎大家转载,不过请保留这段版权信息,对本文内容有疑问欢迎联系作者微信:jintianiloveu探讨,多谢合作~
导语
差分进化算法是一种寻优算法,提出时间比遗传算法,粒子群算法晚,但是我在实现差分进化算法的时候看不出任何牛逼之处,唯一我觉得牛逼的一点是不像遗传算法一样使用二进制编码令人头大,实数编码好理解一点,而且变异,交叉,选择这三大过程也很简单。本篇文章就是传授老夫多年的科研装逼手艺,如果觉得好,可以小小的赞一下,嘿嘿。
洪荒初始-差分进化算法的步骤
差分进化算法和遗传算法没有任何区别,如果你甚至没有听过遗传算法没有关系,它只有简单的以下几步:
- 初始化
对于像进化差分这样的贪婪算法来说,首先需要形成一个初始种群,就像采花高手一样一开始喜欢广撒网,网撒的好才不会有漏网之鱼。 - 变异
变异针对个体级别,变异的原理就是
h_i = x_g_without_i[1] + f*(x_g_without_i[2] - x_g_without_i[3])
这里的h_i指的是对上一代种群中第i个个体进行变异,变异方法是从上一代种群中,除了第i个个体以外的剩下个体中随机抽取三个,按照上面的公式得到第i个的变异个体。
- 交叉
交叉操作主要针对每个个体,我们优化的函数可能有多个变量,也就是多目标优化,一个拥有x,y,z,w,f,g,b,k....这样超多变量的函数给你优化,你要是用高等数学的方法来寻找指定区间上的最优点基本上不太可能,这时候我们就需要进化差分算法,每个个体的元素个数就是要优化的多目标数。 - 选择
选择操作当然就是根据适应度函数来决定我选取变异交叉后的个体还是保留原来的个体 - 迭代
重复之前的操作。
差分进化算法详细讲解
上面只是给大家一个感性的认识,真正你看了上面就理解了进化差分算法要么你牛逼要么我牛逼,不过为了把算法解释清楚,我决定在详细讲解一下
共识
首先我们要明确我们要优化什么?优化的量是什么?怎么跟差分进化算法里面的东西对应起来?
我们要优化的东西无非就是一个函数,这个函数可能只有一个变量,也可能有两个,当然更多的情况是有很多参数,比如一个量子对撞机控制系统,影响因素就很多,当然我们的进化算法还无法牛逼到处理辣么复杂的问题。
而函数的参数就是我们算法里面的个体,参数的个数就是个体的元素个数。对,就是这样。
还有啥
还有啥要说的呢,基本上没有了,小学生应该也懂了,好了开始上代码
Talk is cheap, show me the code
接下来开源进化差分算法的代码,用python实现的哟,如果代码中有任何问题欢迎加我微信:jintianiloveu或者加入文章结尾二维码群。