遗传算法是根据生物学上遗传的原理,求解目标函数的最优解的一种算法。

遗传算法有以下关键步骤:

1.选取初始种群。用随机的二进制数代表各个个体的DNA,即碱基为0,1两种。

2.解码。将每个个体的二进制的编码解码,成为目标函数定义域内对应的浮点数。

3.适应度计算。计算出各个个体对环境的适应度,即浮点数对应的函数值。同时,为了保证适应度大于零,将所有计算出来的函数值减去最小的函数值再加上一个很小的正数作为该个体的适应度(这里是相对于求最大值的问题而言,如果是求最小值,那么就是函数值越小适应度越大,可用各个个体的函数值减去最大值的相反数代表其适应度)。

4.物竞天择。用轮盘赌选择法筛选一部分个体出来,即基因越优良的个体被选中的概率越大(轮盘赌方法在上一次的蚁群算法中已经介绍过)。

5.繁衍后代。在生物学上,产生后代时染色体上会发生交叉互换和基因突变。根据这两个特性我们可以如下操作:将上一步骤筛选出来的个体每一个都作一次父本,同时随机选择该筛选后群体中的某个个体作为母本。子代的DNA首先与父本相同,然后有一定概率在某些节点上获得母亲在该节点的碱基(0或1),这是交叉互换。此后每个节点有一定概率突变,即0变为1,1变为0。

6.重复进化。对产生子代后的种群重复2~5步骤,迭代到最大次数后,选取所有个体中函数值最优的作为最终结果。

一些参数的选取要求:

DNA长度:即二进制编码的位数,精度要求越高,位数就要求取得越大。设定义域区间长度为l,二进制编码位数为n,则精度为l/(2^n),这是根据解码规则得到的。一般取20左右就够了。

交叉互换概率:交叉互换在生物学中发生的概率相对较高,有10%左右。而我们做的处理是先让子代和父本的基因相同,再用母本去交配。所以此概率一般取0.6左右。

突变概率:突变在生物学中发生概率及其之低,但正因为有了基因突变,世界才如此富有多样性,所以突变概率是必不可少的。一般取10的-4次方左右。

物竞天择保留比例(或数目):我们用轮盘赌来选择优质个体时,可以规定比例,也可以规定数目。如果规定数目,就需要根据初始种群数量来定夺。如果规定比例,一般选择10%左右。

这就是我对遗传算法的理解。希望能对您有所帮助!~~

另:4月份以前应该会把模拟退火算法,蚁群算法,和遗传算法的python代码整出来~~