优化算法——开题的文献综述
老师说我写的不行,重写,呵呵 老师要求比较严格 当然还是严格点好
我要好好再修改改了。
学位论文题目为《基于聚类分析的启发式优化算法》,论文内容涉及了优化算法(主要是经典优化算法,启发式优化算法),算复杂性理论和聚类分析等相关领域。根据这些领域与论文的相关程度,比较详细的归纳总结启发式优化算法,对计算复杂性理论和聚类分析只做了一般性的总结。最后对这些相关领域未来的发展和研究提出自己的观点。
最优化问题
在现实生活中许多重要的问题,都涉及到选区一个最好的目标,或者为达到这个目标而选择某些参数、确定某些值,这些问题都可以归结为最优化问题。
对于一个最小值问题,其形式的描述为
<!–[if !vml]–><!–[endif]–>(1)
这里的S为解的可行域,也称为解空间或搜索空间,条件<!–[if !vml]–><!–[endif]–>概括了对向量<!–[if !vml]–><!–[endif]–>的约束。这些约束可以包括线性或非线性函数,以及离散变量,都可以根据实际要求设置。
最优化问题的目标是找到(1)的最优解(全局最优解或局部最优解)。显然,只要改变目标函数的符号,最大值问题就可以转变成最小值问题,因此,本文在说明都是以最小值问题问标准。
解决最优化问题的算法称为最优化算法,可以分为经典优化算法和启发式优化算法。经典算法的确立可以从(G.B.Dantzig 1947)提出解决线形规划的单纯形(Simplex method)开始,但单纯形不是多项式算法(在后面计算复杂性中会提到)。随后,Kamaka提出了椭球算法(多项式算法),内点法。对于非线性问题,起初人们试图用线性优化理论去逼近求解非线性问题,但效果并不理想。后来的非线性理论大多都建立在二次(凸)函数的基础上,也就用二次函数去逼近其他非线性函数。在此基础上提出许多优化经典的优化算法。无约束的优化算法包括:最速下降法(steepest)、共轭梯度法、牛顿法(Newton Algorithm)、拟牛顿法(pseudo Newton Algorithms)、信赖域法。
约束优化算法包括:拉格朗日乘子法(Augmented Lagrangian Algorithms),序列二次规划(SQP)等。(这里不再对其算法思想作详细介绍)
随着社会的发展,实际问题越来越复杂,例如全局最优化问题。经典算法一般都用得局部信息,如单个初始点及所在点的导数等,这使得经典算法无法避免局部极小问题。全局最优化是NP-Hard问题(在后面计算复杂性中会提到),
在多项式时间内使无法等到其绝对最优解,只能采取某些策略,使得在可接受的时间内得到近似最优解,所以原有的经典算法不再使用,必须对其进行改进,或将其与启发式算法结合。
启发式算法
大自然是神奇的,它造就了很多巧妙的手段和运行机制。受大自然的启发,人们从大自然的运行规律中找到了许多解决实际问题的方法。对于那些受大自然的运行规律或者面向具体问题的经验、规则启发出来的方法,人们常常称之为启发式算法(Heuristic Algorithm)。现在的启发式算法也不是全部来自然的规律,也有来自人类积累的工作经验。
启发式算法有不同的定义:一种定义为,一个基于直观或经验的构造的算法,对优化问题的实例能给出可接受的计算成本(计算时间、占用空间等)内,给出一个近似最优解,该近似解于真实最优解的偏离程度不一定可以事先预计;另一种是,启发式算法是一种技术,这种技术使得在可接受的计算成本内去搜寻最好的解,但不一定能保证所得的可行解和最优解,甚至在多数情况下,无法阐述所得解同最优解的近似程度。我比较赞同第二种定义,因为启发式算法现在还没有完备的理论体系,只能视作一种技术。
启发式算法的计算量都比较大,所以启发式算法伴随着计算机技术的发展,取得了巨大的成就。
40年代:由于实际需要,人们已经提出了一些解决实际问题快速有效的启发式算法。
50年代:启发式算法的研究逐步繁荣起来。随后,人们将启发式算法的思想和人工智能领域中的各种有关问题的求解的收缩方法相结合,提出了许多启发式的搜索算法[]。其中贪婪算法和局部搜索等到人们的关注。
60年代: 随着人们对数学模型和优化算法的研究越来越重视,发现以前提出的启发式算法速度很快,但是解得质量不能保证。虽然对优化算法的研究取得了很大的进展,但是较大规模的问题仍然无能为力(计算量还是太大)。
70年代:计算复杂性理论的提出。NP完全理论告诉我们,许多实际问题不可能在合理的时间范围内找到全局最优解。发现贪婪算法和局部搜索算法速度快,但解不好的原因主要是他们只是在局部的区域内找解,得到的解不能保证全局最优性。由此必须引入新的搜索机制和策略,才能有效地解决这些困难问题,这就导致了超启发式算法(meta-heuristic algorithms)的产生。
Holland模拟地球上生物进化规律提出了遗传算法(Genetic Algorithm),它的与众不同的搜索机制引起了人们再次引发了人们研究启发式算法的兴趣,从而掀起了研究启发式算法的热潮。
80年代以后: 模拟退火算法(Simulated Annealing Algorithm),人工神经网络(Artificial Neural Network),禁忌搜索(Tabu Search)相继出现。最近,演化算法(Evolutionary Algorithm), 蚁羣算法(Ant Algorithms), 拟人拟物算法,量子算法等油相继兴起,掀起了研究启发式算法的高潮。由于这些算法简单和有效,而且具有某种智能,因而成为科学计算和人类之间的桥梁。
优胜劣汰是大自然的普遍规律,它主要通过选择和变异来实现。选择是优化的基本思想,变异(多样化)是随机搜索或非确定搜索的基本思想。“优胜劣汰”是算法搜索的核心,根据“优胜劣汰”策略的不同,可以获得不同的超启发式算法。超启发式算法的主要思想来自于人类经过长期对物理、生物、社会的自然现象仔细的观察和实践,以及对这些自然现象的深刻理解,逐步向大自然学习,模仿其中的自然现象的运行机制而得到的。
遗传算法:是根据生物演化,模拟演化过程中基因染色体的选择、交叉和变异得到的算法。在进化过程中,较好的个体有较大的生存机率。
模拟退火:是模拟统计物理中固体物质的结晶过程。在退火的过程中,如果搜索到好的解接受;否则,以一定的概率接受不好的解(即实现多样化或变异的思想),达到跳出局部最优解得目的。
神经网络:模拟大脑神经处理的过程,通过各个神经元的竞争和协作,实现选择和变异的过程。
禁忌搜索:模拟人的经验,通过禁忌表记忆最近搜索过程中的历史信息,禁忌某些解,以避免走回头路,达到跳出局部最优解的目的。
蚂蚁算法:模拟蚂蚁的行为,拟人拟物,向蚂蚁的协作方式学习。
这几种超启发式算法都有一个共同的特点:从随机的可行初始解出发,才用迭代改进的策略,去逼近问题的最优解。
他们的基本要素:(1)随机初始可行解;
(2)给定一个评价函数(常常与目标函数值有关);
(3)邻域,产生新的可行解;
(4)选择和接受解得准则;
(5)终止准则。
其中(4)集中反映了超启发式算法的克服局部最优的能力。
虽然人们研究对启发式算法的研究将近50年,但它还有很多不足:
1.启发式算法目前缺乏统一、完整的理论体系。
2.由于NP理论,各种启发式算法都不可避免的遭遇到局部最优的问题,如何判断
3.各种启发式算法都有个自优点如何,完美结合。
4.启发式算法中的参数对算法的效果起着至关重要的作用,如何有效设置参数。
5.启发算法缺乏有效的迭代停止条件。
6.启发式算法收敛速度的研究等。
计算复杂性
由于各种算法对同一个问题都有可能给出最优解,为了判定各种算法的效率,人们给出了算法复杂性的度量。计算复杂性理论是研究算法有效性和问题难度的一种工具。它是最优化问题的基础,涉及如何判断一个问题的难易程度。只有了解了所研究问题的复杂性,才能更有针对性地设计有关算法,提高算法效率。
所谓P问题,就是可以被关于问题本身的参数,如维数,约束个数等的多项式时间内求解的问题。NP问题就是对于一个给定的点,能多项式时间内判定它是否给定问题的解的问题。NP包含P是以显然的事实。但是P是否也包含NP,就是一个非常困难的问题。目前这个问题被列为全世界7大数学难题之首。有一类NP问题,它们之间相互等价,求解其中一个问题就求解了全部问题。大部分组合组优化问题属于此类。这类问题称为NP完全问题类。单个问题就称为NP完全问题。一般相信,这类问题不存在多项式时间算法。
全局最优问题
全局最优化的问题很早就有很提出来个,Markowzi&Manne(1957)和Dantzig(1958)讨论了线性混合整数规划问题的全局最优解.(线性优化问题没有全局最优和局部最优的区别,因为线性规划是凸规划,它的可行域上的局部最优就是全局最优).之后又有LAND&DOIG等研究了全局最优化.全局最优化成为数学规划的一个分支的时间是<<Towards Global Optimization>>(dixon&Szego 1975).为了解决这个问题,大量的学者开始研究它,并提出了很多理论和算法,但是人们发现似乎是没有好的算法能有效的解决全局最优化问题.
起初人们用经典算法(如最速下降法,牛顿法,SQP等)进行多初试点的计算不能有效地解决,在那时(1970年代)计算复杂理论创立了.发现全局最优化是NP问题.经典算法对它效果不是很好,随后有的人开始根据全局优化问题的特点对经典算法进行改进,有的则引入了启发式算法(如遗传算法,神经网络,模拟退活).似乎完美的东西是不存在的,如果等到些 什么,总会丢失些其它的.计算时间结果的质量是不能同时提高的,如果想提高计算结果的质量就要多花时间,如果想要快速计算计算的结果就无法保证。组合最优化在实际中有广泛的应用。大部分实际的最优化问题都归结成组合最优化问题。组合最优化考虑如下问题 min f(x) s.t. x属于F 其中F是一个离散点集。组合最优化只是全局最优化的特例。自从Cook1972年提出NP理论,衡量计算复杂性就有了标准。已经证明了相当大一类组合最优化问题是NP困难的问题和NP完全的问题。而这些问题有等价于一些全局最优化问题。因此,计算复杂性的概念就被引入了全局最优化。
个 人 观 点
经典优化算法和启发式优化算法都是迭代算法,但是,它们又有很大区别:1.经典算法是以一个可行解为迭代的初始值,而启发式算法是以一组可行解为初始值;2.经典算法的搜索策略为确定性的,而启发式算法的搜索策略是结构化和随机化;3.经典算法大多都需要导数信息,而启发式算法仅用到目标函数值的信息;4.经典算法对函数性质有着严格要求,而启发式算对函数性质没有太大要求;5.经典算法的计算量要比启发式算法小很多。比如,对于规模较大且函数性质比较差的优化问题,经典算法的效果不好,但一般的启发式算法的计算量太大。
优化算法的主要由搜索方向和搜索步长组成。搜索方向和搜索步长的选区决定了优化算法的搜索广度和搜索深度。经典优化算法和启发式优化算法的区别主要是由其搜索机制不同造成的。经典算法的搜索方向和搜索步长是由局部信息(如导数)决定的所以只能对局部进行有效的深度搜索,而不能进行有效广度搜索,所以经典的优化算法很难跳出局部最优。启发式优化算法,为了避免像经典优化算法那样陷入局部最优,采用了相对有效的广度搜索,不过这样做使得在问题规模较大的时候计算量难以承受。
纵观优化算法的发展,完美的算法是不存在的。我们评价算法好坏的标准:
<!–[if !supportLists]–>(1)<!–[endif]–>算法收敛速度;
<!–[if !supportLists]–>(2)<!–[endif]–>算法使用范围(普适性);
<!–[if !supportLists]–>(3)<!–[endif]–>算法的时间复杂度;
<!–[if !supportLists]–>(4)<!–[endif]–>算法得到解得质量(局部性或全局性,对绝对最优解的近似程度);
<!–[if !supportLists]–>(5)<!–[endif]–>算法的可实现性;
可以说这些标准是不可公度的(不可能同时都好)。以全局最优问题为例,要求计算时间少,搜索广度无法保证,解得质量就差;要求收敛速度快,就需要有效的搜索方向,有了搜索方向就降低了搜索广度,这样解得全局最优性无法保证。
计算复杂性理论,全局优化问题是NP-complete问题。我们只有根据实际问题采用不同的启发式算法。虽然算法的评价标准是不可公度的,但是在具体实际问题中,这些标准不是等重要性的。比如对于某些问题对解得要求降低10%,它的计算是时间就可以减少50%。这样做是否值得,要根据实际情况而定。
在不明显影响解质量的前提下,如何提高启发式算法计算速度。一般的启发式算法大部分都采用随机搜索策略进行广度搜索,每次搜索的规模比较大(可行解数目),可以引入数据发掘的思想,对这些可行解及其所对应函数值进行数据挖掘。数据挖掘对大量数据进行分析(这里主要用到的是其中的聚类分析)从中提取有价值的信息,寻找其找的规律,近似计算出最大可能下降方向,提高搜索效率。这是《基于聚类分析的启发式优化算法》研究目的。