目
录
摘要
I
Abstract
II
引
言
1
第一章
基本遗传算法
2
11
遗传算法的产生及发展
3
12
基本原理
3
13
遗传算法的特点
3
14
基本遗传算法描述
5
15
遗传算法构造流程
6
第二章
遗传算法的实现技术
6
21
编码方法
7
211
二进制编码
7
212
格雷码编码
7
213
符点数编码
8
214
参数编码
8
22
适应度函数
10
23
选择算子
10
24
交叉算子
10
241
单点交叉算子
10
242
双点交叉算子
11
243
均匀交叉算子
11
244
部分映射交叉
11
245
顺序交叉
12
25
变异算子
12
26
运行参数
12
27
约束条件的处理方法
13
28
遗传算法流程图
14
第三章
遗传算法在TSP上的应用
15
31
TSP问题的建模与描述
15
32
对TSP的遗传基因编码方法
16
33
针对TSP的遗传 *** 作算子
17
331
选择算子
17
3311
轮盘赌选择
17
3312
最优保存策略选择
17
332
交叉算子
20
3321
单点交叉
20
3322
部分映射交叉
21
333
变异算子
23
34
TSP的混和遗传算法
26
第四章
实例分析
27
41
测试数据
27
42
测试结果
27
43
结果分析
27
摘
要
TSP
(Traveling
Salesman
Problem)旅行商问题是一类典型的NP完全问题,遗传算法是解决NP问题的一种较理想的方法。文章首先介绍了基本遗传算法的基本原理、特点及其基本实现技术;接着针对TSP
问题,论述了遗传算法在编码表示和遗传算子(包括选择算子、交叉算子变异算子这三种算子)等方面的应用情况,分别指出几种常用的编码方法的优点和缺点,并且结合TSP的运行实例详细分析了基本遗传算法的4个运行参数群体大小、遗传算法的终止进化代数、交叉概率、变异概率,对遗传算法的求解结果和求解效率的影响,经过多次的测试设定出了它们一组比较合理的取值。最后,简单说明了混合遗传算法在求解TSP问题中的应用并对遗传算法解决TSP问题的前景提出了展望。
关键词:TSP
遗传算法
遗传算子
编码
@@@需要的话按我的名字找我吧
遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(individual)组成。每个个体实际上是染色体(chromosome)带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。因此,在一开始需要实现从表现型到基因型的映射即编码工作。由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编码,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择(selection)个体,并借助于自然遗传学的遗传算子(genetic operators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。
附件包含好几个用遗传算法优化神经网络初始权值的matlab程序,算是一个小合集,搜集了目前网上最流行的几个GA-BP案例。运行前需安装遗传算法工具箱GAOT,否则无法运行。
摘 要本文借鉴了面向分组的调度算法的优点,深入分析了遗传算法中编码串各个位的权重特点及个体的模式规律,对传统遗传算法进行了改进,新的算法具有面向分组、有针对性、同时又能够借助优良个体特征模式进行变异的特征,所以能够自适应地、并且有方向性地进行变异,从而增加了种群的多样性、提高了收敛速度。通过在本文后面的对比实验,证明了当标准遗传算法(GA)调度算法与改进遗传算法(MGA)同时应用在相同(资源数和任务数相同)的网格调度系统中时,后者使网格调度的总体响应时间有了明显的减少;并且当调度的规模增大时,具有更好的性能。
关键词网格调度;遗传算法;GridSim;GridBroker;仿真
1网格资源调度简介
在网格系统中,调度是其重要的组成部分,它要根据任务信息采用适当的策略把不同的任务分配到相应的资源结点上去运行。由于网格系统的异构性和动态性,以及运行于网格系统之中的应用程序对于资源的不同需求,使得资源调度变得极其复杂[1][2]。
一般的网格资源调度问题已被证明是一个NP完全问题[3][4],因此引起了更多学者的关注,成为目前网格计算研究领域中的一个焦点[5]。
11 网格调度数学模型
该数学模型定义调度算法的主要术语,不假设不支持抢先调度。并且该模型是针对已经分解的应用,即假设应用已经分解成N个任务,这些任务之间的关系分为两种情况,即有依赖和没有依赖。为说明问题,本文只讨论简单的无依赖的情况,数学模型假设所有的机器都是调度器可以控制的,多个任务不能在同一个计算节点之上并发执行。
(1)自治域中存在着多个市场,每个市场可以看作是一个虚拟组织。借助文献[6]中的面向分组的思想,将多个任务相似的任务归类到相同的分组。
(2)自治域内网格节点间通信延迟较小;在本文中的一个创新想法的出处来自于文献[6]的面向粗粒度的调度算法,在面向粗粒度的调度中,运用了一种分组调度策略,将相似作业进行分组,再将分组提交到合适的运算资源。在建立模型的时候,在此思想的基础之上,引入分组的思想,有效地把遗传算法和分组(分区)结合起来,经本文后面部分的模拟实验验证,是一种有效可行的方法。
(3)网格自治域中的节点数维持在一个恒定的水平上;
由以上分析,抽象出如数学公式12所示:
公式12
12 抽象调度数学模型
h≥0 //任务j的需求量要大于0;
以上式中,N为一个市场(虚拟组织)中计算资源的个数;M为任务的个数;变量i用于指示网格计算资源;变量j用于指示任务;变量k用于指示评价指标;为任务j到计算资源i的单位运输成本;为任务j的需求量;为第k项因素在选择模型中的影响权重,在本文中它是由专家意见以及经验预测等获得的权重值;为整数变量,当=1时,表示第i个计算资源被选中,反之当=0时,表示未被选中。
2基于MGA的网格资源调度
21 改进遗传算法(MGA)
本文在深入研究了基于传统遗传算法后[7],提出了一种面向分组的,并且基于优良个体特征方向来变异的变异算子。这样,可以改进传统遗传算法的一些缺陷,使其能够有目的地、自适应地、有方向地进行变异,以此增加种群的多样性并提高其收敛速度。
211 理论来源
在“模式定理”及“积木块假设”基础上,本文认为每一个个体之所以能够保持其优良与否的地位,原因就是其模式中具有一些一定的特征,对一般的二进制和级连交叉二进制编码来说,码的前面部分的变动使该个体在解空间内移动的范围(距离)比较大,而后面部分段却恰恰相反,它们只能使得个体的解空间在该个体附近稍作变动。
比如:在1011中,从左至右阶码分别为8,4,2,1,所以如果最左边的1变为0的时候,解空间的变化幅度就是8。而同是从1变为0,在最右边的1所能引起的解空间变化幅度是1。
所以,可以先找出一定的优良个体,然后从这些优良个体中提取一些特征模式,建立起来小环境,接下来让这些优良个体通过小(范围)区间的变异寻优,对于那些劣质个体,就需要借鉴优良个体的特征模式从而来进行较大区间的变异。实现有目的、带权重的变异。
212 总体思路
若有两个染色体:
A=()
B=()
=()
则分段海明距(Segment-Hamming):
只取染色体部分编码来计算两个体的海明距离。对种群进行交叉 *** 作后,从中选取一定数量的优良个体建立小环境。
通过上面的分析,可以看出,前段的编码对个体影响相对较大,因此,取前面一部分的编码用来计算两个体的分段海明距离。用这种方式来比较两个体是否在同一个小环境中,若有两个个体分段海明距离为零,则认为这样的个体是在同一小环境中,则只取其中一个作为这个小环境的代表。通过对种群中提出一定数量的这样的优良个体,能够建立起若干个小环境。对于这些小环境,在每个局部范围内进行变异搜索,采用后段编码进行穷举变异,找到每个小环境局部的最优(当然全局最优可能在其中)。
具体方法如下;如编码长为12位,若为111111111010,取分段海明距离为8(指前段,即加了下画线的那一段不作变异),那么后面的4位码长可能就有24个个体,即从0000到1111,我们穷举这些个体(111111110000~111111111111)计算每一个的适应度,找出它们中的最优。
●适应度函数
本文模型是一个求最大值问题,为此建立如下适应度函数:
公式212适应度函数公式
其中,是网格调度的数学模型公式,其形式见12节。是是到当前所有代的最小值,且随着代数变化。
22 资源调度实现过程
由上节中的数学模型知:设参与调度的任务集合为S,S={S[0],S[1],…S[N-1]},其中N为任务的总数,参与调度的异构机器集合为H,H={H[0],H[1],…H[M-1]},其中M为机器的数量。如果我们以调度长度为优化性能指标,则任务分配与调度的目标是将这N个计算机任务分配给这M个资源并安排好它们的执行顺序,使整个任务的完成时间最短。
交叉算子分好几种,有单点交叉、两点交叉、多点交叉、融合交叉、均匀交叉等,最简单的是单点交叉,假设个体的长度为N,那么就随机产生一个(1,N)范围内的整数r,然后将要交叉的两个母代个体从r这个地方截为两段,交换母代个体的后半段,就产生了新子代个体。这就是简单的单点交叉。详细可以看《遗传算法——理论、应用与软件实现》这本书中对交叉算子的介绍。参考资料是一个简单遗传算法的C代码及介绍。
同楼上,采取最优保存策略,也就是每次迭代的最优个体保存好,不随便进行交叉、变异 *** 作,即便进行这些 *** 作,也只在产生的新个体比原个体更优秀时才替换原个体。
当然,即便这样还会造成不收敛,即每次迭代的最有结果都一样,不往好的方向进化,那么这时候就要查看下选择算子、交叉 *** 作、变异 *** 作有没有问题了。
以上就是关于C语言遗传算法在求解TSP问题 毕业论文+源代码全部的内容,包括:C语言遗传算法在求解TSP问题 毕业论文+源代码、已知输入输出数据,进行黑箱建模,得到传递函数,用什么方法呢遗传算法神经网络 *** 作步骤源程序、[基于改进遗传算法的网格资源调度研究]遗传算法matlab程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)