1.算法的来源
我感觉:遗传的来源就是达尔文的物种起源,由于适者生存这一准则。粗略来说,生存的好的物种就有好的基因,生存的不好没有好的基因,直接死亡,好的基因传给下一代,下一代就能更好的生存,因为对环境不适应的逐渐死亡了。再此过程中,还有基因突变,基因突变也许会使物种更适应环境,也许不会,不会的又会死亡。这样,逐渐形成对环境非常适应的物种。逐渐形成对环境非常适应的物种
意味着
这个算法是可以用于找到最优解。
那么其中,好的基因是如何传给下一代的呢?
通过杂交。就是从父本和母本各取一个染色体(包含所有基因)。通过这样方式,有可能获取到父本和母本的最佳基因。
2.用代码实现该算法
用 植物生命演化 演示这一过程。1:花生长的最高代表生长的最好。
2:花有六种属性(每个属性代表一个基因),
分别是:temperature,
water,
sunlight,nutrition,
beneficalInsect,
harmfulInsect.
3.当前环境也有这6个属性,如果某花的属性值离环境的属性值越近,那么就应该生长的越高,代表生长的越好。
4.生长过程为
第一代初始化:初始化花的属性,相当于基因
适合度分等:根据花的属性与环境的差距,可以知道花生长的等级情况,画出花的最终生长图。
选择:选出最好的两朵花
演化:交配,这里,我们就是从父本那里取3个基因,再从母本那里取另外3个基因。最后,生出同等数量的花,其中不要忘了还要进行基因突变,处理过程的每个基因有5%增加或者减少5。
重复适合度分等至演化的过程。
当交配生殖了几代之后,花将会越来越高,表示生长的越来越好,也就是其属性值越来越接近环境值。
这样就找到了最优解。
请先稍稍理解一下代码里的图:如下图所示
代码运行结果:
有两份事例子,第一个是每次都选出最优秀的作为父母本,最后经过很多的代的繁殖后,所有的花生长状况变好,也可以说是找到最优解。
请看下面两张图:
出现最佳: