首先有一个种小东西,它们都生活在大草原上,跑的快的就不会被吃掉,就可以生存下来。
这个东西的一般是长这样的:
它由几个元素组成:
Node,暂且把它叫做腿,也就是上图圆圆的东西颜色越深表示和地面的摩擦力越大
Muscal,肌肉,连接圆圈的粗线,颜色越深越粗的肌肉表示更有力量,而且每一条肌肉都有不同的原始长度。肌肉越强,他就越有能力拉动连接的两个Node
还有最重要的下图:时钟。也就是这些肌肉有拉长的时间和收缩的时间。在拉长时间,肌肉总想让两腿之间距离变远,收缩时间肌肉又想让腿之间距离近。
是不是很复杂?
其实就可以想象一下:几个铁球被几根橡皮筋连接在一起,橡皮筋在有规律的抽动,然后这个东西随着抽动会向前跑。
所以然后我们的目标来了:什么样的这样的东西(几个球,几根皮筋,强度多少)可以跑的最快?
就是遗传算法发挥作用的时候到了。
第一步,第一批种子选手
遗传算法首先要有父本。也就是初始的一些这样的小东西。
一般来说要是我们知道一些知识,比如大概知道什么样子的东西可以跑的快的话,可以挑一些出来作为父本。
但是我们现在连这些东西怎么跑都不知道,怎么会知道哪个跑的快?
于是最粗暴的就是:随便来1000个!
100个随机生成的小东西。有三条腿的,也有四条五条六条七条的,肌肉也有多有少。然后我们看看他们跑的怎么样。
第一位选手:
怎么说呢,在一阵蠕动当中,一号选手竟然可以在15秒跑出差不多1米的距离。表现非常不错!
你以为这个不够快?
看看比如2号选手:
“请不要躺在地上”
还有其他选手:
总体来说,因为是全部随机生成的选手,很多都只能留在原地,而且有一半选手选择了向后退而不是向前。
遗传算法第二步:生存
“适者生存”
第一代的父本,按照在15秒之内跑的距离排序。跑的慢的就会被淘汰掉。
1000个小东西按照跑的快慢排序
但是,并不一定是所有跑的慢的都会大自然就一定会被淘汰掉。只是说,跑的快的更容易保留下来,跑的慢的更容易死掉。
大自然就是这么神奇,会允许一些幸运的弱者生存下来。说不定会在下一代表现出不一样的特点。
第一代的1000个,淘汰掉一半,剩下的才有资格作为下一代的父本,留下基因。下图黑色的代表被淘汰了。
遗传算法第三步:产生后代
就像两个黑头发生下来有大概率是黑头发,父母都1米9生下孩子大概率都也会很高。但是也会有两个父母都不聪明生的天才小孩。
遗传算法里也是一样,两个父亲(不要在意这些细节)结合产生的后代,有可能“腿”会不一样粗:
也很有可能“肌肉”会不一样强壮:
但是也会相对比较少见有变异的:
腿不一样多。当然都是大自然的力量,和隔壁住了谁关系不大。
变异在遗传算法中的意义就在于:就算父本的基因中不包含有最佳的基因(比如父本都是5条腿,但是最佳的方案其实是3条),也有可能会通过变异产生。变异的结果如果很好,就会留下来成为新的父本。这样下一代群体中就包含了最佳的基因。
于是我们又有了下一代:上一代500个样本的孩子-->1000个新的样本。
遗传算法最后一步:迭代
我们已经有了完整的过程,
1. 有一个群体
2. 群体根据成绩(目标函数)随机淘汰
3. 交叉产生新的群体
4. 群体再次淘汰
5. 不断的重复3和4,直到找到满足条件的样本(达到要求),或者群体不能再显著的进化。
我们看一下这样的遗传算法,最终可以达到什么样子的效果
到第10代的时候,跑的最快的一个已经可以在15秒跑到快3米。跑起来是这个样子的
这个小东西有5条腿,已经可以稳定向前蠕动
到了第30代:
感觉已经要快飞起来了。还是5条腿。
30代的时候,跑的最快的一个已经可以在15秒内跑到6米,而中间值(千人马拉松第500名)也可以跑到3米。整个群体都在飞快的进步
这个图显示了进化中每一代跑的最快的(上边黑线)和群体中位数(红线)的成绩。
然后到了62代,一个有4条腿的家伙成为了新的冠军:
看来是进化的力量发挥了作用。有4条腿的族群中进化出现了一个非常利于跑步的结构:后边一条黑色腿,前边一条白色腿,中间两条相似的腿。
而且在整个群体中,4条腿6根肌肉的生物也占据了大部分,其他3条腿,5条腿的大多慢慢都被淘汰了。
结果
到了300代的时候,增长速度变得非常缓慢,停止模拟。
这一代里有个叫博尔特的跑的简直要飞起来了,我们欣赏一下:
大自然真是神奇~学到了么?
——————
关注我会有意想不到的事情发生
还有有喜欢的可以关注我,关注我的知乎专栏,或者我的微信公众号 /投稿/聊天
机械+数据工程师/职业发展/一起成长
文章预告:
如何从机械转到数据?
和专业的出身的数据分析师相比没有竞争力,工业背景的数据分析师可以做什么?
网友评论