当我想学量子遗传算法时发现网上关于量子遗传算法很难找到通俗的资料,于是想简单介绍一下量子遗传算法的思路。
默认懂遗传算法基础,如有不懂请自行查阅遗传算法相关资料。
量子比特编码
与传统遗传算法不同,量子遗传算法用量子比特编码。
每个染色体有n个基因,第i个基因用表示,每个染色体:[ …… …… ]。
基因不是分数,和是两个复数,称为量子比特概率幅。(只要知道和两个复数表示一个基因就行了)
在二进制编码中可以表示该基因为0的概率,表示基因为1的概率,满足。
种群迭代的更新操作
传统遗传算法通过交叉和变异对种群进行迭代更新,而量子遗传算法由于基因存储的是0和1的概率,所以可以用量子旋转门修改每个基因为0还是1的概率来进行种群更新。
直接上图更直观,因为,所以和的所有取值都在半径为1的圆上。
更新操作就是将调整角度后变为。
具体操作:
如何确定:
以整个进化历史上出现的最优个体best作为进化目标,使当前种群的个体x所有基因都往best靠拢,靠拢幅度为, 类似于神经网络中的学习率。
大致流程
初始化种群:
最开始每个染色体的每个基因为0的概率和为1的概率肯定是相等的,即 = = 0.5
测量个体:
通过测量个体基因0和1的概率得到一个确定的值。(基因由量子态坍缩为确定的0和1)
个体里的每个基因都对应一个0到1之间的随机数,若它大于 ,则该基因取值为1,否则取值0。
记录历史最优个体best:
最初的最优个体best就是测量初始种群得到的最优个体。
以后在每次迭代更新种群后都测量出当代最优个体,与历史最优个体比较,如当前最优个体更优则更新历史最优个体,得到下一代的进化目标。
流程图:
最后
量子遗传算法由于其用量子比特位表示基因而不方便对染色体进行传统的交叉和变异,主要是以历史最优为目标,量子比特概率幅向历史最优靠拢,而历史最优在种群迭代的同时发生变化。
就像遗传算法一样,量子遗传算法当然也能在基础流程上进行“魔改”,如引入“量子灾变”(扰动部分个体的基因以跳出局部最优)、多种群的量子遗传算法(交换种群的进化目标)等等。
更多魔改请自行查阅相关文献,欢迎互相学习,指正。