遗传算法与寒武纪生命大爆发
大概把遗传算法寻路的小程序做完了,10×15的矩阵,给定起点与终点,采用遗传算法寻路,路径无要求,能走通即可

经典遗传算法的过程是:
1.随机生成染色体
2.世代开始,对于每条染色体计算适应度
3.轮盘法选择出新的两条染色体
4.以一定概率杂交
5.再以一定概率变异
6.得到新的基因组,完成一个世代
7.一直重复世代至到可以到达的路径(即适应度为1的染色体)
然后一运行,悲剧了,完全靠运气啊!实际测试,运气最好的时候只要30ms,经历97个世代,最差的时候居然达到10s,大部分还是500ms以上
总该优化下吧,开启任务管理器,发现程序运行的时候cpu4个核心只有一个在满负荷运作,其他都在打酱油
恩 那就来多线程吧
多个基因组同时进化,每一个世代淘汰掉适应度最差的基因组,然后从其他基因组里循环用轮盘法组成一个新的基因组,加入
结果更崩溃了,最好要300ms,一般都在500ms内,但是最坏情况居然到了20s,应该是发生了传说中的‘早熟’,实在是无奈,也不愿修改了,想想其他的方法把
生命大爆发
不错,就是类似那个寒武纪生命大爆发(不太了解?猛击这里),一个种群达到某个世代时,如果还没进化出噬石真象,那么在接下来的若干个世代里就要疯狂变异,我以100代为限,如果到了100代还不能找到结果,那么变异率变成100倍,直到110代,变异率恢复正常
发现效果相当好!接近60%的计算在200代内就完成(基本上都在150ms以内),与此同时,不能很快完成的普遍都跑到了上千世代
再进一步 生命的重新演化
如果当前世代超出了我们的忍受范围,不妨抛弃这个基因组,开始新的进化历险记
我给它140代的变异缓冲时间,一旦超过250代(这个数字绝对没有其他含义),恩,BYE-BYE,新的进化开始
果然,现在基本都控制在1s内了,实验50次,最坏情况重新演化了6次,总耗时1302ms,而80%的计算都在350ms内完成(最多需要一次重新演化)
与最早的结果对比,成效显著!
只是突然一惊,在进化路上,等待我们人类的是最终的结果,还是?






人生啊……
人类啊