翻阅几篇遗传算法的文章,这篇通俗易懂,且逻辑清楚,最适合入门,不用担心遗漏关键点。
遗传算法,先选择,交叉和变异顺序可更换。
轮盘赌部分,参考了另外一篇文章的解释。
此外,还有一些有价值的文献:
选择算子的讨论:http://www.doc88.com/p-7834231663548.html
变异和交叉算子的讨论:http://blog.sina.com.cn/s/blog_5698433c0102v0d9.html
轮盘赌算法的三种python实现代码:https://github.com/mangwang/PythonForFun/blob/master/rouletteWheelSelection.py
处理遗传算法的约束问题:
1.把带约束的变成自由的:当约束是等式时,利用代换;约束是不等式,利用三角、指数函数化作等式;
2.遗传出子代时,利用约束条件进行先天淘汰
第一个方法把运算量放在子代产生之前,第二个方法把运算量放在产生子代后。
(2) 隐性约束的处理方法:
选择符合条件的染色体进行交叉;
淘汰不符合条件的变异子代;
代码下载地址在结尾。
================================================
《通俗解释遗传算法及其Matlab实现》
(1)初识遗传算法
遗传算法,模拟达尔文进化论的自然选择和遗传学机理的生物进化过程的计算模型,一种选择不断选择优良个体的算法。谈到遗传,想想自然界动物遗传是怎么来的,自然主要过程包括染色体的选择,交叉,变异(不明白这个的可以去看看生物学),这些操作后,保证了以后的个体基本上是最优的,那么以后再继续这样下去就可以一直最优了。
(2)解决的问题
先说说自己要解决的问题吧。遗传算法很有名,自然能解决的问题很多了,在原理上不变的情况下,只要改变模型的应用环境和形式,基本上都可以。但是遗传算法主要还是解决优化类问题,尤其是那种不能直接解出来的很复杂的问题,而实际情况通常也是这样的。
本部分主要为了了解遗传算法的应用,选择一个复杂的二维函数来进行遗传算法优化。函数显示为y=10*sin(5*x)+7*abs(x-5)+10,这个函数图像为:
怎么样,还是有点复杂的吧,当然你还可以任意假设和编写,只要符合就可以。那么现在问你要你一下求出最大值你能求出来吗?(这个貌似可以,很容易看出来---如何再复杂一点估计就不行了)这类问题如果用遗传算法或者其他优化方法就很简单了,为什么了,说白了,其实就是计算机太笨,同时计算速度又超快,举个例子吧,我把x等分为100万份,再一下子都带值进去算,求出对应的100万个y的值,再比较他们的大小找到最大值不久可以了么