人工智能-遗传算法

这是一类智能的算法,没有什么固定的模式,就是一个算法思想,可以给我们一些有价值的指导,当我们想要做一些相关工作的时候,可以扩宽我们的视野,打开我们的脑洞,借鉴其中的原理。我不想多说里面的什么数学和公式,只要你懂里面的思想会迁移到实际的应用中就很不错,更好的则是在其基础上形成自己的思维,需要用的话,就像什么神经网络一样,最好使用现成的框架。

简介

遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。实际上它是这样一种算法,就类似于自然界种群中的生物繁衍一样,通过不断的进化和变异不断产生更加适应环境的个体,这对比与我们的算法,种群就是我们的样本集合,个体则是我们单独的每个样本,样本中的每个数据则表示一个基因,进化和变异则是对样本之间的数据进行处理,更加适应环境的说法则类似于一个评价的标准,类似于神经网络中的损失函数,用于衡量进化和变异得到的新样本的,用算法流程图来形容就是如下所示(文中图都是引自其他博客,已在末尾标准引用来源)

那么通俗的讲它的基本原理

第一个基因和染色体的概念

我们知道在生物中,染色体是一个人的性状集合,其上的基因表示一个人的某个特征。这类似于数学建模,一个数学方程存在多个可能的解

例如:

x+y+z<10

我们可以轻松地知道[1,1,1],[1,2,3],[2,1,1]这些都是方程的解,每个解就是对应着一个染色体也就是一个样本或者可以说是个体,而解向量中的每个数就表示一个基因。

第二个概念 群体

在进行遗传算法初始,我们是需要一个群体的,这就像进化一样,不可能是一个个体就能繁衍生息。我们需要从一个群体开始,而后进行遗传和变异等。

上一个例子中,我们有三个个体,它们就可以称作是一个初始的群体,群体的来源好像可以通过随机生成,也可以使用一些满足初始条件的现成的样本,但是本人自己感觉还是随意的更改一些,可以覆盖的范围更广一些,但是肯定还是有弊端的。

第三个 交叉和变异

在生物中变异是基因突变等情况,导致生物的某些性状发生变化,可能是不好的,也可能是对其生存有利的。遗传算法中亦是如此,我们对当前存在的基因和样本进行组合,然和即便通过交叉能保证每次进化留下优良的基因,但它仅仅是对原有的结果集进行选择,基因还是那么几个,只不过交换了他们的组合顺序。

为了进一步的得到更加“适应环境”的样本,我们需要引入变异,这样通过多次的变异和进化后才能得到更接近于局部最优解的结果。当我们通过交叉生成了一条新的染色体后,需要在新染色体上随机选择若干个基因,然后随机修改基因的值,从而给现有的染色体引入了新的基因,突破了当前搜索的限制,更有利于算法寻找到全局最优解。

下图为交叉的示意,通过随机选择样本将二者的对应数据进行交叉,图所示为将样本1,2进行位置2之前的交叉,而样本3,4进行位置4之前的交叉,从交叉结果我们可以看出,样本之间的数据发生了互换。

下图为变异的示意图,四个样本在各自的位置发生了变异,导致数据发生变化

第四 适应度

自然界中多数的变异都是导致适应环境的能力更差,我们遗传算法中的变异可能也是如此吧,这种情况下如果我们以较差样本为基础来进化和变异很大概率会导致得到更差的结果。为此引入了适应度的概念,依旧是类似于自然选择,使得较差的个体只有较小的概率可以有进化和变异的机会,而优质的个体则会更大可能的繁衍下一代。

这对应到我们算法中,则是一个函数,用于计算得到样本的优劣,从而决定其可遗传的可能性。该函数通过对样本打分,判定样本的优劣程度。

第五 选择运算

前面我们已经有了种群为基础,并且他们的遗传概念也已经明确,评判样本优劣的适应度也定义了,关键的一个步骤就是选择样本来进行遗传了。一般要求适应度较高的个体将有更多的机会遗传到下一代群体中,大概的意思就以其他大佬的图做例子

我们可以看到在原始样本集中存在四个样本,对于我们要求解的函数而言,四个样本距离我们想要的最优结果都有一定的距离,根据这个准则我们可以得到他们的适应度,根据适应度大的有更大的几率可以繁衍后代,我们计算四个样本的占比,即可遗传的概率。而后我们使用选择运算选择某一个样本进行遗传,根据概率第四个样本的可能性最大,从结果上我们也可以看到在四次的遗传中,第四个样本被选择了两次,第一二则是一次,这是符合我们概率的可能性的。

第六 个体编码

这个按照道理应该是最先说的,进行时生物的基因一样,每个基因是由很多的碱基序列构成,在计算几种我们可以这么理解,一个个体(样本),他有很多基因(数据点),每个基因是由很多碱基序列(0,1)构成

上文中样本【3,5】被表示为【011101】,模仿基因突变是在碱基的层次上改变的,我们数据的变异也是在对数据编码后的01序列上。这种操作是否有意义?我们是否可以直接在样本数据上进行更改,而不是将数据编码为01之后?

经过我的思考,我觉得这样操作是有好处的,如果要对一个数据进行变化如何设置变化的范围,我想这是很难界定的,而如果编码为01序列之后,我们只需要改变0或者1就可以,没有其他的情况需要考虑,我们只需要找随机找个位置然后处理就可以。

附录 相关的术语 便于理解算法

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

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

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

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

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

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

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

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

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

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

个体(individual):指染色体带有特征的实体;
种群(population):个体的集合,该集合内个体数称为种群的大小。        

参考文章:

https://blog.csdn.net/qq_31805821/article/details/79763326

https://baike.baidu.com/item/%E9%81%97%E4%BC%A0%E7%AE%97%E6%B3%95/838140?fr=aladdin

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

https://blog.csdn.net/u010425776/article/details/79155480 

https://blog.csdn.net/u012422446/article/details/68061932

猜你喜欢

转载自blog.csdn.net/iamsongyu/article/details/85861046