2015.2.7--记录我的机器学习之路--现代启发式算法之遗传算法

遗传算法

对于经典的模型算法,已有太多前人为我们写下各种攻略,我就先整理下我在学习过程中查阅的并觉得讲解得不错的文章吧,之后再慢慢补充我自己反思之后的体会~
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

对于刚开始接触遗传算法的朋友,笔者觉得科学松鼠会中有一篇文章不应该错过:遗传算法:内存中的进化,这篇文章通俗易懂,以非常生动地例子:如何用100个半透明三角形尽可能把Firefox的图标画出来,很好地阐释了遗传算法的奇妙,其中包含的“编码”,“适应性选择”,“交叉”,“变异”等步骤,在例子中仔细体会一下,就会觉得遗传算法确实是简单但又神奇。
不过看完这个,我们只是对遗传算法有了感性的认识,这时可以去看看July的算法具体介绍文:经典算法研究系列:七、深入浅出遗传算法,这篇文章相对就完整正式多啦,不过有了之前那篇科普文的了解,相信这篇文章可以很快理解清楚~

----------------------------------------------后续------------------------------------------------
遗传算法的个人体会
一、遗传算法思想综述
遗传算法起源于模拟自然选择,物种进化,为了适应环境,进而在一代一代繁衍的过程中,基因朝着更有利于适应环境的方向变化,并遗传给后代。后代就会慢慢朝着更加适应环境的方向进化,那么繁衍到一定代数,我们的生物就比较好的适应环境;如果把环境换成我们的目标函数,生物看做我们的解,那么经过一定代数的繁衍,我们能得到比较好的解。
简而言之,遗传算法是一种在相对较短时间,求得一个比较好地解的方法;
二、遗传算法的构架
模型中有几处把进化过程抽象为模型成分:
(1)自然选择的环境被抽象成为“适应函数”,一个生物的适应函数的函数值的大小衡量这个生物的适应环境程度,而选择的过程,抽象为一个选择算子,从所有生物中选择达到一定适应度的生物,这些生物的基因才有资格被传递下去。
(2)两个生物配对繁衍的过程,会发生基因重组和基因突变,所以在模型中经常会抽象出一个“编码”的操作,对我们要用遗传算法解决的问题对象进行编码,目的就是方便在遗传过程中,进行基因交叉和基因突变(这里其实非常灵活,编码成“基因”其实就是把对象用更小的单元组合而成,不必拘泥于一定要编码,“基因”的定义我们可以结合实际问题充分发挥想象力。
(3)重复(1)(2)自然选择,基因重组,突变若干轮之后,我们的对象便可越来越符合“适应函数”,也就是说,这个”适应函数“其实某种程度上就是我们的目标函数。

笔者才疏学浅,有理解的不到位的地方,还希望高人批评指出,不甚感激。


你可能感兴趣的:(记录我的机器学习之路,machine,learning,启发式搜索,机器学习,算法,遗传算法)