大家好
欢迎回来
那么今天我们这一节介绍
基于仿生算法的人工智能系统当中的基因遗传算法的一个实例
这是一个拼图游戏的实例
那么要说这个实例
我们首先讲一个故事
这个故事是这么说的
在海岸边有一大群扇贝在
无忧无虑的生活
那么海边有一个原始部落
那么原始部落的人每天都到海边去捡贝壳吃
那么但是由于这个部落它本身的图腾
他的信仰是一个图片
而这个图片正好像我们火狐浏览器图标的样子
所以他们这个部落的人到海边去
捡贝壳的时候
就捡扇贝的时候
他看到接近这个图腾的图案的扇贝它就不捡
他只捡那些不太接近的
所以这样的一代又一代
当然扇贝就会被捡了被吃掉了
吃掉了以后存活下来的扇贝继续繁殖下一代
那么最后这个故事的结局你可能也会猜到
当扇贝进化了几十万代之后
你猜怎么着
那么海滩上的所有的扇贝
它的背壳上的图案都印着特别像
火狐图标的图案
这就是一个自然选择
当然这是一个人为的一个自然选择的一个过程
当然对于扇贝来讲
他是被选择
那么所有的那些不适应环境的都
被原始部落的人吃掉了
留下来的那么都是很接近火狐图标的这些扇贝
那么这样的话
其实我们可以用基因遗传算法来
模拟这一群扇贝的经历以及他们的进化的过程
那么这个就提出了一个拼图游戏的一个问题
这个问题就是对于像火狐浏览器的图标这么一个图案
对于这个图案
我们看到这个图案有各种各样的色彩
那么我们如何用若干个三角形
我们知道有三角形有三个顶点
然后围成一个填充的一个图案
然后它带有填充的颜色
那么肯定三角形的都是同一种颜色
那么还有颜色
还有一些透明度
用这样的若干个三角形
如何能够拟合成这么一个图案
而且是比如说固定数量的
我就是一百多个三角形
比如说128个三角形
那么当然三角形的形状是可以你自己定的
它旋转的角度也可以自己定
你的大小都是可以定
那么如何能够拟合成这样一个图案
那么大家想想
这个显然对于传统的算法来做
这是一个特别难的问题
而且它的涉及的参数特别的多
你如果想搜到这么一百多个三角形
刚好组合它们叠加起来
最后组合成这一个图案
你想有多难
但是我们可以用遗传算法来试试
我们先看看这个成果
这是第一代我们随机生成的个体
然后接下来若干代之后
最后最后我们身得到的成果就是这样
那么这个是经过了几十万代进化了之后
基因遗传算法得到了这个成果
你们别看这里头是一个非常像
火狐图标的这么一个图案
其实它是由一百多个三角形构成的
所以我们觉得确实很了不起
是吧
基因遗传算法
他能够做的事情
确实是很好
当然除了拼成这些图之外
我们也可以玩一些拼图游戏
比如说像把这一幅图
把它化成好多正方形的方格
然后把它打乱
如何把它复原起来
还复原回到这张图
那么这个也是属于非常多种组合
几乎这个组合爆炸的这种组合
因为它们之间的位置
它们的顺序
然后组合成的图像
这个数量太大了
你如果一个一个去对比
那简直不可能完成
但是用基因遗传算法也能够在
一个合理的时间里头能够完成
这样的一个拼图
这就展示了我们基因遗传算法的一个威力
那么遗传算法如果用在火狐图标
的你和这个问题上
其实它的原理跟我们自然界的
进化是一样的
我们回到开头的故事
也就是说当我们要设立一个淘汰的机制
就是这个所谓的淘汰机制就是被捡走
那么那些不太像火狐图标的就被捡走了
比如说这个不太像
那么它就会被捡走
那么就被淘汰掉
他就没有机会再产生下一代
那么像这个更接近一些
那么它就会存活下来
留了产生下一代
那么在下一代他就越来越接近火狐的图标
那么我们这个是用三角形拟合图案这么一个应用
是我们基因遗传算法的一个非常
典型的一个实例
我们可以从一个实例当中去探索
基因遗传算法它的本质以及它的
完整的一个过程
像这样的一个拼图游戏里头
实例实际上已经覆盖了像我们要去设计基因
然后进行选择进行遗传进行变异
然后再进行不停的个代的进行迭代的这样一个过程
这个是一个目标的图案
这是第一代完全随机的
然后逐渐的进行遗传变异选择之后
你看若干带到了2万代的时候
那么这已经是比较像了
我们如果还觉得他不够像
我们还可以再让它进化更多的代
到最后就基本上跟原来的图标
基本上是完全一样的
那么后面我们再来看这个算法
具体的内容是什么样子的