写在开始
最近又在看一点遗传算法方面的文章了,然而这一次突然看懂了,所以顺便来写一点理解.
关于遗传算法
以下来自维基百科:
遗传算法(英语:genetic algorithm (GA) )是计算数学中用于解决最佳化的搜索算法,是进化算法的一种。进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择以及杂交等。
一些实现方面的理解
这个算法的重点我认为是在如何编码基因和如何筛选个体上,然后还有好几处调参的地方.
关于编码
编码分为二进制和实数,我只说二进制的.二进制的编码首先你要有一个从数值到解的一个映射关系,也就是你需要求最大值的那个F(x),然后要将x编码为二进制,其实也很简单,因为完全可以粗暴的把这个x的二进制那些位作为编码基因.然后要保证你所有的基因都在这个函数的定义域里,如果超出去了就要去掉重新弄了.
关于筛选个体
筛选个体也就是所谓的优胜劣汰,这一方面的东西的话就是要考虑好留下多少个体,然后留下多少不是很适合的个体来增加物种多样性(可能不需要).
一些实现方面的基本套路
这是纯粹我自己想的,可能和其他人说的不太一样.
- 先初始化一个种群,说白了就是初始化一堆x,然后确定在定义域内.
- 然后就是编码基因,把这一群x转化成二进制.
- 看一下前后两次的最优解的差距,小到一定程度之后就结束算法.跳到9
- 开始种群的交配
- 首先对基因进行交叉互换,也就是对着那一堆二进制从中间一个位置拆开,然后两个二进制拼在一起出现一个新的基因也就是一个新的x.
- 然后对着这个新的基因进行变异,产生一个全新的个体.
- 进行生存竞争,把较差的个体清除.
- 回到3.
- 输出结果
如果想要优化一点性能的话就把7提到4的前面,先竞争再交配,这样子的话可以让产生的新个体少一点,运算量也就随之少一点了.
写在最后
遗传算法整体来说我认为就这些过程,应该说是算法很简单,但是里面有很多调优问题需要经验来解决.