遗传算法的数学建模总结——摘自《matlab在数学建模中的应用(第二版)》

遗传算法

       简单遗传算法(simple genetic algorithm,SGA),由编解码、个体适应度评估和遗传运算三大模块构成,而遗传运算又包括染色体复制、交叉、变异甚至倒位等。改良的遗传算法和融合新型技术的遗传算法都是SGA的变异形式。在遗传算法中,定义种群或群体为所有编码后的染色体集合,表征每个个体的是其相应的染色体。

SGA术语

1、编码

        遗传算法的编码有浮点编码和二进制编码两种,这里只介绍二进制编码规则。二进制编码既符合计算机处理信息的原理,也方便了对染色体进行遗传、编译和突变等操作。

2、解码

        解码的目的是为了将不直观的二进制数据串还原成十进制。

        遗传算法的编码和解码在宏观上可以对应生物的基因型和表现型,在微观上可以对应DNA的转录和翻译两个过程。

3、交配

        “交配运算”是使用单点或多点进行交叉的算子。首相用随机数产生一个或多个交配点位置,然后两个个体在交配点位置互换部分基因码。形成两个子个体。

4、突变

        “突变运算”是使用基本位进行基因突变。为了避免在算法迭代后期出现种群过早收敛,对于二进制的基因码组成的个体种群,实行基因码的小几率翻转,即0变1或1变0。

5、倒位

        一个染色体某区段正常排列顺序发生180°的颠倒,造成染色体内的DNA序列重新排列,它包括臂内倒位和臂间倒位。

6、个体适应度评估

        遗传算法依照与个体适应度成正比的几率决定当前种群中各个个体遗传到下一代群体中的机会。个体适应度大的个体更容易被遗传到下一代。通常,求目标函数最大值的问题可以直接把目标函数作为检测个体适应度大小的函数。

7、复制

        根据个体适应度大小决定其下一代遗传的可能性。

遗传算法程序设计伪代码

BEGIN
    t=0;                                    %遗传代数
    初始化P(t);       %初始化种群或染色体
    计算P(t)的适应值;
    while(不满足停止准则)do
        begin
        t=t+1;
        从P(t-1)中选择P(t);                %选择
        重组P(t);                     %交叉和变异
        计算P(t)的适应值;
    end
END

遗传算法的参数设计原则

        在单纯的遗传算法中,也并不总是收敛,即使在单峰或者单调也是如此。这是因为种群的进化能力已经基本桑植,种群早熟。为了避免种群的早熟,参数的实际一般遵从以下原则:

(1)种群的规模

        当群体规模太小时,很明显会出现近亲交配,产生病态基因,而且早证有效等位基因先天缺乏,即使采用较大概率的变异算子,生成具有竞争力高阶模式的可能性仍很小,况且大概率变异算子对已有模式的破坏作用极大。同时遗传算子存在随机误差(模式采样误差),妨碍小群体中有效模式的正确传播,使得种群进化不能按照模式定理产生所预测的期望数量;种群规模太大,结果难以收敛且浪费资源,稳健性下降。种群规模的一个建议值为0~100。

(2)变异概率

        当变异概率太小时,种群的多样性下降太快,容易导致有效基因的迅速丢失且不容易修补;当变异概率太大时,尽管种群的多样性可以得到保证,但是高阶模式被破坏的概率也随之增大。变异概率一般取0.0001~0.2。

(3)交配概率

        交配是生成新种群最重要的手段。与变异概率类似,交配概率太大容易破坏已有的有利模式,随机性增大,容易错失最优个体;交配概率太小不能有效更新种群。交配概率一般取0.4~0.99。

(4)进化代数

        进化代数太小,算法不容易收敛,种群还没有成熟;代数太大,算法已经熟练或者种群过于早熟不可能再收敛,继续进化没有意义,只会增加时间开支和资源浪费。进化代数一般取100~500。

(5)种群初始化

        初始种群的生成是随机的。在初始种群的赋予之前, 尽量进行一个大概的区间估计,以免初始种群分布在原理全局最优解得编码空间,导致遗传算法的搜索范围受到限制,同时也为算法减轻负担。

适应度函数的调整

(1)在遗传算法运行的初始阶段

        群体中可能会有少数几个个体的适应度相对其他个体来说非常高。若按照常用的比例选择算子确定个体的遗传数量时,则这几个相对较好的个体将在下一代群体中占有很高的比例,在极端情况下或当群体规模较小时,新的群体甚至完全由这样的少数几个个体组成。这时交配运算就起不了什么作用,因为相同的两个个体不论在何处发生交叉行为都永远不会产生新的个体。这样就会是群体的多样性降低,容易导致遗传算法发生早熟现象(或称早期收敛),是遗传算法所求的解停留在某一局部最优点上。因此,希望在遗传算法运行的初始阶段,算法能够对一些适应度较高的个体进行控制,降低其适应度与其他个体适应度之间的差异程度,从而限制其复制数量,以维护群体的多样性。

(2)在遗传算法运行的后期阶段

        群体中所有个体的平均适应度可能会接近于群体中最佳个体的适应度。也就是说,大部分个体的适应度和最佳个体的适应度差异不大,它们之间无竞争力,都会有以相接近的概率被遗传到下一代的可能性,从而使得进化过程无竞争性可言,只是一种随机的选择过程。这将导致无法对某些重点区域进行重点搜索,从而影响遗传算法的运行效率。因此,希望在遗传算法运行的后期阶段,算法能够对个体的适应度进行适当的放大,扩大最佳个体适应度与其他个体适应度之间的差异程度,以提高个体之间的竞争性。

相关工具箱:GA——原书P90

猜你喜欢

转载自blog.csdn.net/Zjhao666/article/details/81532837