智能算法---遗传算法介绍

智能算法是启发式的求最优化的算法。它是一门边缘交叉学科,是生物、数学等多学科的完美融合。现在的智能算法很多,不同的智能算法之间也相互借鉴,不断融合。这里先介绍遗传算法。

在1975年,Michigan大学的教授J.Holland提出了遗传算法概念。遗传算法是模拟达尔文生物进化论的自然选择和孟德尔遗传学机理的生物进化过程的计算模型,是通过模拟自然进化过程搜索最优解的算法。

用网上看到的一个“袋鼠跳”的方式解释为:

有很多袋鼠,它们被降落到喜玛拉雅山脉的任意地方。这些袋鼠并不知道它们的任务是寻找珠穆朗玛峰而在海拔低的地方有一种无色无味的毒气,海拔越高毒气越稀薄。这些袋鼠并不知道它们的任务是寻找珠穆朗玛峰。而且可怜的袋鼠们对此全然不觉,还是习惯于活蹦乱跳。于是,不断有袋鼠死于海拔较低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有机会生儿育女。经过许多年,这些袋鼠们竟然都不自觉地聚拢到了一个个的山峰上,可是在所有的袋鼠中,只有聚拢到珠穆朗玛峰的袋鼠被带回了美丽的澳洲。

下面介绍基本的遗传算法。在遗传算法过程中,主要由编解码、个体适应度评估和遗传运算几个部分组成,具体几个步骤如下:

  1. 编码:遗传算法编码包括浮点编码和二进制编码。一般采用二进制编码,因为二进制编码更符合计算机处理信息的原理,也能更好的对染色体进行遗传、编译和突变等操作。
  2. 解码:解码的目的是为了将不直观的二进制还原成十进制。如一个体二进制为 bkbk1bk2...b3b2b1 ,则对应的解码公式就为:
    x=L+(i=1kbi2i1)UL2k1
  3. 交配:单点或多点进行交叉操作。首先用随机数产生一个或多个交配点位置,然后两个个体在交配点位置互换部分编码,形成两个子个体。(产生新值的方式1。)
  4. 突变:为了避免在算法迭代后期出现种群过早收敛,对于二进制的基因码组成的个体种群,实行基因码的小几率翻转,对于二进制编码即是0突变成1,1突变成0。(产生新值的方式2。)
  5. 倒位:出了上面两种产生新值方法外,对于复杂问题可能还会用到“倒位操作”。即指一个染色体某区段正常排列顺序发生180度的颠倒。
  6. 个体适应度评估:自然界中有适者生存的生存机制。因为遗传算法是模拟自然界的,因此也有相应的筛选机制。
  7. 复制

其伪代码如下:

BEGIN
    t = 0;     %遗传代数
    初始化P(t);       %P(t)为种群或染色体
    计算P(t)的适应度;
    while(不满足停止条件)do
        t = t+1;
        从P(t-1)中选择P(t);    %选择
        重组P(t);        %交配与变异
        计算P(t)的适应度;

END

另外,由于遗传算法是启发式算法,因此参数选择那里并没有什么标准或确定的值。只能根据一些原则和经验来选取。下面有一些参数设计的原则参考:

(1) 种群的规模
种群的规模小时,容易出现近亲交配,产生病态基因,造成有效等位基因先天缺乏,即使采用了较大概率的变异算子。种群规模太大时,又难以收敛且浪费资源,稳健性下降。
(2) 变异概率
当变异概率太小时,种群多样性下降太快,容易导致有效基因的迅速丢失且不容易修补;当变异概率太大时,尽管多样性得到保证,但高阶模式被破坏的概率也随之变大。变异概率一般取0.001–0.2。
(3) 交配概率
与变异概率类似,交配概率太大容易破坏已有的有利模式,随机性增大,容易错失最优个体;交配概率太小不能有效更新种群。交配概率一般取0.4–0.99。
(4) 进化代数
进化代数太小,算法不容易收敛;进化代数太大,会增加时间开支和资源浪费。一般取100–500。
(5) 种群初始化
初始种群的产生是随机的。在初始种群的赋予之前,尽量进行一个大概的区间估计,以免初始种群分布在远离全局最优的编码空间,导致遗传算法的搜索范围受到限制;同时为算法减轻负担。

    原文作者:遗传算法
    原文地址: https://blog.csdn.net/wang_Number_1/article/details/52460615
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞