优化算法笔记(二)优化算法的门类
(以下阐述,均非学术术语,仅供大家轻松阅读)
在归类之前,我们先罗列一下常见的优化算法(否则我们如何归类呢?)。
1遗传算法Genetic algorithm
2粒子群优化算法Particle Swarm Optimization
3微分进化算法Differential Evolution
4人工蜂群算法Artificial Bee Colony
5蚁群算法Ant Colony Optimization
6人工鱼群算法Artificial Fish Swarm Algorithm
7杜鹃搜索算法Cuckoo Search
8萤火虫算法Firefly Algorithm
9灰狼算法Grey Wolf Optimizer
10鲸鱼算法Whale Optimization Algorithm
11群搜索算法Group search optimizer
12混合蛙跳算法Shuffled Frog Leaping Algorithm
13烟花算法fireworks algorithm
14菌群优化算法Bacterial Foraging Optimization
以上优化算法为我所了解的算法,未接触过的算法不宜妄下结论,知之为知之,不知为不知。实际上,截至目前,优化算法可能已有数百种,我们不可能也不必全面了解所有算法,而且优化算法之间也存在较大共性,深入研究几类后再接触其他优化算法,上手速度会非常快。
优化算法自提出至今不过50-60年(遗传算法1975年提出),尽管种类繁多但大多较为相似,这也很正常,比较香蕉和人类的基因相似度也有50%-60%。当然,算法之间的相似度要比香蕉和人类的相似度更大,因为它们都是优化算法,拥有相同的目标,只是实现方式不同。就像条条大路通罗马,我们可以步行,可以驾车,可以乘坐火车,也可以乘坐飞机,不管采用何种方式,我们都在通往罗马的路上,也不会说乘坐飞机要比步行更好,交通工具只是一个工具,最终的方案还是要看我们的选择。
上面列举了一些常见的算法,即使你一个都没见过也没关系,后面会对它们进行详细的介绍,但这可能对后面的分类有些影响,不过问题不大,就先将其视为总结。
在对优化算法进行归类之前,先介绍一下算法的模型,在笔记(一)中绘制了优化算法的流程,但那是一个较为简单的模型,此处的模型将更加复杂。上面提到优化算法具有较大的相似性,这些相似性主要体现在算法的运行流程中。
优化算法的求解过程可以被视为一个群体的生存过程。
有一群原始人,他们需要在野外中寻找食物,一个原始人是这个群体中的最小单元,他们的最终目标是寻找这个环境中最容易获取食物的位置,即最易存活下来的位置。每个原始人都独自寻找食物,他们每个人每天获取食物的策略只有采摘果实、设置陷阱或者守株待兔,即在一天之中他们不会改变他们的位置。到了第二天,他们会根据自己的策略改变自己的位置。到了某一天,他们又聚在了一起,选择了他们到过的最容易获取食物的位置定居。
一群原始人=优化算法中的种群、群体;
一个原始人=优化算法中的个体;
一个原始人的位置=优化算法中个体的位置、基因等属性;
原始人改变位置=优化算法中总群的更新操作;
该位置获取食物的难易程度=优化算法中的适应度函数;
一天=优化算法中的一个迭代;
这群原始人最终的定居位置=优化算法所得的解。
优化算法的流程图如下:
对优化算法进行归类需要有一定的标准,按照不同的标准归类也会得到不同的结果。首先介绍一下我所使用的归类标准(动态更新,有了新的感悟再加):
按起源分类比较容易理解,就是该算法受何种现象启发而发明,本质上是对现象的分类。
可以看出,算法根据起源可以大致分为由人类理论创造而来、向生物学习而来、受物理现象启发。其中,向生物学习而来的算法最多,其他类别由于举例有偏差,不是很准确,而且物理现象也经过人类总结,有些与人类现象有交叉,但仍将其独立出来。
类别划分好了,那么为什么要这样分类呢?
当然是为了增加字数啦,啊呸,当然是为了更好地理解学习这些算法的原理及特点。
向动物生存学习而来的算法一定是一种行之有效的方法,能够保证算法的效率和准确性,因为,如果使用该策略的动物无法存活到我们可以对其进行研究,我们也无法得知其生存策略。(而这也是一种幸存者偏差,我们只能看到行之有效的策略,但并不是我们没看到的策略都是垃圾,毕竟也发生过小行星撞击地球这种小概率毁灭性事件。讲个冷笑话开心一下:一只小恐龙对他的小伙伴说,好开心,我最喜欢的那颗星星越来越亮了(完)。)但是由于生物的局限性,人们所创造出的算法也会有局限性:我们所熟知的生物都生活在三维空间,在这些环境中,影响生物生存的条件比较有限,反映到算法中就是这些算法在解决较低维度的问题时效果很好,当遇到超高维(维度>500)问题时,结果可能不容乐观,没做过实验,我也不敢乱说。
按更新过程分类相对复杂一些,主要是根据优化算法流程中更新位置操作的方式来进行分类。更新位置的操作按我的理解可大致分为两类:1.跟随最优解;2.不跟随最优解。
还是上面原始人的例子,每天他有一次去往其他位置狩猎的机会,他们采用何种方式来决定今天自己应该去哪里呢?
如果他们的策略是“跟随最优解”,那么他们选择位置的方式就是按一定的策略向群体已知的最佳狩猎位置(历史最佳)或者是当前群体中的最佳狩猎位置(今天最佳)靠近,至于直线跑过去还是蛇皮走位绕过去,这个要看他们群体的策略。当然,他们的目的不是在最佳狩猎位置集合,他们的目的是在过去的途中看是否能发现更加好的狩猎位置,去往已经到过的狩猎地点再次狩猎是没有意义的,因为每个位置获取食物的难易程度是固定的。有了目标,大家都会朝着目标前进,总有一日,大家会在某个位置附近相聚,相聚虽好但不利于后续的觅食容易陷入局部最优。
若他们的策略为“追随最佳方案”,那么他们选择地点的方式便是遵循某种策略,向群体已知的最佳狩猎场所(历史最佳)或是当前群体内的最佳狩猎场所(今日最佳)靠拢。至于是否直接奔袭还是蜿蜒曲折地绕行,这取决于他们群体的策略。当然,他们的目标并非仅停留在最佳狩猎场所,而是希望在途中的某个地方找到更佳的狩猎地点。前往已探明的狩猎地再次狩猎毫无意义,因为每个地点获取食物的难易程度是既定的。有了目标,众人都会朝着目标前进,终有一日,众人会在某个地点附近聚集,虽然聚集令人愉快,但也不利于后续的觅食,容易陷入局部最佳。
何为局部最佳?假设在当前环境中存在一个“世外桃源”,我们拥有上帝视角,知道这个地方是最适合原始人生存的。然而,此地入口隐蔽,“山有小口,仿佛若有光”,“初极狭,才通人”,是一个难以发现的地方。如果没有任何原始人到达过这里,大家在向已知的最优位置靠近时,也难以发现这个“世外桃源”。而当大家越聚越近之后,“世外桃源”被发现的可能性越来越低。尽管原始人们得到了他们的解,但这并非我们所求的“世外桃源”,他们聚集之后失去了寻求“世外桃源”的可能,这群原始人便陷入了局部最佳。
若他们的策略为“不追随最佳方案”,那么他们的策略又是什么呢?我也不知道,这应该由他们自己决定。毕竟“是什么”比“不是什么”的范围要小得多。总之,在不追随最佳方案时,算法会有自己特定的步骤来更新个体的位置,可能是随机在自己附近寻找,也可能是随机向他人学习。不追随最佳方案时,原始人们不会迅速聚集到某一处,这样一来,他们的选择更具多样性。
根据更新过程对上述算法进行分类,结果如下:
可以看出,上述不追随最佳方案的算法只有遗传算法和差分进化算法,它们的更新策略与进化和基因重组有关。因此,这些不追随最佳方案的算法,它们大多依据进化理论更新位置(基因),我把它们称为进化算法;而那些追随群体最佳方案的算法,它们则大多依赖群体的协作,我把这些算法称为群智能算法。
目前我只总结了这两种分类方法,如果你有更优秀的分类方法,我们可以交流一下:
目录
上一篇文章:优化算法笔记(一)优化算法的介绍
下一篇文章:优化算法笔记(三)粒子群算法(1)
优化算法是什么
什么是智能优化算法 10分
智能优化算法是一种启发式优化算法,包括遗传算法、蚁群算法、禁忌搜索算法、模拟退火算法、粒子群算法等。智能优化算法一般是针对具体问题设计的相关算法,理论要求较低,技术性较强。一般,我们会把智能算法与最优化算法进行比较,相比之下,智能算法计算速度快,应用性强。
传统优化算法和现代优化算法包括哪些?区别是什么
1.传统优化算法一般是针对结构化的问题,有较为明确的问题和条件描述,如线性规划、二次规划、整数规划、混合规划、带约束和不带约束条件等,即有清晰的结构信息;而智能优化算法一般针对的是较为普适的问题描述,普遍比较缺乏结构信息。
2.传统优化算法不少都属于凸优化范畴,有唯一明确的全局最优点;而智能优化算法针对的绝大多数是多极值问题,如何防止陷入局部最优而尽可能找到全局最优是采纳智能优化算法的根本原因:对于单极值问题,传统算法大部分时候已足够好,而智能算法没有任何优势;对多极值问题,智能优化算法通过其有效设计可以在跳出局部最优和收敛到一个点之间有个较好的平衡,从而实现找到全局最优点,但有的时候局部最优也是可接受的,所以传统算法也有很大应用空间和针对特殊结构的改进可能。
3.传统优化算法一般是确定性算法,有固定的结构和参数,计算复杂度和收敛性可做理论分析;智能优化算法大多属于启发性算法,能定性分析却难定量证明,且大多数算法基于随机特性,其收敛性一般是概率意义上的,实际性能不可控,往往收敛速度也比较慢,计算复杂度较高。
最新的优化算法是什么?
这个范围太广了,列出一份文献综述都列不完。
多目标优化算法的多目标是什么意思?
多目标优化的本质在于,大多数情况下,某目标的改善可能引起其他目标性能的降低,同时使多个目标均达到最优是不可能的,只能在各目标之间进行协调权衡和折中处理,使所有目标函数尽可能达到最优,而且问题的最优解由数量众多,甚至无穷大的Pareto最优解组成。
编程中的优化算法问题
1.算法优化的过程是学习思维的过程。学习数学实质上就是学习思维。也就是说数学教育的目的不仅仅是要让学生掌握数学知识(包括计算技能),更重要的要让学生学会数学地思维。算法多样化具有很大的教学价值,学生在探究算法多样化的过程中,培养了思维的灵活性,发展了学生的创造性。在认识算法多样化的教学价值的同时,我们也认识到不同算法的思维价值是不相等的。要充分体现算法多样化的教育价值,教师就应该积极引导学生优化算法,把优化算法的过程看作是又一次发展学生思维、培养学生能力的机会,把优化算法变成学生又一次主动建构的学习活动。让学生在优化算法的过程中,通过对各种算法的比较和分析,进行评价,不仅评价其正确性——这样做对吗?而且评价其合理性——这样做有道理吗?还要评价其科学性——这样做是最好的吗?这样的优化过程,对学生思维品质的提高无疑是十分有用的,学生在讨论、交流和反思的择优过程中逐步学会“多中择优,优中择简”的数学思想方法。教师在引导学生算法优化的过程中,帮助学生梳理思维过程,总结学习方法,养成思维习惯,形成学习能力,长此以往学生的思维品质一定能得到很大的提高。
2.在算法优化的过程中培养学生算法优化的意识和习惯。意识是行动的向导,有些学生因为思维的惰性而表现出算法单一的状态。明明自己的算法很繁琐,但是却不愿动脑做深入思考,仅仅满足于能算出结果就行。要提高学生的思维水平,我们就应该有意识的激发学生思维和生活的联系,帮助他们去除学生思维的惰性,鼓励他们从多个角度去思考问题,然后择优解决;鼓励他们不能仅仅只关注于自己的算法,还要认真倾听他人的思考、汲取他人的长处;引导他们去感受各种不同方法的之间联系和合理性,引导他们去感受到数学学科本身所特有的简洁性。再算法优化的过程中就是要让学生感受计算方法提炼的过程,体会其中的数学思想方法,更在于让学生思维碰撞,并形成切合学生个人实际的计算方法,从中培养学生的数学意识,使学生能自觉地运用数学思想方法来分析事物,解决问题。这样的过程不仅是对知识技能的一种掌握和巩固,而且可以使学生的思维更开阔、更深刻。
3.算法优化是学生个体学习、体验感悟、加深理解的过程。算法多样化是每一个学生经过自己独立的思考和探索,各自提出的方法,从而在群体中出现了许多种算法。因此,算法多样化是群体学习能力的表现,是学生集体的一题多解,而不是学生个体的多种算法。而算法的优化是让学生在群体比较的过程中优化,通过交流各自得算法,学生可以互相借鉴,互相吸收,互相补充,在个体感悟的前提下实施优化。因为优化是学生对知识结构的再构建过程,是发自学生内心的行为和自主的活动。但是,在实施算法最优化教学时应给学生留下一定的探索空间,以及一个逐渐感悟的过程。让学生在探索中感悟,在比较中感悟,在选择中感悟。这样,才利于发展学生独立思考能力和创造能力。
4.优化算法也是学生后继学习的需要。小学数学是整个数学体系的基础,是一个有着严密逻辑关系的子系统。算法教学是小学数学教学的一部分,它不是一个孤立的教学点。从某一教学内容来说,也许没有哪一种算法是最好的、最优的,但从算法教学的整个系统来看,必然有一种方法是最好的、最优的,是学生后继学习所必需掌握的。在算法多样化的过程中,当学生提出各种算法后,教师要及时引导学生进行比较和分析,在比较和分析的过程中感受不同策略的特点,领悟不同方法的算理,分析不同方法的优劣,做出合理的评价,从而选择具有普遍意义的、简捷的、并有利于后继学习的最优方法。
5.优化也是数学学科发展的动力。数学是一门基础学科,是一门工具学科,它的应用十分广泛。数学之所以有如此广泛的应用......>>
-
算法优化的进程是思维训练的过程。学习数学实际上即是思维训练。换言之,数学教育的目标不仅在于使学生掌握数学知识(包含计算技巧),更关键的是要使学生学会数学化的思维。算法的多样性具有极高的教学价值,学生在探索算法多样性的过程中,培养了思维的灵活性,促进了学生的创新力。在认识算法多样性的教学价值的同时,我们也意识到不同算法的思维价值并不等量。要充分发挥算法多样性的教育价值,教师应当积极引导学生优化算法,将优化算法的过程视为又一次提升学生思维、培养学生能力的机会,将优化算法转化为学生又一次主动建构的学习活动。让学生在优化算法的过程中,通过对各种算法的比较和分析,进行评估,不仅评估其正确性——这样做是否正确?而且评估其合理性——这样做是否合理?还要评估其科学性——这样做是否最佳?这样的优化过程,对学生思维品质的提升无疑是十分有益的,学生在讨论、交流和反思的择优过程中逐步学会“在众多中选优,在优中选简”的数学思想方法。教师在引导学生算法优化的过程中,帮助学生梳理思维过程,总结学习方法,养成思维习惯,形成学习能力,长期以往学生的思维品质一定能得到显著的提升。
-
在算法优化的过程中,培养学生的算法优化意识和习惯。意识是行动的指南,有些学生由于思维的惰性而呈现出算法单一的状态。尽管自己的算法可能相当繁琐,却不愿深入思考,仅仅满足于能够算出结果即可。要提高学生的思维水平,我们就应该有意识地激发学生思维与生活的联系,帮助他们克服思维的惰性,鼓励他们从多个角度思考问题,然后择优解决;鼓励他们不能仅仅只关注自己的算法,还要认真倾听他人的思考、汲取他人的优点;引导他们去感受各种不同方法之间的联系和合理性,引导他们去感受数学学科本身所特有的简洁性。在算法优化的过程中,就是要让学生感受计算方法提炼的过程,体会其中的数学思想方法,更在于让学生思维碰撞,并形成符合学生个人实际的计算方法,从中培养学生的数学意识,使学生能自觉地运用数学思想方法来分析事物,解决问题。这样的过程不仅是对知识技能的一种掌握和巩固,而且可以使学生的思维更加开阔、更加深刻。
-
算法优化是学生个体学习、体验感悟、加深理解的过程。算法的多样性是每个学生经过自己独立的思考和探索,各自提出的方法,从而在群体中出现了许多种算法。因此,算法的多样性是群体学习能力的体现,是学生集体的一题多解,而不是学生个体的多种算法。而算法的优化是让学生在群体比较的过程中优化,通过交流各自的算法,学生可以互相借鉴、互相吸收、互相补充,在个体感悟的前提下实施优化。因为优化是学生对知识结构的再构建过程,是发自学生内心的行为和自主的活动。但是,在实施算法最优化教学时,应给学生留下一定的探索空间,以及一个逐渐感悟的过程。让学生在探索中感悟,在比较中感悟,在选择中感悟。这样,才有利于发展学生独立思考能力和创造能力。
-
优化算法也是学生后续学习的需要。小学数学是整个数学体系的基础,是一个有着严密逻辑关系的子系统。算法教学是小学数学教学的一部分,它不是一个孤立的教学点。从某一教学内容来说,也许没有哪一种算法是最好的、最优的,但从算法教学的整个系统来看,必然有一种方法是最好的、最优的,是学生后续学习所必需掌握的。在算法多样化的过程中,当学生提出各种算法后,教师应及时引导学生进行比较和分析,在比较和分析的过程中感受不同策略的特点,领悟不同方法的算理,分析不同方法的优劣,做出合理的评价,从而选择具有普遍意义的、简捷的、并有利于后续学习的最优方法。
-
优化也是数学学科发展的动力。数学是一门基础学科,是一门工具学科,它的应用十分广泛。数学之所以有如此广泛的应用...>