1.有时候最优解是难以找到,甚至是无法找到的,此时我们希望去找一个逼近最优解的解。
2.有时非最优解也可接受。
我认为启发式算法称为「探索式算法」or「经验学习法」更加合适。
有一些不错的说法:
ps:这部分可见:什么是启发式算法(heuristic algorithm)
朗文对heuristic的解释是:The use of experience and practical efforts to find answers to questions or to improve performance.
翻译过来就是:依赖于过去的经验来找到问题的解决方式或者提高表现。
维基百科词条heuristic,将其定义为基于经验的技巧(technique),用于解决问题、学习和探索。
我们可以将heuristic等同于经验工作法(rule of thumb)、有依据的猜测(educated guess, a guess beased on a certain amount of information, and therefore likely to be right)和常识**(由经验得来的判断力而非准确测量)**。
启发式算法(Heuristic Algorithm)定义(我赞同的):相对于最优化算法。启发式算法是基于直觉或已有经验的算法,能够在可接受的计算成本(计算时间、占用空间等)内去搜寻最好的解,但是不保证能够找到可行解或最优解,在多数情况下无法阐述所得解用最优解的近似程度。
其特点是在解决问题时,利用过去的经验,选择已经行之有效的方法,而不是系统地、以确定的步骤去寻求答案(指算法)。相对于一般的算法把各种可能性都一一进行尝试,最终能找到问题的答案,启发式算法(启发式方法)则是在有限的搜索空间内,大大减少尝试的数量,能迅速地达到问题的解决。但由于这种方法具有尝试错误的特点,所以也有失败的可能性。 —[[算法 x 模型]]
ps:像极了爱情有没有?你可以选择TA,但TA不保证任何事情。
为了更好地理解,下面举个例子。
驾驶汽车到朋友家,写成算法是这样的:沿167号高速公路往南行至Puyallup;从South Hill Mall出口出来后往山上开4.5英里; 在一个杂物店旁边的红绿灯路口右转,接着在第一个路口左转;从左边褐色大房子的车道进去,就是North Cedar路714号。
用启发式方法来描述则可能是这样:找出上一次我们寄给你的信,照着信上面的寄出地址开车到这个镇;到了之后你问一下我们的房子在哪里。 这里每个人都认识我们——肯定有人会很愿意帮助你的;如果你找不到人,那就找个公共电话亭给我们打电话,我们会出来接你。
40年代:由于实际需要,人们已经提出了一些解决实际问题快速有效的启发式算法。
50年代:启发式算法的研究逐步繁荣起来。随后,人们将启发式算法的思想和人工智能领域中的各种有关问题的求解的收缩方法相结合,提出了许多启发式的搜索算法。其中贪婪算法和局部搜索等到人们的关注。
60年代: 随着人们对数学模型和优化算法的研究越来越重视,发现以前提出的启发式算法速度很快,但是解得质量不能保证。虽然对优化算法的研究取得了很大的进展,但是较大规模的问题仍然无能为力==(计算量还是太大)。td==
70年代:==计算复杂性理论的提出。NP完全理论告诉我们,许多实际问题不可能在合理的时间范围内找到全局最优解。发现贪婪算法和局部搜索算法速度快,但解不好的原因主要是他们只是在局部的区域内找解,得到的解不能保证全局最优性。==由此必须引入新的搜索机制和策略,才能有效地解决这些困难问题,这就导致了超启发式算法(meta-heuristic algorithms)的产生。
Holland模拟地球上生物进化规律提出了遗传算法(Genetic Algorithm),它的与众不同的搜索机制引起了人们再次引发了人们研究启发式算法的兴趣,从而掀起了研究启发式算法的热潮。
80年代以后:模拟退火算法(Simulated Annealing Algorithm),人工神经网络(Artificial Neural Network),禁忌搜索(Tabu Search)相继出现。最近,演化算法(Evolutionary Algorithm), 蚁群算法(Ant Algorithms),拟人拟物算法,量子算法等又相继兴起,掀起了研究启发式算法的高潮。由于这些算法简单和有效,而且具有某种智能,因而成为科学计算和人类之间的桥梁。
hook:[[一些启发式算法的解释]]
共同特点:从随机的可行初始解出发,才用迭代改进的策略,去逼近问题的最优解。— CNN
其中(4)集中反映了超启发式算法的克服局部最优的能力。
不足及待解决问题:
参考:启发式算法