遗传算法GA原理详解及实例应用 附Python代码

遗传算法GA

遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。

生物在自然界中的生存繁衍,显示了其对自然环境的优异的自适应能力。遗传算法所借鉴的生物学基础就是生物的进化和遗传。

生物在其延续生存的过程中,逐渐适应其生存环境,使得其品质不断得到改良,这种生命现象称为进化(Evolution)。生物的进化是以集团的形式共同进行的,这样的一个团体称为群体(Population),组成群体的单个生物称为个体(Individual),每个个体对其生存环境都有不同的适应能力,这种适应能力称为个体的适应度(Fitness)。按照达尔文的讲化论,那些具有较强适应环境变化能力的生物个体具有更高的生存能力容易存活下来,并有较多的机会产生后代;相反,具有较低生存能力的个体则被淘汰,或者产生后代的机会越来越少,直至消亡。---->自然选择,适者生存

生物的遗传和变异

生物从其亲代继承特性或性状,这种生命现象就称为遗传(Heredity)。控制生物遗传的物质单元称为基因(Gene),它是有遗传效应的DNA片段。

  • 细胞在分裂时,遗传物质DNA通过复制(Reproduction)而转移到新产生的细胞中,新细胞就继承了旧细胞的基因。

  • 有性生物在繁殖下一代时,两个同源染色体之间遗过**交叉(Crossover)**而重组。

  • 在进行复制时,可能以很小的概率产生某些差错,从而使DNA发生某种变异(Mutation),产生出新的染色体。

生物进化的本质:染色体的改变和改进===>生物进化过程本质是一种优化过程

在这里插入图片描述

遗传算法的基本思想

遗传算法是根据问题的目标函数构造一个适值函数(Fitness Function),对一个由多个解(每个解对应一个染色体)构成的种群进行评估、遗传运算、选择,经多代繁殖,获得适应值最好的个体作为问题的最优解。具体如下:

  1. 产生一个初始种群
  2. 根据问题的目标函数构造Fitness Function 适值函数
  3. 根据适应值的好坏不断选择和繁殖
  4. 若干代后得到适应值最好的个体即为最优解

遗传算法的构成要素

  • 种群和种群大小

    -种群由染色体构成,每个个体就是一个染色体,每个染色体对应着问题的一个解。一般设为100-1000

  • 编码方法

    正确的对染色体进行编码来表示问题的解释遗传算法的基础工作,也是最重要的工作 一般是二进制编码、有意义的实数、符号等等

  • 遗传算子

    • 包括交叉变异,是遗传算法的精髓

    • 双亲染色体是否进行交叉由交叉率进行控制。交叉率为各代中交叉产生的后代数与种群中个体数的比

    • 染色体是否进行变异由变异率来进行控制。变异率为种群中变异基因数在总基因数中的百分比

      变异率的选择很重要,太大会将上一代的最优解杀死

  • 选择策略

    • 选择策略是从当前种群中选择适应值高的个体以生成交配池的过程。使用最多的是正比选择策略

      适应值大=>生存至下一代的概率更大

  • 停止准则

    一般为最大迭代次数为停止准则

基本遗传算法的运算过程

  1. 初始种群的产生

  2. 编码

    将实际问题转化为计算机能够“看懂”的代码。(比如二进制码) ==>编码方法

  3. 选择(复制):

    根据各个个体的适应度,按照一定的规则或方法,从第t代群体P(t) 中选择出一些优良的个体遗传到下一代群体**P(t+1)**中; ==> 筛选方法

  4. 交叉:

    将群体P(t)内的各个个体随机搭配成对,对每一对个体,以交叉概率交换它们之间的部分染色体;

  5. 变异:

    对群体P(t)中的每一个个体,以变异概率改变某一个或某一些基因座上的基因值为其他基因值。

  6. 检验:

    是否已达到要求或达到遗传代数。

  7. 结束:

    达到目标要求或达到遗传代数。

在这里插入图片描述

编码

编码是应用遗传算法时要解决的首要问题,也是设计遗传算法的一个关键步骤。编码方法在很大程度上决定了如何进行群体的遗传进化运算以及遗传进化运算的效率。

初始种群:基本遗传算法(SGA)采用随机方法生成若干个个体的集合,该集合称为初始种群。初始种群中个体的数量称为种群规模。

  • 二进制编码方法 [最常见]

    • 最大最小值
    • 背包问题
    • 指派问题
  • 浮点数编码方法

  • 符号编码方法

    • 旅行商问题TP

      约束问题:每个城市在一次路线只能经过一次

二进制编码

优点:

  • 编码、解码操作简单易行;
  • 交叉、变异等遗传操作便于实现;
  • 符合最小字符集编码原则;
  • 便于利用模式定理对算法进行理论分析。

缺点:

  • 对于一些连续函数的优化问题,由于其随机性使得其局部搜索能力较差。如对于一些高精度的问题,当解迫近于最优解后,由于其变异后表现型变化很大,不连续,所以会远离最优解,达不到稳定。
适应度函数

适应度函数用于评价个体的适应度。===>适应度越高,越接近最优解。

最优化问题可分为两大类,一类为求目标函数的全局最大值,另一类为求目标函数的全局最小值。由目标函数值 f(x) 到搜索空间中对应个体的适应度函数值F(x)的转换,对于求最大值的问题,作下述转换:

在这里插入图片描述

初始群体选取

初始群体中的个体是随机产生的。

方法:

​ a)根据问题固有知识,设法把握最优解所占空间在整个问题空间中的分布范围,然后,在此分布范围内设定初始群体。

​ b)先随机生成一定数目的个体,然后从中挑出最好的个体加到初始群体中。这种过程不断迭代,直到初始群体中个体数达到了预先确定的规模。

选择

从群体中选择优胜的个体,淘汰劣质个体的操作。选择的目的是把优化的个体(或解)直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代。选择操作是建立在群体中个体的适应度评估基础上的。

常用选择算子:

  • 轮盘赌选择法[最常用]

  • 适应度比例方法

  • 随机遍历抽样法

  • 局部选择法

轮盘赌选择法

想象有一个轮盘,现在我们将它分割成 m 个部分,这里的 m 代表我们总体中染色体的个数。每条染色体在轮盘上占有的区域面积将根据适应度分数成比例表达出来。

比如有如下四个染色体及其适应度信息:

在这里插入图片描述

基于上图中的值,我们建立如下「轮盘」。

在这里插入图片描述

轮盘赌选择又称比例选择算子,其基本思想是:各个个体被选中的概率与其适应度函数值大小成正比。

设群体大小为N,个体xi 的适应度为 f(xi),则个体xi的选择概率为:

在这里插入图片描述

轮盘赌选择法模拟:

  1. 在[0, 1]内产生一个均匀分布的随机数r。
  2. r≤q1,则染色体x1被选中。
  3. qk-1<r≤qk(2≤k≤N), 则染色体xk被选中。
  4. 其中的qi称为染色体xi (i=1, 2, …, n)的积累概率

在这里插入图片描述

简单的例子:

四个染色体二进制编码: s 1 = 13 ( 01101 ) , s 2 = 24 ( 11000 ) , s 3 = 8 ( 01000 ) , s 4 = 19 ( 10011 ) s_1= 13 (01101), s_2= 24 (11000), s_3= 8 (01000),s_4= 19 (10011) s1=13(01101)s2=24(11000)s3=8(01000)s4=19(10011)

假定适应度为 f ( s ) = s 2 f(s)=s^2 f(s)=s2 ,则 f ( s 1 ) = 1 3 2 = 169 , f

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值