毕业设计(论文)-基于Matlab的遗传算法研究及仿真_第1页
毕业设计(论文)-基于Matlab的遗传算法研究及仿真_第2页
毕业设计(论文)-基于Matlab的遗传算法研究及仿真_第3页
毕业设计(论文)-基于Matlab的遗传算法研究及仿真_第4页
毕业设计(论文)-基于Matlab的遗传算法研究及仿真_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE基于Matlab的遗传算法研究及仿真姓名:学号:学院:机电学院指导教师:日期:2016-7-20

摘要本文首先介绍了遗传算法的基本思想、遗传算法的构成要素、遗传算法的特点、遗传算法的基本模型、遗传算法的应用情况及今后的研究方向等等的内容。之后是基于Matlab7.0下的遗传算法求解函数最值问题。本人选择了函数优化这个应用领域,按照遗传算法的步骤,即编码、解码、计算适应度(函数值)、选择复制运算、交叉运算和变异运算,对函数进行求解最值。第三部分:对遗传算法求函数最值问题的改进。这部分主要针对本文第二部分进行改进,通过改变基本遗传算法运行参数值,如改变交叉概率Pc值和变异概率Pm值,从而使最优值更加接近相对标准下函数的最值。关键词:遗传算法适应度交叉概率变异概率StudyandApplicationofGeneticAlgorithmAbstract:Firstly,theoutlineoftheGeneticArithmetic,mainlyintroducedtheGeneticArithmetic’smentality、elements、specialty、fundamentalmodel、appliedsituationanddirectionofthefollowingresearchandsoon.Secondly,theproblemofsolvingfunctions’maximalandminimumvalueoftheGeneticArithmeticonthebasicofMatlab7.0.Asanewoptimizedmethod,usedwidelyinsomeaspects,suchascomputingandscience、modelidentity、intelligenceobstaclesdiagnoses,itisfittosolvetheproblemsofcomplicatednonlinearandmultidimensionedspacetofindouttheoptimalvalue,whichappliedwidelyinrecentyears.Ichoosefunctionsperfectingandaccordingtoitssteps:coding,decoding,workingtheadaptivedegree(functionvalue),selectivereproductiveoperation,acrossoperation,differentiationoperationandworkingoutthemaximalandminimumvalue.Thirdly,bettermentofusingtheGeneticArithmetictogetfunctions’maximalandminimumvalue.ThispartmakeuseofmethodthatchangingthebasalGeneticArithmetictomakemaximalandminimumvalueapproachingtheonethatfromoppositestandard,suchasachangeofprobabilityofacrossvaluePcanddifferentiationvaluePm.Keywords:GeneticAlgorithm;Theadaptivedegree;ProbabilityofCrossover;ProbabilityofMutationPAGE11前言生命科学与工程科学的相互交叉、相互渗透和相互促进是近代科学技术发展的一个显著特点,而遗传算法的蓬勃发展正体现了科学发展的这一特征和趋势。遗传算法(GeneticAlgorithmGA),是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,它是由美国Michigan大学的J.Holland教授于1975年首先提出的。J.Holland教授和他的研究小组围绕遗传算法进行研究的宗旨有两个:一是抽取和解释自然系统的自适应过程,二是设计具有自然系统机理的人工系统。毫无疑问,J.Holland教授的研究无论对自然系统还是对人工系统都是十分有意义的。众所周知,在人工智能领域中,有不少问题需要在复杂而庞大的搜索空间中寻找最优解或准最优解。因此,研究能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程,从而得到最优解或准最优解的通用搜索算法一直是令人瞩目的课题。遗传算法就是这种特别有效的算法。它的主要特点是简单、通用、鲁棒性强,适用于并行分布处理,应用范围广。尽管遗传算法本身在理论和应用方法上仍有许多待进一步研究的问题,但它在组合优化问题求解、自适应控制、规划设计、机器学习和人工生命等领域的应用中已发展现了其特色和魅力。2遗传算法概述2.1生物进化理论和遗传学的基本知识在介绍遗传算法之前,有必要了解有关的生物进化理论和遗传学的基本知识。达尔文的生物进化论告诉我们,“适者生存,优胜劣汰”。在生物自然环境中,生物种群的自然繁衍,生存,发展,最终取决于它对自然环境的适应能力。当一个种群相对其他种群,对周围的环境能够显示出良好的适应能力,它将在生物竞争中处于优势地位,获取较大的生存机会,反之,该种群则趋向于消亡。所以,一个种群的优异的适应能力是该种群得以繁衍发展的根本。从达尔文的进化论我们可以看出,生物环境对生物的进化主要通过三个途径来进行:选择,交叉和变异。遗传算法是一种模拟生物进化过程的学习方法,它操作的对象是由多个个体构成的种群,通过对种群中的成员模拟生物进化的方式来产生下一代种群,新种群总是在旧种群的基础上获得改进和提高,周而复始,从而使得种群的整体质量朝着优良的方向发展。由于遗传算法是借鉴生物进化的思想,所以,遗传算法仍然沿用生物学中的一些术语。染色体:它是遗传算法中运行的最基本的单位,是特定问题在算法中的表现形式,一般由二进制的数串所组成;基因:它是染色体的最小组成单位,在二进制数串中它由一个数位来表示;基因片:多个基因构成基因片;种群:种群是由多个染色体构成的集合,它的数目称之为种群规模;适应度:适应度反映了染色体所蕴涵的问题解质量的优劣,一般来说,染色体的适应度是一个非负数;适应度函数:染色体到适应度之间的映射关系;选择:遗传算子之一,是算法基于适应度对染色体进行优胜劣汰的操作过程;交叉:遗传算子之一,是算法产生新个体的途径之一,又称之为基因重组;变异:遗传算子之一,是算法产生新个体的途径之一,是小概率发生事件。遗传算法所借鉴的生物学基础就是生物的遗传、变异和进化。遗传世间的生物从其父代继承特性或性状,这种生命现象就称为遗传。生物的遗传方式有以下三个:(1)复制生物的主要遗传方式是复制。遗传过程中,父代的遗传物质DNA被复制到子代。即细胞在分裂时,遗传物质DNA通过复制而转移到新生的细胞中,新细胞就继承了旧细胞的基因。(2)交叉有性生殖生物在繁殖下一代时,两个同源染色体之间通过交叉而重组,亦即在两个染色体的某一相同位置处DNA被切断,其前后两串分别交叉组合而形成两个新的染色体。(3)变异在进行细胞复制时,虽然概率很小,仅仅有可能产生某些复制差错,从而使DNA发生某种变异,产生出新的染色体。这些新的染色体表现出新的性状。生物的不同品种都属于变异,在丰富多彩的生物界中,蕴含着形形色色的变异现象。在这些变异现象中,有的仅仅是由于环境因素的影响造成的,并没有引起生物体内的遗传物质的变化,因而不能够遗传下去,属于不遗传的变异。有的变异现象是由于生殖细胞内的遗传物质的改变引起的,因而能够遗传给后代,属于可遗传的变异。敌酋上的生物,都是经过长期进化而形成的。根据达尔文的自然选择学说,地球上的生物具有很强的繁殖能力。在繁殖过程中,大多数生物通过遗传,使物种保持相似的后代;部分生物由于变异,后代具有明显差别,甚至形成新物种。正是由于生物的不断繁殖后代,生物数目大量增加,而自然界中生物赖以生存的资源却是有限的。因此,为了生存,生物就需要竞争。生物在生存竞争中,根据对环境的适应能力,适者生存,不适者消亡。自然界中的生物,就是根据这种优胜劣汰的原则,不断地进行进化。2.2遗传算法的基本思想遗传算法实质上是一种繁衍、监测和评价的迭代算法。它一般要包含以下几个处理步骤:(1)对问题的解进行编码,即用染色体表示问题的可能潜在解,生成经过编码的初始种群,适应度函数因优化问题的目标函数而定;(2)根据适应度大小挑选个体进行遗传操作;(3)按照适者生存和优胜劣汰的原理逐代演化,得到问题的最优解或近似最优解。每个个体在种群演化过程中都被评价优劣并得到其适应度值,个体在选择、交叉以及变异算子的作用下向更高的适应度进化以达到寻求问题最优解的目标。2.3遗传算法的构成要素遗传算法中包含五个基本要素,即染色体的编码方法、适应度函数、遗传算子、基本遗传算法运行参数及约束条件的处理。每个要素对应不同的环境有各种相应的设计策略和方法,而不同的策略和方法决定了相应的遗传算法具有不同的特征。2.3.1染色体编码方法遗传算法不能直接处理问题空间的参数,而需要把问题的可行解从其解空间转换到遗传算法所能处理的搜索空间中,这一转换方法就称为编码。一般来说,由于遗传算法的鲁棒性,它对编码的要求并不苛刻。但由于编码的方法对于个体的染色体排列形式,以及个体从搜索空间的基因型到解空间的表现型的转换和遗传算子的运算都有很大影响,因此编码方法在很大程度上决定了如何进行群体的遗传进化运算以及遗传进化运算的效率。针对一个具体应用问题,如何设计一种完美的编码方案是遗传算法的应用难点,而目前还没有一套既严密又完整的指导理论及评价准则能帮我们设计编码方案。对于实际应用问题,仍须对编码方法、选择运算方法、交叉运算方法、变异运算方法、解码方法统一考虑,以寻求到一种对问题的描述最为方便、遗传运算效率最高的编码方案。在目前看来,人们已经提出了许多种不同的编码方法,主要有:二进制编码、格雷码和浮点数编码等等。2.3.2适应度函数适应度函数指为了体现染色体的适应能力,引入了对问题中的每一个染色体都能进行度量的函数。遗传算法在进化搜索中基本不利用外部信息,仅以种群中每个个体的适应度函数值为依据进行搜索,因此适应度函数的选取至关重要。遗传算法常常将目标函数直接作为适应度函数,但由于在执行选择操作时,它要按与个体适应度成正比的概率来决定当前群体中每个个体遗传到下一代群体中的几率,而要正确计算此概率,要求所有个体的适应度值必须非负。2.3.3遗传算子(1)选择算子选择操作建立在对个体的适应度进行评价的基础之上,适应度较高的个体被遗传到下一代群体中的概率较大;适应度较低的个体被遗传到下一代群体中的概率较小,因而可以避免有效基因的损失,使高性能的个体得以较大的概率生存,从而提高全局收敛性和计算效率。最常用的选择算子是比例选择算子,它是以正比于个体适应度值的概率来选择相应的个体。另外还有比较常用的选择算子还有:最优保存策略选择、排序选择和随机联赛选择。(2)交叉算子遗传算法中,在交叉运算之前还必须先对群体中的个体进行随机配对,然后在这些配对个体组中两个个体之间进行交叉操作。交叉算子用于组合产生新的个体,它要求对个体编码串中的优良模式不能有太多的破坏并且能有效的产生出一些较好的新个体模式,以便在解空间中能进行有效搜索,且保证对有效模式的破坏概率较小。最常用的交叉算子有单点交叉算子和算术交叉算子。(3)变异算子在生物的遗传和进化过程中,生物的某些基因偶尔会发生变异,从而产生出新的个体,虽然其概率比较小,但对新物种的产生也是一个不可忽视的因素。模仿生物遗传和进化过程中的这种变异现象,在遗传算法中引入了变异算子来产生新的个体。在遗传运算过程中,当交叉操作产生的后代适应度值不再进化且没有达到最优时,意味着算法陷入了早熟。早熟的根源在于有效基因的缺损,变异算子在一定程度上克服了这种情况,它可以改善遗传算法的局部搜索能力,增加种群的多样性。2.3.4基本遗传算法运行参数遗传算法中有下面几个参数对遗传算法的运行有很大影响,需认真选取,它们是:个体编码串长度l、群体大小M、复制概率Pr、交叉概率Pc、变异概率Pm、终止代数T。(1)编码串长度l使用二进制编码表示个体时,编码串长度l的选取与问题所要求的求解精度有关;使用浮点数编码来表示个体时,编码串长度l与决策变量的个数n相等;另外,也可使用变长度的编码来表示个体。(2)群体大小M当M取值较小时,可提高遗传算法的运算速度,但却降低了群体的多样性,有可能会引起遗传算法的早熟现象;而当M取值较大时,又会使得遗传算法的运行效率降低。一般建议的取值范围是20~100。(3)复制概率Pr复制操作建立在对个体的适应度进行评价的基础之上,适应度较高的个体被遗传到下一代群体中的概率较大;适应度较低的个体被遗传到下一代群体中的概率较小,复制概率不可取的太大,也不可以取的太小。(4)交叉概率Pc交叉概率一般取值较大。但如果太大,它会破坏群体中的优良模式,对进化运算不利。一般建议的取值范围是0.4~0.99。另外,也可使用自适应的思想来确定交叉概率Pc。(5)变异概率Pm如果变异概率Pm取值太大,则容易破坏群体中的优良模式,使得遗传算法的搜索趋于随机性;如果取值过小,则它产生新个体和抑制早熟的能力会较差。一般建议的取值范围是0.0001~0.1。另外也可使用自适应的思想来确定变异概率,如取Pm与其上一代群体间的海明距离成反比,其结果会有效地维持群体的多样性。(6)终止代数T终止代数T是表示遗传算法运行结束条件的一个参数,一般建议的取值范围是100~500。至于遗传算法的终止条件,还可以利用别的判定准则。2.4遗传算法的特点遗传算法利用了生物进化和遗传的基本思想,所以它与许多传统优化算法的特点不同,可以充分的缩短搜索时间。传统的优化方法主要有三种:枚举法、启发式算法和搜索算法。(1)枚举法枚举法是指枚举出可行解集合内的所有可行解,以求得精确的最优解。对于连续的函数,该方法要求先对其进行离散化处理,这样就有可能产生离散误差而永远达不到最优解。但是当枚举空间比较大时,该方法的求解效率比较低,有时甚至在目前最先进的计算工具上都无法求解。(2)启发式算法启发式算法是指寻求一种能产生可行解的启发式规则,以找到一个最优解或近似最优解。该方法的求解效率虽然比较高,但是对于每一个需要求解的问题都必须找出其特有的启发式规则,这个启发式规则没有通用性,不适合于所有的问题。(3)搜索算法搜索算法是指寻求一种算法,能在可行解集合的一个子集内进行搜索操作,以找到问题的最优解或者近似最优解。该方法虽然保证不了一定能够得到问题的最优解,但是如果适当的利用一些启发知识,就可在近似解的质量和求解效率上达到一种较好的平衡。而遗传算法既是一种自然进化系统的计算模型,也是一种通用的求解优化问题的适应性搜索方法。随着问题种类的不同以及问题规模的扩大,要寻求一种能以有限的代价来解决搜索和优化的通用方法,遗传算法正是提供了一种有效的途径,它不同于传统的优化方法,它具备的特点主要有以下几个方面:(1)遗传算法采用群体搜索寻找最优解,而不是从单个个体搜索寻找最优解。搜索轨道有多条,而非单条,覆盖面大,利于全局择优。这是遗传算法与传统优化算法的最大区别,传统优化算法是从单个个体搜索寻找最优解,效率比较低。(2)遗传算法求解时利用适应度函数值信息,并不需要问题导数等与问题直接相关的信息。所以说在所定义的函数不连续、多峰或不可微的情况下,也能以很大的概率收敛到全局最优解。(3)遗传算法是以决策变量的编码作为运算对象。在优化过程中借鉴生物学中染色体和基因等概念,模拟自然界中生物的遗传和进化等机理,应用遗传操作,可方便求解无数值概念或很难有数值概念的优化问题,这样的话,遗传算法就克服了非数值变量的操作。(4)遗传算法有极强的容错能力。遗传算法的初始解集本身就带有大量与最优解相差甚远的信息,通过选择、交叉、变异操作能迅速排除与最优解相差极大的解,这是一个强烈的滤波过程。并且是一个并行滤波机制。因此,遗传算法有很高的容错能力,因为它就相当预先就进行了运算,或则说在内部就进行了运算,大大增加了运算的效率。(5)遗传算法使用概率搜索技术。它属于一种自适应概率搜索技术,其选择、交叉、变异等运算都是以一定的概率进行的,增加了其搜索过程的灵活性。实践和理论证明了在一定条件下遗传算法总是以概率1收敛于问题的最优解。(6)遗传算法具有隐含的并行性。并行性是指两个或多个事件在同一时刻发生,这样就大大增加了运算的速度。2.5遗传算法的基本模型(1)将问题的解表示为编码串(生物学术语称为染色体),每一码串代表问题的一个可行解。(2)随机产生一组串长为m的初始群体,该群体就是问题的一个可行解的集合。(3)分别将编码串译码成寻优参数,计算对应的目标函数并变换为适应值。(4)根据码串个体适应值的高低,执行应用复制、交换和变异算子产生下一代群体。(5)返回步骤3,直到满足停止准则为止。这样,反复执行步骤3到步骤5,使码串群体一代代不断进化,最后搜索到最适应问题的个体,求得问题的最优解,其流程图如图1所示。图1遗传算法流程图2.6遗传算法的应用遗传算法提供了一种求解复杂系统优化问题的通用框架,它不依赖于问题的具体领域、对问题的种类有很强的鲁棒性,所以广泛应用于很多学科。下面是遗传算法的一些主要应用领域:1函数优化函数优化是遗传算法的经典应用领域,也是对遗传算法进行性能评价的常用算例。很多人构造出了各种各样的复杂形式的测试函数,有连续函数也有离散函数,有凸函数也有凹函数,有低维函数也有高维函数,有确定函数也有随机函数,有单峰值函数也有多峰值函数等,用这些几何特性各具特色的函数来评价遗传算法的性能,更能反映算法的本质效果。而对于一些非线性、多模型、多目标的函数优化问题,用其他优化方法较难求解,而遗传算法却可以方便地得到较好的结果。2组合优化随着问题规模的增大,组合优化问题的搜索空间也急剧扩大,有时在目前的计算机上用枚举法很难或甚至不可能求出其精确最优解。对这类复杂问题,人们已意识到应把主要精力放在寻求其满意解上,而遗传算法是寻求这种满意解的最佳工具之一。实践证明,遗传算法已经在求解旅行商问题、背包问题、装箱问题、布局优化、图形划分问题等各种具有NP难度的问题得到成功的应用。3生产调度问题生产调度问题在很多情况下建立起来的数学模型难以精确求解,即使经过一些简化之后可以进行求解,也会因简化得太多而使得求解结果与实际相差甚远。目前在现实生产中主要是靠一些经验来进行调度。现在遗传算法已成为解决复杂调度问题的有效工具,在单件生产车间调度、流水线生产间调度、生产规划、任务分配等方面遗传算法都得到了有效的应用。4自动控制在自动控制领域中有很多与优化相关的问题需要求解,遗传算法已在其中得到了初步的应用,并显示出良好的效果。例如用遗传算法进行航空控制系统的优化、使用遗传算法设计空间交会控制器、基于遗传算法的模糊控制器的优化设计、基于遗传算法的参数辨识、基于遗传算法的模糊控制规则的学习、利用遗传算法进行人工神经网络的结构优化设计和权值学习等,都显示出了遗传算法在这些领域中应用的可能性。5机器人学机器人是一类复杂的难以精确建模的人工系统,而遗传算法的起源就来自于人工自适应系统的研究,所以,机器人学理所当然地成为遗传算法的一个重要应用领域。例如,遗传算法已经在移动机器人路径规划、关节机器人运动轨迹规划、机器人逆运动学求解、细胞机器人的结构优化和行为协调等方面得到研究和应用。6图像处理图像处理是计算机视觉中的一个重要研究领域。在图像处理过程中,如扫描、特征提取、图像分割等不可避免地会存在一些误差,从而影响图像的效果。如何使这些误差最小是使计算机视觉达到实用化的重要要求。遗传算法在这些图像处理中的优化计算方面找到了用武之地,目前已在模式识别(包括汉字识别)、图像恢复、图像边缘特征提取等方面得到了应用。7人工生命人工生命是用计算机、机械等人工媒体模拟或构造出的具有自然生物系统特有行为的人造系统。自组织能力和自学习能力是人工生命的两大主要特征。人工生命与遗传算法有着密切的关系。基于遗传算法的进化模型是研究人工生命现象的重要基础理论,虽然人工生命的研究尚处于启蒙阶段,但遗传算法已在其进化模型、学习模型、行为模型、自组织模型等方面显示出了初步的应用能力,并且必将得到更为深入的应用和发展。人工生命与遗传算法相辅相成,遗传算法为人工生命的研究提供一个有效的工具,人工生命的研究也必将促进遗传算法的进一步发展。8遗传编程1989年,美国Standford大学的Koza教授发展了遗传编程的概念,其基本思想是:采用树型结构表示计算机程序,运用遗传算法的思想,通过自动生成计算机程序来解决问题。虽然遗传编程的理论尚未成熟,应用也有一些限制,但它已成功地应用于人工智能、机器学习等领域,目前公开的遗传编程实验系统有十多个。9机器学习学习能力是高级自适应系统所具备的能力之一,基于遗传算法的机器学习,特别是分类器系统,在很多领域中都得到了应用。例如,遗传算法被用于学习模糊控制规则,利用遗传算法来学习隶属度函数,从而更好地改进了模糊系统的性能;基于遗传算法的机器学习可用来调整人工神经网络的连接权,也可用于人工神经网络结构优化设计;分类器系统也在学习式多机器人路径规划系统中得到了成功的应用。10数据挖掘数据挖掘是近几年出现的数据库技术,它能够从大型数据库中提取隐含的、先前未知的、有潜在应用价值的知识和规则。许多数据挖掘问题可看成是搜索问题,数据库看作是搜索空间,挖掘算法看作是搜索策略。因此,应用遗传算法在数据库中进行搜索,对随机产生的一组规则进行进化,直到数据库能被该组规则覆盖,从而挖掘出隐含在数据库中的规则。Sunil已成功地开发了一个基于遗传算法的数据挖掘工具,利用该工具对两个飞机失事的真实数据库进行了数据挖掘实验,结果表明遗传算法是进行数据挖掘的有效方法之一。2.7遗传算法今后的研究方向遗传算法是多学科结合与渗透的产物,已经发展成一种自组织、自适应的综合技术,广泛应用在计算机科学、工程技术和社会科学等领域。其研究工作主要集中在以下几个方面:1基础理论它包括进一步发展遗传算法的数学基础,从理论和试验研究它们的计算复杂性。在遗传算法中,群体规模和遗传算子的控制参数的选取非常困难,但它们又是必不可少的试验参数。在这方面,已有一些具有指导性的试验结果。遗传算法还有一个过早收敛的问题,怎样阻止过早收敛也是人们正在研究的问题之一。2分布并行遗传算法遗传算法在操作上具有高度的并行性,许多研究人员都在探索在并行机和分布式系统上高效执行遗传算法的策略。对分布并行遗传算法的研究表明,只要通过保持多个群体和恰当控制群体间的相互作用来模拟并行执行过程,即使不使用并行计算机,也能提高算法的执行效率。3分类系统分类系统属于基于遗传算法的机器学习中的一类,包括一个简单的基于串规则的并行生成子系统、规则评价子系统和遗传算法子系统。分类系统被人们越来越多地应用在科学、工程和经济领域中,是目前遗传算法研究中一个十分活跃的领域。4遗传神经网络它包括连接权、网络结构和学习规则的进化。遗传算法与神经网络相结合,正成功地用于从时间序列分析来进行财政预算。在这些系统中,训练信号是模糊的,数据是有噪声的,一般很难正确给出每个执行的定量评价。如果采用遗传算法来学习,就能克服这些困难,显著提高系统性能。5进化算法模拟自然进化过程可以产生鲁棒的计算机算法进化算法。遗传算法是其三种典型的算法之一,其余两种算法是进化规划和进化策略。这三种算法是彼此独立地发展起来的。3基于Matlab7.0下的遗传算法求解函数最值问题3.1遗传算法的标准函数已知函数曲线为:f(x)=(sin2x+cos3x)3+2,其中(0=<x<=4)3.2解题步骤说明本人基于Matlab7.0用遗传算法来求函数的最值问题(即最大值和最小值),解决的步骤主要有以下几个方面:(1)编码;(2)解码;(3)计算适应度(函数值);(4)选择复制运算;(5)交叉运算;(6)变异运算。3.2.1编码问题编码是遗传算法要解决的首要问题。Holland的编码方法是二进制编码,但对于许多遗传算法的应用,特别是在工业工程中的应用,这种简单的编码方法很难直接描述问题的性质。近十年来,针对特殊问题,人们提出了其它编码方法。例如:1二进制编码它是遗传算法中最常用的一种编码方法。它具有下列一些优点:(1)编码、解码操作简单易行;(2)交叉、变异操作便于实现;(3)符合最小字符集编码原则;(4)便于利用模式定理对算法进行理论分析。2格雷码编码对于一些连续优化问题,二进制编码由于遗传算法的随机特性而使其局部搜索能力较差。为改进这一特性,人们提出用格雷码进行编码。格雷码编码方法是二进制编码方法的一种变形。它是这样的一种编码方法,其连续的两个整数所对应的编码值之间仅仅只有一个码位是不相同的,其余码位都完全相同。3实数编码对于一些多维、高精度要求的连续函数优化问题,使用二进制编码来表示个体将会带来一些不利。为了克服这些缺点,人们提出实数编码方法,即个体的每个基因值用实数表示。4符号编码方法是指染色体编码串中的基因值取自一个无数值含义、而只有代码含义的符号集。这些符号可以是字符,也可以是数字。本文是采用了二进制编码的方法。3.2.2选择运算遗传算法使用选择运算(或称复制运算)来实现对群体中的个体进行优胜劣汰操作,选择操作的任务就是按某种方法从父代群体中选取一些个体,遗传到下一代群体。下面介绍几种选择方法:1赌盘选择又称比例选择方法。其基本思想是:各个个体被选中的概率与其适应度大小成正比2排序选择该方法的主要思想是:对群体中的所有个体按其适应度大小进行排序,基于这个排序来分配各个个体被选中的概率。3随机联赛选择该方法的基本思想是:每次选取N个个体之中适应度最高的个体遗传到下一代群体中。4最优个体保留方法它的基本思想是:当前群体中适应度最高的个体不参与交叉和变异运算,而是用它来替换本代群体中经过交叉、变异后所产生的适应度最低的个体。本文是采用了最优个体保留的方法。3.2.3交叉运算所谓交叉运算,是指对两个相互配对的染色体按某种方式相互交换其部分基因,从而形成两个新的个体。交叉运算有以下几种:1单点交叉又称为简单交叉,它是指在个体编码串中随机设置一个交叉点,然后在该点相互交换两个配对个体的部分基因。2双点交叉它的具体操作过程是:(1)在相互配对的两个个体编码串中随机设置两个交叉点;(2)交换两个交叉点之间的部分基因。3均匀交叉它是指两个配对个体的每一位基因都以相同的概率进行交换,从而形成两个新个体。4算术交叉它是指由两个个体的线性组合而产生出新的个体。本文是采用了单点交叉的方法。3.2.4变异运算所谓变异运算,是指将个体编码串中的某些基因值用其它基因值来替换,从而形成一个新的个体。变异运算有以下几种:1基本位变异它是指对个体编码串以变异概率p随机指定某一位或某几位基因作变异运算。2均匀变异它是指分别用符合某一范围内均匀分布的随机数,以某一较小的概率来替换个体中每个基因。3高斯变异它是指进行变异操作时,用均值为μ,方差为σ2的正态分布的一个随机数来替换原有基因值。4二元变异它的操作需要两条染色体参与,两条染色体通过二元变异操作后生成两条新个体。新个体中的各个基因分别取原染色体对应基因值的同或/异或。本文是采用了基本位变异的方法。3.3运行参数说明至于运行参数本人设置了7个参数,它们分别是pop_size、gen_max、code_length、u_max、u_min、probability_crossover、probability_mutation。pop_size表示种群规模,遗传算法每次进化都有一定的规模,也就是有多少组(粒子)在当前寻找;gen_max表示最大进化代数,是表示遗传算法运行结束条件的一个参数,一般建议的取值范围是100~500;code_length表示设定编码长度,它与函数的精度有关;u_max表示最大值的自变量取值范围;u_min表示最小值的自变量取值范围;probability_crossover表示交叉率,一般建议的取值范围是0.4~0.99;probability_mutation表示变异率,一般建议的取值范围是0.0001~0.1。3.4对遗传算法求得的最值的分析最优解谁都不知道是多少,本人只是把自变量在0到4之间取的10000个均匀间隔数,函数值就是这些间隔数(自变量)相应的适应度(函数值),y_1_max就是这些适应度(函数值)中最大的一个,y_1_min就是这些适应度(函数值)中最小的一个。可是因为本人取的点有间隔,所以求得的8.1608可能只是最大值附近的某个点,最大值可能在左边,也可能在右边,同样求得的0.2020也可能只是最小值附近的某个点,最小值可能在左边,也可能在右边。同理遗传算法在寻找最优解的时候,因为计算精度的问题也会找到这样一个点,这个点同样可能不是最优的,但是这也是没有办法的,因为毕竟受计算机的影响,所以我们只能希望求最大值时,取到的值越大越好,求最小值时,取到的值越小越好,故认为最优解就是最最大的或者最最小的。3.5运行程序以及对其解释>>ga_maxmin(80,100,10,4,0,0.6,0.1)%当种群规模为80,最大进化代数为100,编码长度为10,自变量的最大值为4,自变量的最小值为0,交叉率为0.6,变异率为0.1时,求得的函数最值y_Max=%遗传算法求解函数后的最大值8.1608BestS=%遗传算法求解函数后的最大值所对应的自变量编码1111111111x_max=%遗传算法求解函数后的最大值4所对应的自变量y_min=%遗传算法求解函数后的最小值0.2032BestS_min=%遗传算法求解函数后的最小值所对应的自变量编码0111011101x_min=%遗传算法求解函数后的最小值2.9326所对应的自变量y_1_max=%相对标准下的最大值8.1608y_1_min=%相对标准下的最小值0.2020其最大值与进化次数关系如图2所示:图2最大值与进化次数关系图其最小值与进化次数关系图如图3所示:图3最小值与进化次数关系图其原函数和遗传算法求得的最值点的综合图像如图4所示:图4原函数和遗传算法求得的最值点的综合图像从运行的结果看,用遗传算法求得的y_Max=8.1608(最大值)和y_1_max=8.1608(相对标准下的最大值)一样大,而用遗传算法求得的y_min=0.2032(最小值)和y_1_min=0.2020(相对标准下的最小值)很相近,只是相差0.0012,这样的结果算是不错的啦。至于上面三个图形本人也来简单介绍一下:最大值与进化次数关系图,从图上可以看出经过多少代后,最大值将趋向平稳;最小值与进化次数关系图,从图上可以看出经过多少代后,最小值将趋向平稳;原函数和遗传算法求得的最值点的综合图像,原函数是指用数学的角度在Matlab7.0下求得的函数曲线,图中的点或小圆圈就是用遗传算法求得的最值点。本身遗传算法就是输出一个值,它不能像遗传算法中嵌套神经网络那样的算法,可以拟和画出函数曲线。至于图中的点或小圆圈为什么才几个,因为进化多少次就有多少个点,如果这些点都画出来的话,将会使得整个图都布满小点,不过后面8、90个都重合了,所以只画出一部分,重合的就没画出来,免得太乱了。另外,有关于BestS=1111111111,BestS_min=0111011101,是怎么一回事呢,BestS表示输出最大函数值所对应自变量编码,BestS_min表示输出最小函数值所对应自变量编码,0对应0000000000,4对应1111111111,为什么要那么多位呢,因为考虑到实数范围的对应编码,例如:x_max=4,x_min=2.9326。3.6从数学的角度求解函数最优值3.6.1自变量x以0.2为步进单位本人令自变量x在0到4之间,以0.2为步进单位,即x取0、0.2、0.4、0.6、0.8、1、1.2……4,以13个函数值为一组,一一列出函数值,同时输出这些函数值中最大的一个函数值,也输出这些函数值中最小的一个函数值,也同时在数学的角度下输出函数的曲线。从函数的曲线中,我们可以很清楚的看出函数的最值(最大值和最小值)。由于x取的值不多,所以函数的曲线将会不是很圆滑,有多处曲折的地方。>>x=0:0.2:4y=(sin(2*x)+cos(3*x)).^3+2y_max=max(y)y_min=min(y)plot(x,y,'b')x=Columns1through1300.20000.40000.60000.80001.00001.20001.40001.60001.80002.00002.20002.4000Columns14through212.60002.80003.00003.20003.40003.60003.80004.0000y=Columns1through133.00003.79253.25872.35022.01801.99951.98921.99632.00002.00712.00842.00001.9417Columns14through211.42920.47690.31251.34571.98932.21534.52338.1608y_max=8.1608y_min=0.3125其在数学角度下求得的函数最值的图像如图5所示:图5在数学角度下求得的函数最值的图像3.6.2自变量x以0.1为步进单位为了让函数的曲线更加圆滑,本人令自变量x在0到4之间,以0.1为步进单位,即x取0、0.1、0.2、0.3、0.4、0.5、0.6……4,以13个函数值为一组,一一列出函数值,同时输出这些函数值中最大的一个函数值,也输出这些函数值中最小的一个函数值,也同时在数学的角度下输出函数的曲线。但是这次输出的函数曲线是在上次输出结果的基础上输出的,两种曲线的颜色不一样,可以形成鲜明的对比,这样可以更加容易地来分析结果。>>holdonx=0:0.1:4y=(sin(2*x)+cos(3*x)).^3+2y_max=max(y)y_min=min(y)plot(x,y,'r')holdoffx=Columns1through1300.10000.20000.30000.40000.50000.60000.70000.80000.90001.00001.10001.2000Columns14through261.30001.40001.50001.60001.70001.80001.90002.00002.10002.20002.30002.40002.5000Columns27through392.60002.70002.80002.90003.00003.10003.20003.30003.40003.50003.60003.70003.8000Columns40through413.90004.0000y=Columns1through133.00003.53683.79253.66933.25872.75912.35022.11102.01802.00031.99951.99431.9892Columns14through261.99071.99631.99972.00002.00182.00712.01112.00842.00212.00001.99441.94171.7705Columns27through391.42920.95030.47690.21410.31250.75661.34571.80731.98932.00602.21533.00894.5233Columns40through416.46078.1608y_max=8.1608y_min=0.2141其在数学角度下求得的函数最值的图像如图6所示:图6在数学角度下求得的函数最值的图像3.6.3自变量x以更精确的数为步进单位为了让函数的曲线更加更加的圆滑,本人令自变量x在0到4之间,以0.01为步进单位,即x取0、0.01、0.02、0.03、0.04、0.05、0.06……4,运行的结果是y_max=8.1608,y_min=0.2025。本人也令自变量x在0到4之间,以0.001为步进单位,即x取0、0.001、0.002、0.003、0.004、0.005、0.006……4,运行的结果是y_max=8.1608,y_min=0.2020,为了精确点,本人也令自变量x在0到4之间,以0.0001和0.00001为步进单位,运行的结果都是y_max=8.1608,y_min=0.2020,证明函数的相对标准下的最大值是8.1608,相对标准下的最小值是0.2020。4对遗传算法求解函数最值问题的改进本部分是讲解如何使由遗传算法求得的函数最值更加接近相对标准下函数的最值。本人是通过修改遗传算法的运行参数值(即交叉率Pc值和变异率Pm值),来达到遗传算法求得的最值更优的目的。4.1寻找求得最优解的运行参数值4.1.1当Pc=0.9和Pm=0.0001这一组运行参数值,本人把交叉率Pc取0.9,变异率Pm取0.0001,得到y_Max=3.5271(最大值)和y_1_max=8.1608(相对标准下的最大值)相差太大,而得到的y_min=3(最小值)和y_1_min=0.2020(相对标准下的最小值)也相差太大,说明交叉率Pc取0.9,变异率Pm取0.0001,不是得到最优解的参数值。>>ga_maxmin(80,100,10,4,0,0.9,0.0001)y_Max=3.5271BestS=1001100000x_max=0.0978y_min=3BestS_min=0000000000x_min=0y_1_max=8.1608y_1_min=0.2020其原函数和遗传算法求得的最值点的综合图像如图7所示:图7原函数和遗传算法求得的最值点的综合图像4.1.2当Pc=0.9和Pm=0.001这一组运行参数值,本人把交叉率Pc取0.9,变异率Pm取0.001,得到y_Max=3.7856(最大值)和y_1_max=8.1608(相对标准下的最大值)相差太大,而得到的y_min=1.9982(最小值)和y_1_min=0.2020(相对标准下的最小值)就相差不太大了,说明交叉率Pc取0.9,变异率Pm取0.001,不是得到最优解的参数值。但是按照这种思路(设置有一定规律的运行参数值)下去的话,很快就可以找到最优解的参数值了。>>ga_maxmin(80,100,10,4,0,0.9,0.001)y_Max=3.7856BestS=1000110000x_max=0.1916y_min=1.9982BestS_min=1001000010x_min=1.0362y_1_max=8.1608y_1_min=0.2020其原函数和遗传算法求得的最值点的综合图像如图8所示:图8原函数和遗传算法求得的最值点的综合图像4.1.3当Pc=0.9和Pm=0.01这一组运行参数值,本人把交叉率Pc取0.9,变异率Pm取0.01,得到y_Max=3.7979(最大值)和y_1_max=8.1608(相对标准下的最大值)相差太大,而得到的y_min=0.3212(最小值)和y_1_min=0.2020(相对标准下的最小值)比较相近了,说明交叉率Pc取0.9,变异率Pm取0.01,不是得到最优解的参数值。但是按照这种思路(设置有一定规律的运行参数值)下去的话,很快就可以找到最优解的参数值了。>>ga_maxmin(80,100,10,4,0,0.9,0.01)y_Max=3.7979BestS=0001110000x_max=0.2190y_min=0.3212BestS_min=0000000011x_min=3.0029y_1_max=8.1608y_1_min=0.2020其原函数和遗传算法求得的最值点的综合图像如图9所示:图9原函数和遗传算法求得的最值点的综合图像4.1.4当Pc=0.9和Pm=0.1这一组运行参数值,本人把交叉率Pc取0.9,变异率Pm取0.1,得到y_Max=8.1608(最大值)和y_1_max=8.1608(相对标准下的最大值)一样了,而得到的y_min=0.2020(最小值)和y_1_min=0.2020(相对标准下的最小值)也一样了,说明交叉率Pc取0.9,变异率Pm取0.1,是得到最优解的参数值。>>ga_maxmin(80,100,10,4,0,0.9,0.1)y_Max=8.1608BestS=1111111111x_max=4y_min=0.2020BestS_min=0011011101x_min=2.9247y_1_max=8.1608y_1_min=0.2020其原函数和遗传算法求得的最值点的综合图像如图10所示:图10原函数和遗传算法求得的最值点的综合图像4.1.5当Pc=0.4和Pm=0.1这一组运行参数值,本人把交叉率Pc取0.4,变异率Pm取0.1,得到y_Max=8.1608(最大值)和y_1_max=8.1608(相对标准下的最大值)一样,而得到的y_min=0.2033(最小值)和y_1_min=0.2020(相对标准下的最小值)就相差一点了,说明交叉率Pc取0.9,变异率Pm取0.1,才是得到最优解的参数值,同时也说明不是改变变异率Pm的取值才会改变求得的最值的,改变交叉率Pc的取值也会改变求得的最值的(相对于上面设置运行参数的规律而言)。>>ga_maxmin(80,100,10,4,0,0.4,0.1)y_Max=8.1608BestS=1111111111x_max=4y_min=0.2033BestS_min=0101011101x_min=2.9169y_1_max=8.1608y_1_min=0.2020其原函数和遗传算法求得的最值点的综合图像如图11所示:图11原函数和遗传算法求得的最值点的综合图像附录解码:functionx_Max=uncodeing(CodeL,m,umax,umin)y1=0;%解码需要的初始值m1=m(1:1:CodeL);%编码给x_Maxfori=1:1:CodeL%1:1:CodeL指从1到CodeL间隔是1y1=y1+m1(i)*2^(i-1);%计算编码数值由2进制转化为10进制endx_Max=(umax-umin)*y1/(2^CodeL-1)+umin;%要把该编码化到要求范围内,这其实是把编码和区间进行了对应,0-1023是编码的范围(最大最小值一样的,所以就只写最大值的)适度函数:functiony=fitness_f(x)y=(sin(2*x)+cos(3*x))^3+2;%给定函数,即所求最大值函数%y_min=(sin(2*x_min)+cos(3*x_min))^3+2;%给定函数,即所求最小值函数(最大最小值实质上是一样的,所以就只写最大值的)选择:functiony=select_reproduce(fi,Oderfi,Size,Indexfi,E)fi_sum=sum(fi);%求出适应度(函数值)之和fi_Size=(Oderfi/fi_sum)*Size;%找出优秀编码(与平均值作比较适应度大于平均值的认为优秀)fi_S=floor(fi_Size);%floor向负无穷取整取整数只舍不入kk=1;fori=1:1:Sizeforj=1:1:fi_S(i)%选择复制TempE(kk,:)=E(Indexfi(i),:);%大于平均值的认为是优秀的保留kk=kk+1;%记录复制个数endendy=TempE;%输出复制结果交叉:functiony=crossover_operation(probability_crossover,Size,TempE,E,BestS,CodeL)pc=probability_crossover;%交叉概率n=ceil(CodeL*rand);%ceil向正无穷取整产生0-Size的随机数作为一点交叉切断处fori=1:2:(Size-1)%上下两个进行交叉所以每步两个temp=rand;%随机产生数值作为概率比较ifpc>temp%大于设定则进行交叉forj=n:1:CodeL%从切断点向后开始进行交叉运算TempE(i,j)=E(i+1,j);%把E的第i+1行j列数值给TempE的第i行第j列TempE(i+1,j)=E(i,j);endendendTempE(Size,:)=BestS;%最大适应度的编码保存在最后,Size,:表示第Size行所有列y=TempE;变异:functiony=mutation_operation(probability_mutation,Size,CodeL,TempE,BestS)pm=probability_mutation;%变异概率fori=1:1:Size%对每行编码查看是否变异forj=1:1:CodeL%对每个编码进行查看是否变异temp=rand;%产生变异概率ifpm>temp%大于设定概率则进行变异TempE(i,j)=not(TempE(i,j));%如果该位置编码为0就变为1,为1就变成0;endendendTempE(Size,:)=BestS;%最大适应度的编码保存在最后y=TempE;主函数:%ga_maxmin(80,100,10,4,0,0.6,0.1)Functionga_maxmin=ga_maxmin(pop_size,gen_max,code_length,u_max,u_min,probability_crossover,probability_mutation)%Parameters%参数Size=pop_size;%种群规模G=gen_max;%最大进化代数CodeL=code_length;%设定编码长度umax=u_max;%最大值变量范围umin=u_min;%最小值变量范围E_min=zeros(Size,CodeL);%初始化最小值编码随机产生需要种群*设定位数长度二进制编码并四舍五入E_max=zeros(Size,CodeL);%初始化最小值编码随机产生需要种群*设定位数长度二进制编码并四舍五入%MainProgram%主程序fork=1:1:G%对每代进行操作time(k)=k;%保存本次进化代序号fors=1:1:Size%对每条编码进行寻优m=E_max(s,:);%提取当前编码m_min=E_min(s,:);%提取最小值部分当前编码%%%%%%%%%解码x_max=uncodeing(CodeL,m,umax,umin);x_min=uncodeing(CodeL,m_min,umax,umin);%%%%%%%%%计算适应度(函数值)F(1,s)=fitness_f(x_max);%最大值部分F(2,s)=x_max;%最大值部分保存对应的x值F_min(1,s)=fitness_f(x_min);%最小值部分F_min(2,s)=x_min;%最小值部分保存对应的x值end%Ji=1./F;%求倒数得出当前目标函数值fi=F(1,:);%将适应度传递给fifi_min=F_min(1,:);%将最小值部分适应度传fi_min[Oderfi,Indexfi]=sort(fi);%将fi进行排序Oderfi:由小到大的新排列;Indexfi:元素在原来数列中序号[Oderfi_min,Indexfi_min]=sort(fi_min);%将最小值部分fi_min进行排序Oderfi_min:由小到大的新排列;Indexfi_min:元素在原来数列中序号Bestfi=Oderfi(Size);%得到最大适应度的值Bestfi_min=Ode

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论