引言:

解决实际的问题,要建模型,再求解。求解要选择算法,只有我们对各种算法的优缺点都很熟悉后才能根据实际问题选出有效的算法。但是对各种算法都了如指掌是不现实的,但多知道一些,会使你的选择集更大,找出最好算法的概率越大。现在研一,要开题了些点文献综述,愿与大家分享。

大自然是神奇的,它造就了很多巧妙的手段和运行机制。受大自然的启发,人们从大自然的运行规律中找到了许多解决实际问题的方法。对于那些受大自然的运行规律或者面向具体问题的经验、规则启发出来的方法,人们常常称之为启发式算法(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启发式算法就不在有存在的意义。

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

(水平有限 仅仅提出6点)

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

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

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

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

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

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

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

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

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

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

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

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

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

转载自http://blog.csdn.net/aris_zzy/archive/2006/05/27/757156.aspx

启发式算法简谈(一)相关推荐

  1. .NET简谈网络系统大局观

    我们都知道软件发展经历了很长一段路程,在软件刚刚起步的时候,有一批世界顶尖的科学家用自己整个的人生为我们创造了今天美好的信息世界,我印象最深的是我看过一本书,书名是<优雅人生>是专门介绍一 ...

  2. .NET简谈组件程序设计之(手动同步)

    在上一篇文章".NET简谈组件程序设计之(上下文与同步域) "中,我们学习了关于一些上下文和同步域的概念,可以利用这两个技术来进行自动同步. 今天我们主要学习怎么手动来执行同步,能 ...

  3. php谈谈你对分布式的理解,简谈关于对分布式处理的理解

    原标题:简谈关于对分布式处理的理解 最近这段时间一直在看分布式有关的东西,但是关于分布式自己还是不能很好的理解,所以本文对分布式基础概念进行下学习. 分布式处理 首先先了解一下分布式处理,分布式处理和 ...

  4. 异步复位同步释放_简谈同步复位和异步复位

    简谈同步复位和异步复位 大侠们,江湖偌大,有缘相见,欢迎一叙,今天来聊一聊数字电路设计中的同步复位和异步复位. 谈到同步复位和异步复位,那咱们就不得不来聊一聊复位这个词了.在数字逻辑电路设计中,电路通 ...

  5. 简谈创建字典的几种方式

    简谈创建字典的几种方式 直接用键值对的形式写出 键值对之间用逗号隔开 dict0 = {'name': 'xxx', 'age': 23} 用dict函数 dict1 = dict()

  6. python nonlocal的用法_简谈Python3关键字nonlocal使用场景

    下面是之前提过的有待提升效率的计算移动平均的方法: def make_averager(): series = [] def averager(new_value): series.append(ne ...

  7. .NET简谈组件程序设计之(上下文与同步域)

    我们继续学习.NET多线程技术,这篇文章的内容可能有点复杂.在打破常理之后,换一种新的思考模型最为头疼.这篇文章里面会涉及到一些不太常见的概念,比如:上下文.同步域等等.我也是最近才接触这些关于组件编 ...

  8. .NET简谈事务、分布式事务处理

    在本人的 " .NET简谈事务本质论"一文中我们从整体上了解了事务模型,在我们脑子里能有一个全局的事务处理结构,消除对数据库事务的依赖理解,重新认识事务编程模型. 今天这篇文章我们 ...

  9. .NET简谈组件程序设计之(渗入序列化过程)

    在本人的上一篇文章".NET简谈组件程序设计之(初识序列化.持久化) "中,我们基本上了解了什么叫序列化和持久化.通过系统为我们提供的服务,我们可以很方便的进行二进制序列化.SOA ...

最新文章

  1. 通过OGG实现多源端数据库的数据集中分发
  2. 网络知识:内网、外网、宽带、带宽、流量、网速之间的联系?
  3. java uml eclipse_eclipse uml 工具
  4. OpenStack 云计算基础知识
  5. java ssh框架流程图_SSH框架整合详细分析【执行流程】
  6. F5-yumnfsftp
  7. thinkphp5 return 返回空_杨丞琳演唱会意外踩空,从两层楼高的舞台掉落,李荣浩心疼发文...
  8. maven中引用JDK中的tools jar
  9. 高德地图与百度地图的经纬度偏差纠正
  10. 查看linux系统版本命令大全
  11. CV | Max Flow / Min Cut 最大流最小割算法学习
  12. 感性负载与容性负载的区别
  13. PCI及PCIe基本知识
  14. 最强大脑张雨暄!14岁考入清华大学,18岁直博清华数学系
  15. fpga板子怎么和电脑连_干货教程 | 手把手教你如何使用Multisim对Digilent FPGA开发板进行编程...
  16. Android地图定位-百度地图上定位自己所在的位置
  17. 哪个106短信服务平台好?这4点要参考!
  18. 开关电源MOS管选型500V、600V、650V参数
  19. 介绍自己过去现在和未来_过去,现在和未来
  20. Unity导出模型为Obj文件

热门文章

  1. [云炬创业学笔记]第一章创业是什么测试9
  2. [云炬创业管理笔记]第三章测试4
  3. 关于考研一些问题的思考2017-12-23
  4. 开源!100 页机器学习教程全面开放,附完整代码
  5. 独立成分分析ICA系列5:信息极大化的 ICA 算法
  6. Matlab生成各种伪随机信号_idinput指令
  7. Asp.net常用优化方法
  8. angular-js资料收集
  9. nginx中js修改不生效的问题
  10. 群晖 设置 php 服务器,群晖NAS服务器iSCSI管理器配置连接及使用说明