
我很久以前用过遗传算法,凭印象说一下吧。
遗传算法就是通过模拟生物进化过程中的基因表达过程,筛选优质基因(目标值更优),淘汰劣质基因,最终得到近似最优解的过程。
基本上说来在使用遗传算法时你得先把问题表达成一个类似的基因序列,比如一个背包问题,你可以设置一个0-1向量表示 选择\不选择 某件物品,比如 (0,1,0,0,1,...)。然后通过交叉变异,交换其中的基因片段,或随机改变基因序列里的值。之后再评估种群的质量,把好的解留下,坏的解淘汰。以此往复迭代多次,从最终剩下的种群(解集)中挑选最优的个体作为最优解。
遗传算法的思想在于,认为优质的基因片段一定会在多次迭代过程中保留下来。(其它算法也许会在目标值表达,交叉变异的,目标值筛选等步骤上和遗传算法的思路不同,可以尝试触类旁通。)
但是遗传算法这样的算法存在的问题在于 没法证明问题的收敛性,也就是说,如果我想得到一个精度在x%范围内的解,从理论上遗传算法没法给出得到一个这样精度的解所必需的迭代次数。所以这种方法也被很多学者所不齿,认为它纯粹是一个撞运气的大规模随机搜索算法。
