① 进化算法的差分算法
差分进化算法(Differential Evolution, DE)是一种新兴的进化计算技术,或称为差分演化算法、微分进化算法、微分演化算法、差异演化算法。它是由Storn等人于1995年提出的,最初的设想是用于解决切比雪夫多项式问题,后来发现DE也是解决复杂优化问题的有效技术。DE与人工生命,特别是进化算法有着极为特殊的联系。
差分进化算法是基于群体智能理论的优化算法,通过群体内个体间的合作与竞争产生的群体智能指导优化搜索。但相比于进化算法,DE保留了基于种群的全局搜索策略,采用实数编码基于差分的简单变异操作和一对一的竞争生存策略,降低了遗传操作的复杂性。同时,DE特有的记忆能力使其可以动态跟踪当前的搜索情况,以调整其搜索策略,具有较强的全局收敛能力和鲁棒性,且不需要借助问题的特征信息,适于求解一些利用常规的数学规划方法所无法求解的复杂环境中的优化问题。
差分进化算法是一种基于群体进化的算法,具有记忆个体最优解和种群内信息共享的特点,即通过种群内个体间的合作与竞争来实现对优化问题的求解,其本质是一种基于实数编码的具有保优思想的贪婪遗传算法。
DE是一种用于优化问题的启发式算法。本质上说,它是一种基于实数编码的具有保优思想的贪婪遗传算法 。同遗传算法一样,DE包含变异和交叉操作,但同时相较于遗传算法的选择操作,DE采用一对一的淘汰机制来更新种群。由于DE在连续域优化问题的优势已获得广泛应用,并引发进化算法研究领域的热潮。
DE由Storn 以及Price提出,算法的原理采用对个体进行方向扰动,以达到对个体的函数值进行下降的目的,同其他进化算法一样,DE不利用目标函数的梯度信息,因此对目标的可导性甚至连续性没有要求,适用性很强。同时,算法与粒子群优化有相通之处 ,但因为DE在一定程度上考虑了多变量间的相关性,因此相较于粒子群优化在变量耦合问题上有很大的优势。算法的实现参考实现代码部分。
② 进化算法的简介
进化算法包括遗传算法、遗传规划、进化规划和进化策略等等。进化算法的基本框架还是简单遗传算法所描述的框架,但在进化的方式上有较大的差异,选择、交叉、变异、种群控制等有很多变化,进化算法的大致框图可描述如右图所示:
同遗传算法一样,进化算法的收敛性也有一些结果,文献证明了在保存最优个体时通用的进化计算是收敛的,但进化算法的很多结果是从遗传算法推过去的。
遗传算法对交叉操作要看重一些,认为变异操作是算法的辅助操作;而进化规划和进化策略认为在一般意义上说交叉并不优于变异,甚至可以不要交叉操作。
③ 优化算法笔记(七)差分进化算法
(以下描述,均不是学术用语,仅供大家快乐的阅读)
差分进化算法(Differential Evolution Algorithm,DE)是一种基于群体的进化算法,它模拟了群体中的个体的合作与竞争的过程。算法原理简单,控制参数少,只有交叉概率和缩放比例因子,鲁棒性强,易于实现。
差分进化算法中,每一个个体的基因表示待求问题的一个候选解。每次迭代将先进行变异操作,选择一个或多个个体的基因作为基,然后选择不同的个体的差分来构成差分基因,最后将作为基的基因与差分基因相加来得出新的个体。交叉操作将新的个体将于父代的对应个体交叉,然后进行选择操作,比较交叉后的个体与父代的对应个体,选择较优的个体保留至下一代。在迭代完成之后将选择种群中最优个体的基因作为解。
差分进化算法可以算是我所使用过的优化算法中大魔王级别的算法,虽然它每个方面都没有强到离谱,但是综合起来的效果好于大多数算法。它就像一个每个科目都能考到90分(百分制)的学生,虽然没门课都不是最优秀的,但是论综合,论总分,它有极大的概率是第一名。
在我研究优化算法的小路上,我的目标就是找到一个能打败大魔王或是能在大多数方面压制魔王的算法。
这次的主角就选魔王军吧(或者蚁王军,为了与蚁群算法区别还是叫魔王军吧),个体则称之为魔王兵。
魔王兵的能力取决于它们的基因,它们可以根据环境或者需要改变自己的基因使得自己更加强大,更方便的处理问题,问题的维度与基因维度相同。
表示第i个魔王兵在进化了第t次后的基因,该个体有D位基因。
与遗传算法同为进化算法的差分进化算法,它们的操作(算子)也都非常相似的,都是交叉,变异和选择,流程也几乎一样(遗传算法先交叉后变异,差分进化算法先变异后交叉)。
说到差分进化算法中的变异,我就想到一句论语 “三人行,必有我师焉。择其善者而从之,其不善者而改之。” ,其实这句论语已经向我们说明了差分进化算法的整个流程:
“三人行,必有我师焉”——变异,交叉。
“择其善者而从之,其不善者而改之”——选择。
差分进化算法中,当一个魔王兵变异时,它会先找来3个小伙伴,当然是随机找来3个小伙伴,避免同化。在一个小伙伴的基因上加上另外两个小伙伴基因之差作为自己的目标基因。其变异公式如下:
表示第i个魔王兵找到了编号为r1、r2和r3的三个魔王兵,当然了i、r1、r2、r3为互不相同的整数,F为缩放比例因子,通常 ,一般取F=0.5。 为第i个魔王兵交叉后的目标基因图纸,不过这是个半成品,再经过交叉后,目标基因图纸才算完成。
其实现在我们已经有了5个基因图纸了 ,接下来将进行交叉操作。由于变异操作,差分进化算法的种群中个体数至少为4,即魔王军中至少有4个小兵。
交叉操作中,魔王兵i会将目标基因图纸 进行加工得到 ,加工过程如下:
其中 。 为交叉概率,其值越大,发生交叉的概率越大,一般取 。 为{1,2,…,D}中的随机整数,其作用是保证交叉操作中至少有一维基因来自变异操作产生的基因,不能让交叉操作的努力白费。
从公式上可以看出交叉操作实际上是从变异操作得出的基因图纸上选择至少一位基因来替换自己的等位基因,得到最终的基因图纸。
选择操作相对简单,魔王兵i拿到了最终的基因图纸 ,大喊一声,进化吧,魔王兵i的基因改变了。它拿出了能力测量器fitness function,如果发现自己变强了,那么就将基因 保留到下一代,否则它选择放弃进化,让自己还原成 。
实验又来啦,还是那个实验 ,简单、易算、好画图。
实验1 :参数如下
图中可以看出在第20代时,群体已经非常集中了,在来看看最终得出的结果。
这结果真是好到令人发指,恶魔在心中低语“把其他的优化算法都丢掉吧”。不过别往心里去,任何算法都有优缺点,天下没有免费的午餐,要想获得某种能力必须付出至少相应的代价。
实验2:
将交叉率CR设为0,即每次交叉只选择保留一位变异基因。
看看了看图,感觉跟实验1中相比没有什么变化,那我们再来看看结果。
结果总体来说比实验1好了一个数量级。为什么呢?个人感觉应该是每次只改变一位基因的局部搜索能力比改变多位基因更强。下面我们将交叉率CR设为1来看看是否是这样。
实验3:
将交叉率CR设为1,即每次交叉只选择保留一位原有基因。
实验3的图与实验1和实验2相比好像也没什么差别,只是收敛速度好像快了那么一点点。再来看看结果。
发现结果比实验2的结果还要好?那说明了实验2我得出的结论是可能是错误的,交叉率在该问题上对差分进化算法的影响不大,它们结果的差异可能只是运气的差异,毕竟是概率算法。
实验4:
将变异放缩因子设为0,即变异只与一个个体有关。
收敛速度依然很快,不过怎么感觉结果不对,而且个体收敛的路径好像遗传算法,当F=0,时,差分进化算法退化为了没有变异、选择操作的遗传算法,结果一定不会太好。
果然如此。下面我们再看看F=2时的实验。
实验5:
将变异放缩因子设为2。
实验5的图可以明显看出,群体的收敛速度要慢了许多,到第50代时,种群还未完全收敛于一点,那么在50代时其结果也不会很好,毕竟算法还未收敛就停止进化了。
结果不算很好但也算相对稳定。
通过上面5个实验,我们大致了解了差分进化算法的两个参数的作用。
交叉率CR,影响基因取自变异基因的比例,由于至少要保留一位自己的基因和变异的基因导致CR在该问题上对算法性能的影响不大(这个问题比较简单,维度较低,影响不大)。
变异放缩因子F,影响群体的收敛速度,F越大收敛速度越慢,F绝对值越小收敛速度越快,当F=0是群体之间只会交换基因,不会变异基因。
差分进化算法大魔王已经如此强大了,那么还有什么可以改进的呢?当然有下面一一道来。
方案1 .将3人行修改为5人行,以及推广到2n+1人行。
实验6:
将3人行修改为5人行,变异公式如下:
五人行的实验图看起来好像与之前并没有太大的变化,我们再来看看结果。
结果没有明显提升,反而感觉比之前的结果差了。反思一下五人行的优缺点,优点,取值范围更大,缺点,情况太多,减慢搜索速度。
可以看出算法的收敛速度比之前的变慢了一点,再看看结果。
比之前差。
差分进化算法的学习在此也告一段落。差分进化算法很强大,也很简单、简洁,算法的描述都充满了美感,不愧是大魔王。不过这里并不是结束,这只是个开始,终将找到打败大魔王的方法,让新的魔王诞生。
由于差分进化算法足够强,而文中实验的问题较为简单导致算法的改进甚至越改越差(其实我也不知道改的如何,需要大量实验验证)。在遥远的将来,也会有更加复杂的问题来检验魔王的能力,总之,后会无期。
以下指标纯属个人yy,仅供参考
目录
上一篇 优化算法笔记(六)遗传算法
下一篇 优化算法笔记(八)人工蜂群算法
优化算法matlab实现(七)差分进化算法matlab实现
④ 什么是进化算法
应该就是遗传算法。求解的一种方式而已。假设有多个比较好的解,则可以通过杂交,单个的话可以通过变异。还是参考下维基网络或者其他专业书籍比较好
⑤ 进化算法的介绍
进化算法,或称“演化算法” (evolutionary algorithms, EAs) 是一个“算法簇”,尽管它有很多的变化,有不同的遗传基因表达方式,不同的交叉和变异算子,特殊算子的引用,以及不同的再生和选择方法,但它们产生的灵感都来自于大自然的生物进化。与传统的基于微积分的方法和穷举法等优化算法相比,进化计算是一种成熟的具有高鲁棒性和广泛适用性的全局优化方法,具有自组织、自适应、自学习的特性,能够不受问题性质的限制,有效地处理传统优化算法难以解决的复杂问题。
⑥ 多目标进化算法简介
姓名:刘一婷;学号:20021210599;学院:电子工程学院
转自https://blog.csdn.net/sinat_33231573/article/details/80271522
【嵌牛导读】
在实际问题中大都具有多个目标且需要同时满足,即在同一问题模型中同时存在几个非线性目标,而这些目标函数需要同时进行优化处理,并且这些目标又往往是互相冲突的,进化算法的特性往往能很好的解决此类问题。
【嵌牛鼻子】多目标,进化算法
【嵌牛提问】多目标优化和多任务优化的区别?
【嵌牛正文】
1、多目标优化的基本概念
多目标优化问题(MOP)可以被表示为:
subject to
其中, ,Ω是决策空间, 由m个目标函数组成, 称为目标空间。可达到的目标集合被定义为 。很多时候,由于目标彼此矛盾,Ω中的任何一点都不能同时最大化所有目标,所以我们必须平衡这些目标。目标之间的最佳折衷解可以根据Pareto最优性来定义。
Pareto支配:
Pareto最优解:
Pareto最优解集:
Pareto前沿面:
2、多目标进化算法的基本流程
多目标进化算法的种类很多,可以依据某一特征将它们分门别类。基于不同的选择机制,我们可以对其进行分类:
(1) 基于Pareto的方法(Pareto-based Approaches)
(2) 基于群体的方法(Population-based Approaches)
(3) 聚集函数(AggregatingFunctions)
为了深入理解进化算法,我们给出了基于Pareto的MOEA的基本流程,如图2.1所示。首先初始化种群P,然后选择某一个进化算法(如基于分解的多目标进化算法,MOEA/D)对P执行进化操作(如选择、交叉、突变),得到新的种群R。然后构造P∪R的最优解集Nset,我们将最优解集的大小设置为N,如果当前最优解集Nset的大小与N的大小不一致,那么我们需要调整Nset的大小,同时必须注意调整过后的Nset需要满足分布性要求。之后判断算法终止条件是否已经被满足,如果不满足条件则将Nset中的个体复制到种群P中继续下一轮的进化,否则结束。我们一般用算法的迭代次数来控制它的执行。
在MOEA中,算法收敛的必要条件同时也是一个极其重要的方面是保留上一代的最优解集并将其加入新一代的进化过程。这样进化下去,进化种群的最优解集不断向真正的Pareto前沿面收敛,最终得到令人满意的进化结果。
3、多目标优化问题测试集
测试函数可以帮助我们更好地理解算法的优点和缺点,因此测试函数的选择对算法性能的理解与判断尤为重要。构造的简单性、对决策变量和目标数目的可扩展性以及对应于算法的收敛性与多样性均要设障等是选择测试函数时的重要参考依据。DTLZ测试集与WFG测试集是两个经常使用的多目标优化问题测试函数集。
Deb等人在2002年首次提出DTLZ测试函数集,并以共同研究者名字首字母命名(Deb,Thiele,Laumanns,Zitzler),根据不同难度的设置期望,2005年Deb等又在原有七个函数的基础上加入了两个测试函数,共同组成了DTLZ测试函数集。DTLZ测试函数集可以扩展至任意数量的目标(m>=2)并且可以有任意数目个变量(n>=m)。因为变量数与目标数易于控制,所以DTLZ函数集被广泛应用于多目标优化问题当中作为标准测试函数。
WFG测试函数集是Huband等人在2006年提出来的,一共包含9个测试问题,这些问题的目标数目都可以扩展到任意数量。和DTLZ测试函数集比起来,DTLZ问题的变量都是可分离的,因此复杂程度不高,而WFG测试问题的复杂程度更高、处理起来更具有挑战性。WFG测试问题的属性包括可分性或者不可分性、单峰或者多峰、PF形状为凸或者非凸、无偏差参数或有偏差参数。WFG测试函数集可以提供更有效的依据来评估优化算法在各种不同问题上的表现性能。
4、算法性能评价指标
通常在分析MOEA的性能时,我们希望算法在以下三个方面能够具有较好的性能。
(1) 真实的Pareto前沿面PFtrue与算法求解的得出的PFknown与之间的距离应该最小。
(2) 尽管搜索到的解点只是部分解,但最后求得的解点在Pareto最优解集中该均匀分布,在Pareto前沿面上的点也尽量呈现均匀分布。
(3) 在整个前沿上应该能够找出大量的解点,并且前沿上的各区域都应该有解点来代表,除非PFtrue上缺少这一区域。
我们一般认为上述指标当中的第一条是最重要的,因为MOEA的目标是找到一组近似解与真实前端的距离最近。
反向世代距离(Inverted GenerationalDistance):代表真实且均匀分布的Pareto最优解集P* 到算法得到的最优解集P 的平均距离,定义如下:
其中,种群P中个体到个体v之间的最小欧几里德距离用d(v,P)来表示;在真实PF上均匀选取一定数目的个体并将其用P*表示;该算法求得的最优解集用P表示。IGD为算法综合性能评价指标,反映了算法的分布性和收敛性,它是越小越好的。IGD值很小,说明算法求得的最优解集的分布性和收敛性都好。
超体积HV(Hypervolume):超体积指标度量的是通过多目标优化算法获得的非支配解集与参照点围成的目标空间中的维区域的体积。超体积的数学表示如下:
其中δ代表Lebesgue测度,用来测量体积。|S|表示非支配解集的数目,vi表示参照点z*与解集中第i个解构成的超立方体。HV是一个有效的一元质量度量指标,在Pareto支配方面是严格单调的,HV的值越大,表示对应算法的性能越好。此外,HV指标的计算不需要测试问题的理想PF,这一点在实践应用中大大方便了HV的使用。不过,HV指标存在两点限制:1)超体积的计算成本高;2)HV的值受选择的参照点影响大。
⑦ 人工智能之进化算法
进化计算的三大分支包括:遗传算法(Genetic Algorithm ,简称GA)、进化规划(Evolu-tionary Programming,简称EP)和进化策略(Evolution Strategies ,简称ES)。这三个分支在算法实现方面具有一些细微的差别,但它们具有一个共同的特点,即都是借助生物进化的思想和原理来解决实际问题。
遗传算法是一类通过模拟生物界自然选择和自然遗传机制的随机化搜索算法,由美国Holand J教授于1975年首次提出。它是利用某种编码技术作用于称为染色体的二进制数串,其基本思想是模拟由这些串组成的种群的进化过程,通过有组织的、然而是随机的信息交换来重新组合那些适应性好的串。遗传算法对求解问题的本身一无所知,它所需要的仅是对算法所产生的每个染色体进行评价,并根据适应性来选择染色体,使适应性好的染色体比适应性差的染色体有更多的繁殖机会。遗传算法尤其适用于处理传统搜索方法难于解决的复杂的非线性问题,可广泛用于组合优化、机器学习、自适应控制、规划设计和人工生命等领域,是21世纪有关智能计算中的关键技术之一。
1964年,由德国柏林工业大学的RechenbergI等人提出。在求解流体动力学柔性弯曲管的形状优化问题时,用传统的方法很难在优化设计中描述物体形状的参数,然而利用生物变异的思想来随机地改变参数值并获得了较好效果。随后,他们便对这种方法进行了深入的研究和发展,形成了进化计算的另一个分支——进化策略。
进化策略与遗传算法的不同之处在于:进化策略直接在解空间上进行操作,强调进化过程中从父体到后代行为的自适应性和多样性,强调进化过程中搜索步长的自适应性调节;而遗传算法是将原问题的解空间映射到位串空间之中,然后再施行遗传操作,它强调个体基因结构的变化对其适应度的影响。
进化策略主要用于求解数值优化问题。
进化规划的方法最初是由美国人Fogel LJ等人在20世纪60年代提出的。他们在人工智能的研究中发现,智能行为要具有能预测其所处环境的状态,并按照给定的目标做出适当的响应的能力。在研究中,他们将模拟环境描述成是由有限字符集中符号组成的序列。
进化算法与传统的算法具有很多不同之处,但其最主要的特点体现在下述两个方面:
进化计算的智能性包括自组织、自适应和自学习性等。应用进化计算求解问题时,在确定了编码方案、适应值函数及遗传算子以后,算法将根据“适者生存、不适应者淘汰"的策略,利用进化过程中获得的信息自行组织搜索,从而不断地向最佳解方向逼近。自然选择消除了传统算法设计过程中的-一个最大障碍:即需要事先描述问题的全部特点,并说明针对问题的不同特点算法应采取的措施。于是,利用进化计算的方法可以解决那些结构尚无人能理解的复杂问题。
进化计算的本质并行性表现在两个方面:
一是进化计算是内在并行的,即进化计算本身非常适合大规模并行。
二是进化计算的内含并行性,由于进化计算采用种群的方式组织搜索,从而它可以同时搜索解空间内的多个区域,并相互交流信息,这种搜索方式使得进化计算能以较少的计算获得较大的收益。
⑧ 什么是G-p算法
遗传编程(GP)属于进化计算(Evolutionary Computation,EC)模型的一种。EC是一种借鉴自然界进化机制而产生的并行随机搜索算法。进化算法的基本原理是选择和改变,它区别于其他搜索方法有两个显着特征:首先这些算法都是基于种群(population)的;其次在种群中个体(indvial)之间存在竞争。 为搜索特定的(感兴趣的)查询需要一种工具,这种工具可智能生成一组查询并以它们是否能导出与用户给定的同样的对象集来进行评价。GP算法对这一类问题是很实用的。
1 函数集与端点集
一般GP中可生成的程序集是使用者定义的函数集和端点集。表1给出了相应的函数集和端点集,其中函数集由1.3中定义的查询算子、逻辑运算算子以及比较算子所组成。
函数集 {SEL,REL,G-REL,RES},{UNI,INT,DIF},{AND,OR,NOT}, {>,>=,=,<,<=} 端点集类集,属性集,值集
表1 函数集和端点集
在我们的应用中还有一些具有不同句法的查询算子。每个算子具有不同的句法且假定的数据库是面向对象的。因此,它具有为创建个体而使用的特别的函数集(或算子集)和端点集。从而,构成种群的所有个体的创建必然受到每个算子的约束[3]。约束可以是算子的句法和查询的类型,或者是为创建查询选择适当属性值的领域知识。比较算子和逻辑算子只使用于查询的谓词。当比较符号操作数时,仅使用'='。
端点集由CLASS-SET、SLOT-SET和VALUE-SET组成。CLASS-SET由1.2中定义的类名组成,SLOT-SET由每个类的所有属性构成,VALUE-SET由数值和符号值所构成(它们均为属性值)。数值由整型或实型数构成,其数值范围由所用数据库模式定义。符号值由字符串表示的符号属性值构成。
[编辑本段]
2 创建初始种群
为了创建一个个体(查询),首先必须确定特定查询所返回的对象类型。结果类型被选择后,从所选类型返回例子的算子集中随机地选择一个算子,这个过程对查询的每个参数递归地进行。最初,那些句法正确的预定义数量的查询被随机地产生,形成初始种群。
[编辑本段]
3 选择属性值
由于可选择范围大,要从某个查询的值集中选择一个属性值(数值或符号常数)是相当困难的。对于一个范围为[1,10000]的整数集,随机选到一个特定整数的概率仅为1/10000。而对于符号常数,则需要很强的背景知识。因此,我们仅就发生在数据库里的范围选择属性值。
[编辑本段]
4 繁殖新一代种群
每个个体用预定义的适应函数来进行评价。较适应的查询有较高的概率被选来繁殖新种群,这个过程用三个遗传算子:选择、杂交和变异来完成。为了产生下一代,选择算子根据个体的适应值来选择个体。我们用一个树来表示一个查询,杂交算子用交换两个父辈的子树来创建两个后代。变异算子用一个新的子树来代替一个父辈的子树,从而产生一个新的后代。选择-杂交-变异循环反复地进行直到终止标准被满足。
[编辑本段]
5 评价(适应函数测量)
我们使用如下的适应函数f来评价种群中的个体查询i :
f ( ni , hi ) = T - ( hi * hi ) / ni ,
其中:ni > 0 , T ≥ hi , 且 i = 1 ,2 ,… ,种群的大小(T是被确定的对象集的势,hi是一个个体查询i 被选中的次数,ni是查询 i 结果集的势)。
上述适应函数依赖于hi和ni ,如果一个查询没有被选中(hi=0),则函数的值为T,这是最差的一个适应值。另一方面,如果查询结果能够很好地匹配提交给系统的对象集,那么它的适应值为0(在这种情况下hi = ni = T )。如果种群中出现个体适应值远远超过种群平均适应值,该个体很快就会在群体中占有绝对的比例,从而出现过早收敛的现象。另一方面,在搜索过程的后期,群体的平均适应值可能会接近群体的最优适应值,从而导致搜索目标难以得到改善,出现停滞现象[4]。为了防止上述情况的发生,我们将对一个个体查询的例子个数 ni 作为分母。
⑨ 进化算法入门读书笔记(一)
这里我参考学习的书籍是:
《进化计算的理论和方法》,王宇平,科学出版社
《进化优化算法:基于仿生和种群的计算机智能方法》,[美]丹·西蒙,清华大学出版社。
进化算法是 求解优化问题 的一种算法,它是 模仿生物进化与遗传原理 而设计的一类随机搜索的优化算法。
不同的作者称进化算法有不同的术语,以下。注:这里仅列举出了我自己比较容易混淆的一些,并未全部列出。
进化计算: 这样能强调算法需要在 计算机上 实施,但进化计算也可能指不用于优化的算法(最初的遗传算法并不是用于优化本身,而是想用来研究自然选择的过程)。因此,进化优化算法比进化计算更具体。
基于种群的优化: 它强调进化算法一般是让问题的候选解 种群 随着时间的进化以得到问题的更好的解。然而许多进化算法每次迭代只有单个候选解。因此,进化算法比基于种群的优化更一般化。
计算机智能/计算智能: 这样做常常是为了区分进化算法与专家系统,在传统上专家系统一直被称为人工智能。专家系统模仿演绎推理,进化算法则模仿归纳推理。进化算法有时候也被看成是人工智能的一种。计算机智能是比进化算法更一般的词,它包括神经计算、模糊系统、人工生命这样的一些技术,这些技术可应用于优化之外的问题。因此,进化计算可能比计算机智能更一般化或更具体。
由自然启发的计算/仿生计算: 像差分进化和分布估计算法这些进化算法可能并非源于自然,像进化策略和反向学习这些进化算法与自然过程联系甚微。因此,进化算法比由自然启发的算法更一般化,因为进化算法包括非仿生算法。
机器学习: 机器学习研究由经验学到的计算机算法,它还包括很多不是进化计算的算法,如强化学习、神经网络、分簇、SVM等等。因此,机器学习比进化算法更广。
群智能算法: 一些人认为群智能算法应与进化算法区分开,一些人认为群智能算法是进化算法的一个子集。因为群智能算法与进化算法有相同的执行方式,即,每次迭代都改进问题的候选解的性能从而让解的种群进化。因此,我们认为群智能算法是一种进化算法。
进化算法的简单定义可能并不完美。在进化算法领域术语的不统一会让人困惑,一个算法是进化算法如果它通常被认为是进化算法,这个戏谑的、循环的定义一开始有些麻烦,但是一段时间后,这个领域工作的人就会习惯了。
优化几乎适用于生活中的所有领域。除了对如计算器做加法运算这种过于简单的问题,不必用进化算法的软件,因为有更简单有效的算法。此外对于每个复杂的问题,至少应该考虑采用进化算法。
一个优化问题可以写成最小化问题或最大化问题,这两个问题在形式上很容易互相转化:
函数 被称为目标函数,向量 被称为独立变量,或决策变量。我们称 中元素的个数为问题的维数。
优化问题常常带有约束。即在最小化某个函数 时,对 可取的值加上约束。不举例。
实际的优化问题不仅带有约束,还有多个目标。这意味着我们想要同时最小化不止一个量。
例子:
这里评估这个问题的一种方式是绘制 作为函数 的函数的图:
如图,对在实线上的 的值,找不到能同时使 和 减小的 的其他值,此实线被称为 帕累托前沿 ,而相应的 的值的集合被称为帕累托集。(此处的帕累托最优问题十分重要,可以参考这个链接来学习和理解: 多目标优化之帕累托最优 - 知乎 ,非常清晰易懂。)
该例子是一个非常简单的多目标优化问题,它只有两个目标。实际的优化问题通常涉及两个以上的模目标,因此很难得到它的帕累托前沿,由于它是高维的,我们也无法将它可视化。后面的章节将会仔细讨论多目标进化优化。
多峰优化问题是指问题不止一个局部最小值。上例中的 就有两个局部最小值,处理起来很容易,有些问题有很多局部最小值,找出其中的全局最小值就颇具挑战性。
对于前面的简单例子,我们能用图形的方法或微积分的方法求解,但是许多实际问题除了有更多独立变量、多目标,以及带约束之外更像上面的Ackley函数这样,对于这类问题,基于微积分或图形的方法就不够用了,而进化算法却能给出更好的结果。
到现在为止我们考虑的都是连续优化问题,也就是说,允许独立变量连续地变化。但有许多优化问题中的独立变量智能在一个离散集合上取值。这类问题被称为组合优化问题。如旅行商问题。
对于有 个城市的旅行商问题,有 个可能的解。对于一些过大的问题,硬算的方法不可行,像旅行商这样的组合问题没有连续的独立变量,因此不能利用导数求解。除非对每个可能的解都试一遍,不然就无法确定所得到的组合问题的解是否就是最好的解。进化算法对这类大规模、多维的问题,它至少能帮我们找出一个好的解(不一定是最好的)。