遗传算法

合集下载

遗传算法遗传算法

遗传算法遗传算法
11
(5)遗传算法在解空间进行高效启发式搜索,而非盲 目地穷举或完全随机搜索;
(6)遗传算法对于待寻优的函数基本无限制,它既不 要求函数连续,也不要求函数可微,既可以是数学解 析式所表示的显函数,又可以是映射矩阵甚至是神经 网络的隐函数,因而应用范围较广;
(7)遗传算法具有并行计算的特点,因而可通过大规 模并行计算来提高计算速度,适合大规模复杂问题的 优化。
26
(4)基本遗传算法的运行参数 有下述4个运行参数需要提前设定:
M:群体大小,即群体中所含个体的数量,一般取为 20~100; G:遗传算法的终止进化代数,一般取为100~500; Pc:交叉概率,一般取为0.4~0.99;
Pm:变异概率,一般取为0.0001~0.1。
27
10.4.2 遗传算法的应用步骤
遗传算法简称GA(Genetic Algorithms)是1962年 由美国Michigan大学的Holland教授提出的模拟自然 界遗传机制和生物进化论而成的一种并行随机搜索最 优化方法。
遗传算法是以达尔文的自然选择学说为基础发展起 来的。自然选择学说包括以下三个方面:
1
(1)遗传:这是生物的普遍特征,亲代把生物信息交 给子代,子代总是和亲代具有相同或相似的性状。生 物有了这个特征,物种才能稳定存在。
18
(3)生产调度问题 在很多情况下,采用建立数学模型的方法难以对生
产调度问题进行精确求解。在现实生产中多采用一些 经验进行调度。遗传算法是解决复杂调度问题的有效 工具,在单件生产车间调度、流水线生产车间调度、 生产规划、任务分配等方面遗传算法都得到了有效的 应用。
19
(4)自动控制。 在自动控制领域中有很多与优化相关的问题需要求
10

遗传算法

遗传算法

1.3 遗传算法与传统方法的比较
传统算法 起始于单个点 遗传算法 起始于群体
改善 (问题特有的)

改善 (独立于问题的) 否
终止?
终止? 是 结束

结束
1.3.1遗传算法与启发式算法的比较
启发式算法是通过寻求一种能产生可行解的启发式规则,找到问 题的一个最优解或近似最优解。该方法求解问题的效率较高,但是具有 唯一性,不具有通用性,对每个所求问题必须找出其规则。但遗传算法 采用的是不是确定性规则,而是强调利用概率转换规则来引导搜索过程。
1.2 遗传算法的特点
遗传算法是一种借鉴生物界自然选择和自然遗传机制 的随机搜索法。它与传统的算法不同,大多数古典的优化算 法是基于一个单一的度量函数的梯度或较高次统计,以产生 一个确定性的试验解序列;遗传算法不依赖于梯度信息,而 是通过模拟自然进化过程来搜索最优解,它利用某种编码技 术,作用于称为染色体的数字串,模拟由这些串组成的群体 的进化过程。
1.2.2 遗传算法的缺点
(1)编码不规范及编码存在表示的不准确性。 (2)单一的遗传算法编码不能全面地将优化问题的约束表示 出来。考虑约束的一个方法就是对不可行解采用阈值,这样, 计算的时间必然增加。 (3)遗传算法通常的效率比其他传统的优化方法低。 (4)遗传算法容易出现过早收敛。 (5)遗传算法对算法的精度、可信度、计算复杂性等方面, 还没有有效的定量分析方法。
上述遗传算法的计算过程可用下图表示。
遗传算法流程图
目前,遗传算法的终止条件的主要判据有 以下几种:
• 1) 判别遗传算法进化代数是否达到预定的最大代数; • 2) 判别遗传搜索是否已找到某个较优的染色体; • 3) 判别各染色体的适应度函数值是否已趋于稳定、再上升 否等。

遗传算法

遗传算法

1 遗传算法1.1 遗传算法的定义遗传算法(GeneticAlgorithm,GA)是近多年来发展起来的一种全新的全局优化算法,它是基于了生物遗传学的观点,是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。

它通过自然选择、遗传、复制、变异等作用机制,实现各个个体的适应性的提高,从而达到全局优化。

遗传算法151解决一个实际问题通常都是从一个种群开始,而这个种群通常都是含有问题的一个集合。

这个种群是由一定数目的个体所构成的,利用生物遗传的知识我们可以知道这些个体正好组成了我们知道的染色体,也就是说染色体是由一个个有特征的个体组成的。

另外我们还知道,遗传算法是由染色体组成,而染色体是由基因组成,可以这么说,基因就决定了个体的特性,所以对于遗传算法的最开始的工作就需要进行编码工作。

然后形成初始的种群,最后进行选择、交叉和变异的操作。

1.2遗传算法的重要应用在现实应用中,遗传算法在很多领域得到很好的应用,特别是在解决多维并且相当困难的优化问题中时表现出了很大的优势。

在遗传算法的优化问题的应用中,其中最为经典的应用就是我们所熟悉的函数优化问题,它也是对遗传算法的性能进行评价的最普遍的一种算法;另外的一个最重要的应用,也就是我们本文所研究的应用—组合优化问题,一般的算法很难解决组合优化问题的搜索空间不断扩大的局面,而组合优化问题正好是解决这种问题的最有效的方法之一,在本文的研究中,比如求解TSP问题、VRP问题等方面都得到了很好的应用;另外遗传算法在航空控制系统中的应用、在图像处理和模式识别的应用、在生产调度方面的应用以及在工人智能、人工生命和机器学习方面都得到了很好的应用。

其实在当今的社会中,有关于优化方面的问题应用于各行各业中,因此有关于优化问题已经变得非常重要,它对于整个社会的发展来说都是一个不可改变的发展方向,也是社会发展的一个非常重要的需要。

1.3 遗传算法的特点遗传算法不同于传统的搜索与优化方法,它是随着问题种类的不同以及问题规模的扩大,能以有限的代价来很好的解决搜索和优化的方法。

遗传算法

遗传算法
1.4 遗传算法的应用领域
数学建模专题之遗传算法
(1)函数优化(经典应用) (2)组合优化(旅行商问题——已成为衡量算法优劣的标准、背包问 题、装箱问题等) (3)生产调度问题 (4)自动控制(如航空控制系统的优化设计、模糊控制器优化设计和 在线修改隶属度函数、人工神经网络结构优化设计和调整人工神 经网络的连接权等优化问题) (5)机器人智能控制(如移动机器人路径规划、关节机器人运动轨迹 规划、机器人逆运动学求解等) (6)图像处理和模式识别(如图像恢复、图像边缘特征提取、几何形 Hotspot 状识别等) (7)机器学习(将GA用于知识获取,构建基于GA的机器学习系统) 此外,遗传算法在人工生命、遗传程序设计、社会和经济领域等 方面的应用尽管不是很成熟,但还是取得了一定的成功。在日后,必 定有更深入的发展。
内容 应用Walsh函数分析模式 研究遗传算法中的选择和支配问题 遗传算法应用于非稳定问题的粗略研究 用遗传算法解决旅行商问题(TSP) 基本遗传算法中用启发知识维持遗传多样性
1985
1985 1985 1985 1985
Baker
Booker Goldberg, Lingle Grefenstette, Fitzpattrick Schaffer
试验基于排序的选择方法
建议采用部分分配计分、分享操作和交配限制法 TSP问题中采用部分匹配交叉 对含噪声的函数进行测试 多种群遗传算法解决多目标优化问题
1 遗传算法概述
续表1.1
年份 1986 贡献者 Goldberg 最优种群大小估计
数学建模专题之遗传算法
内容
1986
1987 1987 1987 1987
2 标准遗传算法
2.4 遗传算法的应用步骤

遗传算法

遗传算法

5.3.3 多交配位法
单交配位方法只能交换一个片段的基 因序列,但多交配位方法能够交换多 个片段的基因序列 1101001 1100010 1100000 1101011
交配前
交配后
5.3.4 双亲单子法
两个染色体交配后,只产生一个子染 色体。通常是从一般的交配法得到的 两个子染色体中随机地选择一个,或 者选择适应值较大的那一个子染色体
6.1.4 基于共享函数的小生境实现方 法
6.1.1 小生境遗传算法的生物 学背景
•小生境是特定环境下的生存环境
•相同的物种生活在一起,共同繁 衍后代 •在某一特定的地理区域内,但也 能进化出优秀的个体 •能够帮助寻找全部全局最优解和 局部最优解(峰顶)
6.1.2 基于选择的小生境实现 方法
•只有当新产生的子代适应度超过 其父代个体的适应度时,才进行 替换,否则父代保存在群体中 •这种选择方式有利于保持群体的 多样性 •这种方法有利于使得某些个体成 为它所在区域中的最优个体
5.1.3 实数编码的实现方法(续)
•适合于精度要求较高的问题 •便于较大空间的遗传搜索 •改善了遗传算法的计算复杂性, 提高了效率 •便于遗传算法与经典优化算法混 合使用 •便于设计针对问题的专门知识型 算子 •便于处理复杂的决策约束条件
5.2 选择算子
5.2.1 概率选择算子
5.2.2 适应值变换选择算子
•pm: 变异概率,一般取0.0001—0.1
4.1 问题描述 4.2 问题转换和参数设定 4.3 第0代情况 4.4 第0代交配情况 4.5 第1代情况 4.6 第1代交配情况 4.7 第1代变异情况 4.8 第2代情况 4.9 第2代交配情况
4. 基本遗传算法举例
4.1 问题描述

遗传算法

遗传算法

2. 遗传算法在电磁优化中的应用
在电磁场工程中,许多电磁优化问题的目标 函数往往是高度非线性的、多极值的、不可 微分的和多参数的。同时,这些目标函数的 计算成本往往很高。在这些复杂电磁问题的 优化设计中,高效的优化算法对于实现高性 价比的设计具有举足轻重的作用。
例 用GPS/铱星系统的圆极化弯钩天线。 全球定位系统(GPS)的工作频率有两个,一个是 1575.4MHz,另一个是1227.6MHz,信号采用圆极化 方式传输。铱星系统也采用圆极化方式传输,其工 作频带1225~1630MHz。 为了使天线同时接收GPS/铱星两个系统的信号,天 线的工作频带应该为1225~1630MHz,采用圆极化 工作方式,在相对于水平面大于5°的准半球空间 具有均匀的辐射方向图。下图为一个弯钩天线,它 有7段直导线串联而成,整个天线被限定在边长为 0.5λmax 的立方体空间内。通过遗传算法,调节7个 连接点的坐标,可以得到满足设计要求的最佳弯钩 天线结构。在优化过程中,价值函数取为
2 杂交策略 在自然界生物进化过程中,起核心作用的是生物遗传基因的 重组(加上变异)。 同样,遗传算法中起核心作用的是遗传操作的杂交算子。对于 占主流地位的二值编码而言,各种杂交算子都包括两个基本 内容:①从由选择操作形成的配对库中,对个体两两配对, 按预先设定的杂交概率来决定每对是否需要进行杂交操作; ②设定配对个体的杂交点,并对这些点前后的配对个体的部 分结构进行相互交换。 就配对的方式来看,可分为随机配对和确定式配对。 3 变异策略 变异算子的基本内容是对群体中个体串的某些基因座上的基 因值作变动。就二值码串而言,变异操作就是把某些基因座 上的基因值取反,即1→0或0→1.
5.杂交操作:遗传算子(有性重组)可以产 生新的个体,从而检测搜索空间的新点。简 单的杂交可分2步进行:随机配对,交换杂交 点后的基因信息。

遗传算法实例参考

遗传算法实例参考
03 交换基因是指在解空间中随机选择两个位置,将 两个位置上的基因进行交换。
05 遗传算法实例:其他问题
问题描述
旅行商问题
给定一系列城市和每对城市之间 的距离,要求找出一条旅行路线, 使得每个城市恰好经过一次并最 终回到起始城市,且总距离最短。
背包问题
给定一组物品和它们的价值、重 量,要求在不超过背包承重限制 的情况下,选择一些物品放入背 包,使得背包中物品的总价值最 大。
2
在调度问题中,常用的编码方式包括二进制编码、 整数编码和实数编码等。
3
二进制编码将每个任务表示为一个二进制串,串 中的每个比特代表一个时间点,1表示任务在该 时间点执行,0表示不执行。
适应度函数
01
适应度函数用于评估解的优劣程度。
02
在调度问题中,适应度函数通常根据总成本计算得出,总成 本越低,适应度越高。
旅行商问题(Traveling Salesman Problem, TSP)是一个经典的组合优化问题, 旨在寻找一条旅行路线,使得一个销售代表能够访问所有指定的城市,并最后返回 出发城市,且所走的总距离最短。
问题可以描述为:给定一个包含n个城市的集合,以及每对城市之间的距离,求 一条总距离最短的旅行路线。
函数优化
用于求解多峰函数、离散函数等复杂函数的 最大值或最小值问题。
机器学习
用于支持向量机、神经网络等机器学习模型 的参数优化。
组合优化
用于求解如旅行商问题、背包问题、图着色 问题等组合优化问题。
调度与分配问题
用于求解生产调度、车辆路径规划、任务分 配等问题。
02 遗传算法实例:旅行商问 题
问题描述
交叉操作
• 交叉操作是将两个个体的部分基因进行交换,以 产生新的个体。常用的交叉方法有单点交叉、多 点交叉等。在背包问题中,可以采用单点交叉方 法,随机选择一个交叉点,将两个个体的基因进 行交换。

遗传算法

遗传算法

缺点:该算法只是对每个落点进行单独的考虑,没有反应不同组 合所产生的共同效果,所以只是近似的算法,不能获得最优的结果。 基于单个的优化不能保证在整体情况下能获得最大值。 如果对所有的可能方案进行评价,找到最佳方案。例如在N*N的
栅格空间中确定n个 目标的最佳位置,则所要对比的组合高达
2.遗传算法和GIS结合解决空间优化问题
所谓交叉运算,是指对两个相互配对的染色体依据
交叉概率 Pc 按某种方式相互交换其部分基因,从而形 成两个新的个体。
交叉前: 00000|011100000000|10000 11100|000001111110|00101 交叉后: 00000|000001111110|10000 11100|011100000000|00101 染色体交叉是以一定的概率发生的,这个概率记为Pc
行一点或多点交叉的操作,但这样很容易产生断路或环路。针对路径 的具体需要,这里采用只允许在除首、尾结点之外的第一个重复结点位
置交叉且只进行一点交叉的操作方式。例如:设从起始结点1到目标结
点9的一对父代个体分别是G1和G2,分别如下表示: G1(1,3,5,6,7,8,9)
G2(1,2,4,5,8,9)
是一种有效的解最优化问题的方法。 其基本思想是:首先随机产生种群,对种群中的被选中染色体进行交
叉或变异运算生成后代,根据适值选择部分后代,淘汰部分后代,但种群
大小不变。经过若干代遗传之后,算法收敛于最好的染色体,可能是问题 的最优解或次优解。
适应度函数
遗传算法对一个个体(解)的好坏用适应度函数
值来评价,适应度函数值越大,解的质量越好。适应 度函数是遗传算法进化过程的驱动力,也是进行自然
篇论文。此后Holland教授指导学生完成了多篇有关遗传算法研究的论
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

遗传算法的基本理论一、起源:早在20世纪50年代和60年代,就有少数人几个计算机科学家独立地进行了所谓的“人工进化系统”研究,其出发点是进化的思想可以发展成为许多工程问题的优化工具。

早期的研究形成了遗传算法的雏形,如大多数系统都遵循“适者生存”的仿自然法则,有些系统采用了基于群体(population)的设计方案,并且加入了自然选择与变异操作,还有一些系统对生物染色体编码进行了抽象处理,应用二进制编码。

由于缺乏一种通用的编码方案,人们只能依赖变异而非交叉来产生新的基因结构,早期的算法收敛甚微。

20世纪60年代中期,美国Michigan大学的John Holland在A.S.Fraser和H.J.Bremermann等人工作的基础上提出了位串编码技术。

这种编码既适用于变异操作,又适用于交叉(即杂交)操作。

并且强调将交叉作为主要的遗传操作。

随后,Holland将该算法用于自然和人工系统的自适应行为的研究中,并于1975年出版了其开创性著作“Adaption in Natural and Artificial System”。

以后,Holland等人将该算法加以推广,应用到优化及机器学习等问题中,并正式定名为遗传算法。

遗传算法的通用编码技术和简单有效的遗传操作作为其广泛、成功地应用奠定了基础。

Holland早期有关遗传算法的许多概念一直沿用至今,可见Holland对遗传算法的贡献之大。

他认为遗传算法本质上是适应算法,应用最多的是系统最优化的研究。

二、发展:年份贡献者内容1962Holland程序漫游元胞计算机自适应系统框架1968Holland模式定理的建立1971Hollstein具有交配和选择规则的二维函数优化1972Bosworth、Foo、Zeigler提出具有复杂变异、类似于遗传算法的基因操作1972Frantz位置非线性和倒位操作研究1973Holland遗传算法中试验的最优配置和双臂强盗问题1973Martin类似遗传真法的概率算法理论1975De Jong用于5个测试函数的研究基本遗传算法基准参数1975Holland 出版了开创性著作《Adaptation in Natural andArtificial System》1981Bethke应用Walsh函数分析模式1981Brindle研究遗传算法中的选择和支配问题1983Pettit、Swigger遗传算法应用于非稳定问题的粗略研究1983Wetzel用遗传算法解决旅行商问题(TSP)1984Mauldin基本遗传算法小用启发知识维持遗传多样性1985Baker试验基于排序的选择方法1985Booker建议采用部分匹配计分、分享操作和交配限制法1985Goldberg、Lingle TSP问题个采用部分匹配交叉1985Grefenstette、Fitzpattrick对含噪声的函数进行测试1985Schaffer多种群遗传算法解决多目标优化问题1986Goldberg最优种群大小估计1986Grefenstette元级遗传算法控制的遗传算法1987Baker选择中随机误差的减少方法1987Goldberg复制和交叉时最小欺骗问题(MDP)1987Goldberg、Richardson借助分享函数的小生境和物种归纳法1987Goldberg、Segrest复制和交叉的有限马尔可夫链1987Goldberg、Smith双倍染色体遗传算法应用于非稳定函数优化1987Oliver、Smith、Holland排列重组算于的模拟和分析1987Schaffer、Morishima串编码自适应交叉试验1987Whitley子孙测试应用于遗传算法的选择操作之后,遗传算法发展的趋势是遗传算法的改进(如自适应遗传算法、分层遗传算法、并行遗传算法、基于小生境技术的遗传算法等)和基于遗传算法与其他算法相结合的混合智能优化算法(如量子遗传算法、协同遗传算法、免疫遗传算法等)。

三、基本原理:1、生物进化论与遗传学的相关原理达尔文进化论主要有四个学说:一般进化论、共同祖先学说、渐变论和自然选择学说。

其中自然选择学说的主要内容为:自然选择来自繁殖过剩和生存斗争。

由于弱肉强食的生存斗争不断地进行,其结果是适者生存,具有适应性变异的个体被保留下来,不只有适应性变异的个体被淘汰,通过一代代的生存环境的选择作用,物种变异被定向着一个方向积累,于是性状逐渐和原先的祖先种不同,演变为新的物种。

这种自然选择过程是一个长期的、缓慢的、连续的过程。

关于达尔文的进化论有很多的争议,可以参考文献[1]。

孟德尔遗传定律:分离规律和自由组合定律。

种群遗传学:这是一种以种群为单位而不是以个体为单位的遗传学,是研究种群中基因的组成及其变化的生物学。

在一定地域中,一个物种的全体成员构成一个种群(population),种群的主要特征是种群内的雌雄个体能够通过有性生殖实现基因的交流。

生物的进化实际上是种群的进化,个体总是要消亡,但种群则是继续保留,每一代个体基因型的改变会影响种群基因库(gene pool)的组成。

而种群基因库组成的变化就是这一种群的进化,没有所谓的生存斗争问题、单是个体繁殖机会的差异也能造成后代遗传组成的改变,自然选择也能够进行。

综合进化论对达尔文式的进化给予了新的更加精确的解释。

至于基本概念的定义详见参考文献[2]中的“遗传算法扼要”。

2、遗传算法的基本思想遗传算法模拟的是怎样的生物进化模型呢?假设对相当于自然界中的一群人的一个种群进行操作,第一步的选择是以现实世界中的优胜劣汰现象为背景的;第二步的重组交叉则相当于人类的结婚和生育;第三步的变异则与自然界中偶然发生的变异是一致的。

我们用专业术语来更好地描述遗传算法的基本思想。

遗传算法是从代表问题可能潜在解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码(coding)的一定数目的个体(individual)组成。

每个个体实际上是染色体(chromosome)带有特征的实体。

染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。

因此,在一开始需要实现从表现型到基因型的映射即编码工作。

由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编码。

初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解。

在每一代,根据问题域中个体的适应度(fitness)大小挑选(selection)个体,并借助于自然遗传学的遗传算子(genetic operators)进行组合交叉(crossover)和变异(mutation).产生出代表新的解集的种群。

这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码maxgen=200; %进化代数,即迭代次数sizepop=20; %种群规模pcross=0.6; %交叉概率选择,0和1之间pmutation=0.01; %变异概率选择,0和1之间lenchrom=[1 1 1 1 1]; %每个变量的字串长度,如果是浮点变量,则长度都为1 bound=[0 0.9*pi;0 0.9*pi;0 0.9*pi;0 0.9*pi;0 0.9*pi];%%个体初始化individuals=struct('fitness',zeros(1,sizepop),'chrom',[]); %种群结构体%初始化种群for i=1:sizepop%随机产生一个群体individuals.chrom(i,:)=unifrnd(0,0.9*pi,[1 sum(lenchrom)]);%随机产生染色体x=individuals.chrom(i,:);individuals.fitness(i)=fun(x); %染色体的适应度end%找最好的染色体[bestfitness bestindex]=min(individuals.fitness);bestchrom=individuals.chrom(bestindex,:); %最好的染色体avgfitness=sum(individuals.fitness)/sizepop; %染色体的平均适应度%记录每一代进化中最好的适应度和平均适应度trace=[];%%进化开始for i=1:maxgen%选择individuals=select(individuals,sizepop);avgfitness=sum(individuals.fitness)/sizepop;%交叉individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound);%变异individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,[i maxgen],bound);%每进化10代,以所得值为初始值进行非线性寻优%if mod(i,10)==0% individuals.chrom=nonlinear(individuals.chrom,sizepop);%end%计算适应度for j=1:sizepopx=individuals.chrom(j,:);individuals.fitness(j)=fun(x);end%找到最优染色体及它们在种群中的位置[newbestfitness,newbestindex]=min(individuals.fitness);%代替上一次进化中最好的染色体if bestfitness>newbestfitnessbestfitness=newbestfitness;bestchrom=individuals.chrom(newbestindex,:);endavgfitness=sum(individuals.fitness)/sizepop;trace=[trace;avgfitness bestfitness]; %记录每一代进化中最好的适应度和平均适应度end %进化结束function y = fun(x)y=-5*sin(x(1))*sin(x(2))*sin(x(3))*sin(x(4))*sin(x(5))-sin(5*x(1))*sin(5*x(2))*s in(5*x(3))*sin(5*x(4))*sin(5*x(5))+8;function ret = select(individuals,sizepop)%本函数在每一代种群中得染色体进行选择,以进行后面的交叉和变异%individuals input ;种群信息%sizepop input ;种群规模%opts input ;选择方法的选择%ret output;经过选择后的种群individuals.fitness=1./(individuals.fitness);sumfitness=sum(individuals.fitness);sumf=individuals.fitness./sumfitness;index=[];for i=1:sizepop %转sizepop次轮盘pick=rand;while pick==0pick=rand;endfor j=1:sizepoppick=pick-sumf(j);if pick<0index=[index j];break;%寻找落入区间的染色体,此次选择为3endendendindividuals.chrom=individuals.chrom(index,:);individuals.fitness=individuals.fitness(index);ret=individuals;function ret = Cross(pcross,lenchrom,chrom,sizepop,bound)%本函数完成交叉操作%pcross input ;交叉概率%lenchrom input ;染色体的长度%chrom input ;染色体群%sizepop input ;种群规模%ret output;交叉后的染色体for i=1:sizepop %是否进行交叉操作则由交叉概率决定(continune控制)%随机选择两个染色体进行交叉pick = rand(1,2);while prod(pick)==0pick=rand(1,2);endindex=ceil(pick.*sizepop);%交叉概率决定是否进行交叉pick=rand;while pick==0pick=rand;endif pick>pcrosscontinue;endflag=0;while flag==0%随机选择交叉位置pick=rand;while pick==0pick=rand;endpos=ceil(pick.*sum(lenchrom)); %随机选择进行交叉的位置pick=rand; %交叉开始v1=chrom(index(1),pos);v2=chrom(index(2),pos);chrom(index(1),pos)=pick*v2+(1-pick)*v1;chrom(index(2),pos)=pick*v1+(1-pick)*v2; %交叉结束flag=1;for j=1:2if chrom(index(j),pos)>bound(pos,2)flag=0;endif chrom(index(j),pos)<bound(pos,1)flag=0;endendendendret=chrom;function ret = Mutation(pmutation,lenchrom,chrom,sizepop,pop,bound) %本函数完成变异操作%pcross input :变异概率%lenchrom input :染色体长度%chrom input :染色体群%sizepop input :种群规模%pop input :当前种群的进化代数和最大的进化代数信息%ret output:变异后的染色体for i=1:sizepop%随机选择一个染色体进行变异pick=rand;while pick==0pick=rand;endindex=ceil(pick*sizepop);%变异概率决定该轮循环是否进行变异pick=rand;if pick>pmutationcontinue;endflag=0while flag==0%变异位置pick=rand;while pick==0pick=rand;endpos=ceil(pick*sum(lenchrom));v=chrom(i,pos);v1=v-bound(pos,2);v2=bound(pos,1)-v;pick=rand; %变异开始if pick>=0.5delta=v1*pick*((1-pop(1)/pop(2))^2);chrom(i,pos)=v+delta;elsedelta=v2*pick*((1-pop(1)/pop(2))^2);chrom(i,pos)=v+delta;end %变异结束if chrom(i,pos)>bound(pos,2)flag=1;endif chrom(i,pos)<bound(pos,1)flag=1;endendendret=chrom;function ret =nonlinear(chrom,sizepop)for i=1:sizepopx=fmincon(inline('-5*sin(x(1))*sin(x(2))*sin(x(3))*sin(x(4))*sin(x(5))-sin(5 *x(1))*sin(5*x(2))*sin(5*x(3))*sin(5*x(4))*sin(5*x(5))'),chrom(i,:)',[],[],[ ],[],[0 0 0 0 0],[2.8274 2.8274 2.8274 2.8274 2.8274]);ret(i,:)=x';end其最坏情况下的时间复杂度随着问题规模的增大指数方式增大,到目前为止还未找到一个多项式例2、TSP(traveling salesman problem,旅行商问题)是典型的NP完全问题,即参考文献[1]孙关龙. 达尔文进化论的五大缺陷[J].化石.1999.[2]王小平,曹立明.遗传算法-理论、应用与软件实现[M].西安交通大学出版社.2002.[3]史峰,王辉等.Matlab智能算法30个案例分析[M].北京航空航天大学出版社.2011.。

相关文档
最新文档