近期在回顾启发式算法的原理及代码。所谓的启发式算法,描述起来有点抽象。
启发式算法的定义:一个基于直观或经验构造的算法,在可接受的花费(指计算时间和空间)下给出待解决组合优化问题每一个实例的一个可行解,改可行解与最优化的偏离程度一般不能被预计。
我觉得这篇文章中的解释还是不错的,能够帮助理解。
什么是启发式算法(转) - 知之可否 - CSDN博客 https://blog.csdn.net/gao1440156051/article/details/44564785
下面摘抄出一部分:
启发式方法(试探法)是一种帮你寻求答案的技术,但它给出的答案是具有偶然性的(subject to chance),因为启发式方法仅仅告诉你该如何去找,而没有告诉你要找什么。它并不告诉你该如何直接从A 点到达B 点,它甚至可能连A点和B点在哪里都不知道。实际上,启发式方法是穿着小丑儿外套的算法:它的结果不太好预测,也更有趣,但不会给你什么30 天无效退款的保证。
驾驶汽车到达某人的家,写成算法是这样的:沿167 号高速公路往南行至Puyallup;从South Hill Mall 出口出来后往山上开4.5 英里;在一个杂物店旁边的红绿灯路口右转,接着在第一个路口左转;从左边褐色大房子的车道进去,就是North Cedar 路714 号。
用启发式方法来描述则可能是这样:找出上一次我们寄给你的信,照着信上面的寄出地址开车到这个镇;到了之后你问一下我们的房子在哪里。这里每个人都认识我们——肯定有人会很愿意帮助你的;如果你找不到人,那就找个公共电话亭给我们打电话,我们会出来接你。
算法和启发式方法之间的差别很微妙,两个术语的意思也有一些重叠。就本书的目的而言,它们之间的差别就在于其距离最终解决办法的间接程度:算法直接给你解决问题的指导,而启发式方法则告诉你该如何发现这些指导信息,或者至少到哪里去寻找它们。
说到启发式算法,就要说近似算法了。
近似算法定义:近似算法是计算机科学中算法研究的一个重要方向。所谓“近似”,就是指结果不一定是最优的,但是也在可以承受的范围内,而且可以比精确求解消耗更少的资源。这里的资源是计算复杂性理论中的标准,可以是时间,空间或者询问次数等。
贪婪算法定义:贪婪法是一种不追求最优解,只希望得到较为满意解的方法。贪婪法一般可以快速得到满意的解,因为它省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪婪法常以当前情况为基础作最优选择,而不考虑各种可能的整体情况,所以贪婪法不要回溯。
启发式算法大致分为三类:
.进化算法 .群智能算法 .物理现象算法
进化算法分类:
进化算法包括 遗传算法、进化程序设计、进化规划和 进化策略等 。新算法:EDA(Estimation of Distribution)分布估计算法、DE(Differential Evolution)差分进化算法、SA(Simulation Annealing Algorithm)模拟退火算法、Tabu search(TS)禁忌搜索算法、VNS(Variable Neighborhood Search)变邻域搜索算法、Coevolution Algorithms(CoEA)协同进化算法、CA(Cultural Algorithms)文化算法
群智能算法分类:
网友评论