启发式算法:
相对于最优化算法提出的,一个问题的最优算法求得该问题每个实例的最优解
启发式算法可以这样定义:一个基于直观或经验构造的算法,在可接受的花费(指计算时间和空间)下给出待解决组合优化问题每一个实例的一个可行解,该可行解与最优解的偏离程度一般不能被预计
一般用于解决NP-hard问题,其中NP是指非确定性多项式
常用的算法有:模拟退火算法(SA)、遗传算法(GA)、蚁群算法(ACO)、人工神经网络(ANN)
对于NP Hard问题,可行时间内在各空间中找到全局最优解的可能性很小,需要使用近似算法(Approximate Method)在有限时间内寻找一个近似最优解
近似方法分成:近似算法 和 启发式算法
近似算法,可以得到一个有质量保证的解,而启发式算法可以在可行时间内找到一个相对比较好的解,但对解的质量没有保证
遗传算法:
遗传算法:
通过模拟自然进化过程(达尔文生物进化论)搜索最优解的方法,遗传操作包括:选择、交叉和变异
算法核心:参数编码、初始群体的设定、适应度函数、遗传操作设计、控制参数设定
以一种群体中的所有个体为对象,利用随机化技术指导对一个被编码的参数空间进行高效搜索
遗传算法特点:
直接对结构对象进行操作,不存在求导和函数连续性的限定
具有内在的隐并行性和更好的全局寻优能力
采用概率化的寻优方法,不需要确定的规则就能自动获取和指导优化的搜索空间,自适应地调整搜索方向
在既定的区间内找出函数的最大值
相当于袋鼠蹦跳的过程,需要设计一种编码方式,二进制编码法1110001010111
Step1,随机初始化一个种群,即第一批袋鼠
Step2,通过解码过程,得到袋鼠的位置,用适应性函数对每一个基因个体作评估(适应度越高越好)
Step3,用选择函数按照某个规则择优选择(每隔一段时间,kill适应度差的袋鼠,保证总体数目持平)
Step4,让个体基因变异,产生子代
二进制编码序列:
比如x的范围是[-1, 2],需要保留小数点后6位的精度,那么空间会分成 份
因为 ,所以编码的二进制为22位
Thinking:如何将一个22位的二进制转化为对应区间的数值
先将22位的二进制转化为10进制数x
比如 1001110010000101010101进行换算后为0.834229
print(0b1001110010000101010101)
print(2564437*3/(4194304-1)-1)
适应度函数(fitness function):
也称评价函数,用于区分群体中个体好坏的标准,适应度函数总是非负的
选择函数(selection):
轮盘赌选择,一种回放式随机采样方法。每个个体进入下一代的概率等于它的适应度值与整个种群中个体适应度值和的比例
随机竞争选择,每次按轮盘赌选择一对个体,然后让这两个体进行竞争,适应度高的被选中
假如有5条染色体,适应度分别为1、2、3、1、3
那么个体的被选中的概率为:10%, 20%, 30%, 10%, 30%
(选择函数有多种方式)
染色体交叉(crossover):
两个相互配对的染色体按某种方式相互交换其部分基因,从而形成两个新的个体
单点交叉
对应的二进制交换
两点交叉与多点交叉
均匀交叉
算术交叉
基因突变(Mutation):
基本位变异,对个体编码串中以变异概率、随机指定的某一位或某几位仅因座上的值做变异运算。
101101001011001
101101011011000
均匀变异,用符合某一范围内均匀分布的随机数,以某一较小的概率替换个体编码串中各个基因位上的原有基因值
边界变异,随机的取基因座上的两个对应边界基因值之一去替代原有基因值
- 非均匀变异:对原有的基因值做一随机扰动,以扰动后的结果作为变异后的新基因值
- 高斯近似变异:进行变异操作时用符号均值为P的平均值,方差为P平方的正态分布的一个随机数来替换原有的基因值
遗传算法与神经网络:
遗传算法是一种最优化的算法,可以参与网络参数的学习,网络结构的设计等
网络参数学习:
假设神经网络有100个随机权重集合,评估对应每个权重集合的神经网络。基于评估,只保留最佳的20个权重集合,然后从这20个集合中进行随机选择,取代剩余的80个权重集合(应用简单的交叉和突变)
网络结构学习:
增强拓扑神经演化(Neuroevolution of Augmenting Topologies,NEAT)是一种基于遗传算法演化新型神经网络的方法