启发式算法

概念

      启发式算法是指依据有限的知识在短时间内找到问题解决方案的一种技术。它是一种依据关于系统的有限认知和假说从而得到关于此系统的结论的分析行为。由此得到的解决方案有可能会偏离最佳方案。通过与最佳方案的对比,可以确保启发法的质量。

      启发式算法一般用于解决NP-hard问题,其中NP是指非确定性多项式。启发式算法是相对于最优化算法提出的,是基于直观或者经验构造的算法,在可接受的开销的时间和空间内给出待解决组合优化问题的一个可行解。


应用场景

     这类算法算是在实际应用过程中的技术性算法,因为在实际计算过程中,很有可能第一:无确定的目标函数;第二:无法找到真实的最优解;第三:计算代价非常大,现有的计算机技术都无法解决此类问题。所以人们就找到另一种情况,使得在可接受的计算成本内去搜寻最好的解,但不一定能保证所得的可行解是最优解,甚至在多数情况下,无法阐述所得解同最优解的近似程度。 通熟点讲就是求出来的解可能不是最好的,只能说是相对较好的,但是这个相对程度就不敢保证了。虽然是这样,但是在工程应用上来说已经非常好了。

     一个基于直观或经验构造的算法, 在可接受的花费(指计算时间和空间)下给出待解决组合优化问题每一个实例的一个可行解, 该可行解与最优解的偏离程度一般不能被预计。 现阶段,启发式算法以仿自然体算法为主,主要有蚁群算法、模拟退火法、神经网络等。

     目前比较常用的启发式算法一般有模拟退火算法(SA)、遗传算法(GA)、蚁群算法(ACO)、粒子群算法。


模拟退火算法

     模拟退火算法(Simulated Annealing, SA)的思想借鉴于固体的退火原理,当固体的温度很高的时候,内能比较大,固体的内部粒子处于快速无序运动,当温度慢慢降低的过程中,固体的内能减小,粒子的慢慢趋于有序,最终,当固体处于常温时,内能达到最小,此时,粒子最为稳定。模拟退火算法便是基于这样的原理设计而成。

步骤:
1.初始化温度T(充分大),温度下限Tmin(充分小),初始解X,每个T迭代次数为L;

2.随机生成临时解域X_new;

3.设f(x)函数来计算解的好坏,计算出f(X_new)-f(X);

4.如果f(X_new)-f(X)>0,说明新解比原来的解好,则无条件接受,如果f(X_new)-f(X)<0,则说明旧解比新解好,则以概率exp((f(X_new)-f(x))/k*T)接受X_new作为解。

5.如果当前温度小于Tmin的时候,退出循环,输出结果;否则,降低当前温度,T=a*T,(0<a<1),跳转到第二步继续循环。

总结: 模拟退火其实也是一种Greedy算法,但是它的搜索过程引入了随机因素。模拟退火算法以一定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的最优解。以上图为例,模拟退火算法在搜索到局部最优解B后,会以一定的概率接受向右继续移动。也许经过几次这样的不是局部最优的移动后会到达B 和C之间的峰点,于是就跳出了局部最小值B。
     若f( Y(i+1) ) <= f( Y(i) ) (即移动后得到更优解),则总是接受该移动;若f( Y(i+1) ) > f( Y(i) ) (即移动后的解比当前解要差),则以一定的概率接受移动,而且这个概率随着时间推移逐渐降低(逐渐降低才能趋向稳定),每次右移(即接受一个更糟糕值)的概率在逐渐降低。如果这个坡特别长,那么很有可能最终我们并不会翻过这个坡。如果它不太长,这很有可能会翻过它,这取决于衰减 t 值的设定。

参考链接1
参考链接2


遗传算法

     遗传算法的基本原理是模拟达尔文进化论"物竞天择,适者生存"的自然法则,其核心思想为

(1)将原始问题的参数,抽象为基因编码

(2)将原始问题的可行解,抽象为基因排列的染色体组合

(3)将原始问题的解集规模,抽象为一定数量染色体组成的种群

(4)寻找可行解的过程,抽象为种群的进化过程(染色体选择、交叉、变异等)

(5)由于种群需要不断进化,为此我们需要定义一个规则,来评估打分当前环境下哪些种群可以生存,哪些种群将被淘汰,我们将这个规则叫做适应度函数。比较可行解的优劣,抽象为量化比较不同种群对当前环境的适应程度。

(6)逼近最优解的过程,抽象为淘汰适应度差的种群,保留适应度高的种群进行下一次进化

(7)问题的最优解,抽象为经过多次进化后,最终生存下来的精英种群

     总结: 理论上,通过有限次种群进化,生存下来的种群都是精英染色体,是最适合当前环境条件的种群,也就可以无限逼近原始问题的最优解。种群被选中定义为精英种群的概率,与其适应度成正比,即一个染色体的适应度越高,该染色体被选中为精英染色体的概率也将越大

参考链接


蚁群算法

     蚁群算法就是模拟蚂蚁寻找食物的过程,它能够求出从原点出发,经过若干个给定的需求点,最终返回原点的最短路径。这也就是著名的旅行商问题(Traveling Saleman Problem,TSP)。

     原理: 蚂蚁在行走过程中会释放一种称为“信息素”的物质,用来标识自己的行走路径。在寻找食物的过程中,根据信息素的浓度选择行走的方向,并最终到达食物所在的地方。信息素会随着时间的推移而逐渐挥发。在一开始的时候,由于地面上没有信息素,因此蚂蚁们的行走路径是随机的。蚂蚁们在行走的过程中会不断释放信息素,标识自己的行走路径。随着时间的推移,有若干只蚂蚁找到了食物,此时便存在若干条从洞穴到食物的路径。由于蚂蚁的行为轨迹是随机分布的,因此在单位时间内,短路径上的蚂蚁数量比长路径上的蚂蚁数量要多,从而蚂蚁留下的信息素浓度也就越高。这为后面的蚂蚁们提供了强有力的方向指引,越来越多的蚂蚁聚集到最短的路径上去。

流程:

1.初始化蚂蚁数量、可行路段、每条路段距离、每条路段的初始信息素大小等信息

2.设定蚂蚁的起点、终点。

3.蚂蚁从起点出发根据信息素浓度,有一定的概率性选择路段,浓度越高,概率越大,逐步回到终点。

4.在蚂蚁走过的路径上,根据每条路段的长度按比例释放信息素,短的路段释放的信息素多,长的路段释放的信息素少。

5.对所有路段的信息素进行挥发。

6.回到第二步进行循环,直到蚂蚁数量迭代完。
参考链接


粒子群算法

      粒子群算法,也称粒子群优化算法或鸟群觅食算法(Particle Swarm Optimization),缩写为 PSO, 是近年来由J. Kennedy和R. C. Eberhart等开发的一种新的进化算法(Evolutionary Algorithm - EA)。PSO 算法属于进化算法的一种,和模拟退火算法相似,它也是从随机解出发,通过迭代寻找最优解,它也是通过适应度来评价解的品质,但它比遗传算法规则更为简单,它没有遗传算法的“交叉”(Crossover) 和“变异”(Mutation) 操作,它通过追随当前搜索到的最优值来寻找全局最优。这种算法以其实现容易、精度高、收敛快等优点引起了学术界的重视,并且在解决实际问题中展示了其优越性。粒子群算法是一种并行算法。

     原理: 设想这样一个场景:一群鸟在随机搜索食物。在这个区域里只有一块食物。所有的鸟都不知道食物在那里。但是他们知道当前的位置离食物还有多远。那么找到食物的最优策略是什么呢。最简单有效的就是搜寻目前离食物最近的鸟的周围区域。鸟群在整个搜寻的过程中,通过相互传递各自的信息,让其他的鸟知道自己的位置,通过这样的协作,来判断自己找到的是不是最优解,同时也将最优解的信息传递给整个鸟群,最终,整个鸟群都能聚集在食物源周围,即找到了最优解。

     总结:PSO中,每个优化问题的解都是搜索空间中的一只鸟。我们称之为“粒子”。所有的粒子都有一个由被优化的函数决定的适应值(fitness value),每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。PSO 初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个"极值"来更新自己。第一个就是粒子本身所找到的最优解,这个解叫做个体极值pBest。另一个极值是整个种群目前找到的最优解,这个极值是全局极值gBest。另外也可以不用整个种群而只是用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。
参考链接

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值