启发式算法是啥?



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

大自然是神奇的,它造就了很多巧妙的手段和运行机制。受大自然的启发,人们从大自然的运行规律中找到了许多解决实际问题的方法。对于那些受大自然的运行规律或者面向具体问题的经验、规则启发出来的方法,人们常常称之为启发式算法(Heuristic Algorithm)。现在的启发式算法也不是全部来自然的规律,也有来自人类积累的工作经验。

 

启发式算法的发展:

启发式算法的计算量都比较大,所以启发式算法伴随着计算机技术的发展,取得了巨大的成就。

40年代:由于实际需要,提出了启发式算法(快速有效)。

50年代:逐步繁荣,其中 贪婪算法和局部搜索 等到人们的关注。

60年代: 反思,发现以前提出的启发式算法速度很快,但是解得质量不能保证,而且对大规

        模的问题仍然无能为力(收敛速度慢)。

70年代:计算复杂性理论的提出,NP问题。许多实际问题不可能在合理的时间范围内找到全局最优解。发现贪婪算法和局部搜索算法速度快,但解不好的原因主要是他们只是在局部的区域内找解,等到的解没有全局最优性。

        由此必须引入新的搜索机制和策略………..

        Holland的遗传算法出现了(Genetic Algorithm)再次引发了人们研究启发式算法的

        兴趣。

80年代以后:

        模拟退火算法(Simulated Annealing Algorithm),人工神经网络(Artificial Neural Network),禁忌搜索(Tabu Search)相继出现。

最近比较热或刚热过去的:

演化算法(Evolutionary Algorithm, 蚁群算法(Ant Algorithms), 拟人拟物算法,量子算法等。

各个算法的思想这就不再详细给出,为什么要引出启发式算法,因为NP问题,一般的经典算法是无法求解,或求解时间过长,我们无法接受。这里要说明的是:启发式算法得到的解只是近似最优解(近似到什么程度,只有根据具体问题才能给出). 二十一世纪的最大的数学难题NP=P,如果NP=P启发式算法就不在有存在的意义。

 

启发式算法的不足和如何解决方法:

启发式算法目前缺乏统一、完整的理论体系。

很难解决! 启发式算法的提出就是根据经验提出,没有什么坚实的理论基础。

由于NP理论,启发式算法就解得全局最优性无法保证。

NP=P有结果了再说吧,不知道这个世纪能不能行。

各种启发式算法都有个自优点如何,完美结合。

如果你没有实际经验,你就别去干这个,相结合就要做大量尝试,或许会有意外的收获。

启发式算法中的参数对算法的效果起着至关重要的作用,如何有效设置参数。

还是那句话,这是经验活但还要悟性,只有try again………..

启发算法缺乏有效的迭代停止条件。

还是经验,迭代次数100不行,就200,还不行就1000…………

还不行估计就是算法有问题,或者你把它用错地方了………..

启发式算法收敛速度的研究等。

你会发现,没有完美的东西,要快你就要付出代价,就是越快你得到的解也就远差。 

    原文作者:启发式算法
    原文地址: https://blog.csdn.net/ch1209498273/article/details/78553070
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞