遗传算法-回顾和思考

说来奇怪,自己在读书期间身边有很多人做遗传算法的工作,但由于自己做的网络设计,就一直没有主动研究,最近一段时间,偶然间突然对遗传算法感兴趣,发现遗传算法还是有很大的发挥空间,在此记录下学习过程~

一、什么是遗传算法

遗传算法是一种模仿自然选择和自然遗传机制进化的高度并行、自适应全局搜索优化算法,本质是模仿达尔文进化论,通过种群中不同个人(样本)之间的选择、交叉和变异,筛选优质个人,淘汰劣质个人,使得种群不断逼近最优状态,是生物进化过程的一种计算模型。


二、遗传算法的基础知识

(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、基于排序选择操作的轮盘赌选择:

P(x)=\left[Min+(Max-Min)\frac{Pop-rank(x)}{Pop-1}\right] / Pop

其中,\operatorname{Max} \in(1.5,2), \operatorname{rank}(x)=1.2 \ldots . . \text { Pop. }

直接计算较复杂,选用等价于A的简单方法:确定各个个体的rank和m,则前m个个体赋值2份,最后m个个体删除,中间Pop-m个个体保留。

优点:选择压力保持一致,抑制非成熟收敛。

  • B、基于个体累加概率Pi的轮盘赌选择机制

【3】交叉

  • 依据一定准则选择2个个体,同时也依据一定准则交换(或者混合)2个个体的染色体基因。
  • 交叉准则:单点交叉、双点交叉、多点交叉、一致性交叉等。
  • 交互基因的计算方法:直接组合不同个体基因(片段)为新个体;或者按比例混合计算不同个体基因(片段)为新个体。
  • 重要性:交换两个个体信息,有助于全局极值的优化。

浮点数编码的交叉公式:

\begin{aligned} &x_{A}^{t+1}=\alpha x_{B}^{t}+(1-\alpha) x_{A}^{t}\\ &x_{B}^{t+1}=\alpha x_{A}^{t}+(1-\alpha) x_{B}^{t} \end{aligned},其中alpha是介于0到1的小数,实际处理时候要注意x的上界和下界。

【4】变异

  • 依据一定混着,改变染色体基因(基因突然),提升染色体的多样性。
  • 变异准则:对于二进制编码,直接随机改变某个基因为等位基因;对于浮点数编码,依据概率从max和min两个不同方向改变原始数值。
  • 重要性:提升种群多样性。

浮点数编码的变异公式:

x_{A}^{t+1}=\left\{\begin{array}{ll} x_{A}^{t}+k \cdot\left(x_{\max }-x_{A}^{t}\right) \cdot r, & \text {rand} 0 \% 2=0 \\ x_{A}^{t}-k \cdot\left(x_{A}^{t}-x_{\min }\right) \cdot r, & \text {rand} 0 \% 2=1 \end{array}\right.

其中,k是介于0到1之间的小数,实际处理时候要注意x的上界和下界。

(4)使用遗传算法所面临的几个难点

  • 【1】早熟现象(过早收敛局部最优值):交叉过程的成熟化效应导致种群多样性趋于0。

解决方法:随机试验法(又称为Monte-Carlo法,即n次迭代,最优个体无明显变化,则保留最优个体,其他个体重新生成),注意该方法不是为了进化种群,而是摆脱迟钝状态,重新搜索。

  • 【2】编码后,问题解数值的连续性问题
  • 【3】搜索结果在全局最优值附近摆动

解决方法:自适应搜索范围,即开始搜索范围大,后期减小搜索范围,防止在最优值附近摆动。

  • 【4】全局收敛性问题

解决方法:基于马尔科夫链的数学证明说明是简单遗传算法不是全局收敛,待最优缓存(父代最优个体替代子代最差个体)的遗传算法才是全局收敛。

 

拓宽搜索空间、增加种群多样性:交叉和变异。
算遗传算法稳定性、种群整体收敛性


三、遗传算法的应用范围

1、存在多个自变量的函数,需要求解最优值(最小或者最大)的问题,其中时间复杂度小于暴力枚举。


四、遗传算法和深度学习的结合

1、借助遗传算法,搜索最优神经网络架构。


 

-- 未完待续--

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
量子遗传算法是一种结合了量子计算和遗传算法的优化算法。它利用了量子计算的特性,如叠加态和纠缠态,以及遗传算法的进化和选择机制,来解决复杂的优化问题。 在Python中,可以使用一些库来实现量子遗传算法。其中,Qiskit是一个开源的量子计算库,提供了丰富的量子计算工具和算法。Qiskit中的qiskit.aqua包含了一些量子优化算法,包括量子遗传算法。 下面是一个简单的示例代码,演示了如何使用Qiskit实现量子遗传算法: ```python from qiskit import Aer from qiskit.aqua import QuantumInstance from qiskit.aqua.algorithms import VQE, QAOA from qiskit.aqua.components.optimizers import COBYLA # 定义优化问题的目标函数 def objective_function(x): return x[0]**2 + x[1]**2 # 创建量子优化实例 optimizer = COBYLA(maxiter=100) qasm_simulator = Aer.get_backend('qasm_simulator') quantum_instance = QuantumInstance(backend=qasm_simulator, shots=1024) # 使用VQE算法求解优化问题 vqe = VQE(optimizer=optimizer, quantum_instance=quantum_instance) result = vqe.compute_minimum_eigenvalue(operator, aux_operators=None) # 使用QAOA算法求解优化问题 qaoa = QAOA(optimizer=optimizer, quantum_instance=quantum_instance) result = qaoa.compute_minimum_eigenvalue(operator, aux_operators=None) # 输出结果 print(result) ``` 以上代码中,我们首先定义了一个简单的目标函数,然后选择了COBYLA作为优化器。接下来,我们使用VQE算法和QAOA算法分别求解优化问题,并输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值