当前位置:文档之家› 关于量子遗传算法(QGA)

关于量子遗传算法(QGA)

关于量子遗传算法的杂七杂八遗传算法确实太有名了,无论是数学建模的培训中还是机器学习的项目中,经常性能看到遗传算法(GA)活跃的身影,其用途十分广泛,而且MATLAB或者是Python的实现遗传算法功能的工具箱也很多,笔者就一度使用北卡罗莱纳大学提供的免费工具箱实现了对于BP神经网络的初始化权值与阈值的优化,效果十分不错,而且实现起来不那么费劲,所以还是挺受好评的,对于写毕业论文的同志而言,如果实在不知道强行套用第三方算法对于原本的算法进行升级该怎么做,有两个万金油组合,一个是AHP,另一个就是几乎无所不能的GA,当然了,如果需要对于矩阵进行降维操作首选一定是PCA。

1 关于GA算法的种种1.1简介顾名思义,学过高中生物的都应该可以理解“遗传”是什么,染色体变异、染色体交叉等术语应该也能够大概知道是什么意思。

其实遗传算法主要就是模拟这一个过程。

不过,笔者觉得本算法中的核心部分中的变异与交叉的情节,其实达尔文这个姐控的贡献不是很大,最早提出相关的概念完成了相关的建模的是孟德尔所谓物竞天择适者生存,这个对于现实生活中的生物适用,对于具有特定含义的矩阵肯定也是适用的,当然了,反映他们到底多么“适应”的函数就是所谓的适应度函数,虽然关于适应度函数的取法现在并没有十分固定的一以贯之的通用公式。

相对的,一些套路多有相似之处的算法中的概念也大都没有万用公式,诸如ACA中的营养素函数等,这些算法仍然有待提升,这也是经常能在国内的中文核心期刊上依然能够看到不少惊为天人的论文的原因。

因为中国特色——灰色模型、AFSA等算法第一个提出者是中国人。

1.2四个基本概念遗传算法中,一个基本单位为“个体”,一个种群(系统)中拥有好多个体。

每个个体携带两个内容:染色体与适应度。

当然了,这个时候上述的这些概念根本没有机器学习的含义,而全然为生物的含义或者用生物上的话来说,每一个生物都有染色体,染色体决定了他们表现出来的性状是怎样的。

所以说,染色体决定了每一个生物的肥瘦程度。

因此我们建立以下对应关系:整个牧场对应的是一个种群,在机器学习中可以理解为具有实际项目含义的构成所有矩阵的cluster一头羊相当于生物钟的一个个体,在机器学习的大背景下可以理解成矩阵,就是MATLAB里面的mat文件某头羊决定肥瘦程度的染色体也就就是该个体的染色体,在机器学习的大背景下可以理解成mat文件中的某一行或者是某一列。

题外话,MATLAB中相当一部分函数在编写的时候不知道是出于怎样的考虑,它们的参数有的时候行跟列的位置竟然是反的,于我们的习惯有很大的差别。

笔者以前去台湾留学过,知道他们的行列的认知习惯与我们大陆地区是相反的,不知道世界上还有哪些国家或者是地区同他们一样。

肥瘦程度对应的是适应度,可以理解成适应度函数的取值,就如同某些动漫中非要将人物的战斗力用数值的形式表现出来的概念差不多,只不过这一次作为开发者的我们站在了上帝视角,当某些个体的某些属性太强的时候,我们可以对他进行削弱或者是增强,而并非以前那样逆来顺受明确了上面四个基础概念以后,我们就可以引出他们之间的相互关系。

种群中包含了若干个个体,每个个体都拥有两个属性:染色体与适应度。

每一次迭代中,种群中的个体数量不变。

1.2.1染色体其实需要细讲的主要还是染色体。

在高中学生物的时候被这个概念折磨,现在继续染色体是遗传算法与“被求最优解模型”直接相关之处。

通常来说一个模型想要求最优解,那么就肯定会存在变量,通过控制变量的值让模型的最终值达到最优。

所以在这里,模型中所有变量就构成了一条染色体。

其中每一个变量称之为染色体上的一个基因。

给他们赋予一定的机器学习含义,染色体相当于MATLAB的mat文件中的一行或者是一列数据,而基因就是这一行或者是这一列的某个元素1.2.2适应度函数正如上文所说,其实适应度函数就是用来评价那个基因的质量高,使用数值的形式反映出来了1.2.3寻找最优解对于整个种群,我们假设有N个个体,所以对应的,也就有N条染色体,只不过每个染色体中对应的基因的个数可能不止一个,N个适应度。

因此可以写成以下形式其中每一行都代表着一个个体。

经过转置的处理之后也可以理解成是列,在矩阵中这个是没有影响的在这里假设每个个体的染色体的值各不相同,因此适应度(模型的解)也就各不相同。

所以我们就可以从中挑出来最大的适应度,它就是在当前情况下的最优解,但不一定是真正的最大值1.3遗传算法的流程可以使用相关的MATLAB工具箱实现遗传算法的所有历程,只不过适应度函数的取法不一定可靠,需要自己手动确认。

一次迭代包括以下几个过程,流程之间不强调直接顺序:1、染色体变异。

即改变某个染色体的值;2、染色体交叉。

任意选择两个染色体交换部分基因;3、计算适应度。

计算每个染色体在当前迭代下对应的适应度。

这个往往是基因在进行了对应的复制、变异与交叉之后才能够进行,不过因为变异本身就充满了变数,所以这个适应度的计算并不十分看重发生的时间节点4、优胜劣汰。

选出最劣适应度的染色体,并将其用最优适应度染色体替换。

评比的标准自然是适应度函数值1.4染色体变异正是由于染色体的变异,生物才会有进化这么一说,当然了,进化不一定是按照开发者理想的方向进行的,可能进化之后情况反倒更加糟糕了,这种个体或者是样本只能因为自身的适应度函数值不高,从而别淘汰掉。

为了少出现那种经过变异之后没有真正的进化,反而情况还大不如前的恶果出现,开发者只能默认执行下面两个约定俗成的规则适应度越优的个体染色体变化范围越小;适应度越劣的个体染色体变化范围越大。

其实这样也不能完全的规避出现进化之后情况反而更加恶化的情况,由于本身算法中取随机数的情节,不能完全控制进化的方向,只能尽量去规避,或者是迭代的代际设定的很高,这样可以降低一点风险1.5染色体的交叉这个流程不如上一个突变的流程那么重要,但是不可缺少,它存在的意义在于可以在相当的程度上使得更好的基因拥有更大的概率为广大的染色体(机器学习中就是对应的行向量或者是列向量)保留优良的基因,这样能够加快升级的速度。

染色体交叉比较容易,随机选择两个染色体,在随机选择一对节点,相互交换对应的值即可。

这个在相关的MATLAB工具箱中实现的手法不一定一致,比较主流的实现手法是先对于mat 文件进行必要的编码,然后将编码中二二进行交换,当然了,工具箱是开源的,所以可能对于交叉的概率进行再次的设定,往往其概率的设定会偏大,当然了,本身为了降低迭代的代际,需要将变异的概率设定的大一点,但是往往不会超过交叉的概率1.6适应度函数计算适应度就是将每个个体的染色体带入到模型中进行计算,计算出来其对应的适应度。

单纯的初中数学,没有什么好说的1.7优胜劣汰为了让我们种群的适应度函数的取值整体水平上升,我们必须杀死排名最后的那个个体。

当然了,根据克摩洛哥莫夫定理,适应度函数的取值的均值虽然也是上升的,但是整体的数值的取值一定也是服从正态分布的杀死之后种群数量就变少了,所以就必须要让比较优良的个体多生点来把种群数量补回来。

在这里我为了方便,直接把最劣的个体的染色体替换成了最优个体的染色体。

这样子就是优胜劣汰,略微的把整体适应度水平提升了一点。

2 关于量子编码遗传算法用于模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,种群通过选择、交叉和变异操作使染色体的十进制数值逼近最优参数值。

当然了,等位基因上的复制与非等位基因上的自由组合定律的提出与建模,其实主要应该归功于孟德尔同志,本文开始已经提出,这里不再赘述遗传算法容易陷入局部最优的陷阱。

量子遗传算法是将量子计算与遗传算法结合,引入量子编码和量子旋转门,增加染色体变化的可能性。

2.1染色体的量子编码遗传算法中染色体的取值采用二进制编码,只要编码确定,染色体的取值就是确定的,其实这个是废话,如果编码确定染色体无法确定,那么这个编码的意义何在。

后续的选择、交叉和变异操作都是在已经确定的二进制编码的染色体上进行。

为了增加染色体取值的变化,量子遗传算法引入量子编码方法为染色体的取值进行编码。

在量子编码中,染色体每一个二进制位被称为量子比特,量子比特不是确定的0或1,而是0和1的叠加,一个量子比特的状态可以取值0或1,其状态表示为:2.2量子编码的转换如上所说,量子编码表示染色体二进制位为0或1的概率,但是具体操作还是要现将染色体量子编码转化为二进制取值进而转化为十进制取值。

生成一个位于(0,1)的随机数,如果该随机数小于∣α∣的平方,该二进制位取值为1,否则取值0。

3 量子进化3.1冷门的全干扰交叉量子遗传算法中,交叉的操作对象是种群中所有染色体取值的比特位角度。

交叉是为了增加染色体的变化,防止陷入局部最优的陷阱。

正如上文所述,其实陷入了局部极小值的误区是十分常见的,但是不是无法解决这个矛盾,完全可以并入第三方算法增加其跳出局部极小值的概率,诸如ACA、SA或者是资历尚浅的萤火虫算法也可以,当然了,也需要适当敲定具体的训练集与测试集的个数。

全干扰交叉不同于其它的交叉方法,种群中所有的染色体取值都参与交叉,进一步增加了染色体的变化。

假设只有一个参数(一个染色体),种群数为5,染色体长度(染色比特位数)为5,则全干扰交叉前后种群中染色体所有取值分别为:进行全干扰交叉之后,相当于种群中斜向的个体的染色体交叉,具体如下所示,这个本质上模拟的是非等位基因上的自由组合定律,默认相对而言各个染色体中的基因,即各个向量中的元素所对应的码表进行移位运算的概率是随机而且相等的,并且每次操作的过程是独立的。

3.2量子变异量子变异是通过量子旋转门实现的,本质是通过改变种群中所有染色体取值的每一位量子比特的量子角度,使得染色体取值向更好的染色体靠拢。

具体进行实际上的分类的,其实还是经典的SVM本质上是在机器学习中出镜率很高的Lagrange方程下方的就是Lagrange中的限定条件,min函数为目标函数通过Lagrange乘数法并转化为对偶问题,优化问题转换为:这里引入了核函数的概念这里使用的核函数当然是高斯核函数然后对于非线性支撑向量机问题,流程大致如下综上,这个算法确实冷门,而且效果一般,不过经过第三方算法进行必要的升级之后,可能会取得相对不错的结果。

相关主题