遗传算法——耐心看完-你就掌握了遗传算法【精品毕业设计】(完整版)
遗传算法解决TSP问题【精品毕业设计】(完整版)
GA(Fitness,Fitness_threshold,p,r,m)
Fitness:适应度评分函数,为给定假设赋予一个评估分数
Fitness_threshold:指定终止判据的阈值
p:群体中包含的假设数量
r:每一步中通过交叉取代群体成员的比例
m:变异率
初始化群体:P←随机产生的p个假设
在本程序的TSP问题中一共有20个城市,也就是在图模型中有20个顶点,因此一个染色体的长度为20。
3.3适应函数f(i)
对具有n个顶点的图,已知各顶点之间( , )的边长度d( , ),把 到 间的一条通路的路径长度定义为适应函数:
对该最优化问题,就是要寻找解 ,使f( )值最小。
3.4选择操作
选择作为交叉的双亲,是根据前代染色体的适应函数值所确定的,质量好的个体,即从起点到终点路径长度短的个体被选中的概率较大。
(2)交叉(Crossover):对于选中进行繁殖的两个染色体X,Y,以X,Y为双亲作交叉操作,从而产生两个后代X1,Y1.
(3)变异(Mutation):对于选中的群体中的个体(染色体),随机选取某一位进行取反运算,即将该染色体码翻转。
用遗传算法求解的过程是根据待解决问题的参数集进行编码,随机产生一个种群,计算适应函数和选择率,进行选择、交叉、变异操作。如果满足收敛条件,此种群为最好个体,否则,对产生的新一代群体重新进行选择、交叉、变异操作,循环往复直到满足条件。
3.变异:使用均匀的概率从Ps中选择m%的成员.对于选出的每个成员,在它表示中随机选择一个为取反
4.更新:P←Ps
5.评估:对于P中的每个h计算Fitness(h)
从P中返回适应度最高的假设
3.
3.1 TSP问题的图论描述
本科毕业论文-基于遗传算法的测试用例生成方法【精品毕业设计】(完整版)
摘要软件测试是保证软件质量和可靠性重要手段,在这方面发挥着其它方法不可替代的作用。
然而,软件测试是一个复杂的过程,需要耗费巨大的人力、物力和时间,约占整个软件开发成本的40%~50%。
因此,提高软件测试工具的自动化程度对于确保软件开发质量、降低软件开发成本非常重要。
而提高测试用例生成的自动化程度又是提高测试工具乃至整个测试过程自动化程度的关键所在,本文主要针对这一问题进行了研究和设计。
本文在分析软件测试和遗传算法基本概念的基础上,提出软件测试用例的设计是软件测试的难点之一。
论文提出了基于遗传算法的测试用例生成的内含是应用遗传算法来求解一组优化的测试用例,其框架包括了测试环境构造、遗传算法及测试运行环境三部分,论文给出了基于遗传算法的测试用例生成的模型。
最后以三角形分类程序为例应用遗传算法进行测试用例生成的模拟,结果显示,应用遗传算法进行测试用例生成可行。
关键词:软件测试测试用例遗传算法ABSTRACTSoftware test is the important means that guarantee software quality and reliability,and in this respect,it plays the role that other method cannot replace. However software test is a complex process , it needs to consume huge manpower,material resources and time,which takes the 40%~50% of entire software development cost approximately . Therefore,raising the automation level of software test tool is very important for ensure software development quality and reduction software development cost . And then,the most important is raising the automation level of the test case generation for raising the automation level of test tool and even entire test process,so this paper study and design mainly according to this problem.Based on the analysis of basic concepts of software testing and genetic algorithm, this article proposes that software test case design is one of the difficulties of software testing. Paper presents the inherent in software test case designing based on genetic algorithm is using genetic algorithm to solve a set of optimization test cases, and the framework includes three parts which are test environment construction, genetic algorithm and the environment for test . Paper presents the model of software test case generation based on genetic algorithm. Finally, we take the triangle categorizer as an example, simulate software test case generation based on genetic algorithm. The results display that software test case generation basing on genetic algorithm is possible.KEY WORDS: software test , test case , genetic algorithm目录摘要 (1)ABSTRACT (2)目录 (3)第一章绪论 (5)1.1 问题的提出 (5)1.2 国内外研究现状 (6)1.3 论文研究内容 (8)第二章软件测试及遗传算法基本概念 (9)2.1 软件测试基本概念 (9)2.1.1 软件测试的目的 (9)2.1.2 软件测试的原则 (9)2.2 软件测试的难点 (10)2.3 遗传算法 (11)2.3.1 遗传算法的思想及流程 (11)2.3.2 遗传算法的特点 (13)2.4本章小结 (14)第三章基于遗传算法的测试用例生成 (15)3.1基于遗传算法的测试用例生成基本内涵 (15)3.1.1 软件测试用例的基本内涵 (15)3.1.2 基于遗传算法的测试用例生成的基本内涵 (16)3.2 基于遗传算法的测试用例生成框架 (16)3.3 基于遗传算法的测试用例生成算法实现 (18)3.3.1 编码策略 (18)3.3.2 适应度函数及程序插桩 (19)3.3.3 遗传策略 (20)3.3.4 参数控制 (21)3.4 本章小结 (22)第四章实验及结果分析 (23)4.1 待测程序分析 (23)4.1.1 待测程序引入 (23)4.1.2 程序流程分析 (23)4.1.3 路径分析 (24)4.2 程序插桩 (24)4.3 参数设定及程序实现 (25)4.3.1 参数设定 (25)4.3.2 部分程序实现 (26)4.4 结果分析 (28)4.5 本章小结 (30)第五章总结与展望 (31)致谢语 (32)参考文献 (33)第一章绪论1.1 问题的提出在信息化普及的今天,计算机在人们的生活和工作中占据着重要地位,使人们的工作效率提高,也使生活更丰富多彩。
遗传算法解释及代码(一看就懂)【精品毕业设计】(完整版)
遗传算法( GA , Genetic Algorithm ) ,也称进化算法。
遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法。
因此在介绍遗传算法前有必要简单的介绍生物进化知识。
一.进化论知识作为遗传算法生物背景的介绍,下面内容了解即可:种群(Population):生物的进化以群体的形式进行,这样的一个群体称为种群。
个体:组成种群的单个生物。
基因 ( Gene ) :一个遗传因子。
染色体 ( Chromosome ):包含一组的基因。
生存竞争,适者生存:对环境适应度高的、牛B的个体参与繁殖的机会比较多,后代就会越来越多。
适应度低的个体参与繁殖的机会比较少,后代就会越来越少。
遗传与变异:新个体会遗传父母双方各一部分的基因,同时有一定的概率发生基因变异。
简单说来就是:繁殖过程,会发生基因交叉( Crossover ) ,基因突变( Mutation ) ,适应度( Fitness )低的个体会被逐步淘汰,而适应度高的个体会越来越多。
那么经过N代的自然选择后,保存下来的个体都是适应度很高的,其中很可能包含史上产生的适应度最高的那个个体。
二.遗传算法思想借鉴生物进化论,遗传算法将要解决的问题模拟成一个生物进化的过程,通过复制、交叉、突变等操作产生下一代的解,并逐步淘汰掉适应度函数值低的解,增加适应度函数值高的解。
这样进化N代后就很有可能会进化出适应度函数值很高的个体。
举个例子,使用遗传算法解决“0-1背包问题”的思路:0-1背包的解可以编码为一串0-1字符串(0:不取,1:取);首先,随机产生M个0-1字符串,然后评价这些0-1字符串作为0-1背包问题的解的优劣;然后,随机选择一些字符串通过交叉、突变等操作产生下一代的M个字符串,而且较优的解被选中的概率要比较高。
这样经过G代的进化后就可能会产生出0-1背包问题的一个“近似最优解”。
编码:需要将问题的解编码成字符串的形式才能使用遗传算法。
(完整版)遗传算法简介及代码详解
遗传算法简述及代码详解声明:本文内容整理自网络,认为原作者同意转载,如有冒犯请联系我。
遗传算法基本内容遗传算法为群体优化算法,也就是从多个初始解开始进行优化,每个解称为一个染色体,各染色体之间通过竞争、合作、单独变异,不断进化。
遗传学与遗传算法中的基础术语比较染色体:又可以叫做基因型个体(individuals)群体/种群(population):一定数量的个体组成,及一定数量的染色体组成,群体中个体的数量叫做群体大小。
初始群体:若干染色体的集合,即解的规模,如30,50等,认为是随机选取的数据集合。
适应度(fitness):各个个体对环境的适应程度优化时先要将实际问题转换到遗传空间,就是把实际问题的解用染色体表示,称为编码,反过程为解码/译码,因为优化后要进行评价(此时得到的解是否较之前解优越),所以要返回问题空间,故要进行解码。
SGA采用二进制编码,染色体就是二进制位串,每一位可称为一个基因;如果直接生成二进制初始种群,则不必有编码过程,但要求解码时将染色体解码到问题可行域内。
遗传算法的准备工作:1) 数据转换操作,包括表现型到基因型的转换和基因型到表现型的转换。
前者是把求解空间中的参数转化成遗传空间中的染色体或者个体(encoding),后者是它的逆操作(decoding)2) 确定适应度计算函数,可以将个体值经过该函数转换为该个体的适应度,该适应度的高低要能充分反映该个体对于解得优秀程度。
非常重要的过程。
遗传算法基本过程为:1) 编码,创建初始群体2) 群体中个体适应度计算3) 评估适应度4) 根据适应度选择个体5) 被选择个体进行交叉繁殖6) 在繁殖的过程中引入变异机制7) 繁殖出新的群体,回到第二步实例一:(建议先看实例二)求 []30,0∈x 范围内的()210-=x y 的最小值1) 编码算法选择为"将x 转化为2进制的串",串的长度为5位(串的长度根据解的精度设 定,串长度越长解得精度越高)。
自然计算遗传算法【精品毕业设计】(完整版)
自然计算大作业一.二进制编码在遗传算法中,首先要将数据进行编码,这里采用二进制的方式进行编码。
第一步,我们根据题目的介绍可以得知该函数含有两个变量,以及各自的定义域。
在二进制编码中,我们首先要先计算它的编码长度。
计算公式如下: $${2^{{m_j} - 1}} < ({b_j} - {a_j})*precision \le {2^{{m_j}}} - 1$$其中precision为精度,如小数点后5位,则precision=10^5,mj为编码长度,${x_j} \in [{a_j},{b_j}]$二.二进制解码解码即编码的逆过程:$${x_j} = {a_j} + {\rm{decimal}}(substrin{g_j}) \times \frac{{{b_j} - {a_j}}}{{{2^{{m_j}}} - 1}}$$三.种群初始化编码完成后,开始对种群初始化,为了简便采用随机地方式进行初始化。
初始群体的生成:随机产生N个初始串结构数据,每个串结构数据称为一个个体,N个个体构成了一个群体。
GA以这N个串结构数据作为初始点开始进化。
def rand_init(self):for i in range(self.code_x1_length):self.code_x1 += str(random.randint(0, 1))for i in range(self.code_x2_length):self.code_x2 += str(random.randint(0, 1))四.适应度评估适应度表明个体或解的优劣性。
不同的问题,适应度函数的定义方式也不同。
def decoding(self, code_x1, code_x2):self.x1 = self.bounds[0][0] + int(code_x1, 2) * (self.bounds[0][1] - self.bounds[0][0]) / (2 ** self.code_x1_length - 1)self.x2 = self.bounds[1][0] + int(code_x2, 2) * (self.bounds[1][1] - self.bounds[1][0]) / (2 ** self.code_x2_length - 1)五.选择选择的目的是为了从当前群体中选出优良的个体,使它们有机会作为父代为下一代繁殖子孙。
基于遗传算法的自动排课系统毕业设计【精品毕业设计】(完整版)
随着人工智能的发展,特别是在计算智能领域的拓展,借鉴于生物界进化思想和遗传算法,由于其超强的并行搜索能力,以及在解决优化问题中表现出来的高度鲁棒性,它已经被广泛应用于各个领域。目前,很多研究人员已使用遗传算法来求解排课问题,如文献[20]使用遗传算法优化教室的合理利用,文献[21]的用自适应的遗传算法求解大学课表安排问题,文献[22]的基于遗传算法排课系统的设计与实现等等。这些应用说明,使用遗传算法来解决排课问题,其结果还是令人较为满意的。
1.
回溯算法也叫试探法.它是一种系统地搜索问题的解的方法,可以被认为是一个有过剪枝的DFS(深度优先搜索)过程。它按优先条件向前搜索,以达到目标,但当搜索到某一步时.发现原先的选择并不优或达不到目标。就退回一步重新选择。而满足回溯条件的某个状态点称之为回溯点。具体到计算机智能排课系统中,选优条件即为排课数学模型中的约束条件群(需求集中的元素特征与资源集中的元素特征相互作用形成的数学关系)若不满足约束条件群,该选择即为不优或达不到目标当遍历该步骤的所有可能仍未满足约束条件群.则该状态满足了回溯条件,该状态点即为回溯点。
关键词:遗传算法、自动排课、Java。
Abstract
Along with science technical and community information technical increases continuously,calculator science is gradually mature, its mighty function has behaved deep cognition, and it has entered the human social each realm erupts to flick the more and more important function, bringing our life biggest of convenience.Curriculum arrangement is an important and complicated workinginschool,so solving the problem is of great importance for teaching programming.Investigatedand studied the algorithm existed,determinethatadoptgenetic algorithm.ThroughDesign ImplementationtheAutoCourseArrangementManagementSystemBaseonGeneticAlgorithm,researched theapplicationofgenetic algorithmin theCourseArrangementManagementSystem.
R语言GA遗传算法【精品毕业设计】(完整版)
GA包遗传算法最大化使用遗传算法的适应度函数。
默认求最大值。
用法:ga(type = c("binary", "real-valued", "permutation"), fitness, ..., min, max, nBits, population = gaControl(type)population,<br/>selection=gaControl(type)selection, crossover = gaControl(type)crossover,<br/> mutation=gaControl(type)mutation, popSize = 50, pcrossover = 0.8, pmutation = 0.1, elitism = base::max(1, round(popSize*0.05)), maxiter = 100, run = maxiter, maxfitness = Inf, names = NULL, suggestions = NULL, keepBest = FALSE, parallel = FALSE, monitor = gaMonitor, seed = NULL)参数说明•type: 解得编码类型–binary :二进制编码–real-valued:实数浮点编码–permutation:问题涉及到重新排序的列表,字符串编码。
可求解TSP 问题•fitness:适应度函数•min:解得下界(多元变量为一个向量)•max:解得上界(多元变量为一个向量)•nBits:一个种群用二进制编码的长度是多少(长度越大代表精度越高) •population:初始种群•selection:选择•crossover: 交叉•crossover:变异•popsize:种群大小•pcrossover: 交叉概率(默认0.8)•pmutation:变异概率(默认0.1)•elitism: 代沟(默认情况下,前5%个体将在每个迭代中保留)•maxiter:最大迭代次数(默认100)•maxfitness:适应度函数的上界,GA搜索后中断•keepBest:是否保留每一代的最优解•parallel:是否采用并行运算•monitor:绘图用的,监控遗传算法的运行状况•seed:一个整数值包含随机数发生器的状态。
遗传算法及其应用实例【精品毕业设计】(完整版)
遗传算法及其应用实例遗传算法(Genetic Algorithm)是由美国Michigan大学的Holland 教授(1969)提出,后经由De Jong(1975),Goldberg(1989)等归纳总结所形成的一类模拟进化算法。
遗传算法搜索最优解的方法是模仿生物的进化过程,即通过选择与染色体之间的交叉和变异来完成的。
遗传算法主要使用选择算子、交叉算子与变异算子来模拟生物进化,从而产生一代又一代的种群X (t )。
(1)选择算子:是模拟自然选择的操作,反映“优胜劣汰”原理。
它根据每一个个体的适应度,按照一定规则或方法,从t代种群X (t )中选择出一些优良的个体(或作为母体,或让其遗传到下一代种群X (t 1))。
(2)交叉算子:是模拟有性繁殖的基因重组操作,它将从种群X (t )所选择的每一对母体,以一定的交叉概率交换它们之间的部分基因。
(3)变异算子:是模拟基因突变的遗传操作,它对种群X (t )中的每一个个体,以一定的变异概率改变某一个或某一些基因座上的基因值为其他的等位基因。
交叉算子与变异算子的作用都在于重组染色体基因,以生成新的个体。
遗传算法的运算过程如下:步1(初始化)确定种群规模N,交叉概率P c,变异概率P m和终止进化准则;随机生成N个个体作为初始种群X (0);置t ← 0。
步2(个体评价)计算评估X (t )中各个体的适应度。
步3(种群进化)3.1.选择(母体)从X (t )中运用选择算子选择出M / 2对母体(M ≥ N)。
3.2.交叉对所选择的M / 2对母体,以概率P c执行交叉,形成M 个中间个体。
3.3.变异对M个中间个体分别独立以概率P m执行变异,形成M 个候选个体。
3.4.选择(子代)从上述所形成的M个候选个体中依据适应度选择出N个个体组成新一代种群X (t +1)。
步4(终止检验)如已满足终止准则,则输出X (t +1)中具有最大适应度的个体作为最优解,终止计算,否则置t ← t +1并转步2。
遗传算法毕业论文【精品毕业设计】(完整版)
目录1 引言 (1)2 问题描述 (2)3 基于遗传算法TSP算法 (2)3.1 基于遗传算法的TSP算法总体框架 (2)3.2算法的详细设计 (3)3.2.1 解空间的表示方式 (3)3.2.2 种群初始化 (4)3.2.3适应度函数 (4)3.2.4选择操作 (4)3.2.5交叉操作 (5)3.2.6变异操作 (6)3.2.7进化逆转操作 (6)3.3 实验结果分析 (7)4 基于模拟退火算法的TSP算法 (10)4.1 SA算法的实现过程 (10)4.2 算法流程图 (10)4.3模拟退火算法的实现过程 (10)4.4实验结果 (11)5 对两种算法的评价 (14)5.1遗传算法优缺点 (14)5.2 模拟退火算法的优缺点 (15)6结语 (15)参考文献 (17)附录: ............................................................................................................ 错误!未定义书签。
廊坊师范学院本科生毕业论文论文题目:基于遗传算法与模拟退火算法的TSP算法求解10大城市最短旅途论文摘要:TSP问题为组合优化中的经典的NP完全问题.本论文以某旅行社为中国十大旅游城市--珠海、西安、杭州、拉萨、北京、丽江、昆明、成都、洛阳、威海制定最短旅途为例,分别利用基于遗传算法的TSP算法与基于模拟退火算法的TSP算法求解10大城市旅游路线问题.本论文给出了遗传算法与模拟退火算法中各算子的实现方法,并展示出求解系统的结构和求解系统基于MATLAB的实现机制.利用MATLAB软件编程,运行出结果,并对基于遗传算法的TSP算法结果与基于模拟退火算法的TSP算法的结果进行比较,描述其优缺点,并选择最为恰当的TSP算法,实现最短旅途的最优解.关键词:遗传算法;模拟退火算法;TSP;最短路径;Title:TSP Algorithm Based on Genetic Algorithm or Simulated Annealing Algorithm for Solving the Shortest Journey of 10 CitiesAbstract:TSP problem is a classic NP problem about combinatorial optimization.This article takes a travel agency looking for the shortesttrip of ten tourist cities in China-Zhuhai,Xi'an,Hangzhou,Lhasa,Beijing,Lijiang,Kunming,Chengdu,Luoyang and Weihai forinstance,and solves this problem by TSP algorithm based on geneticalgorithm and simulated annealing algorithm.The article gives theimplementations of every operator of genetic algorithm and simulatedannealing algorithm and demonstrates the architecture and theimplementation mechanism of the solving system based on MATLAB.Iprogram and operate the results by MATLAB software,and compare theresults based on genetic algorithm and simulated annealingalgorithm.And describe their advantages and disadvantages so thatchoose the most appropriate TSP algorithm to achieve the optimalsolution for the shortest path.Keywords:genetic algorithm;simulated annealing algorithm;TSP;the shortest path1 引言TSP问题为组合优化中的经典问题,已经证明为一NP完全问题[1],即其最坏情况下的时间复杂性随着问题规模的扩大,按指数方式增长[2],到目前为止不能找到一个多项式时间的有效算法.TSP问题可描述为:已知n个城市相互之间的距离,某一旅行商从某个城市出发访问每个城市一次且仅一次,最后回到出发城市,如何安排才使其所走路线最短.TSP问题不仅仅是一个简单的组合优化问题,其他许多的NP完全问题可以归结为TSP问题,如邮路问题、装配线上的螺帽问题和产品的生产安排问题等,使得TSP问题的有效求解具有重要的意义.本文中的TSP算法主要采用遗传算法与模拟退火算法.遗传算法是一种进化算法,其基本原理是仿效生物界中的“物竞天择,适者生存”的演化法则[3].遗传算法把问题参数编码为染色体,再按照所选择的适应度函数,利用迭代的方式进行选择、交叉、变异以及进化逆转等运算对个体进行筛选和进化,使适应值大的个体被保留,适应值小的个体被淘汰[4],新的群体继承了上一代的信息,又优于上一代,这样反复循环,直至满足条件,最后留下来的个体集中分布在最优解的周围,筛选出最优个体作为问题的解.模拟退火算法的出发点是基于物理中固体物质的退火过程与一般的组合优化问题之间的相似性[5],该算法是一种优化算法,其物理退火过程由三部分组成,分别为:加温过程、等温过程、冷却过程.其中,加温过程对应算法设定初温,等温过程对应算法的Metropolis[6]抽样过程,冷却过程对应控制参数的下降.这里能量的变化就是目标函数,要得到的最优解就是能量最低态[7].Metropolis准则是SA算法收敛于全局最优解的关键所在,Metropolis 准则以一定的概率接受恶化解,这样就使算法跳离局部最优的陷阱.2 问题描述本案例为某旅行社为中国十大旅游城市,分别为珠海、西安、杭州、拉萨、北京、丽江、昆明、成都、洛阳、威海,根据全程路径最短为目的,制定最优的旅游顺序依次游玩这十个城市.这类问题就由TSP算法来解决,寻找出一条最短遍历这10个城市的路径.利用google地图找到城市坐标,下表为这十个城市的位置坐标如表2-1所示.表2-1 10个城市的位置坐标3 基于遗传算法TSP算法3.1 基于遗传算法的TSP算法总体框架TSP问题的遗传算法包括编码设计、种群初始化、适应度函数选择、终止条件设定、选择操作设定、交叉操作设定以及变异操作设定和进化逆转操作.为简化TSP问题的求解,假设每个城市和其它任意一个城市之间都以欧氏距离[8]直接相连.遗传算法TSP问题的流程图如图2-1所示.。
遗传算法综述与遗传算法学习入门【精品毕业设计】(完整版)
遗传算法综述摘要:遗传算法(Genetic Algorithm--GA)是一类借鉴生物界自然选择和自然遗传机制的随机化搜索算法,其主要特点是群体搜索策略和群体中个体之间的信息交换,搜索不依赖于梯度信息。
它尤其适用于处理传统搜索方法难于解决的复杂和非线性问题,可广泛用于组合优化、机器学习、自适应控制、规划设计和人工生命等领域.本文从遗传算法的起源与发展谈起,论述了遗传算法的基本思想和基本原理,并对其性能和收敛性进行了分析,最后还介绍了几种改变的遗传算法以及在遗传算法方面杰出人物及其相关著作。
[关键字]遗传算法、搜索算法、遗传算法收敛性、改进的遗传算法目录1 遗传算法起源及发展历史 (4)1.1遗传算法的生物学基础 (4)1.2遗传算法的起源与发展历史 (5)2 .遗传算法的特点 (7)2.1遗传算法基本思想 (7)2.2遗传算法和其它传统搜索方法的对比 (8)2.3遗传算法的优缺点 (10)3进化算法及其分支 (14)3.1进化算法简述 (14)3.2进化算法基本算法设计 (15)3.3进化算法4个分支 (16)3.3.1遗传算法 (16)3.3.2遗传规划 (19)3.3.3进化规划 (20)3.3.4进化策略 (23)3.3.5进化策略与遗传算法的对比 (25)3.3.6进化规划与进化策略的比较 (26)3.4交叉和变异的关系 (26)4遗传算法的理论基础 (28)4.1模式定理 (28)4.2积木块假设 (32)5 遗传算法的基本原理 (34)5.1遗传编码 (35)5.1.1编码(译码)评估规范和编码原理 (36)5.1.2传统编码方式 (37)5.1.3处理约束条件 (41)5.2初始群体设定 (42)5.3适应度函数 (44)5.3.1适应度函数设计方法 (44)5.3.2适应度函数的设计对遗传算法的影响 (46)5.4遗传操作(genetic operation) (47)5.4.1传统遗传选择算子 (47)5.4.2交叉算子(crossover) (56)5.4.3 变异算子(mutation) (60)6遗传算法性能评估 (62)7遗传算法收敛性分析 (64)7.1未成熟收敛 (64)7.2标准遗传算法的收敛性 (65)8遗传算法的改进 (67)8.1 分层遗传算法 (67)8.2 CHC算法 (69)8.3并行遗传算法 (71)9遗传算法的应用 (74)10遗传算法今后研究的主要课题 (79)有关遗传算法的著名人物与书籍论文 (82)展望 (84)参考文献 (86)1 遗传算法起源及发展历史1.1遗传算法的生物学基础生命自从在地球上诞生以来,就开始了漫长的生物进化历程,低级、简单的生物类型逐渐发展为高级、复杂的生物类型。
遗传算法——耐心看完,你就掌握了遗传算法
遗传算法初教到掌握之阳早格格创做读完那个道义,您将基础掌握遗传算法,要有耐性瞅完.念了很暂,该当用一个怎么样的例子戴收大家走进遗传算法的神偶天下呢?遗传算法的有趣应用很多,诸如觅路问题,8数码问题,囚犯逆境,动做统制,找圆心问题(那是一个海中网友的提议:正在一个不准则的多边形中,觅找一个包罗正在该多边形内的最大圆圈的圆心.),TSP问题(正在以去的章节内里将搞小心介绍.),死产调动问题,人为死命模拟等.直到末尾瞅到一个非常有趣的比圆,感触由此引出的袋鼠跳问题(暂且那样喊它吧),既有趣直瞅又直达遗传算法的真量,真真非常符合动做初教者初教的例子.那一章将报告读者,我们怎么让袋鼠跳到珠穆朗玛峰上去(如果它不过早被冻坏的话).问题的提出与办理规划让咱们先去思量思量底下那个问题的办理办法.已知一元函数:图2-1当前央供正在既定的区间内找出函数的最大值.函数图像如图2-1所示.极大值、最大值、局部最劣解、局部最劣解正在办理上头提出的问题之前咱们有需要先澄浑几个以去将时常会逢到的观念:极大值、最大值、局部最劣解、局部最劣解.教过下中数教的人皆相识极大值正在一个小邻域内里左边的函数值递加,左边的函数值递减,正在图2.1内里的表示便是一个“山峰”.天然,正在图上有很多个“山峰”,所以那个函数有很多个极大值.而对付于一个函数去道,最大值便是正在所有极大值核心,最大的那个.所以极大值具备局部性,而最大值则具备局部性.果为遗传算法中每一条染色体,对付应着遗传算法的一个办理规划,普遍咱们用符合性函数(fitness function)去衡量那个办理规划的劣劣.所以从一个基果组到其解的符合度产死一个映射.所以也不妨把遗传算法的历程瞅做是一个正在多元函数内里供最劣解的历程.正在那个多维直里内里也罕见不浑的“山峰”,而那些最劣解所对付应的便是局部最劣解.而其中也会有一个“山峰”的海拔最下的,那么那个便是局部最劣解.而遗传算法的任务便是尽管爬到最下峰,而不是陷降正在一些小山峰.(其余,值得注意的是遗传算法纷歧定要找“最下的山峰”,如果问题的符合度评介越小越佳的话,那么局部最劣解便是函数的最小值,对付应的,遗传算法所要找的便是“最深的谷底”)如果于今您还不太明黑的话,那么您先往下瞅.本章的示例步调将会非常局里的表示出那个情景.“袋鼠跳”问题既然咱们把函数直线明黑成一个一个山峰战山谷组成的山脉.那么咱们不妨设念所得到的每一个解便是一只袋鼠,咱们期视它们不竭的背着更下处跳去,直到跳到最下的山峰(纵然袋鼠自己不睹得启诺那么搞).所以供最大值的历程便转移成一个“袋鼠跳”的历程.底下介绍介绍“袋鼠跳”的几种办法.爬山法、模拟退火战遗传算法办理觅找最大值问题的几种罕睹的算法:1. 爬山法(最速降下爬山法):从搜索空间中随机爆收相近的面,从中采用对付应解最劣的个体,替换本去的个体,不竭沉复上述历程.果为只对付“相近”的面做比较,所以目光比较“短浅”,时常只可支敛到离开初初位子比较近的局部最劣解上头.对付于存留很多局部最便宜的问题,通过一个简朴的迭代找出局部最劣解的机会非常苍茫.(正在爬山法中,袋鼠最有期视到达最靠拢它出收面的山顶,然而不克不迭包管该山顶是珠穆朗玛峰,大概者是一个非常下的山峰.果为一路上它只瞅上坡,不下坡.)2. 模拟退火:那个要收去自金属热加工历程的开收.正在金属热加工历程中,当金属的温度超出它的熔面(Melting Point)时,本子便会猛烈天随机疏通.与所有的其余的物理系统相类似,本子的那种疏通趋背于觅找其能量的极小状态.正在那个能量的变迁历程中,开初时.温度非常下,使得本子具备很下的能量.随着温度不竭降矮,金属徐徐热却,金属中的本子的能量便越去越小,末尾达到所有大概的最矮面.利用模拟退火的时间,让算法从较大的跳跃开初,使到它有足够的“能量”遁离大概“路过”的局部最劣解而不至于节制正在其中,当它停正在局部最劣解附近的时间,徐徐的减小跳跃量,以便使其“降足”到局部最劣解上.(正在模拟退火中,袋鼠喝醉了,而且随机天大跳跃了很万古间.幸运佳的话,它从一个山峰跳过山谷,到了其余一个更下的山峰上.然而末尾,它徐徐醉悟了并往着它天圆的峰顶跳去.)3. 遗传算法:模拟物竞天择的死物进化历程,通过维护一个潜正在解的集体真止了多目标的搜索,并支援那些目标上的疑息形成战接换.以里为单位的搜索,比以面为单位的搜索,更能创制局部最劣解.(正在遗传算法中,有很多袋鼠,它们降降到喜玛推俗山脉的任性场合.那些袋鼠本去不相识它们的任务是觅找珠穆朗玛峰.然而每过几年,便正在一些海拔下度较矮的场合射杀一些袋鼠,并期视存活下去的袋鼠是多产的,正在它们所处的场合死女育女.)(厥后,一个喊天止健的网游给我念了一个更恰切的故事:从前,有一大群袋鼠,它们被莫名其妙的整集天遗弃于喜马推俗山脉.于是只佳正在那边费力的死计.海拔矮的场合弥漫着一种无色有趣的毒气,海拔越下毒气越密疏.但是可怜的袋鼠们对付此齐然不觉,仍旧习惯于活蹦治跳.于是,不竭有袋鼠死于海拔较矮的场合,而越是正在海拔下的袋鼠越是能活得更暂,也越有机会死女育女.便那样通过许多年,那些袋鼠们竟然皆不自愿天散拢到了一个个的山峰上,但是正在所有的袋鼠中,惟有散拢到珠穆朗玛峰的袋鼠被戴回了劣好的澳洲.)底下主要介绍介绍遗传算法真止的历程.遗传算法的真止历程遗传算法的真止历程本量上便像自然界的进化历程那样.最先觅找一种对付问题潜正在解举止“数字化”编码的规划.(建坐表示型战基果型的映射闭系.)而后用随机数初初化一个种群(那么第一批袋鼠便被随意天分别正在山脉上.),种群内里的个体便是那些数字化的编码.接下去,通过符合的解码历程之后,(得到袋鼠的位子坐标.)用符合性函数对付每一个基果个体做一次符合度评估.(袋鼠爬得越下,越是受咱们的喜爱,所以符合度相映越下.)用采用函数依照某种确定择劣选择.(咱们要每隔一段时间,正在山上射杀一些天圆海拔较矮的袋鼠,以包管袋鼠总体数目持仄.)让个体基果接叉变同.(让袋鼠随机天跳一跳)而后爆收子代.(期视存活下去的袋鼠是多产的,并正在那边死女育女.)遗传算法本去不包管您能赢得问题的最劣解,然而是使用遗传算法的最大便宜正在于您不必去相识战担心怎么样去“找”最劣解.(您不必去指挥袋鼠背那边跳,跳多近.)而只消简朴的“可定”一些表示短佳的个体便止了.(把那些经常爱走下坡路的袋鼠射杀.)以去您会缓缓明黑那句话,那是遗传算法的粗粹!题中话:那里念提一提一个非合流的进化论瞅面:推马克主义的进化论.法国教者推马克(Jean-Baptiste de Lamarck,1744~1891)的进化论瞅面表述正在他的《动物教形而上教》(1809)一书籍中.该书籍提出死物自己存留一种是结构越收搀杂化的“内驱力”,那种内驱力是与死俱去的,正在动物中表示为“动物体新器官的爆收去自它不竭感觉到的新需要.”不过简直的死物是可变更,背什么目标变更,则要受环境的影响.推马克称其环境体制为“赢得性遗传”,那一体制分为二个阶段:一是动物器官的用与不必(即“用进兴退”:正在环境的效用下,某一器官越用越兴盛,不使用便会退化,以至消得.);二是正在环境效用下,动物用与不必引导的后天变同通过繁殖传给后代(即“赢得性遗传”).德国动物教家魏斯曼(August Weismann,1834~1914)对付赢得性遗传提出脆定的量疑.他用老鼠搞了一个出名的“去尾真验”,他切去老鼠的尾巴,并使之符合了短尾的死计. 用那样的老鼠举止繁殖,下一代老鼠再切去尾巴,一连切了22代老鼠的尾巴,第23代老鼠仍旧少出仄常的尾巴.由此魏斯曼认为后天后天赢得性不克不迭遗传.(择自《猜疑----科教探索的起面》)我举出那个例子,一圆里期视初教者不妨越收相识正统的进化论思维,不妨辨别进化论与真进化论的辨别.另一圆里念让读者相识的是,遗传算法虽然是一种仿死的算法,然而咱们不需要限制于仿死自己.大自然利害常聪慧的,然而不代表某些细节上人不克不迭比她更聪慧.其余,简直天道,大自然要办理的问题,到底不是咱们要办理的问题,所以办理要收上的偏偏好利害常仄常战正在所易免的.(下一章,读者便会瞅到一些非仿死而灵验的算法矫正.)譬如上头那个“赢得性遗传”咱们先不管它正在自然界存不存留,然而是对付于遗传算法的自己,有非常大的利用价格.即变同纷歧定爆收正在爆收子代的历程中,而且变同目标纷歧定是随机性的.变同不妨爆收正在符合性评估的历程核心,而且不妨是有目标性的.(天然,进一步的钻研有待举止.)所以咱们归纳出遗传算法的普遍步调:开初循环直至找到谦意的解.1.评估每条染色体所对付应个体的符合度.2.遵照符合度越下,采用概率越大的准则,从种群中采用二个个体动做女圆战母圆.3.抽与女母单圆的染色体,举止接叉,爆收子代.4.对付子代的染色体举止变同.5.沉复2,3,4步调,直到新种群的爆收.中断循环.接下去,咱们将小心天收会遗传算法历程的每一个细节.体例袋鼠的染色体----基果的编码办法通过前一章的教习,读者已经相识到人类染色体的编码标记集,由4种碱基的二种协共组成.公有4种情况,相称于2 bit的疑息量.那是人类基果的编码办法,那么咱们使用遗传算法的时间编码又该怎么样处理呢?受到人类染色体结构的开收,咱们不妨设念一下,假设暂时惟有“0”,“1”二种碱基,咱们也用一条链条把他们有序的勾通正在所有,果为每一个单位皆能表示出 1 bit的疑息量,所以一条足够少的染色体便能为咱们勾勒出一个个体的所有个性.那便是二进制编码法,染色体大概如下:上头的编码办法虽然简朴直瞅,然而明隐天,当个体个性比较搀杂的时间,需要洪量的编码才搞透彻天形貌,相映的解码历程(类似于死物教中的DNA翻译历程,便是把基果型映射到表示型的历程.)将过份复杂,为革新遗传算法的预计搀杂性、普及运算效用,提出了浮面数编码.染色体大概如下:那么咱们怎么样利用那二种编码办法去为袋鼠的染色体编码呢?果为编码的脚段是建坐表示型到基果型的映射闭系,而表示型普遍便被明黑为个体的个性.比圆人的基果型是46条染色体所形貌的(总少度二米的纸条?),却能解码成一个个眼,耳,心,鼻等个性各不相共的活死死的人.所以咱们要念为“袋鼠”的染色体编码,咱们必须先去思量“袋鼠”的“个体特征”是什么.也许有的人会道,袋鼠的个性很多,比圆性别,身少,体沉,也许它喜欢吃什么也能算做其中一个个性.然而简直正在办理那个问题的情况下,咱们该当进一步思索:无论那只袋鼠是少短,肥肥,只消它正在矮海拔便会被射杀,共时也不确定身少的袋鼠能跳得近一些,身短的袋鼠跳得近一些.天然它爱吃什么便更不相闭了.咱们由初至末皆只闭心一件事务:袋鼠正在哪里.果为只消咱们相识袋鼠正在那边,咱们便能搞二件必须去搞的事务:(1)通过查阅喜玛推俗山脉的天图去得知袋鼠天圆的海拔下度(通过自变量供函数值.)以推断咱们有出需要把它射杀.(2)相识袋鼠跳一跳后去到哪个新位子.如果咱们一时无法准确的推断哪些“个体个性”是需要的,哪些利害需要的,咱们时常不妨用到那样一种思维办法:比圆您认为袋鼠的爱吃什么物品非常需要,那么您便念一念,有二只袋鼠,它们其余的个体个性真足共等的情况下,一只爱吃草,其余一只爱吃果.您会赶快创制,那不会对付它们的运气有丝毫的效用,它们该当有共等的概率被射杀!只果它们处于共一个场合.(值得一提的是,如果您的基果编码安排中包罗了袋鼠爱吃什么的疑息,那本去不会效用到袋鼠的进化的历程,而那只攀到珠穆朗玛峰的袋鼠吃什么也完尽是随机的,然而是它天圆的位子却利害常决定的.)以上是对付遗传算法编码历程中时常经历的思维历程,必须把简直问题抽象成数教模型,超过主要冲突,放弃次要冲突.惟有那样才搞简净而灵验的办理问题.期视初教者小心琢磨.既然决定了袋鼠的位子动做个体个性,简直去道位子便是横坐标.那么接下去,咱们便要建坐表示型到基果型的映射闭系.便是道怎么样用编码去表示出袋鼠天圆的横坐标.由于横坐标是一个真数,所以道透了咱们便是要对付那个真数编码.回瞅咱们上头所介绍的二种编码办法,读者最先料到的该当便是,对付于二进制编码办法去道,编码会比较搀杂,而对付于浮面数编码办法去道,则会比较简净.恩,正如您所念的,用浮面数编码,只是需要一个浮面数而已.而底下则介绍怎么样建坐二进制编码到一个真数的映射.明隐天,一定少度的二进制编码序列,只可表示一定粗度的浮面数.譬如咱们央供解透彻到六位小数,由于区间少度为2 – (-1) = 3 ,为了包管粗度央供,起码把区间[-1,2]分为3 × 106等份.又果为所以编码的二进制串起码需要22位.把一个二进制串转移位区间内里对付应的真数值通过底下二个步调.(1)将一个二进制串代表的二进制数转移为10进制数:(2)对付应区间内的真数:由于往下章节的示例步调险些皆只用到浮面数编码,所以那个“袋鼠跳”问题的办理规划也是采与浮面数编码的.往下的步调示例(包罗拆载基果的类,突变函数)皆是针对付浮面数编码的.(对付于二进制编码那里只做简朴的介绍,不过那个“袋鼠跳”真足不妨用二进制编码去办理的,而且更灵验一些.所以读者不妨自己测验考查用二进制编码去办理.)小知识:vector(容器)的使用.正在简直写代码的历程中,读者将会一再用到vector那种数据结构,所以大家必须先对付它有所相识.std::vector是STL(standard template library)库内里的现成的模板类.它用起去便像动背数组.利用vector(容器)咱们不妨便当而且下效的对付容器内里的元素举止支配.示比圆下:1.//增加头文献,并使用std名空间.2.#include<vector>ing namespace std;4.//定义一个vector,<>内的是那个vector所拆载的典型.5.vector<int> MyVector;6.//为vector后里增加一个整型元素0.7.MyVector.push_back(0);8.//把vector的第一个元素的值赋给变量a.值得注意的是如果vector的少度惟有1,而您9.//去考察它的下一个元素的话,编译战运止皆不会报错,它会返回一个随机值给您,所以使10.//用的时间一定要注意那个潜伏的BUG.11.int a = MyVector[0];12.//把vector内里的元素局部浑空.13.MyVector.clear();14.//返回vector内里的元素的个数.15.MyVector.size()呵呵,如果您出用过那个模板类,请真足不必介意,果为当前为止,您已经教会了正在本书籍内里将用到的所有功能.另中,我也逆便提一提,为什么我用vector而不必其余数据结构比圆数组,去拆载一条基果,另有后里咱们将会教到的神经搜集中的权值背量.诚然,用数组做为基果大概者权值背量的载体,速度会快一些.然而是我用vector主要出于底下几个思量.最先,vector的使用比较便当,便当得到其大小,也便当增加战考察元素,另有排序.其次,使用vector也便于代码的维护与及沉用(正在那本书籍的教习历程中,教习者将会逐步建坐起遗传算法战人为神经搜集的引擎,通过对付代码少量的建改便能用于办理新的问题.).其余,我还期视正在钻研更前缘的应用目标――通过遗传算法动背改变神经搜集的拓扑结构的时间,大家仍旧不妨通过少量的建改后继启利用那些代码.(果为动背天改变神经搜集的拓扑结构非常需要不规定大小的容器.)咱们定义一个类动做袋鼠基果的载体.(小心的人会提出那样的疑问:为什么我用浮面数的容器去储躲袋鼠的基果呢?袋鼠的基果不是只用一个浮面数去表示便止吗?恩,出错,到底上对付于那个真例,咱们只需要用上一个浮面数便止了.咱们那里用上容器是为了便当以去利用那些代码处理那些编码需要一串浮面数的问题.)1.class CGenome2.{3.public:4. //定义拆载基果的容器(到底上从英文阐明去瞅,Weights是权值的意义,那用去表示5.//基果的确有面名不符真,呵呵.那主假如果为那些代码去自于GA-ANN引擎,所以正在6.//它内里基果真量便是神经搜集的权值,所以习惯性的把它引进过去便只佳那样了.)7. vector <double> vecWeights;8. // dFitness用于保存对付该基果的符合性评估.9. double dFitness;10. //类的无参数初初化参数.11. CGenome():dFitness(0){}12. //类的戴参数初初化参数.13. CGenome(vector <double> w, double f): vecWeights(w), dFitness(f){}14.};佳了,暂时为止咱们把袋鼠的染色体给钻研透了,让咱们继启跟进袋鼠的进化旅程.物竞天择--符合性评分与及采用函数.――符合度函数(fitness function)自然界死物比赛历程往往包罗二个圆里:死物相互间的搏斗与及死物与客瞅环境的搏斗历程.然而正在咱们那个真例内里,您不妨设念到,袋鼠相互之间利害常友佳的,它们本去不需要互相搏斗以争与存正在的权利.它们的死死存亡更多是与决于您的推断.果为您要衡量哪只袋鼠该杀,哪只袋鼠不该杀,所以您必须制定一个衡量的尺度.而对付于那个问题,那个衡量的尺度比较简单制定:袋鼠天圆的海拔下度.(果为您简朴天期视袋鼠爬得越下越佳.)所以咱们间接用袋鼠的海拔下度动做它们的符合性评分.即符合度函数间接返回函数值便止了.――采用函数(selection)自然界中,越符合的个体便越有大概繁殖后代.然而是也不克不迭道符合度越下的便肯定后代越多,只但是从概率上去道更多.(到底有些所处海拔下度较矮的袋鼠很幸运,遁过了您的眼睛.)那么咱们怎么去建坐那种概率闭系呢?底下咱们介绍一种时常使用的采用要收――轮盘赌(Roulette Wheel Selection)采用法.假设种群数目,某个个体其符合度为,则其被选中的概率为:比圆咱们有5条染色体,他们所对付应的符合度评分分别为:5,7,10,13,15.所以各个个体被选中的概率分别为:呵呵,有人会问为什么咱们把它喊成轮盘赌采用法啊?本去您只消瞅瞅图2-2的轮盘便会明黑了.那个轮盘是依照各个个体的符合度比率举止分块的.您不妨设念一下,咱们转化轮盘,轮盘停下去的时间,指针会随机天指背某一个个体所代表的天区,那么非常幸运天,那个个体被选中了.(很明隐,符合度评分越下的个体被选中的概率越大.)图2-2那么接下去咱们瞅瞅怎么样用代码去真止轮盘赌.1.//轮盘赌函数2.CGenome GetChromoRoulette()3.{4. //爆收一个0到人心总符合性评分总战之间的随机数.5. //中m_dTotalFitness记录了所有种群的符合性分数总战)6. double Slice = (RandFloat()) * m_dTotalFitness;7. //那个基果将拆载转盘所选出去的那个个体.8. CGenome TheChosenOne;9. //乏计符合性分数的战.10. double FitnessSoFar = 0;11. //遍历总人心内里的每一条染色体.12. for (int i=0; i<m_iPopSize; ++i)13. {14. //乏计符合性分数.15. FitnessSoFar += m_vecPop[i].dFitness;16. //如果乏计分数大于随机数,便采用此时的基果.17. if (FitnessSoFar >= Slice)18. {19. TheChosenOne = m_vecPop[i];20. break;21. }22. }23. //返回转盘选出去的个体基果24. return TheChosenOne;25.}遗传变同――基果沉组(接叉)与基果突变.该当道那二个步调便是使到子代分歧于女代的根根源基本果(注意,我不道是子代劣于女代的本果,惟有通过自然的采用后,才会出现子代劣于女代的倾背.).对付于那二种遗传支配,二进制编码战浮面型编码正在处理上有很大的好别,其中二进制编码的遗传支配历程,比较类似于自然界内里的历程,底下将合并道述.1.基果沉组/接叉(recombination/crossover)(1)二进制编码回瞅上一章介绍的基果接叉历程:共源染色体联会的历程中,非姐妹染色单体(分别去自女母单圆)之间时常爆收接叉,而且相互接换一部分染色体,如图2-3.到底上,二进制编码的基果接换历程也非常类似那个历程――随机把其中几个位于共一位子的编码举止接换,爆收新的个体,如图2-4所示.图2-3 图2-4(2)浮面数编码如果一条基果中含有多个浮面数编码,那么也不妨用跟上头类似的要收举止基果接叉,分歧的是举止接叉的基础单位不是二进制码,而是浮面数.而如果对付于单个浮面数的基果接叉,便有其余分歧的沉组办法了,比圆中间沉组:那样只消随机爆收便能得到介于女代基果编码值战母代基果编码值之间的值动做子代基果编码的值.考虑到“袋鼠跳”问题的简直情况――袋鼠的个体个性只是表示为它所处的位子.不妨设念,共一个位子的袋鼠的基果是真足相共的,而二条相共的基果举止接叉后,相称于什么皆不搞,所以咱们不挨算正在那个例子内里使用接叉那一个遗传支配步调.(天然硬要那个支配步调也不是不可的,您不妨把二只同天的袋鼠捉到所有,让它们接配,而后爆收子代,再把它们支到它们该当到的场合.)题中话:性的起源死命进化中另一个主要的要害收达是伴伴着二性的收育――二个死物个体间遗传物量的接换而去的.正是那种接换提供了自然采用不妨爆收效用的变同火仄.性大概起源于正在某种共类相食中.一个死物吞噬了另一个死物.含有单倍遗传物量的吞噬后死物为了补救自己而一分为二.那时,一种单倍遗传物量与单倍遗传物量的单位持绝相互接换替的模式便会爆收.直至到达一个各项准则皆符合于单倍系统的环境.正在那个系统中,从单倍体到单倍体的团结只爆收正在性细胞大概配子产死中,然厥后自分歧母体的配子分散成一个新的个体而回复仄常的单倍体系统.由于二性的出现,使进化的步调加快了.(择自《凶僧斯-百科齐书籍》1999年版)由于基果接叉战二性有莫大的闭联,所以咱们不妨从那个角度去深进相识基果接叉.性此出门现是正在死物已经进化得相对付搀杂的时间.那个时间死物的基果基础产死了一种功能分块的架构.而自然界的基果接叉历程又普遍不是单个。
(完整)基本遗传算法
基本遗传算法Holland创建的遗传算法是一种概率搜索算法,它利用某种编码技术作用于称为染色体的数串,其基本思想是模拟由这些串组成的个体进化过程.该算法通过有组织的、然而是随机的信息交换,重新组合那些适应性好的串.在每一代中,利用上一代串结构中适应性好的位和段来生成一个新的串的群体;作为额外增添,偶尔也要在串结构中尝试用新的位和段来替代原来的部分。
遗传算法是一类随机优化算法,它可以有效地利用已有的信息处理来搜索那些有希望改善解质量的串.类似于自然进化,遗传算法通过作用于染色体上的基因,寻找好的染色体来求解问题.与自然界相似,遗传算法对待求解问题本身一无所知,它所需要的仅是对算法所产生的每个染色体进行评价,并基于适应度值来改变染色体,使适应性好的染色体比适应性差的染色体有更多的繁殖机会.第一章遗传算法的运行过程遗传算法模拟了自然选择和遗传中发生的复制、交叉和变异等现象,从任一初始种群(Population)出发,通过随机选择、交叉和变异操作,产生一群更适应环境的个体,使群体进化到搜索空间中越来越好的区域,这样一代一代地不断繁衍进化,最后收敛到一群最适应环境的个体(Individual),求得问题的最优解。
一.完整的遗传算法运算流程完整的遗传算法运算流程可以用图1来描述。
由图1可以看出,使用上述三种遗传算子(选择算子、交叉算子和变异算子)的遗传算法的主要运算过程如下:(1)编码:解空间中的解数据x,作为遗传算法的表现形式。
从表现型到基因型的映射称为编码.遗传算法在进行搜索之前先将解空间的解数据表示成遗传空间的基因型串结构数据,这些串结构数据的不同组合就构成了不同的点。
(2)初始群体的生成:随机产生N个初始串结构数据,每个串结构数据称为一个个体,N个个体构成了一个群体。
遗传算法以这N个串结构作为初始点开始迭代。
设置进化代数计数器t←0;设置最大进化代数T;随机生成M个个体作为初始群体P(0)。
(3)适应度值评价检测:适应度函数表明个体或解的优劣性。
遗传算法入门到掌握
遗传算法入门到掌握读完这个讲义,你将基本掌握遗传算法,要有耐心看完。
想了很久,应该用一个怎么样的例子带领大家走进遗传 算法的神奇世界呢?遗 传算法的有趣应用很多,诸如寻路问题,8 数码问题,囚犯困境,动作控制,找 圆心问题(这是一个国外网友的建议:在一个不规则的多边形 中,寻找一个包 含在该多边形内的最大圆圈的圆心。
),TSP 问题(在以后的章节里面将做详细 介绍。
),生产调度问题,人工生命模拟等。
直到最后看到一个非 常有趣的比 喻,觉得由此引出的袋鼠跳问题(暂且这么叫它吧),既有趣直观又直达遗传算 法的本质,确实非常适合作为初学者入门的例子。
这一章将告诉读者,我 们怎 么让袋鼠跳到珠穆朗玛峰上去(如果它没有过早被冻坏的话)。
问题的提出与解决方案让我们先来考虑考虑下面这个问题的解决办法。
已知一元函数:图 2-1 现在要求在既定的区间内找出函数的最大值。
函数图像如图 2-1 所示。
极大值、最大值、局部最优解、全局最优解在解决上面提出的问题之前我们有必要先澄清几个以后将常常会碰到的概念: 极 大值、最大值、局部最优解、全局最优解。
学过高中数学的人都知道极大值在一 个小邻域里面左边的函数值递增,右边的函数值递减,在图 2.1 里面的表现就是 一 个“山峰”。
当然,在图上有很多个“山峰”,所以这个函数有很多个极大 值。
而对于一个函数来说,最大值就是在所有极大值当中,最大的那个。
所以极 大值具有 局部性,而最大值则具有全局性。
因为遗传算法中每一条染色体,对应着遗传算法的一个 解决方案,一般我们用 适应性函数(fitness function)来衡量这个解决方案的优劣。
所以从一个基因 组到其解的适应度形成一个映射。
所以也可以把遗传算法的过程看作是一个在多 元函数里面求最优 解的过程。
在这个多维曲面里面也有数不清的“山峰”,而 这些最优解所对应的就是局部最优解。
而其中也会有一个 “山峰” 的海拔最高的, 那么这个就是全局最优 解。
遗传算法的研究及应用毕业设计
毕业设计遗传算法的研究及应用摘要本文分为三部分:第一部分:遗传算法的概述。
主要介绍了遗传算法的基本思想、遗传算法的构成要素、遗传算法的特点、遗传算法的基本模型、遗传算法的应用情况及今后的研究方向等等的内容。
第二部分:基于Matlab 7.0下的遗传算法求解函数最值问题。
遗传算法作为一种新的优化方法,广泛地用于计算科学、模式识别和智能故障诊断等方面,它适用于解决复杂的非线性和多维空间寻优问题,近年来也得到了较为广阔的应用。
本人选择了函数优化这个应用领域,按照遗传算法的步骤,即编码、解码、计算适应度(函数值)、选择复制运算、交叉运算和变异运算,对函数进行求解最值。
第三部分:对遗传算法求函数最值问题的改进。
这部分主要针对本文第二部分进行改进,通过改变基本遗传算法运行参数值,如改变交叉概率Pc值和变异概率Pm值,从而使最优值更加接近相对标准下函数的最值。
关键词:遗传算法适应度交叉概率变异概率目录1 前言 (1)2 遗传算法概述 (1)2.1生物进化理论和遗传学的基本知识 (1)2.2遗传算法的基本思想 (3)2.3遗传算法的构成要素 (3)2.3.1 染色体编码方法 (3)2.3.2 适应度函数 (4)2.3.3 遗传算子 (4)2.3.4 基本遗传算法运行参数 (5)2.4遗传算法的特点 (6)2.5遗传算法的基本模型 (7)2.6遗传算法的应用 (8)2.7遗传算法今后的研究方向 (10)3 基于MATLAB 7.0下的遗传算法求解函数最值问题 (11)3.1遗传算法的标准函数 (11)3.2解题步骤说明 (12)3.2.1 编码问题 (12)3.2.2 选择运算 (12)3.2.3 交叉运算 (13)3.2.4 变异运算 (13)3.3运行参数说明 (14)3.4对遗传算法求得的最值的分析 (14)3.5运行程序以及对其解释 (14)3.6从数学的角度求解函数最优值 (18)3.6.1 自变量x以0.2为步进单位 (18)3.6.2 自变量x以0.1为步进单位 (19)3.6.3 自变量x以更精确的数为步进单位 (21)4 对遗传算法求解函数最值问题的改进 (21)4.1寻找求得最优解的运行参数值 (22)4.1.1 当Pc=0.9和Pm=0.0001 (22)4.1.2 当Pc=0.9和Pm=0.001 (23)4.1.3 当Pc=0.9和Pm=0.01 (24)4.1.4 当Pc=0.9和Pm=0.1 (26)4.1.5 当Pc=0.4和Pm=0.1 (27)5 结论 (29)参考文献 (30)ABSTRACT (31)附录 (32)致谢 (38)仲恺农业工程学院毕业论文(设计)成绩评定表 (39)1 前言生命科学与工程科学的相互交叉、相互渗透和相互促进是近代科学技术发展的一个显著特点,而遗传算法的蓬勃发展正体现了科学发展的这一特征和趋势。
遗传算法 (1)【精品毕业设计】(完整版)
遗传算法定义遗传算法(Genetic Algorithm)是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法,它是有美国Michigan大学J.Holland教授于1975年首先提出来的,并出版了颇有影响的专著《Adaptation in Natural and Artificial Systems》,GA这个名称才逐渐为人所知,J.Holland教授所提出的GA通常为简单遗传算法(SGA)。
遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(individual)组成。
每个个体实际上是染色体(chromosome)带有特征的实体。
染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。
因此,在一开始需要实现从表现型到基因型的映射即编码工作。
由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编码,初代种群产生之后,按照适者生存和优胜务汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择(selection)个体,并借助于自然遗传学的遗传算子(genetic operators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。
这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。
遗传算法特点遗传算法是一类可用于复杂系统优化的具有鲁棒性的搜索算法,与传统的优化算法相比,主要有以下特点:1、遗传算法以决策变量的编码作为运算对象。
传统的优化算法往往直接决策变量的实际植本身,而遗传算法处理决策变量的某种编码形式,使得我们可以借鉴生物学中的染色体和基因的概念,可以模仿自然界生物的遗传和进化机理,也使得我们能够方便的应用遗传操作算子。
遗传算法详细讲解1
的理论,在此仅给出技术细节 .
一、编码 编码是 GA 中的基础工作之一, GA 不能直接处理 解空间的解数据,必须通过编码表成遗传空间的基因
型数据 . 比较直观和常规的方法是 0、1 二进制编码 ,
称为常规码 . 这种编码方法使算法的三个算子构造比 较简单 .
16
第七章 遗传算法
如 0 – 1 背包问题的解是一个 0 - 1 向量,可以按 (x1,x2,…,xn)
生物从低级、简单到高级、复杂,乃至人类这样一个漫
长而绝妙的进化过程 . 借鉴 Darwin 的物竞天择、优胜 劣汰、适者生存的自然选择和自然遗传的机理 . 其本质 是一种求解问题的高效并行全局搜索方法,它能在搜索 过程中自动获取和积累有关搜索空间的知识,并自适应
地控制搜索过程以求得最优解 .
3
§1
5
§1
基本概念
染色体
基因
Example 1
价格 饮料 服务速度
某快餐店要作出以下三项决定:
汉堡包的价格应定在 1 美元还是 50 美分; 和汉堡包一起供应的应该是酒还是可乐; 饭店应提供慢的还是快的服务速度 .
Solution : 编码 有 3 个决策变量共有 2 3 = 8 种方案 用三位 0 -1 数串,表示一个方案 a1 a2 a3 ai 0,1 a1 表示价格 a2 表示饮料 a3 表示速度 0 —— 高价格 0 —— 酒 0 —— 慢 1 —— 低价格 1 —— 可乐 1 —— 快
最小值 2
平均值 4.25
选择算子作用的效果是提高了群体的平均适应值 及最差的适应值,低适应值的个体趋于被淘汰,高适
应值的个体趋于被复制. 但是以损失群体的多样性为
代价,选择算子并没有产生新的个体,当然群体中最
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
遗传算法入门到掌握读完这个讲义,你将基本掌握遗传算法,要有耐心看完。
想了很久,应该用一个怎么样的例子带领大家走进遗传算法的神奇世界呢?遗传算法的有趣应用很多,诸如寻路问题,8数码问题,囚犯困境,动作控制,找圆心问题(这是一个国外网友的建议:在一个不规则的多边形中,寻找一个包含在该多边形内的最大圆圈的圆心。
),TSP问题(在以后的章节里面将做详细介绍。
),生产调度问题,人工生命模拟等。
直到最后看到一个非常有趣的比喻,觉得由此引出的袋鼠跳问题(暂且这么叫它吧),既有趣直观又直达遗传算法的本质,确实非常适合作为初学者入门的例子。
这一章将告诉读者,我们怎么让袋鼠跳到珠穆朗玛峰上去(如果它没有过早被冻坏的话)。
问题的提出与解决方案让我们先来考虑考虑下面这个问题的解决办法。
已知一元函数:图2-1现在要求在既定的区间内找出函数的最大值。
函数图像如图2-1所示。
极大值、最大值、局部最优解、全局最优解在解决上面提出的问题之前我们有必要先澄清几个以后将常常会碰到的概念:极大值、最大值、局部最优解、全局最优解。
学过高中数学的人都知道极大值在一个小邻域里面左边的函数值递增,右边的函数值递减,在图2.1里面的表现就是一个“山峰”。
当然,在图上有很多个“山峰”,所以这个函数有很多个极大值。
而对于一个函数来说,最大值就是在所有极大值当中,最大的那个。
所以极大值具有局部性,而最大值则具有全局性。
因为遗传算法中每一条染色体,对应着遗传算法的一个解决方案,一般我们用适应性函数(fitness function)来衡量这个解决方案的优劣。
所以从一个基因组到其解的适应度形成一个映射。
所以也可以把遗传算法的过程看作是一个在多元函数里面求最优解的过程。
在这个多维曲面里面也有数不清的“山峰”,而这些最优解所对应的就是局部最优解。
而其中也会有一个“山峰”的海拔最高的,那么这个就是全局最优解。
而遗传算法的任务就是尽量爬到最高峰,而不是陷落在一些小山峰。
(另外,值得注意的是遗传算法不一定要找“最高的山峰”,如果问题的适应度评价越小越好的话,那么全局最优解就是函数的最小值,对应的,遗传算法所要找的就是“最深的谷底”)如果至今你还不太理解的话,那么你先往下看。
本章的示例程序将会非常形象的表现出这个情景。
“袋鼠跳”问题既然我们把函数曲线理解成一个一个山峰和山谷组成的山脉。
那么我们可以设想所得到的每一个解就是一只袋鼠,我们希望它们不断的向着更高处跳去,直到跳到最高的山峰(尽管袋鼠本身不见得愿意那么做)。
所以求最大值的过程就转化成一个“袋鼠跳”的过程。
下面介绍介绍“袋鼠跳”的几种方式。
爬山法、模拟退火和遗传算法解决寻找最大值问题的几种常见的算法:1. 爬山法(最速上升爬山法):从搜索空间中随机产生邻近的点,从中选择对应解最优的个体,替换原来的个体,不断重复上述过程。
因为只对“邻近”的点作比较,所以目光比较“短浅”,常常只能收敛到离开初始位置比较近的局部最优解上面。
对于存在很多局部最优点的问题,通过一个简单的迭代找出全局最优解的机会非常渺茫。
(在爬山法中,袋鼠最有希望到达最靠近它出发点的山顶,但不能保证该山顶是珠穆朗玛峰,或者是一个非常高的山峰。
因为一路上它只顾上坡,没有下坡。
)2. 模拟退火:这个方法来自金属热加工过程的启发。
在金属热加工过程中,当金属的温度超过它的熔点(Melting Point)时,原子就会激烈地随机运动。
与所有的其它的物理系统相类似,原子的这种运动趋向于寻找其能量的极小状态。
在这个能量的变迁过程中,开始时。
温度非常高,使得原子具有很高的能量。
随着温度不断降低,金属逐渐冷却,金属中的原子的能量就越来越小,最后达到所有可能的最低点。
利用模拟退火的时候,让算法从较大的跳跃开始,使到它有足够的“能量”逃离可能“路过”的局部最优解而不至于限制在其中,当它停在全局最优解附近的时候,逐渐的减小跳跃量,以便使其“落脚”到全局最优解上。
(在模拟退火中,袋鼠喝醉了,而且随机地大跳跃了很长时间。
运气好的话,它从一个山峰跳过山谷,到了另外一个更高的山峰上。
但最后,它渐渐清醒了并朝着它所在的峰顶跳去。
)3. 遗传算法:模拟物竞天择的生物进化过程,通过维护一个潜在解的群体执行了多方向的搜索,并支持这些方向上的信息构成和交换。
以面为单位的搜索,比以点为单位的搜索,更能发现全局最优解。
(在遗传算法中,有很多袋鼠,它们降落到喜玛拉雅山脉的任意地方。
这些袋鼠并不知道它们的任务是寻找珠穆朗玛峰。
但每过几年,就在一些海拔高度较低的地方射杀一些袋鼠,并希望存活下来的袋鼠是多产的,在它们所处的地方生儿育女。
)(后来,一个叫天行健的网游给我想了一个更恰切的故事:从前,有一大群袋鼠,它们被莫名其妙的零散地遗弃于喜马拉雅山脉。
于是只好在那里艰苦的生活。
海拔低的地方弥漫着一种无色无味的毒气,海拔越高毒气越稀薄。
可是可怜的袋鼠们对此全然不觉,还是习惯于活蹦乱跳。
于是,不断有袋鼠死于海拔较低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有机会生儿育女。
就这样经过许多年,这些袋鼠们竟然都不自觉地聚拢到了一个个的山峰上,可是在所有的袋鼠中,只有聚拢到珠穆朗玛峰的袋鼠被带回了美丽的澳洲。
)下面主要介绍介绍遗传算法实现的过程。
遗传算法的实现过程遗传算法的实现过程实际上就像自然界的进化过程那样。
首先寻找一种对问题潜在解进行“数字化”编码的方案。
(建立表现型和基因型的映射关系。
)然后用随机数初始化一个种群(那么第一批袋鼠就被随意地分散在山脉上。
),种群里面的个体就是这些数字化的编码。
接下来,通过适当的解码过程之后,(得到袋鼠的位置坐标。
)用适应性函数对每一个基因个体作一次适应度评估。
(袋鼠爬得越高,越是受我们的喜爱,所以适应度相应越高。
)用选择函数按照某种规定择优选择。
(我们要每隔一段时间,在山上射杀一些所在海拔较低的袋鼠,以保证袋鼠总体数目持平。
)让个体基因交叉变异。
(让袋鼠随机地跳一跳)然后产生子代。
(希望存活下来的袋鼠是多产的,并在那里生儿育女。
)遗传算法并不保证你能获得问题的最优解,但是使用遗传算法的最大优点在于你不必去了解和操心如何去“找”最优解。
(你不必去指导袋鼠向那边跳,跳多远。
)而只要简单的“否定”一些表现不好的个体就行了。
(把那些总是爱走下坡路的袋鼠射杀。
)以后你会慢慢理解这句话,这是遗传算法的精粹!题外话:这里想提一提一个非主流的进化论观点:拉马克主义的进化论。
法国学者拉马克(Jean-Baptiste de Lamarck,1744~1891)的进化论观点表述在他的《动物学哲学》(1809)一书中。
该书提出生物自身存在一种是结构更加复杂化的“内驱力”,这种内驱力是与生俱来的,在动物中表现为“动物体新器官的产生来自它不断感觉到的新需要。
”不过具体的生物能否变化,向什么方向变化,则要受环境的影响。
拉马克称其环境机制为“获得性遗传”,这一机制分为两个阶段:一是动物器官的用与不用(即“用进废退”:在环境的作用下,某一器官越用越发达,不使用就会退化,甚至消失。
);二是在环境作用下,动物用与不用导致的后天变异通过繁殖传给后代(即“获得性遗传”)。
德国动物学家魏斯曼(August Weismann,1834~1914)对获得性遗传提出坚决的质疑。
他用老鼠做了一个著名的“去尾实验”,他切去老鼠的尾巴,并使之适应了短尾的生活。
用这样的老鼠进行繁殖,下一代老鼠再切去尾巴,一连切了22代老鼠的尾巴,第23代老鼠仍然长出正常的尾巴。
由此魏斯曼认为后天后天获得性不能遗传。
(择自《怀疑----科学探索的起点》)我举出这个例子,一方面希望初学者能够更加了解正统的进化论思想,能够分辨进化论与伪进化论的区别。
另一方面想让读者知道的是,遗传算法虽然是一种仿生的算法,但我们不需要局限于仿生本身。
大自然是非常智慧的,但不代表某些细节上人不能比她更智慧。
另外,具体地说,大自然要解决的问题,毕竟不是我们要解决的问题,所以解决方法上的偏差是非常正常和在所难免的。
(下一章,读者就会看到一些非仿生而有效的算法改进。
)譬如上面这个“获得性遗传”我们先不管它在自然界存不存在,但是对于遗传算法的本身,有非常大的利用价值。
即变异不一定发生在产生子代的过程中,而且变异方向不一定是随机性的。
变异可以发生在适应性评估的过程当中,而且可以是有方向性的。
(当然,进一步的研究有待进行。
)所以我们总结出遗传算法的一般步骤:开始循环直至找到满意的解。
1.评估每条染色体所对应个体的适应度。
2.遵照适应度越高,选择概率越大的原则,从种群中选择两个个体作为父方和母方。
3.抽取父母双方的染色体,进行交叉,产生子代。
4.对子代的染色体进行变异。
5.重复2,3,4步骤,直到新种群的产生。
结束循环。
接下来,我们将详细地剖析遗传算法过程的每一个细节。
编制袋鼠的染色体----基因的编码方式通过前一章的学习,读者已经了解到人类染色体的编码符号集,由4种碱基的两种配合组成。
共有4种情况,相当于2 bit的信息量。
这是人类基因的编码方式,那么我们使用遗传算法的时候编码又该如何处理呢?受到人类染色体结构的启发,我们可以设想一下,假设目前只有“0”,“1”两种碱基,我们也用一条链条把他们有序的串连在一起,因为每一个单位都能表现出 1 bit的信息量,所以一条足够长的染色体就能为我们勾勒出一个个体的所有特征。
这就是二进制编码法,染色体大致如下:010010011011011110111110上面的编码方式虽然简单直观,但明显地,当个体特征比较复杂的时候,需要大量的编码才能精确地描述,相应的解码过程(类似于生物学中的DNA翻译过程,就是把基因型映射到表现型的过程。
)将过份繁复,为改善遗传算法的计算复杂性、提高运算效率,提出了浮点数编码。
染色体大致如下:1.2 – 3.3 –2.0 – 5.4 – 2.7 – 4.3那么我们如何利用这两种编码方式来为袋鼠的染色体编码呢?因为编码的目的是建立表现型到基因型的映射关系,而表现型一般就被理解为个体的特征。
比如人的基因型是46条染色体所描述的(总长度两米的纸条?),却能解码成一个个眼,耳,口,鼻等特征各不相同的活生生的人。
所以我们要想为“袋鼠”的染色体编码,我们必须先来考虑“袋鼠”的“个体特征”是什么。
也许有的人会说,袋鼠的特征很多,比如性别,身长,体重,也许它喜欢吃什么也能算作其中一个特征。
但具体在解决这个问题的情况下,我们应该进一步思考:无论这只袋鼠是长短,肥瘦,只要它在低海拔就会被射杀,同时也没有规定身长的袋鼠能跳得远一些,身短的袋鼠跳得近一些。
当然它爱吃什么就更不相关了。
我们由始至终都只关心一件事情:袋鼠在哪里。
因为只要我们知道袋鼠在那里,我们就能做两件必须去做的事情:(1)通过查阅喜玛拉雅山脉的地图来得知袋鼠所在的海拔高度(通过自变量求函数值。