说来奇怪,自己在读书期间身边有很多人做遗传算法的工作,但由于自己做的网络设计,就一直没有主动研究,最近一段时间,偶然间突然对遗传算法感兴趣,发现遗传算法还是有很大的发挥空间,在此记录下学习过程~
一、什么是遗传算法
遗传算法是一种模仿自然选择和自然遗传机制进化的高度并行、自适应的全局搜索优化算法,本质是模仿达尔文进化论,通过种群中不同个人(样本)之间的选择、交叉和变异,筛选优质个人,淘汰劣质个人,使得种群不断逼近最优状态,是生物进化过程的一种计算模型。
二、遗传算法的基础知识
(1)几个专有名词:染色体、种群、选择、交叉、变异、适应度函数、编码、解码。
- 染色体:对应一个具体个体的数据编码,一个染色体对应一个个体,多个个人构成一个种群。
- 基因:染色体上的一个具体数值即为基因,多个基因连续排列构成染色体。
- 种群:包含多个个体的集合。
- 选择:根据优胜劣汰机制,即根据适应度函数值大小,选择符合目标的TopN个个体,同时剔除不符合目标的末尾TopN个个体。
- 交叉:选择2个个体,个体染色体之间按照一定机制交换部分染色体。
- 变异:给定某个个体,按照一定机制改变原基因为等位基因。
- 适应度函数:用于计算和评估个体优劣的函数。
- 编码:将业务数据编码为染色体,即是将原始问题抽象为遗传算法可以解决的问题。
- 解码:将遗传算法解决的问题,解码为原始问题。
(2)遗传算法的构成
- step1:确定染色体编码机制
- step2:确定种群
- step3:计算适应度函数
- step4:选择
- step5:交叉
- step6:变异
- step7:回到step2,不断迭代,直至满足条件停止。
(3)遗传算法的几个处理知识点
【1】染色体编码
染色体编码本质是原问题转为算法所能理解的问题,原问题一般是数学问题,数学问题一般存在多个待解变量,这里的每个变量对应一个染色体基因(浮点数编码)或者一段染色体基因(二进制编码)。常用的编码方案有:二进制编码、格雷码方法、浮点数编码、符号编码等等,对比各个编码优缺点和使用领域。
- 二进制编码:符合直觉,而且便于染色体操作,但存在精度问题、数值不连续问题(Hamming悬案问题,即连续数值的编码差异很大)。
- 格雷码编码:对二进制编码转换,使得相邻数值的编码只相差一个码位。
-
二进制码转格雷码:g_m=b_m;g_i=g_(i+1) + b_i,i=m-1,m-2,...,2,1
-
格雷码转二进制码:b_m=g_m;b_i=b_(i+1) + g_i,i=m-1,m-2,...,2,1
- 浮点数编码:染色体操作不方便,但数值连续,可以微调和在解的表现型上直接遗传操作,这种方法适合多极值优化问题。
【2】选择
依据适应度函数值大小,挑选满足目标的N个优质个体,同时舍弃不满足目标的M个劣质个体。
选择的准则:基于累积概率的轮盘赌算法、适应度排序后Top机制选择、缩放个体适应度值后选择、其他个性化选择。
常用方法介绍,
- A、基于排序选择操作的轮盘赌选择:
其中,
直接计算较复杂,选用等价于A的简单方法:确定各个个体的rank和m,则前m个个体赋值2份,最后m个个体删除,中间Pop-m个个体保留。
优点:选择压力保持一致,抑制非成熟收敛。
- B、基于个体累加概率Pi的轮盘赌选择机制
【3】交叉
- 依据一定准则选择2个个体,同时也依据一定准则交换(或者混合)2个个体的染色体基因。
- 交叉准则:单点交叉、双点交叉、多点交叉、一致性交叉等。
- 交互基因的计算方法:直接组合不同个体基因(片段)为新个体;或者按比例混合计算不同个体基因(片段)为新个体。
- 重要性:交换两个个体信息,有助于全局极值的优化。
浮点数编码的交叉公式:
,其中alpha是介于0到1的小数,实际处理时候要注意x的上界和下界。
【4】变异
- 依据一定混着,改变染色体基因(基因突然),提升染色体的多样性。
- 变异准则:对于二进制编码,直接随机改变某个基因为等位基因;对于浮点数编码,依据概率从max和min两个不同方向改变原始数值。
- 重要性:提升种群多样性。
浮点数编码的变异公式:
其中,k是介于0到1之间的小数,实际处理时候要注意x的上界和下界。
(4)使用遗传算法所面临的几个难点
- 【1】早熟现象(过早收敛局部最优值):交叉过程的成熟化效应导致种群多样性趋于0。
解决方法:随机试验法(又称为Monte-Carlo法,即n次迭代,最优个体无明显变化,则保留最优个体,其他个体重新生成),注意该方法不是为了进化种群,而是摆脱迟钝状态,重新搜索。
- 【2】编码后,问题解数值的连续性问题
- 【3】搜索结果在全局最优值附近摆动
解决方法:自适应搜索范围,即开始搜索范围大,后期减小搜索范围,防止在最优值附近摆动。
- 【4】全局收敛性问题
解决方法:基于马尔科夫链的数学证明说明是简单遗传算法不是全局收敛,待最优缓存(父代最优个体替代子代最差个体)的遗传算法才是全局收敛。
拓宽搜索空间、增加种群多样性:交叉和变异。
算遗传算法稳定性、种群整体收敛性
三、遗传算法的应用范围
1、存在多个自变量的函数,需要求解最优值(最小或者最大)的问题,其中时间复杂度小于暴力枚举。
四、遗传算法和深度学习的结合
1、借助遗传算法,搜索最优神经网络架构。
-- 未完待续--