ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:90.48KB ,
资源ID:11000630      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11000630.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(算法合集之《非最优化算法初探》.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

算法合集之《非最优化算法初探》.docx

1、算法合集之非最优化算法初探非最优化算法初探北京四中 杨培【关键字】贪心、随机化、最优化、局部搜索【摘要】本文介绍了非最优化算法的基本理论,总结了贪心算法的适用条件和部分使用技巧。并在此基础上介绍了禁忌搜索算法及其应用实例。指出了随机化方法的若干适用范围。总结了非最优化算法的优越性概论现代信息学问题分为两类:一类是存在有效算法的所谓P类问题,另一类是目前尚未找到有效算法的所谓NPC问题。为了解决后一类问题,我们引进了非最优化算法的概念。本节将对NPC的概念和提出非最优化算法的必要性等问题进行阐述。一引言信息学是20世纪后半叶诞生的一门崭新的学科。数学、物理学、化学等学科的诞生是建立在一些科学家纯

2、粹兴趣的研究基础上,其初期,科学家们的工作是纯理论性的。而信息学与他们的最大不同之处在于:自诞生之日起,它就与实际应用紧密地结合在一起了。每一个算法的提出,都有它广泛的应用背景。国际信息学奥林匹克竞赛(IOI)自1989年创办以来,已经举行了11届,其间题目的风格经过了一个曲折的发展过程。但我们应该看到,总的趋势是:向实际靠拢,每个题目都有一个实际背景,考察选手从实际问题中抽象出数学模型的能力。但是,在众多的实际问题中,真正存在有效算法的P问题是少数,而大多数也是困扰人们的是NPC问题。在没有有效算法的情况下,要解决NPC问题,只能用一些非最优化算法在可接受的时间复杂度内求得一些近似解。因此为

3、了考察选手在解决这方面题目的能力,在近年来的竞赛中,分段计分等非正常计分的题目逐渐增多。另外,在竞赛过程中,对于一些暂时想不出有效算法或实现有效算法比较困难的题目,使用非最优化算法可以得到不错的效果。(见表一)由上面两个原因可以看出,今后非最优化算法还是大有用武之地的,对非最优化算法的研究、总结是必要的。年份比赛题目较好的算法题目类型1997IOI火星探测车贪心最大流问题地图标签贪心/随机化NPC问题集装箱概率+贪心随机规划千足虫构造近似算法HEX游戏构造近似算法博弈1998NOI并行计算贪心+随机化大规模搜索1999冬令营迷宫改造贪心+随机化动态规划NOI01串随机化最长路径国家队作业保卫地

4、球邵铮随机化NPC问题IOI地下城市贪心均分纸牌贪心/随机化表格 1应用非最优算法效果较好的题目二基本概念可行性问题和最优性问题的关系应用非最优化算法的题目可简单的分为两类:可行性问题和最优性问题。虽然在选择具体算法时,要对这两种问题加以区分、分别对待,但这两种问题在本质上是统一的,都可以划归为如下的判定问题。定义1.2.1:如果一个问题的每一个实例只有“是”或“否”两种答案,则称这个问题为判定问题。可行性问题可直接转化为“是否存在解”的判定问题。而对于最优性问题,可转化为若干个“是否存在比当前解更优的解”的判定问题。从这种意义上讲,可行性问题最优性问题,我们只需重点研究后者。临域概念定义1.

5、2.2:对于一个最优性问题,它的所有可行解的集合D上的一个映射:N:SD N(S)2D称为一个临域映射,其中2D表示D的所有子集组成的集合,N(S)称为S的临域,SN(S)称为S的一个邻居。事实上,传统的简单算法如爬山法、贪心法都是建立在对临域的搜索基础上的。显然,上面的方法只能得到问题局部最优解,不能保证得到全局最优解。而非最优算法的目的之一就是用较小的代价跳出局部最优点,从而尽可能接近全局最优点。三非最优化算法分类非最优化算法可简单的分为两类:一步算法和改进算法。一步算法该算法的特点是:不在两个可行解之间选择,在未终止的迭代中,又可能不是一个可行解,算法结束时得到一个可行解。这种算法的时间

6、复杂度是容易接受的。该算法的典型例子是火星探测器问题的贪心算法,每一辆车选一条可装矿石最多的路线,直到分配完所有车的路线。该算法没有在两个可行解之间比较选择,算法结束时得到一可行解。应当注意的是:在解决可行性问题的时候,在算法运行中可能发现无法得到最终的一可行解,这就需要进行简单的回溯或者干脆推翻了重来(如果使用了随机化方法)。例子是NOI99的“01串”问题。改进算法改进算法的迭代过程是从一个可行解到另一个可行解,通常通过两个解的比较而选择好的解,进而作为新的起点进行新的迭代,直到满足一定的要求为止。该算法一般应用于最优性问题。例如局部搜索算法或爬山法,都是改进算法的一种。另外,在使用随机化

7、方法时,例如迷宫改造,需要反复随机求得可行解,最后选出其中最优的。这也可以说是一种改进算法。四非最优化算法的性能分析虽然非最优化算法由许多优点,但最大的缺陷是不能保证得到全局最优解,所以对算法的评价就显得十分重要。评价一个非最优化算法需要两条标准:一是看它的解与最优解的接近性,这是根本条件。如果算法得出的解与最优解的差距较大,按目前已有的计分方法,得分会相当低,更不要说应用在求最优解的题目上了。其二是考察算法的稳定性,这也是十分必要的。下面介绍了几种测试算法的简单方法。最坏情况分析对于任何算法,都要考察它在最坏情况的时间复杂度和空间复杂度,但对于非最优化算法,还需要考察它的最坏情况解的效果。通

8、过最坏情况分析来评价算法的效果,其指标是计算解的值同最优解的值之间的差距,差距越小说明算法越好。但是,最坏情况分析不能全面地评价算法的好坏,某些算法在小规模时效果很差,但不能说这个算法一定很差。(例如,集装箱问题中钱文杰的算法)另外,找到一个算法的最坏情况并不容易,它需要很多数学技巧,这也限制了这种分析方法的应用。概率分析概率统计分析的方法是从理论上考虑的,它假设实例的数据服从一定的概率分布。在这个数据概率分布的假设下,研究其算法或解的平均效果。这种分析方法对于估计随机化算法的可行性是十分重要的。例如,对于随机化的素数判定算法,概率分析为算法的稳定性提供了理论基础。但是概率分析是一种理论分析方

9、法,它需要对问题本身有较深入的理解,并且掌握概率模型的建立和概率理论,要求有较强的数学基础。对于一些较复杂的问题,在考场上无法完成分析,因此,它有较大的局限性。大规模计算分析大规模计算分析就是常说的用测试数据测试的方法。它可对多个算法进行评价,比较分析不同算法的效果。可根据各个算法的计算结果,采用简单或统计的方法比较不同算法的性能,而不需要预先得到每个实例的最优解。用这种方法分析算法时,需要产生一些具有代表性的测试数据。关于如何使测试数据全面、准确,请参阅杨帆的准确性、全面性、美观性测试数据设计中的三要素一文。非最优化算法初探一贪心算法1概念贪心算法是从问题的某一个初始解出发逐步逼近给定的目标

10、,以尽可能快地求得更好的解。当达到某算法中的某一步不能再继续前进时,算法停止。这时就得到了问题的一个解,但不能保证求得的最后解是最优的。在改进算法中,贪心算法演化为爬山法。2特点及使用范围贪心算法的优点在于时间复杂度极底。贪心算法与其他最优化算法的区别在于:它具有不可后撤性,可以有后效性,一般情况下不满足最优化原理。贪心算法的特点就决定了它的适用范围,他一般不适用于解决可行性问题,仅适用于较容易得到可行解的最优性问题。这里较容易得到可行解的概念是:当前的策略选择後,不会或极少使后面出现无解的情况。另外,对于近年来出现的交互性题目,贪心算法是一个较好的选择。这是因为,在题目中,一个策略的结果是随

11、题目的进行而逐渐给出的,我们无法预先知道所选策略的结果,这与贪心算法不考虑策略的结果和其具有后效性的特点是不谋而合的。当然,贪心算法还可以为搜索算法提供较优的初始界值。3使用贪心算法的技巧贪心与最优化算法的结合尽管贪心算法有一定的优越性,但它毕竟在一般情况下得不到最优解。因此,为了尽量减小贪心算法带来的副作用,使得最后得到的解更接近最优解,应该在算法尽可能多的地方使用有效的最优化算法(如动态规划)。例如,在火星探测器这道题中,当我们找不到有效的算法使探测器之间互相帮助,综合分配任务时,就只能使用贪心算法。让每辆探测器独自运行找一条可使自己得到矿石最多的路线。在这一过程中,我们可以使用动态规划算

12、法来保证每辆探测器走的是当前最优的路线。虽然每个局部的最优解加在一起不等于全局最优解,但也很大程度上弥补了全局上使用贪心算法的弊端。(详见文献1Vol.1No.1)而在邵铮的保卫地球一题中,对于用有限个导弹将舰队的战斗力降至最低的子问题,使用了贪心的算法。但在分配打击每个舰队的导弹数时,使用了动态规划算法。这样在局部使用贪心,在总体上用“最优”的算法,得到的效果也适当好的。(详见文献7邵铮的解题报告)贪心算法中权值的选择贪心算法的核心是在所选择的策略中,选一个权值最优的策略作为当前策略。因此贪心算法的好坏主要决定于权值的确定。权值的确定算法应遵循两个原则:1尽可能的包含一些选择这一策略後对整个

13、问题的影响的信息。显然,如果包含的信息越多,权值越接近于这个策略的真正价值,这使得到的最后结果越接近最优解。如果权值包含了选择这一策略後对整个问题的全部影响,则算法退化为搜索算法。2计算权值的计算复杂度不能太高,否则将丧失贪心算法的唯一优点。可以看出,以上两个标准是矛盾的,我们的目标就是在这对矛盾中找到平衡点。4贪心算法的改进贪心算法的缺点在于解的效果比较差,而最大优势在于极低的时间复杂度,而且往往时间复杂度远远低于题目的限制。那么,我们为什么不再花一部分时间来提高目标解的效果呢?这就是对贪心算法改进必要性,在这里我们讨论一种贪心算法与搜索策略相结合的算法。局部搜索算法首先回顾一下爬山算法,即

14、纯粹的局部搜索策略。算法2.4.1 局部搜索算法:STEP1:选定一个初始可行解;记录当前最优解,令;STEP2:当时,或满足其他停止运算准则时,输出计算结果,停止运算;否则,从中选一集合S,得到S中的最优解;若,则,;否则,;重复STEP2。 在局部搜索算法中,STEP1的初始可行解可采用贪心算法或其他算法求得。这种算法的效果取决于S的大小。禁忌搜索的一个例子下面我们引入一种禁忌搜索的算法来对局部搜索算法进行改进,它的一个重要思想是标记已得到的局部最优解,并在进一步的迭代中避开这些局部最优解。首先看一个例子。例2.4:NOI99 “01串”问题。先定义一个目标函数:为解x中从第i个字符开始连

15、续L0个字符中“0”的个数。为解x中从第i个字符开始连续L1个字符中“1”的个数。显然,我们的任务是求一个解x,使得。在求解的过程中,目标是寻找f(x)尽可能小的解“x”。用一个实例求解的过程来举例:N=10,A0=1,B0=2,L0=3,A1=1,B1=1,L1=3。假设:初始解,临域映射为对某一个位置进行取反操作,目标值。第1步:候选集操作12345678910评价值22201818181818182022禁忌长度0000000000此处评价值为目标值。从候选集中选一个最好的操作对位置3取反,用标记入选的操作。目标值由24下降为18,有所改善。第2步:, 操作12345678910评价值1

16、71624T14131212121416禁忌长度0030000000由于第1步中选择了对位置3取反,于是,我们希望这样的交换在下面的若干次迭代中不再出现,以避免计算中的循环,操作3称为禁忌对象并限定在3次迭代中不允许再次对位置3取反。对应位置记录3。在中又出现了被禁忌的操作3,故用T标记而不选此交换。第3步:, 操作12345678910评价值111018T9918T87810禁忌长度0020030000新选的操作6被禁后,操作3在被禁一次后还有两次禁忌。第4步:, 操作12345678910评价值6513T4412T712T56禁忌长度0010020300第5步:, 操作1234567891

17、0评价值3587T78T49T23禁忌长度0003010200操作3解禁。 第6步: , 操作12345678910评价值1365T5655T4T4禁忌长度0002000130 第7步: , 操作12345678910评价值2T544T45443T3禁忌长度3001000020此处所有操作的评价值都劣于原值,在原有的局部搜索算法中,此时已达到局部最优解而停止。但现在,我们允许从候选集中选一个最好的操作对位置10取反。这样就能跳出当前的局部最优解。第8步:, 操作12345678910评价值4T76667632T1T禁忌长度2000000013由于评价值更好的操作9和操作10被禁,只能选操作8。

18、这样才能避免跳回原来的局部最优区域。第9步:, 操作12345678910评价值4T7666803T64T禁忌长度1000000302这样就得到了本题的一个解(010*)。由此,可以总结出禁忌搜索算法的步骤:算法2.4.2 禁忌搜索算法:STEP1:选定一个初始解及给以禁忌表;STEP2:若满足停止规则,停止计算;否则,在的邻域中选出满足禁忌要求的候选集;在中选出一个评价值最佳的解,;更新历史记录H,重复STEP2。一些技术问题禁忌搜索中的技术包括:禁忌对象、候选集合的构成、禁忌长度的确定、评价函数的构造、特赦规则、终止规则等。他们对算法的效率有较大的影响。这些都需要在具体问题中具体分析,来设

19、计出效率较高的算法。禁忌对象:是指禁忌表中被禁的变化元素,它可以记录解的简单变化(例如从(1101)(1011)),也可以记录解的某个分量的变化(例2.4中01串问题),还可以记录目标值f(x)的变化。禁忌长度:禁忌长度是被禁对象不允许选取的迭代次数。若长度越长,越容易跳出局部最优区域,但有可能引起目标值收敛速度过慢,影响算法效率。在“01串”这道题上,我使用了非定长的禁忌长度,当前最优目标值越小,禁忌长度相应增加,以利于跳出局部最优解。而在算法运行之初,禁忌长度较小,以使目标值尽快收敛,使算法在此阶段更接近于贪心算法。评价函数:是指候选集合元素选取的一个评价公式,候选集合的元素通过评价函数值

20、来选取。在“01串”中,使用目标值f(x)作为评价函数,这是比较容易理解的。但某些问题中,目标值的计算复杂度太大,若使用目标值作为评价函数,则算法速度较慢,这时需要设计一个替代的评价函数。替代的评价函数不但要求计算复杂度底,而且它应能反映一些目标函数的特性。特赦规则:在迭代过程中,会出现候选集合中的全部对象都被禁忌,或有一对象被禁忌,但若解禁则其目标值将有非常大的下降情况。在这样的情况下,为了达到全局最优,我们会让一些禁忌对象重新可选。这种方法称为特赦。在“01串”中,如果某被禁操作的评价值低于当前出现过的最优的目标值,则可以对其解禁。这种特赦规则在f(x)较小的情况下可以迅速使当前解向最终解

21、靠拢。禁忌搜索算法适用的范围禁忌搜索算法的程序较简单,在竞赛中可以用问题的时间限制作为终止规则,从而最大限度的利用所给的时间,弥补贪心算法的不足。它适于解一些标准的组合最优化问题(如地图标签问题、泄洪区规划问题文献7周天凌),对于类似“01串”问题的可行性问题,则要求题目能较容易的转变为最优化问题,而且要求题目的可行解较多。二随机化方法随机化不是一种完整的算法,在解决非最优化问题过程中,它需要与贪心、局部搜索等算法结合使用,它的作用体现在两个方面:对于可行性问题,提高算法的效率稳定性;对于最优化问题,提高算法的计算结果与最优解的接近度。随机化在贪心中的应用由于贪心算法的时间复杂度是极低的,随机

22、化的应用主要指算法中在策略选择中引入随机因子,应通过大量的重复执行算法来获得一个最优的解。这在并行计算和迷宫改造的随机化算法中有很好的体现并产生了很好的效果。这里就不过多论述了。随机化在局部搜索中的应用在局部搜索算法中的随机化应用有两种:在初始可行解的选择上和搜索过程中对相同权值策略的选择上。如果用随机的办法产生初始可行解能有效地避开人为设置好的局部最优陷阱。它可以提高局部搜索算法的效率(平均)。如果在局部搜索过程中,出现某些评价值一样的情况,可以用随机的方法来选择其中的一个,同样可提高算法的效率。上述两种技巧在“01串”问题的效果如下表:搜索的迭代次数Sequence.003Sequence

23、.004Sequence.005普通禁忌搜索算法10921357758随机选择评价值相同的操作854(3.85%)*726(0.00%)954(0.00%)效率提高程度21.8%46.5%-25.9%初始解由随机确定271319效率提高程度97.5%99.0%97.5%*括号内表示3.85%的实例中算法掉入局部最优陷阱而出不来。总结非最优化算法不但可应用于求解非最优问题,也可以应用于其他最优化问题,它具有如下优点:1 适用范围较广。非最优化算法是一种普适性的算法,对目标函数等题目性质没有特殊要求。2 用非最优化算法在求解最优化问题中,不需要有很强的技巧和对问题有非常深入的了解。尤其是一些搜索优

24、化的题目,需要针对性很强的技巧。而非最优化算法中,计算过程和程序复杂度都是比较简单的,且可以较快得到一个满意解。求非最优解的题目和非最优化算法在竞赛中的大规模的应用还是近几年的事情,许多理论还不成熟,缺乏必要的实践经验,因此本文的总结是十分肤浅的。本文介绍的几种算法只是众多非最优化算法中的几种,其他的还有模拟退火法、遗传算法、人工神经网络等新兴的现代优化计算方法。这些算法在竞赛中的应用还需要大家来探索、实践、总结。【参考文献】1信息学奥林匹克(9899)。中国计算机学会。2IOI98中国集训队优秀论文集。3IOI99中国集训队论文集。4刘福生、王建德。青少年国际信息学奥林匹克竞赛指导人工智能搜

25、索与程序设计。电子工业出版社。1993年。5邢文训、谢金星。现代优化计算方法。清华大学出版社。1999年。6王树和。数学模型基础。中国科技大学出版社。7IOI99中国集训队第三次作业。【附录】NOI99 01串$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R-,S+,T-,V+,X+$M 16384,0,655360program noi99_1;const ifilename:string=sequence.005;type polytype=array1.1000 of 0.1; pathtype=array0.1,1.1000 of integer;var t

26、imer:longint; len:integer; 禁忌表长度 n,n0,n1:integer; a0,b0,l0,a1,b1,l1:integer; poly:polytype; 记录当前的字符序列 path:pathtype; 记录poly中连续字符的0和1的个数 now:longint; 当前字符序列的目标值 total:integer; 记录迭代的次数procedure init;var f:text; i,j:integer;begin assign(f,ifilename);reset(f); readln(f,n,a0,b0,l0,a1,b1,l1); for i:=1 to

27、n do 随机产生初始解 polyi:=random(2); fillchar(path,sizeof(path),0); n1:=n-l1+1;n0:=n-l0+1;计算初始解的目标值 now:=0; for i:=1 to n1 do begin for j:=i to i+l1-1 do if polyj=1 then inc(path1,i); if path1,ib1 then inc(now,path1,i-b1); end; for i:=1 to n0 do begin for j:=i to i+l0-1 do if polyj=0 then inc(path0,i); if path0,ib0 then inc(now,path0,i-b0); end; close(f);end;procedure changevalue(p:integer); 对位置p进行操作后修改pathvar i,t1,t2:integer;begin if pl1 then t1:=p-l1+1 else t1:=1; if pn1 then t2:=p else t2:=n1;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1