导航:首页 > 源码编译 > 遗传算法解码

遗传算法解码

发布时间:2023-06-16 22:32:20

‘壹’ 遗传算法解码问题, 解码是只针对二进制编码还是说所有的遗传算法都得解码呢。解码到底是个什么过程。

应该说所有的遗传算法都得编码、解码,遗传算法是模拟生物遗传和进化过程,交叉是遗传算法的核心操作。交叉过程就是二进制数据之间的运算操作,例如;与,或,异或……编码目的是实现从表现型到基因型的映射,便于遗传操作;然后通过适应度函数选择合适下一代,依次迭代,直到达到合适子代。此时所求的子代还是二进制,因此必须再通过解码将子代映射到表现型。

‘贰’ 什么是遗传算法

遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(indivial)组成。每个个体实际上是染色体(chromosome)带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。因此,在一开始需要实现从表现型到基因型的映射即编码工作。由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编码,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择(selection)个体,并借助于自然遗传学的遗传算子(genetic operators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。

‘叁’ 遗传算法是什么

遗传算法(Genetic Algorithm)是一类借鉴生物界的进化规律(适者生存,优胜劣汰遗传机制)演化而来的随机化搜索方法。
遗传算法(Genetic Algorithms简称GA)是由美国Michigan大学的John Holland教授于20世纪60年代末创建的。它来源于达尔文的进化论和孟德尔、摩根的遗传学理论,通过模拟生物进化的机制来构造人工系统。遗传算法作为一种全局优化方法,提供了一种求解复杂系统优化问题的通用框架,它不依赖于问题的具体领域,对优化函数的要求很低并且对不同种类的问题具有很强的鲁棒性,所以广泛应用于计算机科学、工程技术和社会科学等领域。John Holland教授通过模拟生物进化过程设计了最初的遗传算法,我们称之为标准遗传算法。
标准遗传算法流程如下:
1)初始化遗传算法的群体,包括初始种群的产生以及对个体的编码。
2)计算种群中每个个体的适应度,个体的适应度反映了其优劣程度。
3)通过选择操作选出一些个体,这些个体就是母代个体,用来繁殖子代。
4)选出的母代个体两两配对,按照一定的交叉概率来进行交叉,产生子代个体。
5)按照一定的变异概率,对产生的子代个体进行变异操作。
6)将完成交叉、变异操作的子代个体,替代种群中某些个体,达到更新种群的目的。
7)再次计算种群的适应度,找出当前的最优个体。
8)判断是否满足终止条件,不满足则返回第3)步继续迭代,满足则退出迭代过程,第7)步中得到的当前最优个体,通过解码,就作为本次算法的近似最优解。

具体你可以到网络文库去搜索遗传算法相关的论文,很多的。
你也可以参考网络里对遗传算法的介绍。

‘肆’ 遗传算法<sup>[1,]</sup>

遗传算法,又称基因算法(Genetic Algorithm,简称GA),也是一种启发式蒙特卡洛优化算法。遗传算法最早是由Holland(1975)提出,它模拟了生物适者生存、优胜劣汰的进化过程,具有不依赖于初始模型的选择、不容易陷入局部极小、在反演过程中不用计算偏导数矩阵等优点。遗传算法最早由Stoffa和Sen(1991)用于地震波的一维反演,之后在地球物理资料的非线性反演中得到广泛的应用。GA算法对模型群体进行追踪、搜索,即模型状态通过模型群体传送,具有比模拟退火法更大、更复杂的“记忆”,潜力更大。

遗传算法在反演中的基本思路和过程是:

(1)将生物体看成模型,模型参数看成染色体,有多少个模型的参数就有多少个染色体。对每个模型的参数(染色体)用二进制进行编码,这个编码就是基因。

(2)随机生成一个模型群体(相当于生物的种群),然后在模型群体中进行繁殖,通过母本的选择、交换和变异等遗传操作产生下一代,然后保留较好基因,淘汰较差基因。

(3)通过一代一代的繁殖优胜劣汰的进化过程,最后所剩下的种群基本上都是最优的基因,种群趋于一致。所谓群体“一致”,即群体目标函数的方差或标准差很小,或者群体目标函数的均值接近于极值(可能是极大值或极小值),从而获得非线性反演问题所对应的最优解或近似最优解。

下面以一个实例来简述遗传算法的基本过程。

[例1]设m是正整数,且0≤m≤127,求方程φ(m)=m2的极大值。

这个例子极为简单,只有一个模型参数,因此只有一条染色体,目标函数的极值是极大值(此例子来自阮百尧课件)。遗传算法通过以下7个步骤来实现:

(1)模型参数二进制编码。

每个模型参数就是一条染色体,把十进制的模型参数表示为二进制,这就是基因。首先确定二进制码的长度(基因的长度):

2N=[mmax(i)-mmin(i)]/Δm(i) (8.20)

其中:N为第i条染色体基因的长度(也就是第i个模型参数的二进制码位数);[mmin(i),mmax(i)]为第i个模型参数的取值范围;Δm(i)为第i个模型参数的分辨率。这样就把模型参数离散化了,它只能按Δm(i)的整数倍变化。基因的长度按下式计算:

地球物理反演教程

其中:c为实数;N为基因长度,是整数;int[ ]为取整函数。上式表示如果c不是整数,那么基因长度N就是对c取整后加1,这样保证最小分辨率。

基因的编码按下式进行:

地球物理反演教程

其中:式(8.22)是编码公式;k为基因编码的十进制数,是整数;int[ ]为取整函数。把k转化为二进制就是基因的编码。解码是按照式(8.23)进行的。首先把一个基因的二进制编码转化为十进制数k,然后按式(8.23)可以计算出第i个模型参数m(i)的十进制值。

例如:电阻率参数ρ(1),它的变化范围为10~5000Ω·m,分辨率为2Ω·m,设当前参数ρ(1)=133Ω·m,按式(8.21)计算得

c=11.28482,N=12

所以二进制基因长度为13位。

利用式(8.22)计算基因编码k的十进制数:

k=int[(133-10)/2]=61

把它转化为二进制数为:000000111101。所以ρ(1)=133 的二进制基因编码为:000000111101。

解码过程就是把二进制基因编码变为十进制数k后用式(8.23)计算:

ρ(1)=10+61×2=132(Ω·m)

注意:基因编码并不是直接把电阻率值变为二进制。此外,133这个值在基因里不会出现,因为分辨率是2,所以表示为最接近的132。

对于[例1]问题来说,选分辨率为1,0~127用二进制编码需7位。

(2)产生初始模型种群。

生物繁殖进化需要一定数量的生物体种群,因此遗传算法开始时需要一定数量的初始模型。为保证基因的多样性,随机产生大量的初始模型作为初始种群,按照上面的编码方式进行编码。个体在模型空间中应分布均匀,最好是模型空间各代表区域均有成员。初始模型群体大,有利于搜索,但太大会增加计算量。

为保证算法收敛,在初始模型群体中,有时候应增加各位都为0和都为1的成员。遗传算法就是在这个初始模型种群的基础上进行繁殖,进化求解的。

对于[例1]问题来说,模型空间是0~127个数字,这样初始种群最多具有128个个体。为了简单,随机选择4个个体作为初始种群。初始种群的编码、目标函数值见表8.1。

表8.1 初始种群编码表

(3)模型选择。

为了生成新一代模型,需要选择较优的个体进行配对。生物进化按照自然选择、优胜劣汰的准则进行。对应地,遗传算法按照一定的准则来选择母本(两个),然后进行配对繁殖下一代模型,这个选择称为模型选择。模型配对最基本的方法是随机采样,用各模型的目标函数值对所有模型目标函数的平均值的比值定义繁殖概率,即

地球物理反演教程

其中:p(mi)为繁殖概率;φ(mi)为第i个模型的目标函数;φAVG为目标函数的平均值。对于极小化问题来说,规定目标函数值高于平均值的不传代;对于极大化问题来说,反之即可。

就[例1]来说,要求目标函数取极大值,所以规定目标函数小于平均值的模型不传代,大于它的可以传代。对第一代,为了防止基因丢失,可先不舍去繁殖概率小的模型,让它与概率大的模型配对。如:本例中70与56配对,101与15配对产生子代,见表8.2。

表8.2 基因交换表

(4)基因交换。

将配对的两个亲本模型的部分染色体相互交换,其中交换点可随机选择,形成两个新的子代(见表8.2)。两个染色体遗传基因的交换过程是遗传算法的“繁殖”过程,是母本的重组过程。

为了使染色体的基因交换比较彻底,Stoffa等人提出了一个交换概率px来控制选择操作的效果。如果px的值较小,那么交换点的位置就比较靠低位,这时的交换操作基本是低位交换,交换前后模型的染色体变化不是太大。如果px的值较大,那么交换点的位置就比较靠高位,此时的交换操作可以在较大的染色体空间进行,交换前后模型数值变化可以很大。

在[例1]中:15、101和56、70作为母本通过交换繁殖出子代5、6、111、120。所选择的基因交换位置见表8.2。有下划线的,是要交换的基因位置。

(5)更新。

母本模型和子本模型如何选择保留一定数量作为新的母本,就是模型更新。不同的策略会导致不同的结果。一般而言,若产生的新一代模型较好,则选择新一代模型而淘汰上一代模型。否则,则必须根据一定的更新概率pu来选择上一代模型来取代新一代中某些较劣的模型。

经过更新以后,繁殖时对子代再进行优胜劣汰的选择。对于极大值问题,大于目标函数平均值的子代可以繁殖,小于目标函数平均值的子代不能繁殖。由于新的种群能繁殖的个体数量减小了,所以要多繁殖几次,维持种群个体的数量保持平衡。

在[例1]中,子代较好,所以完全淘汰上一代模型,完全用子代作为新的母本。选择子代目标函数最大的两个模型进行繁殖,分别是111、120。

(6)基因变异。

在新的配对好的母本中,按一定比例随机选择模型进行变异,变异操作就是模拟自然界中的环境因素,就是按比较小的变异概率pm将染色体某位或某几位的基因发生突变(即将0变为1或将1变为0)。

变异操作的作用是使原来的模型发生某些变化,从而成为新的个体。这样可使群体增加多样性。变异操作在遗传算法中也起着至关重要的作用。实际上,由于搜索空间的性质和初始模型群体的优劣,遗传算法搜索过程中往往会出现所谓的“早熟收敛”现象,即在进化过程中早期陷入局部解而中止进化。采用合适的变异策略可提高群体中个体的多样性,从而防止这种现象的出现,有助于模型跳出局部极值。表8.3为[例1]的基因变异繁殖表。

表8.3 基因变异繁殖表

在[例1]中,用111、120分别繁殖两次,形成4个子代,维持种群数量平衡。随机选择120进行变异,变异的位数也是随机的。这里把它的第2位进行变异,即从1变为0,繁殖后形成子代为:70、110、121、127。可以看出新的子代比初始种群要好得多,其中甚至已经出现了最优解。如果对于地球物理的极小值问题,我们可以预先设置一个拟合精度,只要在种群中出现一个达到拟合精度的模型就可以终止反演了。

(7)收敛。

重复(3)~(6)的步骤,模型群体经多次选择、交换、更新、变异后,种群个体数量大小不变,模型目标函数平均值趋于稳定,最后聚集在模型空间中一个小范围内,则找到了全局极值对应的解,使目标函数最大或最小的模型就是全局最优模型。

对于具有多解性的地球物理反演问题来说,通过这一步有可能找到满足拟合精度的多个模型,对于实际反演解释、推断具有较高的指导意义。

遗传算法中的各种概率包括交换概率px、变异概率pm以及更新概率pu,这些参数的选择与设定目前尚无统一的理论指导,多数都视具体问题而定。Stoffa等(1991)的研究表明,适中的交换概率(px≈0.6)、较小的变异概率(pm≈0.01)和较大的更新概率(pu≈0.9),遗传算法的性能较优。

与模拟退火反算法相同,遗传算法与传统的线性反演方法相比,该方法具有:不依赖初始模型的选择、能寻找全局最小点而不陷入局部极小、在反演过程中不用计算雅克比偏导数矩阵等优点。另外,遗传算法具有并行性,随着并行计算和集群式计算机技术的发展,该算法将会得到越来越广泛的研究与应用。

但是遗传算法作为类蒙特卡洛算法同样需要进行大量的正演计算,种群个体数量越大,繁衍代数越多,则计算量越大。所以和前面的最小二乘法相比,速度不是它的优势。

‘伍’ 基本遗传算法介绍

遗传算法是群智能优化计算中应用最为广泛、最为成功、最具代表性的智能优化方法。它是以达尔文的生物进化论和孟德尔的遗传变异理论为基础,模拟生物进化过程和机制,产生的一种群体导向随机搜索技术和方法。

遗传算法的基本思想:首先根据待求解优化问题的目标函数构造一个适应度函数。然后,按照一定的规则生成经过基因编码的初始群体,对群体进行评价、遗传运算(交叉和变异)、选择等操作。经过多次进化,获得适应度最高的一个或几个最优个体作为问题的最优解。

编码是对问题的可行解的遗传表示,是影响算法执行效率的关键因素的之一。遗传算法中,一个解 称为个体或染色体(chromosome),染色体由被称为基因(gene)的离散单元组成,每个基因控制颜色体的一个或多个特性,通常采用固定长度的0-1二进制编码,每个解对应一个唯一的二进制编码串编码空间中的二进制位串称为基因型(genotype)。而实际所表示问题的解空间的对应点称为表现型(phenotype)。

种群由个体构成,每个个体的染色体对应优化问题的一个初始解。

适应度函数是评价种群中个体对环境适应能力的唯一确定性指标,体现出“适者生存,优胜劣汰”这一自然选择原则。

遗传算法在每次迭代过程中,在父代种群中采用某种选择策略选择出指定数目的哥特体提进行遗传操作。最常用的选择策略是正比选择(proportional selection)策略。

在 交叉算子中,通常由两个被称为父代(parent)的染色体组合,形成新的染色体,称为子代(offspring)。父代是在种群中根据个体适应度进行选择,因此适应度较高的染色体的基因更有可能被遗传到下一代 。通过在迭代过程中不断地应用交叉算子,使优良个体的基因得以在种群中频繁出现,最终使得整个种群收敛到一个最优解。

在染色体交叉之后产生的子代个体,其基因位可能以很小的概率发生转变,这个过程称为变异。变异是为了增强种群的多样性,将搜索跳出局部最优解。

遗传算法的停止准则一般采用设定最大迭代次数或适应值函数评估次数,也可以是规定的搜索精度。

已Holland的基本GA为例介绍算法等具体实现,具体的执行过程描述如下:

Step 1: 初始化 。随机生成含有 个个体的初始种群 ,每个个体经过编码对应着待求解优化问题的一个初始解。

Step 2: 计算适应值 。个体 ,由指定的适应度函数评价其适应环境的能力。不同的问题,适应度函数的构造方式也不同。对函数优化问题,通常取目标函数作为适应度函数。

Step 3: 选择 。根据某种策略从当前种群中选择出 个个体作为重新繁殖的下一代群体。选择的依据通常是个体的适应度的高低,适应度高的个体相比适应度低的个体为下一代贡献一个或多个后代的概率更大。选择过程提现了达尔文“适者生存”原则。

Step 4: 遗传操作 。在选出的 个个体中,以事件给定的杂交概率 任意选择出两个个体进行 交叉运算 ,产生两个新的个体,重复此过程直到所有要求杂交的个体杂交完毕。根据预先设定的变异概率 在 个个体中选择出若干个体,按一定的策略对选出的个体进行 变异运算

Step 5: 检验算法等停止条件 。若满足,则停止算法的执行,将最优个体的染色体进行解码得到所需要的最优解,否则转到 Step 2 继续进行迭代过程。

‘陆’ 遗传算法--GA

        遗传算法(GA)属于 人工智能启发式算法 ,启发式算法的目标就是 寻找原始问题的最优解 ,该算法的定义为

         人类通过直观常识和生活经验,设计出一种以搜索最优解为目的,通过仿真大自然规律的算法,该算法在可以在接受的花销(计算时间和存储空间)范围内找到问题实例的一个可行解,且该可行解和真实最优解的误差一般不可以被估计

        当下主要有的启发式算法包括 遗传算法、退火法,蚁群算法、人工神经网络等 ,这篇文章主要介绍遗传算法

        遗传算法的基本原理是模拟达尔文进化论 "物竞天择,适者生存" 的自然法则,其核心思想为

(1)将原始问题的参数,抽象为基因编码

(2)将原始问题的可行解,抽象为基因排列的染色体组合

(3)将原始问题的解集规模,抽象为一定数量染色体组成的种群

(4)寻找可行解的过程,抽象为种群的进化过程(染色体选择、交叉、变异等)

(5)比较可行解的优劣,抽象为量化比较不同种群对当前环境的适应程度

(6)逼近最优解的过程,抽象为淘汰适应度差的种群,保留适应度高的种群进行下一次进化

(7)问题的最优解,抽象为经过多次进化后,最终生存下来的精英种群

        理论上,通过有限次种群进化,生存下来的种群都是 精英染色体 ,是最适合当前环境条件的种群,也就可以无限逼近原始问题的最优解

相关生物学术语:

    为了大家更好了解遗传算法,在此之前先简单介绍一下相关生物学术语,大家了解一下即可。

基因型(genotype):性状染色体的内部表现;

表现型(phenotype):染色体决定的性状的外部表现,或者说,根据基因型形成的个体的外部表现;

进化(evolution):种群逐渐适应生存环境,品质不断得到改良。生物的进化是以种群的形式进行的。

适应度(fitness):度量某个物种对于生存环境的适应程度。

选择(selection):以一定的概率从种群中选择若干个个体。一般,选择过程是一种基于适应度的优胜劣汰的过程。

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

交叉(crossover):两个染色体的某一相同位置处DNA被切断,前后两串分别交叉组合形成两个新的染色体。也称基因重组或杂交;

变异(mutation):复制时可能(很小的概率)产生某些复制差错,变异产生新的染色体,表现出新的性状。

编码(coding):DNA中遗传信息在一个长链上按一定的模式排列。遗传编码可看作从表现型到基因型的映射。

解码(decoding):基因型到表现型的映射。

个体(indivial):指染色体带有特征的实体;

种群(population):个体的集合,该集合内个体数称为种群

大体实现过程

遗传算法中每一条染色体,对应着遗传算法的一个解决方案,一般我们用适应性函数(fitness function)来衡量这个解决方案的优劣。所以从一个基因组到其解的适应度形成一个映射。 遗传算法的实现过程实际上就像自然界的进化过程那样。

基本遗传算法概述

    1.[开始]生成n个染色体的随机群体(适合该问题的解决方案)

    2.[适应度]评估群体中每个染色体x的适应度f(x)

    3.[新种群]通过重复以下来创建新种群直到新种群完成的步骤

        3.1 [选择]根据种群的适合度选择两个亲本染色体(更好的适应性,更大的选择机会)

        3.2 [交叉]以交叉概率跨越父母形成新的后代(儿童) )。如果没有进行交叉,后代就是父母的确切副本。

        3.3 [突变]突变概率突变每个基因座(染色体中的位置)的新后代。

    4.[接受]在新种群中放置新后代[替换]使用新生成的种群进一步运行算法

    5.[测试]如果满足结束条件,则停止并返回当前种群中的最佳解

    6。[循环]转到步骤2

影响GA的因素

    从遗传算法概述可以看出,交叉和变异是遗传算法中最重要的部分。性能主要受这两个因素的影响。在我们解释有关交叉和变异的更多信息之前,我们将给出一些有关染色体的信息。

染色体编码

染色体应该以某种方式包含它所代表的解决方案的信息。最常用的编码方式是二进制字符串。然后染色体看起来像这样:

每个染色体由二进制字符串表示。字符串中的每个位都可以表示解决方案的一些特征。另一种可能性是整个字符串可以表示一个数字 - 这已在基本的GA小程序中使用。当然,还有许多其他的编码方式。编码主要取决于解决的问题。例如,可以直接编码整数或实数,有时对某些排列等进行编码很有用。

染色体交叉

在我们确定了将使用的编码之后,我们可以继续进行交叉操作。 Crossover对来自亲本染色体的选定基因进行操作并产生新的后代。最简单的方法是随机选择一些交叉点,并在此点之前从第一个父项复制所有内容,然后在交叉点之后复制另一个父交叉点之后的所有内容。交叉可以说明如下:( |是交叉点):

还有其他方法可以进行交叉,例如我们可以选择更多的交叉点。交叉可能非常复杂,主要取决于染色体的编码。针对特定问题进行的特定交叉可以改善遗传算法的性能。

4.染色体突变

在执行交叉之后,发生突变。突变旨在防止群体中的所有解决方案落入解决问题的局部最优中。突变操作随机改变由交叉引起的后代。在二进制编码的情况下,我们可以将一些随机选择的位从1切换到0或从0切换到1.突变可以如下所示:

突变(以及交叉)技术主要取决于染色体的编码。例如,当我们编码排列时,可以将突变作为两个基因的交换来进行。

GA的参数

    1.交叉和突变概率

    GA有两个基本参数 - 交叉概率和变异概率。

     交叉概率 :交叉的频率。如果没有交叉,后代就是父母的精确副本。如果存在交叉,则后代由父母染色体的部分组成。如果交叉概率为100%,那么所有后代都是由交叉产生的。如果它是0%,那么全新一代都是从旧种群的染色体的精确拷贝制成的(但这并不意味着新一代是相同的!)。交叉是希望新染色体将包含旧染色体的良好部分,因此新染色体将更好。但是,将旧人口的一部分留给下一代是好的。

     突变概率 :染色体部分突变的频率。如果没有突变,则在交叉(或直接复制)后立即生成后代而不进行任何更改。如果进行突变,则改变染色体的一个或多个部分。如果突变概率为100%,则整个染色体发生变化,如果是0%,则没有变化。突变通常会阻止GA陷入局部极端。突变不应该经常发生,因为GA实际上会改变为随机搜索。

    2.其他参数

     种群规模 :种群中有多少染色体(一代)。如果染色体太少,GA几乎没有可能进行交叉,只探索了一小部分搜索空间。另一方面,如果染色体太多,GA会减慢。研究表明,经过一定的限制(主要取决于编码和问题),使用非常大的种群是没有用的,因为它不能比中等规模的种群更快地解决问题。

     3      选择

正如您从GA概述中已经知道的那样,从群体中选择染色体作为交叉的父母。问题是如何选择这些染色体。根据达尔文的进化论,最好的进化能够创造出新的后代。选择最佳染色体的方法有很多种。例如轮盘赌选择,Boltzman选择,锦标赛选择,等级选择,稳态选择和其他一些选择。

1.轮盘赌选择

父母根据他们的健康状况选择。染色体越好,它们被选择的机会就越多。想象一下轮盘赌轮,人口中的所有染色体都放在那里。轮盘中截面的大小与每条染色体的适应度函数的值成比例 - 值越大,截面越大。有关示例,请参见下图。

轮盘赌中放入一块大理石,并选择停止的染色体。显然,具有较大适应值的染色体将被选择更多次。

该过程可以通过以下算法来描述。

[Sum]计算总体中所有染色体拟合度的总和 - 总和S.

[Select]从区间(0,S)-r生成随机数。

[循环]遍历总体并从0 - 总和中求和。当总和s大于r时,停止并返回您所在的染色体。当然,对于每个群体,步骤1仅执行一次。

2.排名选择

当健身值之间存在很大差异时,先前的选择类型会出现问题。例如,如果最佳染色体适应度是所有拟合度总和的90%,那么其他染色体将很少被选择的机会。等级选择首先对群体进行排序,然后每个染色体接收由该等级确定的适合度值。最差的将是健身1,第二个最差的2等等,最好的将具有适应度N(人口中的染色体数量)。您可以在下面的图片中看到,在更改适应性与排名确定的数字后情况如何变化。

排名前的情况(适合度图)

排名后的情况(订单号图)

现在所有染色体都有机会被选中。然而,这种方法会导致收敛速度变慢,因为最好的染色体与其他染色体的差别不大。

3.稳态选择

这不是选择父母的特定方法。这种选择新种群的主要思想是染色体的很大一部分可以存活到下一代。稳态选择GA以下列方式工作。在每一代中,选择一些好的(具有更高适应性)染色体来创建新的后代。然后去除一些不好的(具有较低适合度)染色体并将新的后代放置在它们的位置。其余人口幸存下来。

4.精英

精英主义的想法已经被引入。当通过交叉和变异创建新的种群时,我们有很大的机会,我们将失去最好的染色体。精英主义是首先将最佳染色体(或少数最佳染色体)复制到新种群的方法的名称。其余人口以上述方式构建。精英主义可以迅速提高GA的性能,因为它可以防止丢失最佳找到的解决方案。

交叉(Crossover)和突变 (Mutation)

交叉和变异是GA的两个基本运算符。 GA的表现非常依赖于它们。运算符的类型和实现取决于编码以及问题。有多种方法可以执行交叉和变异。在本章中,我们将简要介绍一些如何执行多个编码的示例和建议。

1.二进制编码

交叉

单点交叉 - 选择一个交叉点,从第一个父项复制从染色体开始到交叉点的二进制字符串,其余从另一个父项复制

选择两点交叉 - 两个交叉点,从第一个父节点复制从染色体开始到第一个交叉点的二进制字符串,从第一个父节点复制从第一个交叉点到第二个交叉点的部分,其余的是再次从第一个父级复制

均匀交叉 - 从第一个父项或第二个父项中随机复制位

算术交叉 - 执行一些算术运算以产生新的后代

突变

位反转 - 选择的位被反转

2.置换编码

交叉

单点交叉 - 选择一个交叉点,将排列从第一个父项复制到交叉点,然后扫描另一个父项,如果该数字还没有在后代中,则添加它注意:还有更多方法如何在交叉点之后产生休息

(1 2 3 4 5 6 7 8 9) + (4 5 3 6 8 9 7 2 1) = (1 2 3 4 5 6 8 9 7)

变异

顺序更改 - 选择并交换两个数字

(1 2 3 4 5 6 8 9 7) => (1 8 3 4 5 6 2 9 7)

3.值编码

交叉

可以使用来自二进制编码的所有交叉

变异

添加一个小数字(用于实数值编码) - 将一个小数字添加到(或减去)所选值

(1.29 5.68 2.86 4.11 5.55)=>(1.29 5.68 2.73 4.22 5.55)

4.树编码

交叉

树交叉 - 在父母双方中选择一个交叉点,父母在该点被分割,交换点下面的部分被交换以产生新的后代

变异

更改运算符,数字 - 选定节点已更改

补充:

疑惑点:

初始种群是啥:

利用二进制(一般)表示最终解

例如:需要求解z=x^2+y^2的最大值,x={1,5,3,8},y={5,4,0,6}

用六位二进制数表示由x,y组成的解,例如:001100 表示x=1,y=4

001100 称为一条基因序列,表示的是该问题的一种解决 方案

种群是包含多个基因序列(解决方案/个体)的集合

适应度函数是啥,有什么作用:

适应度函数可以理解成“ 游戏 规则”,如果问题较为复杂,需要自定义适应度函数,说明如何区分优秀与不优秀的个体; 如果问题比较简单,例如上述求最大值的问题,则直接用此函数式作为适应度函数即可。作用:评定个体的优劣程度,从而决定其遗传机会的大小。

怎么选择:

定义“适者生存不适者淘汰”的规则,例如:定义适应度高的被选择的概率更大

怎么交叉:

利用循环,遍历种群中的每个个体,挑选另一个体进行交叉。例如,通过遍历为基因序列A挑选出B配对,则取A的前半部分,B的后半部分,组合成新的个体(基因序列)C

如何变异:

随机挑选基因序列上的某一位置,进行0-1互换

建议 GA的参数

如果您决定实施遗传算法,本章应该为您提供一些基本建议。这些建议非常笼统。您可能希望尝试使用自己的GA来解决特定问题,因为没有一般理论可以帮助您针对任何问题调整GA参数。

建议通常是对GA的经验研究的结果,这些研究通常仅在二进制编码上进行。

交叉率

交叉率一般应高,约为80%-95%。 (但是有些结果表明,对于某些问题,交叉率约为60%是最好的。)

突变率

另一方面,突变率应该非常低。最佳利率似乎约为0.5%-1%。

人口规模

可能令人惊讶的是,非常大的人口规模通常不会改善GA的性能(从找到解决方案的速度的意义上说)。良好的人口规模约为20-30,但有时大小为50-100是最好的。一些研究还表明,最佳种群规模取决于编码字符串(染色体)的大小。这意味着如果你有32位染色体,那么人口应该高于16位染色体。

选择

可以使用基本的轮盘赌选择,但有时排名选择可以更好。查看有关选择优缺点的章节。还有一些更复杂的方法可以在GA运行期间更改选择参数。基本上,这些表现类似于模拟退火。如果您不使用其他方法来保存最佳找到的解决方案,则应确保使用精英主义。您也可以尝试稳态选择。

编码

编码取决于问题以及问题实例的大小。查看有关编码的章节以获取一些建议或查看其他资源。

交叉和变异

运算符取决于所选的编码和问题。查看有关操作员的章节以获取一些建议。您还可以查看其他网站。

搜索空间

    如果我们正在解决问题,我们通常会寻找一些最好的解决方案。所有可行解决方案的空间(所需解决方案所在的解决方案集)称为搜索空间(也称为状态空间)。搜索空间中的每个点代表一种可能的解决方案。每个可能的解决方案可以通过其对问题的值(或适应度)进行“标记”。通过GA,我们在众多可能的解决方案中寻找最佳解决方案 - 以搜索空间中的一个点为代表。然后寻找解决方案等于在搜索空间中寻找一些极值(最小值或最大值)。有时可以很好地定义搜索空间,但通常我们只知道搜索空间中的几个点。在使用遗传算法的过程中,随着进化的进行,寻找解决方案的过程会产生其他点(可能的解决方案)。

    问题是搜索可能非常复杂。人们可能不知道在哪里寻找解决方案或从哪里开始。有许多方法可用于寻找合适的解决方案,但这些方法不一定能提供最佳解决方案。这些方法中的一些是爬山,禁忌搜索,模拟退火和遗传算法。通过这些方法找到的解决方案通常被认为是很好的解决方案,因为通常不可能证明最佳方案。

NP-hard Problems

NP问题是一类无法用“传统”方式解决的问题。我们可以快速应用许多任务(多项式)算法。还存在一些无法通过算法解决的问题。有很多重要问题很难找到解决方案,但是一旦有了解决方案,就很容易检查解决方案。这一事实导致了NP完全问题。 NP代表非确定性多项式,它意味着可以“猜测”解决方案(通过一些非确定性算法),然后检查它。如果我们有一台猜测机器,我们或许可以在合理的时间内找到解决方案。为简单起见,研究NP完全问题仅限于答案可以是或否的问题。由于存在输出复杂的任务,因此引入了一类称为NP难问题的问题。这个类并不像NP完全问题那样受限。 NP问题的一个特征是,可以使用一个简单的算法,可能是第一眼看到的,可用于找到可用的解决方案。但是这种方法通常提供了许多可能的解决方案 - 只是尝试所有可能的解决方案是非常缓慢的过程(例如O(2 ^ n))。对于这些类型问题的更大的实例,这种方法根本不可用。今天没有人知道是否存在一些更快的算法来提供NP问题的确切答案。对于研究人员来说,发现这样的算法仍然是一项重大任务(也许你!:-))。今天许多人认为这种算法不存在,因此他们正在寻找替代方法。替代方法的一个例子是遗传算法。 NP问题的例子是可满足性问题,旅行商问题或背包问题。可以获得NP问题汇编。

参考:

         https://www.jianshu.com/p/ae5157c26af9

        https://www.jianshu.com/p/b36b520bd187

‘柒’ 遗传算法的基本原理

遗传算法的基本原理和方法

一、编码

编码:把一个问题的可行解从其解空间转换到遗传算法的搜索空间的转换方法。

解码(译码):遗传算法解空间向问题空间的转换。

二进制编码的缺点是汉明悬崖(Hamming Cliff),就是在某些相邻整数的二进制代码之间有很大的汉明距离,使得遗传算法的交叉和突变都难以跨越。

格雷码(Gray Code):在相邻整数之间汉明距离都为1。

(较好)有意义的积木块编码规则:所定编码应当易于生成与所求问题相关的短距和低阶的积木块;最小字符集编码规则,所定编码应采用最小字符集以使问题得到自然的表示或描述。

二进制编码比十进制编码搜索能力强,但不能保持群体稳定性。

动态参数编码(Dynamic Paremeter Coding):为了得到很高的精度,让遗传算法从很粗糙的精度开始收敛,当遗传算法找到一个区域后,就将搜索现在在这个区域,重新编码,重新启动,重复这一过程,直到达到要求的精度为止。

编码方法:

1、 二进制编码方法

缺点:存在着连续函数离散化时的映射误差。不能直接反映出所求问题的本身结构特征,不便于开发针对问题的专门知识的遗传运算算子,很难满足积木块编码原则

2、 格雷码编码滚如:连续的两个整数所对应的编码之间仅仅只有一个码位是不同的,其余码位都相同。

3、 浮点数编码方法:个体的每个基因值用某一范围内的某个浮点数来表示,个体的编码长度等于其决策变量的位数。

4、 各参数级联编码:对含有多个变量的个体进行编码的方法。通常将各个参数分别以某种编码方法进行编码,然后再将他们的编码按照一定顺序连接在一起就组成了表示全部参数的个体编码。

5、 多参数交叉编码:将各个参数中起主要作用的码位集中在一起,这样它们就不易于被遗传算子破坏掉。

评估编码的三个规范:完备性、健全性、非冗余性。

二、选择

遗传算法中的选择操作就是用来确定如何从父代群体中按某种方法选取那些个体遗传到下一代群体中的一种遗传运算,用来确定重组或交叉个体,以及被选个体将产生多少个子代个体。

常用的选择算子:

1、 轮盘赌选择(Roulette Wheel Selection):是一种回放式随机采样方法。每个个体进入下一代的概率等于它的适应度值与整个种群中个体适应度值和的比例。选择误差较大。

2、 随机竞争选择(Stochastic Tournament):每次按轮盘赌选择一对个体,然后让这两个个体进行竞争,适应度高的被选中,如此反复,直到选满为止。

3、 最佳保留选择:首先按轮盘赌选择方法执行遗传算法的选择操作,然后将当前群体中适应度最高的大宏启个体结构完整地复制到下一代群体中。

4、 无回放随机选择(也叫期望值选择Excepted Value Selection):根据每个个体在下一代群体中的生存期望来进行随机选择运算。方法如下

(1) 计算群体中每个个体在下一代群体中的生存期望数目N。

(2) 若某一个体被选中参与交叉运算,则它在下一代中的生存期望数目减去0.5,若某一个体未被选中参与交叉运算,则它绝配在下一代中的生存期望数目减去1.0。

(3) 随着选择过程的进行,若某一个体的生存期望数目小于0时,则该个体就不再有机会被选中。

5、 确定式选择:按照一种确定的方式来进行选择操作。具体操作过程如下:

(1) 计算群体中各个个体在下一代群体中的期望生存数目N。

(2) 用N的整数部分确定各个对应个体在下一代群体中的生存数目。

(3) 用N的小数部分对个体进行降序排列,顺序取前M个个体加入到下一代群体中。至此可完全确定出下一代群体中M个个体。

6、无回放余数随机选择:可确保适应度比平均适应度大的一些个体能够被遗传到下一代群体中,因而选择误差比较小。

7、均匀排序:对群体中的所有个体按期适应度大小进行排序,基于这个排序来分配各个个体被选中的概率。

8、最佳保存策略:当前群体中适应度最高的个体不参与交叉运算和变异运算,而是用它来代替掉本代群体中经过交叉、变异等操作后所产生的适应度最低的个体。

9、随机联赛选择:每次选取几个个体中适应度最高的一个个体遗传到下一代群体中。

10、排挤选择:新生成的子代将代替或排挤相似的旧父代个体,提高群体的多样性。

三、交叉

遗传算法的交叉操作,是指对两个相互配对的染色体按某种方式相互交换其部分基因,从而形成两个新的个体。

适用于二进制编码个体或浮点数编码个体的交叉算子:

1、单点交叉(One-pointCrossover):指在个体编码串中只随机设置一个交叉点,然后再该点相互交换两个配对个体的部分染色体。

2、两点交叉与多点交叉:

(1) 两点交叉(Two-pointCrossover):在个体编码串中随机设置了两个交叉点,然后再进行部分基因交换。

(2) 多点交叉(Multi-pointCrossover)

3、均匀交叉(也称一致交叉,UniformCrossover):两个配对个体的每个基因座上的基因都以相同的交叉概率进行交换,从而形成两个新个体。

4、算术交叉(ArithmeticCrossover):由两个个体的线性组合而产生出两个新的个体。该操作对象一般是由浮点数编码表示的个体。

四、变异

遗传算法中的变异运算,是指将个体染色体编码串中的某些基因座上的基因值用该基因座上的其它等位基因来替换,从而形成以给新的个体。

以下变异算子适用于二进制编码和浮点数编码的个体:

1、基本位变异(SimpleMutation):对个体编码串中以变异概率、随机指定的某一位或某几位仅因座上的值做变异运算。

2、均匀变异(UniformMutation):分别用符合某一范围内均匀分布的随机数,以某一较小的概率来替换个体编码串中各个基因座上的原有基因值。(特别适用于在算法的初级运行阶段)

3、边界变异(BoundaryMutation):随机的取基因座上的两个对应边界基因值之一去替代原有基因值。特别适用于最优点位于或接近于可行解的边界时的一类问题。

4、非均匀变异:对原有的基因值做一随机扰动,以扰动后的结果作为变异后的新基因值。对每个基因座都以相同的概率进行变异运算之后,相当于整个解向量在解空间中作了一次轻微的变动。

5、高斯近似变异:进行变异操作时用符号均值为P的平均值,方差为P2的正态分布的一个随机数来替换原有的基因值。

‘捌’ 请问什么是遗传算法,并给两个例子

遗传算法(Genetic Algorithm, GA)是近几年发展起来的一种崭新的全局优化算法,它借
用了生物遗传学的观点,通过自然选择、遗传、变异等作用机制,实现各个个体的适应性
的提高。这一点体现了自然界中"物竞天择、适者生存"进化过程。1962年Holland教授首次
提出了GA算法的思想,从而吸引了大批的研究者,迅速推广到优化、搜索、机器学习等方
面,并奠定了坚实的理论基础。 用遗传算法解决问题时,首先要对待解决问题的模型结构
和参数进行编码,一般用字符串表示,这个过程就将问题符号化、离散化了。也有在连续
空间定义的GA(Genetic Algorithm in Continuous Space, GACS),暂不讨论。

一个串行运算的遗传算法(Seguential Genetic Algoritm, SGA)按如下过程进行:

(1) 对待解决问题进行编码;
(2) 随机初始化群体X(0):=(x1, x2, … xn);
(3) 对当前群体X(t)中每个个体xi计算其适应度F(xi),适应度表示了该个体的性能好
坏;
(4) 应用选择算子产生中间代Xr(t);
(5) 对Xr(t)应用其它的算子,产生新一代群体X(t+1),这些算子的目的在于扩展有限
个体的覆盖面,体现全局搜索的思想;
(6) t:=t+1;如果不满足终止条件继续(3)。
GA中最常用的算子有如下几种:
(1) 选择算子(selection/reproction): 选择算子从群体中按某一概率成对选择个
体,某个体xi被选择的概率Pi与其适应度值成正比。最通常的实现方法是轮盘赌(roulett
e wheel)模型。
(2) 交叉算子(Crossover): 交叉算子将被选中的两个个体的基因链按概率pc进行交叉
,生成两个新的个体,交叉位置是随机的。其中Pc是一个系统参数。
(3) 变异算子(Mutation): 变异算子将新个体的基因链的各位按概率pm进行变异,对
二值基因链(0,1编码)来说即是取反。
上述各种算子的实现是多种多样的,而且许多新的算子正在不断地提出,以改进GA的
某些性能。系统参数(个体数n,基因链长度l,交叉概率Pc,变异概率Pm等)对算法的收敛速度
及结果有很大的影响,应视具体问题选取不同的值。
GA的程序设计应考虑到通用性,而且要有较强的适应新的算子的能力。OOP中的类的继
承为我们提供了这一可能。
定义两个基本结构:基因(ALLELE)和个体(INDIVIDUAL),以个体的集合作为群体类TP
opulation的数据成员,而TSGA类则由群体派生出来,定义GA的基本操作。对任一个应用实
例,可以在TSGA类上派生,并定义新的操作。

TPopulation类包含两个重要过程:
FillFitness: 评价函数,对每个个体进行解码(decode)并计算出其适应度值,具体操
作在用户类中实现。
Statistic: 对当前群体进行统计,如求总适应度sumfitness、平均适应度average、最好
个体fmax、最坏个体fmin等。

TSGA类在TPopulation类的基础上派生,以GA的系统参数为构造函数的参数,它有4个
重要的成员函数:
Select: 选择算子,基本的选择策略采用轮盘赌模型(如图2)。轮盘经任意旋转停止
后指针所指向区域被选中,所以fi值大的被选中的概率就大。
Crossover: 交叉算子,以概率Pc在两基因链上的随机位置交换子串。
Mutation: 变异算子,以概率Pm对基因链上每一个基因进行随机干扰(取反)。
Generate: 产生下代,包括了评价、统计、选择、交叉、变异等全部过程,每运行一
次,产生新的一代。

SGA的结构及类定义如下(用C++编写):
[code] typedef char ALLELE; // 基因类型
typedef struct{
ALLELE *chrom;
float fitness; // fitness of Chromosome
}INDIVIDUAL; // 个体定义

class TPopulation{ // 群体类定义
public:
int size; // Size of population: n
int lchrom; // Length of chromosome: l
float sumfitness, average;

INDIVIDUAL *fmin, *fmax;
INDIVIDUAL *pop;

TPopulation(int popsize, int strlength);
~TPopulation();
inline INDIVIDUAL &Indivial(int i){ return pop[i];};
void FillFitness(); // 评价函数
virtual void Statistics(); // 统计函数
};

class TSGA : public TPopulation{ // TSGA类派生于群体类
public:
float pcross; // Probability of Crossover
float pmutation; // Probability of Mutation
int gen; // Counter of generation

TSGA(int size, int strlength, float pm=0.03, float pc=0.6):
TPopulation(size, strlength)
{gen=0; pcross=pc; pmutation=pm; } ;
virtual INDIVIDUAL& Select();
virtual void Crossover(INDIVIDUAL &parent1, INDIVIDUAL &parent2,
INDIVIDUAL &child1, INDIVIDUAL &child2);
&child1, INDIVIDUAL &child2);
virtual ALLELE Mutation(ALLELE alleleval);
virtual void Generate(); // 产生新的一代
};
用户GA类定义如下:
class TSGAfit : public TSGA{
public:
TSGAfit(int size,float pm=0.0333,float pc=0.6)
:TSGA(size,24,pm,pc){};
void print();
}; [/code]

由于GA是一个概率过程,所以每次迭代的情况是不一样的;系统参数不同,迭代情况
也不同。在实验中参数一般选取如下:个体数n=50-200,变异概率Pm=0.03, 交叉概率Pc=
0.6。变异概率太大,会导致不稳定。

参考文献
● Goldberg D E. Genetic Algorithm in Search, Optimization, and machine

Learning. Addison-Wesley, Reading, MA, 1989
● 陈根社、陈新海,"遗传算法的研究与进展",《信息与控制》,Vol.23,
NO.4, 1994, PP215-222
● Vittorio Maniezzo, "Genetic Evolution of the Topology and Weight Distri
bution of the Neural Networks", IEEE, Trans. on Neural Networks, Vol.5, NO
.1, 1994, PP39-53
● Xiaofeng Qi, Francesco Palmieri, "Theoretical Analysis of Evolutionary
Algorithms with an Infinite Population Size in Continuous Space. Part Ⅰ
l Networks, Vol.5, NO.1, 1994, PP102-119
● Xiaofeng Qi, Francesco Palmieri, "Theoretical Analysis of Evolutionary
Algorithms with an Infinite Population Size in Continuous Space. Part Ⅱ
al Networks, Vol.5, NO.1, 1994, PP102-119
● Gunter Rudolph, Convergence Analysis of Canonical Genetic Algorithms, I
EEE, Trans. on Neural Networks, Vol.5, NO.1, 1994, PP96-101
● A E Eiben, E H L Aarts, K M Van Hee. Gloable convergence of genetic alg
orithms: A Markov chain analysis. in Parallel Problem Solving from Nat
ure. H.-P.Schwefel, R.Manner, Eds. Berlin and Heidelberg: Springer, 1991
, PP4-12
● Wirt Atmar, "Notes on the Simulation of Evolution", IEEE, Trans. on Neu
ral Networks, Vol.5, NO.1, 1994, PP130-147
● Anthony V. Sebald, Jennifer Schlenzig, "Minimax Design of Neural Net Co
ntrollers for Highly Uncertain Plants", IEEE, Trans. on Neural Networks, V
ol.5, NO.1, 1994, PP73-81
● 方建安、邵世煌,"采用遗传算法自学习模型控制规则",《自动化理论、技术与应
用》,中国自动化学会 第九届青年学术年会论文集,1993, PP233-238
● 方建安、邵世煌,"采用遗传算法学习的神经网络控制器",《控制与决策》,199
3,8(3), PP208-212
● 苏素珍、土屋喜一,"使用遗传算法的迷宫学习",《机器人》,Vol.16,NO.5,199
4, PP286-289
● M.Srinivas, L.M.Patnaik, "Adaptive Probabilities of Crossover and Mutat
ion", IEEE Trans. on S.M.C, Vol.24, NO.4, 1994 of Crossover and Mutation",
IEEE Trans. on S.M.C, Vol.24, NO.4, 1994
● Daihee Park, Abraham Kandel, Gideon Langholz, "Genetic-Based New Fuzzy
Reasoning Models with Application to Fuzzy Control", IEEE Trans. S. M. C,
Vol.24, NO.1, PP39-47, 1994
● Alen Varsek, Tanja Urbancic, Bodgan Filipic, "Genetic Algorithms in Con
troller Design and Tuning", IEEE Trans. S. M. C, Vol.23, NO.5, PP1330-13
39, 1993

‘玖’ 遗传算法

参考文献: 知乎    遗传算法     编码解码知识

实现遗传算法的第一步就是明确对求解问题的编码和解码方式。对于函数优化问题,一般有两种编码方式,各具优缺点

实数编码:直接用实数表示基因,容易理解且不需要解码过程,但容易过早收敛,从而陷入局部最优

二进制编码:稳定性高,种群多样性大,但需要的存储空间大,需要解码且难以理解

对于求解函数最大值问题,我选择的是二进制编码。

以我们的目标函数 f(x) = x + 10sin(5x) + 7cos(4x), x∈[0,9] 为例。

假如设定求解的精度为小数点后4位,可以将x的解空间划分为 (9-0)×(1e+4)=90000个等分。

2^16<90000<2^17,需要17位二进制数来表示这些解。换句话说,一个解的编码就是一个17位的二进制串。

一开始,这些二进制串是随机生成的。

一个这样的二进制串代表一条染色体串,这里染色体串的长度为17。

对于任何一条这样的染色体chromosome,如何将它复原(解码)到[0,9]这个区间中的数值呢?

对于本问题,我们可以采用以下公式来解码:

decimal( ): 将二进制数转化为十进制数

一般化解码公式:

lower_bound: 函数定义域的下限

upper_bound: 函数定义域的上限

chromosome_size: 染色体的长度

通过上述公式,我们就可以成功地将二进制染色体串解码成[0,9]区间中的十进制实数解。

染色体,就是指由 DNA 组成的聚合体,DNA 上的每个基因都编码了一个独特的性状,比如,头发或者眼睛的颜色

可以将他看作是一个优化问题,它可以尝试找出某些输入,凭借这些输入我们便可以得到最佳的输出值或者是结果

遗传算法要点:

1.初始化

初始化候选全体,随机初始化

2.查找适应函数

3.选择:物竞天择,适者生存

先选择能量强的个体,然后再进行随机选择,选出适应度虽然小,但是幸存下来的个体

4.交叉:

5.变异:根据需要进行选择

‘拾’ 遗传算法理解

遗传算法是一种进化算法,进化是什么哪?就是种群逐渐适应生存环境,种群中个体不断得到改良的过程。

遗传算法是一种对生物遗传的模拟、在算法中,初始化一个种群,种群中的每个染色体个体都是一种解决方案,我们通过适应性fitness来衡量这个解决方案的好坏。并对它们进行选择、变异、交叉的操作,找到最优的解决方案。

总结一下遗传算法的基本的步骤:

1.初始化一个种群,并评估每条染色体所对应个体的适应度。

2.选择、交叉、变异,产生新的种群

3.再评估每个个体的适应值,如果适应值达到要求或者达到最大循环次数,否则重复2,不断产生新种群。

知道了GA的大致流程之后、来具体分析一下细节,怎么实现吧

我们知道遗传算法起源于生物遗传,因此在种群中每个个体就是一个染色体,那如何对染色体进行编码,让它表示我们的解决方案那(就是把现实要优化的参数用编码表示成一个染色体)。这里就遇到了一个编码、解码的问题,我们将需要优化的目标编码成染色体,然后再解码为我们可以用来计算fitness的解;

一般在进行参数优化时,一般有两种方式:实数编码、二进制编码

实数编码:基因直接用实数进行表示,这样的表示方法比较简单,不用特意解码了,但是在交叉和变异时,容易过早收敛,陷入局部最优。

二进制编码:将基因用二进制的形式表示,将参数的值转化为二进制形式,这样交叉、变异时更好操作,多样性好,但是占用的存储空间大,需要解码。

染色体就称为个体。对于一次实验,个体就是需要优化参数的一种解、许多这样的个体就构成了种群。

在面对群体中那么多个体时,如何判断个体的好坏呢,就是通过适应值函数了,将解带入适应值函数,适应值越大、解越好。

在遗传算法中,我们怎么使得里面的个体变得越来越优秀呢?

核心思想就是:选择优秀的、淘汰不好的,并且为了生成更好的解,我们要尝试交叉、变异,带来新的解。

选择就是从当前的种群中选择出比较好的个体、淘汰不好的个体

常见的选择方法有:轮盘赌选择、锦标赛选择、最佳保留选择等等

轮盘赌选择就是根据每个个体fitness和种群所有fitness之和比较,确定每个个体被选中的概率,然后进行n次选择,选择n个个体构成新种群,是一种放回抽样的方式。

锦标赛就是每次从种群中选择m个个体,选择最优的,放入新种群,重复选择,直到新种群中个体数目达到n。

最佳保留选择就是在轮盘赌的基础上,将fitness个体先加进新种群,因为轮盘赌是一种概率模型,可能存在最优个体没有进入新种群的情况。

在选择之后,就要考虑产生新的、更优秀的解,为种群带来新的血液。遗传算法的思路是交叉两个优秀的解,往往get好的解。

交叉通过在经过选择的种群中,随机选择一对父母,将它们的染色体进行交叉,生成新的个体,替代原来的解。

常用的交叉方法有:单点交叉、多点交叉等等。

交叉就像生物里面,染色体交换基因一样的~但是并不是种群中所有个体都进行交叉的,实现时可以,设置一个交叉率和交叉概率,随机选择种群中两个体、随机一个数,小于交叉率就进行交叉操作,并根据交叉概率判断交叉的程度,从而生成新个体,反之就保留这两个体。

变异也是一种产生新个体的方式,通过改变个体上基因,期望产生更好的解。比如在以二进制编码的个体上,将里面的0、1进行等位变化啥的,就是0变1、1变0这样。同样也要考虑变异率、变异产生的新解是不可控的,可能很好,也可能很坏,不能像交叉一样,确保一定的效果,所以往往变异率设置的比较小。

阅读全文

与遗传算法解码相关的资料

热点内容
dvd光盘存储汉子算法 浏览:757
苹果邮件无法连接服务器地址 浏览:963
phpffmpeg转码 浏览:671
长沙好玩的解压项目 浏览:145
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:737
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:302
PDF分析 浏览:485
h3c光纤全工半全工设置命令 浏览:143
公司法pdf下载 浏览:382
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:350
风翼app为什么进不去了 浏览:778
im4java压缩图片 浏览:362
数据查询网站源码 浏览:150
伊克塞尔文档怎么进行加密 浏览:892
app转账是什么 浏览:163