关于量子遗传算法(QGA)

关于量子遗传算法(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乘数法并转化为对偶问题,优化问题转换为:

这里引入了核函数的概念

这里使用的核函数当然是高斯核函数

然后对于非线性支撑向量机问题,流程大致如下

综上,这个算法确实冷门,而且效果一般,不过经过第三方算法进行必要的升级之后,可能会取得相对不错的结果。

遗传算法综述

遗传算法综述 摘要:遗传算法(genetic algorithms,GA)是一类借鉴生物界自然选择和自然遗传机制的随机搜索算法,适用于处理传统搜索方法难以解决的复杂和非线性优化问题。遗传算法可广泛应用于组合优化、机器学习、自适应控制、设计和人工生命等领域,是21世纪有关智能计算中的重要技术之一。 本文通过对相关论文的查阅和整理,对遗传算法的研究现状和发展趋势进行了综述并谈论了一些自己的看法。 关键词:遗传算法研究现状发展趋势 引言:遗传算法是模拟遗传选择和自然淘汰的生物进化过程的计算模型,由美国Michigan大学的Holland教授于1969年提出,后经DeJong、Goldberg 等人归纳总结,形成一种新的全局优化搜索算法[1]。遗传算法以其简单通用、鲁棒性强、适于并行处理以及高效、实用等显著特点,在各个领域得到了广泛应用,取得了良好效果,并逐渐成为重要的智能算法之一。 1、遗传算法的基本原理 与传统搜索算法不同, 遗传算法从一组随机产生的初始解,称为群体, 开始搜索过程。群体中的每个个体是问题的一个解,称为染色体。这些染色体在后续迭代中不断进化, 称为遗传。遗传算法主要通过交叉、变异、选择运算实现。交叉或变异运算生成下一代染色体, 称为后代。染色体的好坏用适应度来衡量。根据适应度的大小从上一代和后代中选择

一定数量的个体, 作为下一代群体, 再继续进化, 这样经过若干代之后, 算法收敛于最好的染色体, 它很可能就是问题的最优解或次优解。“遗传算法中使用适应度这个概念来度量群体中的各个个体的在优化计算中有可能到达最优解的优良程度。度量个体适应度的函数称为适应度函数。适应度函数的定义一般与具体求解问题有关”[2]。 遗传算法包含两个数据转换操作,一个是从表现型到基因型的转换,将搜索空间的参数或解转换成遗传空间中的染色体或个体,这个过程称为编码(coding)。另一个是从基因型到表现型的转换,即将个体转化成搜索空间中的参数,这个过程称为译码(decode)。 图1展示了遗传算法的运行过程。 图1 遗传算法的运行过程示意图 2、遗传算法的研究现状 2.1 遗传算法研究方向[3] 在遗传算法的研究中,目前主要有三类研究方向: ⑴研究遗传算法本身的理论基础。 ⑵用遗传算法作为工具解决工程问题。主要是进行优化,关心的是能

关于量子遗传算法(QGA)

关于量子遗传算法的杂七杂八 遗传算法确实太有名了,无论是数学建模的培训中还是机器学习的项目中,经常性能看到遗传算法(GA)活跃的身影,其用途十分广泛,而且MATLAB或者是Python的实现遗传算法功能的工具箱也很多,笔者就一度使用北卡罗莱纳大学提供的免费工具箱实现了对于BP神经网络的初始化权值与阈值的优化,效果十分不错,而且实现起来不那么费劲,所以还是挺受好评的,对于写毕业论文的同志而言,如果实在不知道强行套用第三方算法对于原本的算法进行升级该怎么做,有两个万金油组合,一个是AHP,另一个就是几乎无所不能的GA,当然了,如果需要对于矩阵进行降维操作首选一定是PCA。 1 关于GA算法的种种 1.1简介 顾名思义,学过高中生物的都应该可以理解“遗传”是什么,染色体变异、染色体交叉等术语应该也能够大概知道是什么意思。其实遗传算法主要就是模拟这一个过程。 不过,笔者觉得本算法中的核心部分中的变异与交叉的情节,其实达尔文这个姐控的贡献不是很大,最早提出相关的概念完成了相关的建模的是孟德尔 所谓物竞天择适者生存,这个对于现实生活中的生物适用,对于具有特定含义的矩阵肯定也是适用的,当然了,反映他们到底多么“适应”的函数就是所谓的适应度函数,虽然关于适应度函数的取法现在并没有十分固定的一以贯之的通用公式。相对的,一些套路多有相似之处的算法中的概念也大都没有万用公式,诸如ACA中的营养素函数等,这些算法仍然有待提升,这也是经常能在国内的中文核心期刊上依然能够看到不少惊为天人的论文的原因。因为中国特色——灰色模型、AFSA等算法第一个提出者是中国人。 1.2四个基本概念 遗传算法中,一个基本单位为“个体”,一个种群(系统)中拥有好多个体。每个个体携带两个内容:染色体与适应度。 当然了,这个时候上述的这些概念根本没有机器学习的含义,而全然为生物的含义 或者用生物上的话来说,每一个生物都有染色体,染色体决定了他们表现出来的性状是怎样的。所以说,染色体决定了每一个生物的肥瘦程度。 因此我们建立以下对应关系: 整个牧场对应的是一个种群,在机器学习中可以理解为具有实际项目含义的构成所有矩阵的cluster 一头羊相当于生物钟的一个个体,在机器学习的大背景下可以理解成矩阵,就是MATLAB里面的mat文件 某头羊决定肥瘦程度的染色体也就就是该个体的染色体,在机器学习的大背景下可以理解成mat文件中的某一行或者是某一列。题外话,MATLAB中相当一部分函数在编写的时候不知道是出于怎样的考虑,它们的参数有的时候行跟列的位置竟然是反的,于我们的习惯有很大

毕业设计--基于量子遗传算法的函数寻优算法设计

毕业论文(设计) 题目:基于量子遗传算法的函数寻优算法设计学院:数理与信息学院 学生姓名: 专业:计算机科学与技术 班级: 指导教师: 起止日期: 2014年11月16日至2015年6月12日 2015 年5 月13日

基于量子遗传算法的函数寻优算法设计 摘要 量子遗传算法(QGA)是20世纪90年代后期兴起的一种崭新的遗传进化算法。该算法主要是将量子计算的概念引入其中,将量子的态矢量表达引入了遗传编码,使一条染色体可以表达多个信息态的叠加,同时利用量子旋转门实现染色体的演化,实现了目标解的进化。相比传统遗传算法,量子遗传算法能够在较小的种群规模下,快速的收敛到全局最优解。 本文首先介绍了量子遗传算法的基本原理与算法结构,然后对量子遗传算法提出疑问。虽然量子遗传算法的优化性能大大优于传统遗传算法,但是,对于一些多峰函数的优化问题,该类算法依旧容易陷入“局部最优”。在实际的应用中有很多优化问题都是多变量的连续优化问题,现有的量子遗传算法不能有效的解决这些问题。针对量子遗传算法容易陷入局部最优和未成熟收敛的缺陷,我们提出了一种新的优化算法——含有退火操作的量子遗传算法,该优化算法能够以可变的概率选择性地接受恶化的优化函数解,使种群解集的进化方向改变,不在依靠当前解进行遗传演化。从而使算法不易“早熟收敛”。而且在该算法中加入了全干扰的量子交叉操作,使各染色体能进行遗传信息的交换,使种群染色体更具有代表性。最后根据改进后的方案,对改进的量子遗传算法进行了数值仿真。有效地证明了改进算法在函数寻优方面的优越性。 【关键词】量子遗传算法,量子编码,退火思想,量子交叉,函数寻优

量子遗传算法

量子遗传算法 1.遗传算法 遗传算法是一种模拟达尔文生物进化论和遗传变异的智能算法。这种算法具有鲁棒性(用以表征控制系统对特性或参数扰动的不敏感性)较强,实现的步骤规范、简单通用等优点,在人工智能、多目标决策、社会及经济等领域都有大量运用。但一般遗传算法存在一定得局限性:收敛速度慢、迭代的次数多,易过早收敛,容易陷入局部最优解。 2.量子计算 量子计算为量子力学与信息科学的综合交叉学科。量子计算具有量子力学的并行性,计算速度更快;同时,量子状态多种多样,在进行最优解的搜索时极少陷入局部的极值。 3.量子遗传算法 量子遗传算法将量子的态矢量引入遗传算法,利用量子比特的概率幅应用于染色体的编码。一条染色体是多个量子状态的叠加。并使用量子旋转门实现染色体的变异更新。因此量子遗传算法具有迭代次数少,运行速度快,能以较少种群进行遗传变异,搜索范围广,难以陷入局部的极值等优点。 4.操作步骤 1)运用量子比特初始化父代染色体 2)在量子遗传算法中,染色体采用量子位的概率幅进行编码,编码方案如下: 1212cos()cos()cos()sin()sin()sin()i i ik i i i ik P θθθθθθ??=??? ? k j n i rand ij ,...,2,1,,...,2,1,2==?=πθ 3)对初始化种群中的每一个个体进行测量。 4)对每个测量值进行适应度的评估,以适应度来选择最优个体,进行遗传变异。 5)使用量子旋转门进行下一代个体的更新,量子旋转门为逻辑门中一种较为常用的方法,具体表示为: ???? ? ?-=i i i i u θθθθθcos sin sin cos )( 6)进行迭代1+=y y 7)达到终止设定条件,输出最佳个体,得到最优解。

相关文档
最新文档