启发式算法(heuristic algorithm)

        启发式算法(heuristic algorithm)是相对于最优化算法提出的。一个问题的最优算法求得该问题每个实例的 最优解 。启发式算法可以这样定义:一个基于直观或经验构造的算法,在可接受的花费(指计算时间和空间)下给出待解决组合优化问题每一个实例的一个 可行解 ,该可行解与最优解的偏离程度一般不能被预计。
计算机科学的两大基础目标,就是发现可证明其执行效率良好且可得最佳解或次佳解的算法。而启发式算法则试图一次提供一或全部目标。 例如它常能发现很不错的解,但也没办法证明它不会得到较坏的解;它通常可在合理时间解出答案,但也没办法知道它是否每次都可以这样的速度求解。
有时候人们会发现在某些特殊情况下,启发式算法会得到很坏的答案或效率 极差,然而造成那些特殊情况的数据组合,也许永远不会在现实世界出现。因此现实世界中启发式算法常用来解决问题。启发式算法处理许多实际问题时通常可以在合理时间内得到不错的答案。
大自然是神奇的,它造就了很多巧妙的手段和运行机制。受大自然的启发,人们从大自然的运行规律中找到了许多解决实际问题的方法。对于那些受大自然的运行规律或者面向具体问题的经验、规则启发出来的方法,人们常常称之为启发式算法(Heuristic Algorithm)。现在的启发式算法也不是全部来自然的规律,也有来自人类积累的工作经验。启发式算法的发展:
启发式算法的计算量都比较大,所以启发式算法伴随着计算机技术的发展,取得了巨大的成就。
40年代:由于实际需要,提出了启发式算法(快速有效)。
50年代:逐步繁荣,其中 贪婪算法和局部搜索 等到人们的关注。
60年代: 反思,发现以前提出的启发式算法速度很快,但是解得质量不能保证,而且对大规 
        模的问题仍然无能为力(收敛速度慢)。启发式算法的不足和如何解决方法:
(水平有限 仅仅提出6点)
启发式算法目前缺乏统一、完整的理论体系。
很难解决! 启发式算法的提出就是根据经验提出,没有什么坚实的理论基础。
由于NP理论,启发式算法就解得全局最优性无法保证。
等NP?=P有结果了再说吧,不知道这个世纪能不能行。
各种启发式算法都有个自优点如何,完美结合。
如果你没有实际经验,你就别去干这个,相结合就要做大量尝试,或许会有意外的收获。
启发式算法中的参数对算法的效果起着至关重要的作用,如何有效设置参数。
还是那句话,这是经验活但还要悟性,只有try again………..
启发算法缺乏有效的迭代停止条件。
还是经验,迭代次数100不行,就200,还不行就1000…………
还不行估计就是算法有问题,或者你把它用错地方了………..
启发式算法收敛速度的研究等。
        你会发现,没有完美的东西,要快你就要付出代价,就是越快你得到的解也就远差。其中(4)集中反映了超启发式算法的克服局部最优的能力。虽然人们研究对启发式算法的研究将近50年,但它还有很多不足:1.启发式算法目前缺乏统一、完整的理论体系。2.由于NP理论,各种启发式算法都不可避免的遭遇到局部最优的问题,如何判断3.各种启发式算法都有个自优点如何,完美结合。4.启发式算法中的参数对算法的效果起着至关重要的作用,如何有效设置参数。5.启发算法缺乏有效的迭代停止条件。6.启发式算法收敛速度的研究等。
70年代:计算复杂性理论的提出,NP问题。许多实际问题不可能在合理的时间范围内找到全局最优解。发现贪婪算法和局部搜索算法速度快,但解不好的原因主要是他们只是在局部的区域内找解,等到的解没有全局最优性。
        由此必须引入新的搜索机制和策略………..
        Holland的遗传算法出现了(Genetic Algorithm)再次引发了人们研究启发式算法的兴趣。
80年代以后:
        模拟退火算法(Simulated Annealing Algorithm),人工神经网络(Artificial Neural Network),禁忌搜索(Tabu Search)相继出现。 
最近比较热或刚热过去的:演化算法(Evolutionary Algorithm), 蚁群算法(Ant Algorithms), 拟人拟物算法,量子算法等。
       各个算法的思想这就不再详细给出 ,为什么要引出启发式算法,因为NP问题,一般的经典算法是无法求解,或求解时间过长,我们无法接受。这里要说明的是:启发式算法得到的解只是近似最优解(近似到什么程度,只有根据具体问题才能给出). 二十一世纪的最大的数学难题NP?=P,如果NP=P启发式算法就不在有存在的意义。    优胜劣汰是大自然的普遍规律,它主要通过选择和变异来实现。选择是优化的基本思想,变异(多样化)是随机搜索或非确定搜索的基本思想。“优胜劣汰”是算法搜索的核心,根据“优胜劣汰”策略的不同,可以获得不同的超启发式算法。超启发式算法的主要思想来自于人类经过长期对物理、生物、社会的自然现象仔细的观察和实践,以及对这些自然现象的深刻理解,逐步向大自然学习,模仿其中的自然现象的运行机制而得到的。
遗传算法:是根据生物演化,模拟演化过程中基因染色体的选择、交叉和变异得到的算法。在进化过程中,较好的个体有较大的生存几率。
模拟退火:是模拟统计物理中固体物质的结晶过程。在退火的过程中,如果搜索到好的解接受;否则,以一定的概率接受不好的解(即实现多样化或变异的思想),达到跳出局部最优解得目的。
神经网络:模拟大脑神经处理的过程,通过各个神经元的竞争和协作,实现选择和变异的过程。
禁忌搜索:模拟人的经验,通过禁忌表记忆最近搜索过程中的历史信息,禁忌某些解,以避免走回头路,达到跳出局部最优解的目的。
蚂蚁算法:模拟蚂蚁的行为,拟人拟物,向蚂蚁的协作方式学习。
这几种超启发式算法都有一个共同的特点:从随机的可行初始解出发,才用迭代改进的策略,去逼近问题的最优解。他们的基本要素:(1)随机初始可行解;(2)给定一个评价函数(常常与目标函数值有关);(3)邻域,产生新的可行解;(4)选择和接受解得准则;(5)终止准则。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值