启发式算法

本文介绍了启发式算法的概念与发展历程,探讨了其在解决NP-hard问题中的应用,并对比了启发式算法与贪心算法的区别。此外,还讨论了启发式算法的一些不足之处及其可能的改进方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义

启发式算法(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-hard问题,其中NP是指非确定性多项式。例如,著名的推销员旅行问题(Travel Saleman Problem or TSP):假设一个推销员需要从南京出发,经过广州,北京,上海,…,等 n 个城市, 最后返回香港。 任意两个城市之间都有飞机直达,但票价不等。假设公司只给报销 C 元钱,问是否存在一个行程安排,使得他能遍历所有城市,而且总的路费小于 C?推销员旅行问题显然是 NP 的。因为如果你任意给出一个行程安排,可以很容易算出旅行总开销。但是,要想知道一条总路费小于 C 的行程是否存在,在最坏情况下,必须检查所有可能的旅行安排。

启发式算法的不足和如何解决方法
  • 启发式算法目前缺乏统一、完整的理论体系
    很难解决! 启发式算法的提出就是根据经验提出,没有什么坚实的理论基础。
  • 由于NP理论,启发式算法就解得全局最优性无法保证
    等NP?=P有结果了再说吧,不知道这个世纪能不能行。
  • 各种启发式算法都有个自优点如何,完美结合
    如果你没有实际经验,你就别去干这个,相结合就要做大量尝试,或许会有意外的收获。
  • 启发式算法中的参数对算法的效果起着至关重要的作用,如何有效设置参数
    还是那句话,这是经验活但还要悟性,只有try again…………
  • 启发算法缺乏有效的迭代停止条件。还是经验,迭代次数100不行,就200,还不行就1000…………还不行估计就是算法有问题,或者你把它用错地方了…………
  • 启发式算法收敛速度的研究等
    你会发现,没有完美的东西,要快你就要付出代价,就是越快你得到的解也就越差。

启发式算法中,局部最优值的陷入无法避免。启发式,本质上是一种贪心策略,这也在客观上决定了不符合贪心规则的更好(或者最优)解会错过。简单来说,避免陷入局部最优就是两个字:随机。

三个原则应该把握:越随机越好;越不随机越好;二者平衡最好。

  • 越随机越好:没有随机性,一定会陷入局部最优。为了获得更大的找到最优解的期望,算法中一定要有足够的随机性。具体体现为鲁棒性较好,搜索时多样性较好。算法的每一步选择都可以考虑加入随机性,但要控制好概率。
  • 越不随机越好:随机性往往是对问题内在规律的一种妥协。即没有找到其内在规律,又不知道如何是好,为了获得更好的多样性,逼不得已加入随机。因此,对给定问题的深入研究才是根本:分辨出哪些时候,某个动作就是客观上能严格保证最优的——这点至关重要,直接决定了算法性能。
  • 二者平衡最好:通常情况下,做好第一点,可以略微改善算法性能;做好第二点,有希望给算法带来质的提高。而二者调和后的平衡则会带来质的飞跃。贪心是“自强不息”的精进,不放过任何改进算法的机会;多样性的随机是“厚德载物”的一分包容,给那些目前看似不那么好的解一些机会。调和好二者,不偏颇任何一方才能使算法有出色的性能。
贪心算法

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
无后效性
某阶段的状态一旦确定,则此后过程的演变不再受此前各状态及决策的影响。也就是说,“未来与过去无关”,当前的状态是此前历史的一个完整总结(这一点很重要,之前的过程全部体现在当前状态),此前的历史只能通过当前的状态去影响过程未来的演变。具体地说,如果一个问题被划分各个阶段之后,阶段 k k k中的状态只能通过阶段 k + 1 k+1 k+1中的状态通过状态转移方程得来,与其他状态没有关系,特别是与未发生的状态没有关系,这就是无后效性。

优化问题相关算法有如下分类:
在这里插入图片描述

精确算法(绝对最优解)
精确算法包括线性规划、动态规划、整数规划和分支定界法等运筹学中的传统算法,其算法计算复杂性一般很大,只适合于求解小规模问题,在工程中往往不实用。
启发式算法(近似算法)  
启发式方法指人在解决问题时所采取的一种根据经验规则进行发现的方法。其特点是在解决问题时,利用过去的经验,选择已经行之有效的方法,而不是系统地、以确定的步骤去寻求答案。

参考:https://www.iteye.com/blog/summerbell-422398

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值