时间:2023-03-22 17:41:41
序论:在您撰写遗传算法论文时,参考他人的优秀作品可以开阔视野,小编为您整理的7篇范文,希望这些建议能够激发您的创作热情,引导您走向新的创作高度。
论文关键词:遗传算法
1 引言
“物竞天择,适者生存”是达尔文生物进化论的基本原理,揭示了物种总是向着更适应自然界的方向进化的规律。可见,生物进化过程本质上是一种优化过程,在计算科学上具有直接的借鉴意义。在计算机技术迅猛发展的时代,生物进化过程不仅可以在计算机上模拟实现,而且还可以模拟进化过程,创立新的优化计算方法,并应用到复杂工程领域之中,这就是遗传算法等一类进化计算方法的思想源泉。
2 遗传算法概述
遗传算法是将生物学中的遗传进化原理和随[1]优化理论相结合的产物,是一种随机性的全局优算法。遗传算法不但具有较强的全局搜索功能和求解问题的能力,还具有简单通用、鲁棒性强、适于并行处理等特点数学建模论文,是一种较好的全局优化搜索算法。在遗传算法的应用中,由于编码方式和遗传算子的不同,构成了各种不同的遗传算法。但这些遗传算法都有共同的特点,即通过对生物遗传和进化过程中选择、交叉、变异机理的模仿,来完成对问题最优解的自适应搜索过程。基于这个共同点,Holland的遗传算法常被称为简单遗传算法(简记SGA),简单遗传算法只使用选择算子、交叉算子和变异算子这三种基本遗传算子,其遗传进化操作过程简单,容易理解,是其他一些遗传算法的雏形和基础,这种改进的或变形的遗传算法,都是以其为基础[1]。
2.1遗传算法几个基本概念
个体(IndividualString):个体是遗传算法中用来模拟生物染色体的一定数目的二进制串,该二进制串用来表示优化问题的满意解。
种群(population):包含一组个体的群体,是问题解的集合。
基因模式(Sehemata):基因模式是指二进制位串表示的个体中,某一个或某些位置上具有相似性的个体组成的集合,也称模式。
适应度(Fitness):适应度是以数值方式来描述个体优劣程度的指标,由评价函数F计算得到。F作为求解问题的目标函数,求解的目标就是该函数的最大值或最小值。
遗传算子(genetic operator):产生新个体的操作,常用的遗传算子有选择、交叉和变异。
选择(Reproduetion):选择算子是指在上一代群体中按照某些指标挑选出的,参与繁殖下一代群体的一定数量的个体的一种机制龙源期刊。个体在下一代种群中出现的可能性由个体的适应度决定,适应度越高的个体,产生后代的概率就越高。
交叉(erossover):交叉是指对选择后的父代个体进行基因模式的重组而产生后代个体的繁殖机制。在个体繁殖过程中,交叉能引起基因模式的重组,从而有可能产生含优良性能的基因模式的个体。交叉可以发生在染色体的一段基因串或者多段基因串。交叉概率(Pc)决定两个个体进行交叉操作的可能性数学建模论文,交叉概率太小时难以向前搜索,太大则容易破坏高适应度的个体结构,一般Pc取0.25~0.75
变异(Mutation):变异是指模拟生物在自然的遗传环境中由于某种偶然因素引起的基因模式突变的个体繁殖方式。在变异算子中,常以一定的变异概率(Pm)在群体中选取个体,随机选择个体的二进制串中的某些位进行由概率控制的变换(0与1互换)从而产生新的个体[2]。如果变异概率太小,就难以产生新的基因结构,太大又会使遗传算法成了单纯的随机搜索,一般取Pm=0.1~0.2。在遗传算法中,变异算子增加了群体中基因模式的多样性,从而增加了群体进化过程中自然选择的作用,避免早熟现象的出现。
2.2基本遗传算法的算法描述
用P(t)代表第t代种群,下面给出基本遗传算法的程序伪代码描述:
基本操作:
InitPop()
操作结果:产生初始种群,初始化种群中的个体,包括生成个体的染色体值、计算适应度、计算对象值。
Selection()
初始条件:种群已存在。
操作结果:对当前种群进行交叉操作。
Crossover()
初始条件:种群已存在。
操作结果:对当前种群进行交叉操作。
Mutation()
初始条件:种群已存在。
对当前种群进行变异操作。
PerformEvolution()
初始条件:种群已存在且当前种群不是第一代种群。
操作结果:如果当前种群的最优个体优于上一代的最优本,则将其赋值给bestindi,否则不进行任何操作。
Output()
初始条件:当前种群是最后一代种群。
操作结果:输出bestindi的表现型以及对象值。
3 遗传算法的缺点及改进
遗传算法有两个明显的缺点:一个原因是出现早熟往往是由于种群中出现了某些超级个体,随着模拟生物演化过程的进行,这些个体的基因物质很快占据种群的统治地位,导致种群中由于缺乏新鲜的基因物质而不能找到全局最优值;另一个主要原因是由于遗传算法中选择及杂交变异等算子的作用,使得一些优秀的基因片段过早丢失,从而限制了搜索范围,使得搜索只能在局部范围内找到最优值,而不能得到满意的全局最优值[3]。为提高遗传算法的搜索效率并保证得到问题的最优解,从以下几个方面对简单遗传算法进行改进。
3.1编码方案
因实数编码方案比二进制编码策略具有精度高、搜索范围大、表达自然直观等优点数学建模论文,并能够克服二进制编码自身特点所带来的不易求解高精度问题、不便于反应所求问题的特定知识等缺陷,所以确定实数编码方案替代SGA中采用二进制编码方案[4]。
3.2 适应度函数
采用基于顺序的适应度函数,基于顺序的适应度函数最大的优点是个体被选择的概率与目标函数的具体值无关,仅与顺序有关[5]。构造方法是先将种群中所有个体按目标函数值的好坏进行排序,设参数β∈(0,1),基于顺序的适应度函数为:
(1)
3.3 选择交叉和变异
在遗传算法中,交叉概率和变异概率的选取是影响算法行为和性能的关键所在,直接影响算法的收敛性。在SGA中,交叉概率和变异概率能够随适应度自动调整,在保持群体多样性的同时保证了遗传算法的收敛性。在自适应基本遗传算法中,pc和pm按如下公式进行自动调整:
(2)
(3)
式中:fmax为群体中最大的适应度值;fave为每代群体的平均适应度值;f′为待交叉的两个个体中较大的适应度值;f为待变异个体的适应度值;此处,只要设定k1、k2、k3、k4为(0,1)之间的调整系数,Pc及Pm即可进行自适应调整。本文对标准的遗传算法进行了改进,改进后的遗传算法对交叉概率采用与个体无关,变异概率与个体有关。交叉算子主要作用是产生新个体,实现了算法的全局搜索能力。从种群整体进化过程来看,交叉概率应该是一个稳定而逐渐变小,到最后趋于某一稳定值的过程;而从产生新个体的角度来看,所有个体在交叉操作上应该具有同等地位,即相同的概率,从而使GA在搜索空间具有各个方向的均匀性。对公式(2)和(3)进行分析表明,适应度与交叉率和变异率呈简单的线性映射关系。当适应度低于平均适应度时,说明该个体是性能不好的个体数学建模论文,对它就采用较大的交叉率和变异率;如果适应度高于平均适应度,说明该个体性能优良,对它就根据其适应度值取相应的交叉率和变异率龙源期刊。
当个体适应度值越接近最大适应度值时,交叉概率和变异概率就越小;当等于最大适应度值时,交叉概率和变异概率为零。这种调整方法对于群体处于进化的后期比较合适,这是因为在进化后期,群体中每个个体基本上表现出较优的性能,这时不宜对个体进行较大的变化以免破坏了个体的优良性能结构;但是这种基本遗传算法对于演化的初期却不利,使得进化过程略显缓慢[6]。因为在演化初期,群体中较优的个体几乎是处于一种不发生变化的状态,而此时的优良个体却不一定是全局最优的,这很容易导致演化趋向局部最优解。这容易使进化走向局部最优解的可能性增加。同时,由于对每个个体都要分别计算Pc和Pm,会影响程序的执行效率,不利于实现。
对自适应遗传算法进行改进,使群体中具有最大适应度值的个体的交叉概率和变异概率不为零,改进后的交叉概率和变异概率的计算公式如式(4)和(5)所示。这样,经过改进后就相应地提高了群体中性能优良个体的交叉概率和变异概率,使它们不会处于一种停滞不前的状态,从而使得算法能够从局部最优解中跳出来获得全局最优解[7]。
(4)
(5)
其中:fmax为群体中最大的适应度值;fave为每代群体的平均适应度值;f′为待交叉的两个个体中较大的适应度值;f为待变异个体的适应度值;pc1为最大交叉概率;pm1为最大变异概率。
3.4 种群的进化与进化终止条件
将初始种群和产生的子代种群放在一起,形成新的种群,然后计算新的种群各个体的适应度,将适应度排在前面的m个个体保留,将适应度排在后面m个个体淘汰数学建模论文,这样种群便得到了进化[8]。每进化一次计算一下各个个体的目标函数值,当相邻两次进化平均目标函数之差小于等于某一给定精度ε时,即满足如下条件:
(6)
式中,为第t+1次进化后种群的平均目标函数值,为第t次进化后种群的平均目标函数值,此时,可终止进化。
3.5 重要参数的选择
GA的参数主要有群里规模n,交叉、变异概率等。由于这些参数对GA性能影响很大,因此参数设置的研究受到重视。对于交叉、变异概率的选择,传统选择方法是静态人工设置。现在有人提出动态参数设置方法,以减少人工选择参数的困难和盲目性。
4 结束语
遗传算法作为当前研究的热点,已经取得了很大的进展。由于遗传算法的并行性和全局搜索等特点,已在实际中广泛应用。本文针对传统遗传算法的早熟收敛、得到的结果可能为非全局最优收敛解以及在进化后期搜索效率较低等缺点进行了改进,改进后的遗传算法在全局收敛性和收敛速度方面都有了很大的改善,得到了较好的优化结果。
参考文献
[1]邢文训,谢金星.现代优化计算方法[M].北京:清华大学出版社,1999:66-68.
[2]王小平,曹立明.遗传算法理论[M].西安交通大学出版社,2002:1-50,76-79.
[3]李敏强,寇纪淞,林丹,李书全.遗传算法的基本理论与应用[M].科学出版社, 2002:1-16.
[4]涂承媛,涂承宇.一种新的收敛于全局最优解的遗传算法[J].信息与控制,2001,30(2):116-138
[5]陈玮,周激,流程进,陈莉.一种改进的两代竞争遗传算法[J].四川大学学报:自然科学版,2003.040(002):273-277.
[6]王慧妮,彭其渊,张晓梅.基于种群相异度的改进遗传算法及应用[J].计算机应用,2006,26(3):668-669.
[7]金晶,苏勇.一种改进的自适应遗传算法[J].计算机工程与应用,2005,41(18):64-69.
[8]陆涛,王翰虎,张志明.遗传算法及改进[J].计算机科学,2007,34(8):94-96
论文摘要:TSP是组合优化问题的典型代表,该文在分析了遗传算法的特点后,提出了一种新的遗传算法(GB—MGA),该算法将基因库和多重搜索策略结合起来,利用基因库指导单亲遗传演化的进化方向,在多重搜索策略的基础上利用改进的交叉算子又增强了遗传算法的全局搜索能力。通过对国际TSP库中多个实例的测试,结果表明:算法(GB—MGA)加快了遗传算法的收敛速度,也加强了算法的寻优能力。
论文关键词:旅行商问题遗传算法基因库多重搜索策略
TSP(travelingsalesmanproblem)可以简述为:有n个城市1,2,…,n,一旅行商从某一城市出发,环游所有城市后回到原出发地,且各城市只能经过一次,要求找出一条最短路线。TSP的搜索空间是有限的,如果时间不受限制的话,在理论上这种问题终会找到最优解,但对于稍大规模的TSP,时间上的代价往往是无法接受的。这是一个典型的组合最优化问题,已被证明是NP难问题,即很可能不存在确定的算法能在多项式时间内求到问题的解[1]。由于TSP在工程领域有着广泛的应用,如货物运输、加工调度、网络通讯、电气布线、管道铺设等,因而吸引了众多领域的学者对它进行研究。TSP的求解方法种类繁多,主要有贪婪法、穷举法、免疫算法[2]、蚂蚁算法[3]、模拟退火算法、遗传算法等。
遗传算法是一种借鉴生物界自然选择和遗传机制的随机化搜索算法,其主要特点是群体搜索策略和群体中个体之间的信息交换,搜索不依赖于梯度信息[4]。遗传算法主要包括选择、交叉和变异3个操作算子,它是一种全局化搜索算法,尤其适用于传统搜索算法难于解决的复杂和非线性问题。遗传算法虽然不能保证在有限的时间内获得最优解,但随机地选择充分多个解验证后,错误的概率会降到可以接受的程度。
用遗传算法求解TSP能得到令人满意的结果,但是其收敛速度较慢,而且种群在交叉算子作用下,会陷入局部解。采用局部启发式搜索算法等,虽然能在很短的时间内计算出小规模城市的高质量解,一旦城市规模稍大就容易陷入局部最优解。因此,为了能够加快遗传算法的收敛速度,又能得到更好的近似最优解,该文采纳了文[5]中杨辉提出的基因库的想法,并结合文[6]中Cheng-FaTsai提出的多重搜索策略思想,使用单亲演化与群体演化相结合的方式来求解TSP问题。该文根据文[7]中最小生成树MST(minimumcostspanningtree)的应用,由MST建立TSP的基因库,保存有希望成为最优解的边,利用基因库提高初始群体的质量进行单亲演化,然后利用改进后的交叉算子和的多重搜索策略进行群体演化。
1单亲演化过程
现有的大多数演化算法在整个演化过程中所涉及的基因,大多来源于个体本身,个体质量的高低决定了算法的全局性能,如果群体中初始个体的适应度都较差,肯定要影响算法的收敛速度,对于规模稍大的TSP尤其明显[8]。该文为了克服上述弱点,首先利用普里姆算法求出TSP中最小生成树,并将各个MST中的每一条边都保存在一个n*(n-1)方阵里面,就构成了一个基因库,在生成初始群体的时候尽量使用基因库中的基因片段,来提高整个初始群体的适应度,从而提高算法的效率。
1.1TSP编码表示
设n个城市编号为1,2,…,n,为一条可行路径,Pk=Vk1Vk2…Vkn为一条可行路径,它是1,2,…,n的一个随机排列,其含意是第k条路径起点城市是Vk1,最后一个城市是Vkn,则第k条环路的总长度可以表示为:
其中,d(Vki,Vkj)表示城市Vki与城市Vkj之间的距离。在算法中环路Pk的总长d(Pk)用来评价个体的好坏[9]。适应度函数取路径长度d(Pk)的倒数,f(Pk)=1/d(Pk)。
1.2构建TSP基因库
对n个编号为1,2,…,n的城市,根据它们的坐标计算各城市之间的欧氏距离d(i,j),i,j=1,2,…,n,得到一个n*n的方阵D={d(i,j)}。然后利用普里姆算法求得该TSP的一棵MST,并将这棵MST中的每一条边e(i,j)对应地存储在一个n*(n-1)的方阵M={e(i,j)},即该文的基因库。由于一个TSP可能有多棵MST,操作可以重复多次,这样生成的基因库中的基因就更多,增强了初始群体的全局性。具体算法如下:
VoidMiniSpanTree—PRIM(MGraphG,VertexTypeu){
Struct{
VertexTypeadjvex;
VRTypelowcost;
}closedge[MAX—VERTEX—NUM];
k=LocateVex(G,u);
for(j=0;j<G.vexnum;++j)
if(j!=k)closedge[j]={u,G.arcs[k][j].adj};
closedge[k].lowcost=0;
for(i=0;i<G.vexnum;++i){
k=minimum(closedge);
printf(closedge[k].adjvex,G.vexs[k]);
closedge[k].lowcost=0;
for(j=0;j<G.vexnum;++j)
if(G.arcs[k][j].adj<closedge[j].lowcost)
closedge[j]={G.vexs[k],G.arcs[k][j].adj};
}
}
1.3单亲演化算法
单亲演化算法是利用遗传算法的优胜劣汰的遗传特性,在单个染色体内以基因重组的方式,使子代在满足TSP问题的限定条件下进行繁衍,然后保留适应度高的染色体种群,达到优化的目的。单亲演化算法的基因重组操作包括基因换位、基因段错位和基因段倒转三种操作来实现。基因换位操作是将亲代的染色体基因进行对换后,形成子代,其换位又分为单基因换位和基因段换位两种方式。基因段错位操作是随机确定基因段,也随机选定错位位置,整段错移。基因段倒转操作则是随机地确定倒转基因段的起止位置,倒转操作是对该段内基因按中垂线作镜面反射,若段内基因数为奇数时,则中位基因不变。单亲演化时可以是单个操作用于单个父代,也可以是几种操作同时采用。为了编程方便,文中采用基因段倒转操作。
2群体演化过程
在单亲演化算法求得的初始群体基础上,再利用多重搜索策略并行地进行群体演化,这样在保证算法的快速收敛的同时也注重了搜索空间的全局性。
2.1交叉算子
该文算子采用一种与顺序交叉OX(ordercrossover)法类似的交叉方法[11],即随机在串中选择一个区域,例如以下两个父串及区域选定为:
P1=(12|3456|789)P2=(98|7654|321)
将P2的区域加到P1的前面或后面,P1的区域加到P2的前面或后面,得
M1=(7654|123456789)
M2=(3456|987654321)
在M1中自区域后依次删除与区域相同的城市码,得到最终的两个子串:
S1=(765412389)S2=(345698721)
同时为了能更好地增强算子的全局搜索能力,对该算子作了如下的改进。子代个体的新边来自:随机生成和群体中其他个体,其选择比例由随机数p和阈值P来决定。如果随机数p小于阈值P,则子代个体的新边来自随机生成,否则就来自群体中的其他个体。
这种改进后的交叉算子在父串相同的情况下仍能产生一定程度的变异效果,这对维持群体的多样化特性有一定的作用。实验结果也证实了这种改进算子对于种群的全局搜索能力有一定的提高,避免搜索陷入局部解。
2.2局部启发式算子
为了增强遗传算法的局部搜索性能,在算法中引入2-Opt局部搜索算子[12]。该算子通过比较两条边并交换路径以提升算法的局部搜索性能,示例见图2。
比较子路径ab+cd和ac+bd,如果ab+cd>ac+bd则交换,否则就不交换。考虑到程序的运行效率,不可能对每对边都做检查,所以选取染色体中的一定数量的边进行比较。2-Opt搜索算子实际上进行的相当于变异操作,同时又不仅仅是简单的变异,而是提高算法的局部搜索性能的变异操作。
2.3选择机制和收敛准则
为了限制种群的规模[13],该文采用了联赛选择法的淘汰规则。联赛选择法就是以各染色体的适应度作为评定标准,从群体中任意选择一定数目的个体,称为联赛规模,其中适应度最高的个体保存到下一代。这个过程反复执行,直到保存到下一代的个体数达到预先设定的数目为止。这样做可能导致种群过早收敛,因此在收敛准则上要采取苛刻的要求来保证搜索的全局性。
遗传算法求TSP问题如果不设定终止条件,其演化过程将会无限制地进行下去。终止条件也称收敛准则,因为多数最优化问题事先并不了解最优的目标函数值,故无法判断寻优的精度。该文采用如下两条收敛准则:在连续K1代不再出现更优的染色体;优化解的染色体占种群的个数达K2的比例以上。当两准则均满足时,则终止运算,输出优化结果和对应的目标函数值。由数值实验表明,添加第2条准则之后,全局最优解的出现频率将大为提高。
2.4基于多重搜索策略的群体演化算法
由于基因库的引入,可能降低初始种群的多样性,为避免算法陷入局部最优解,因此在群体演化中采取多重搜索策略。由Cheng-FaTsai提出的多重搜索策略[6],就是把染色体集中的染色体分成保守型和探索型两种不同类型的集合,然后针对不同类型的染色体集合根据不同的交叉、变异概率分别进行交叉变异操作,对保守型染色体集合就采用比较低的交叉变异概率,而对探索型染色体集合就采用比较高的交叉变异概率。这种策略对保守型染色体集合的操作最大限度地保留了父代的优秀基因片段,另一方面对探索型染色体集合的操作又尽可能地提高了算法的全局搜索能力。为了提高算法的收敛速度,初始染色体集合该文采用了前面单亲演化的结果中的染色体集合,交叉算子则利用的是前面介绍的改进后的算子,改进后的多重搜索策略见下。
3实验结果与分析
该文的GB—MGA算法由C#编程实现,所有的结果都是在P42.0G微机上完成,并进行通用的TSP库实验,选用了具有一定代表性的TSP实例,并把该算法和其他算法做了一个对比。为了减少计算量,程序中的数据经过四舍五入整数化处理,与实数解有一定的偏差,下面给出图Kroa100的示例。
为了证明该文提出的GB—MGA算法的有效性,将该文算法与典型的遗传算法GA、单亲遗传算法PGA以及文[5]中杨辉提出的Ge—GA(genepoolgeneticalgorithm)算法和文[12]中提出的MMGA(modifiedmultiple-searchinggeneticalgorithm)算法都进行了一个对比。
实验结果证明,该文算法的求解质量要优于GA、PGA、MMGA算法,而求解速度方面则优于Ge—GA算法,特别是对于大规模城市的TSP问题求解效果尤其明显,具有快速收敛的特性。Ge—GA算法对于中等城市规模的TSP实例求解,其运算时间就大幅度增加,如果把该算法用于求解大规模和超大规模TSP问题,那么时间上的代价就让人无法忍受。而该文的GB—MGA算法在单亲遗传演化中就使用了基因库中的优质基因,使得单个个体的进化速度大大提高,从而为进一步的演化提供了条件,群体演化过程的选择机制和收敛准则的恰当选取使得算法在注重了求解质量的同时兼顾了算法的效率。
4结束语
遗传算法就是一种以事物的自然属性和遗传属性为基础,通过计算机对生物进化规律进行模拟以寻优的一种算法,将寻优的范围与遗传空间相对应,把每一种可能的值通过二进制码进行编码,如同染色体一样,形成的字符串相当于基因,然后按预期的结果对每一组编码进行评价,选出最合适的一个值。算法一开始是提出一些问题的解,然后根据要求对这些解进行选择,重新拆解组合,去掉不合适的,留下最优值,由此形成的便是新值,如此往复,继承与改良,这便是GA算法。由以上我们可以看出GA算法并不是简单的重复,而是属于一种螺旋式的上升过程,是不断向更好的方向“进化”的,在淘汰与择优中趋于稳定。
2GA算法的数学基础和算子
2.1GA算法的数学基础
图式定理是GA算法的数学基础,图式定理是Holland提出的,它在一定程度上解释了GA算法强大的数据信息处理能力,由定理我们能看出,经过不断地复制和交叉变异,在第一代中包含的编码数量H可以用如下公式表示:m(H,t+1)≥m(H,t)(N(H)/FAV)[1-PC•(〥(H)/(L-1))-O(H)•Pm](1)如以遗传学讲,其中m(H,t)和m(H,t+1)分别代表第t代和第t+1代种群数量,N代表图式H中染色体适应能力的平均水平,FAV代表种群中包含的染色体的适应力的平均水平,交叉比率用PC表示,变异比率用Pm表示,图式的长度用〥表示,OH是H的确定参数,即阶,染色体长度用L表示。
2.2GA算法的算子
GA遗传算法的基本算子有三个,分别是选择、交叉和变异。选择算子相当于生物界优胜劣汰,决定物种最终存活的自然选择,在生物群中选择一些适应力强的生物,将它们的染色体放入基因库,是染色体重新交叉组合完成变异的前提,选择算子的特点是只能在原有的基础上选择出优良的基因,而无法重新创造。交叉算子相当于自然界生物为完成繁衍生息和进化而进行的繁殖现象,染色体经由交叉,重新组合后形成新的染色体,即从双亲染色体里随机地分别选择一条再重新组合,是染色体的重新创造。变异算子是在选择和交叉算子完成重组的基础上使遗传算法能力的增强,以寻找GA值的最优解,如果在整个GA算法中少了变异操作,就只能在原有基础上来回寻找而没有新的突破。
3如何实现遗传算法
遗传算法归根结底是寻找一个最优的解或者工程中所讲的最好的解决方案,从函数来讲是求如下函数的最优解:F=f(x,y,z),x,y,z∈Ω,F∈R(2)其中x,y,z是自变量,每一组(x,y,z)就是一组解,优化目标的目的是寻找一组解使得:F=f(x0,y0,z0)=maxf(x,y,z)(3)首先,将公式(2)的各个参数通过二进制数编码形成字符串,再进行链接形成所谓的“基因链”,据已有的研究结果,可以知道字符串长度不同、码制不同都将对最终计算的结果的精度产生影响。其次,采用随机抽选的方式选择个体的初始值,之所以随机抽选是因为这样产生的结果更具有一般性,能代表寻常情况。最后,确定群体的规模,即确定基因选择的目标源,在这个目标源中寻找最佳值,规模的确定决定了GA算法结果的权威性和有效性,太小则不能提供足够的采样点,结果的多样性将会打折扣,太大则会增加计算量,拖长搜索时间,通畅将规模控制在40~200左右为宜,在对每个个体的优劣实施评价之后,设置一个适应度函数,然后分别确定交叉率和变异率,判断搜索何时停止,在本次讨论中,判断标准可以定为搜索所得的解是否达到了预期的最大值。
4GA在机械工程中的应用
GA算法的优点显而易见,它在机械工程中的应用是极为广泛的。在零件的切削中可以对零部件和切削工具予以优化,使得切削参数的设置达到总在工作以最低的成本,实现最高的效率,最终得到最高的收益的目的,在自动化控制的智能制造系统中可以为系统的静态动态的配合寻找到最佳契合点,以下对GA算法在机械公式和功能中的应用以具体实例加以阐述。
4.1优化人工神经网
ANN,即人工神经网,是一种用于建模和控制的,针对模型结构不稳定的线性系统而设计的结构,单次结构目前并不成熟,并没有确切的数据指导后来者准确的使用,处于摸索阶段。对于ANN,目前采用的训练方法是反向传播算法,大速度比较慢且结果具有一定的局限性,GA算法可谓使这一问题得见柳暗花明。在AN的行学习参数的优化工作中,仍用反向传播,但对一下因素进行编码操作,包括隐含层数、隐含层数的单元数、势态、网络连接方法、迭代数等,编码完成后,构成ANN基因链,把基因链的适应度函数定义为10-MSE-隐含单元数/10-训练跌代数/1000,MSE是训练好的网络对样本的方差。
4.2优化FLC矩阵的参数
模糊逻辑控制器,简称FLC,涉及到的概念有控制对象偏差和动作强度,表达了二者的模糊关系,现有一延时二阶系统的函数为GS=exp(-0.4s)/(0.3s+1),要求此系统的输出值尽量的跟踪输入值,采用FLC矩阵进行参数优化,取矩阵R=77×11,对此矩阵的77个元素以8bit的二进制码表示,基因链长616bit,经由GA算法优化的FLC控制下,输出值的效果明显地优于“比例-积分-微分”控制器的效果。
4.3实现机床挂最佳组合
机床挂轮组合的完美与否直接决定了生产线的效率,而这又是一个极为古老的问题,最佳组合最终实现的是挂轮组的传动比与要求的值误差达到最小,本文中,笔者通过GA算法,以求能找到一个有效的方案,适合度函数定义为:F=20-ABS(id)-(A/B)*(C/D)(A,B,C,D)∈Ω其中,A,B,C,D分别代表挂轮齿数,共计4个挂轮,ABS()表示绝对值函数,Ω是挂轮约束条件,需要A+B>C=d+m,C+D>B+d+m,d,m分别代表齿轮模、安装轴径。笔者在文中采用cenitor算法,对每个齿轮用一个5位二进制码进行编码,代表挂轮表的32个挂轮,共4个挂轮故基因码长20位,个体数为100,经过验证后发现,如果id为整数,GA算法只需完成1000次杂交运算就可以选出多个误差为0的组合,它并非盲目地完成计算,搜索数远小于问题解的数值。
5结语
假设所用的计算机传输介质两节点之间不多于一条直线的链接路,所用计算机网络就可以运用数学图G=(N,L)来进行描述。而且网络的节点不会出现任何的故障,网络链接介质的可靠和自身的长度没有关系,网络链接路与网络只有两种状态存在:正常工作和故障。而当所有的计算机网络用户都相互联通时,则可组成G图的一棵生成树,并且全部的结点都处于正常。那么无论在什么时刻,可能只有L种的子集(L)是正常状态,全部结点都是正常状态。因此,整个计算机网络的可靠度都可使用数学建模来进行运算。
2遗传算法在计算机网络可靠度优化计算中的应用研究
2.1遗传运算方法
在计算机网络中遗传运算主要是以变异和交叉这两种方式进行。交叉主要是通过在网络结点的范围([1,N])之间的随机数,以此作为基因交叉位置的设置且一次只可以操作一个结点。这样能够最大程度地确保网络的连通性,但也有可能出现错的连通结构,所以进行调整操作;变异则是先确定基因的变异和数目,然后再根据范围来选择新的基因段替换旧基因段生成后代。一般变异率都在0.001到0.01内,如是变异出现了错误的网络连通结构基因,就必须进行相应的调整。
2.2算法的调整与仿真实例
影响抄板落料特性的主要因素有:抄板的几何尺寸a和b、圆筒半径R、圆筒的转速n、抄板安装角β以及折弯抄板间的夹角θ等[4,9]。在不同的参数a、β、θ下,抄板的安装会出现如图1所示的情况。图1描述了不同参数组合下抄板的落料特性横截面示意图。其中,图1(a)与图1(b)、图1(c)、图1(d)的区别在于其安装角为钝角。当安装角不为钝角且OB与OC的夹角σ不小于OD与OC夹角ψ时(即σ≥ψ),会出现图1(b)所示的安装情况;当σ<ψ时,又会出现图1(c)与图1(d)所示的情况,而两者区别在于,η+θ是否超过180°,若不超过,则为图1(c)情况,反之则为图1(d)情况。其中,点A为抄板上物料表面与筒壁的接触点或为物料表面与抄板横向长度b边的交点;点B为抄板的顶点;点C为抄板折弯点;点D为抄板边与筒壁的交点;点E为OB连线与圆筒内壁面的交点;点F为OC连线与圆筒内壁面的交点。
1.1动力学休止角(γ)[4,10]抄板上的物料表面在初始状态时保持稳定,直到物料表面与水平面的夹角大于物料的休止角(最大稳定角)时才发生落料情况。随着转筒的转动,抄板上物料的坡度会一直发生改变。当物料的坡度大于最大稳定角时,物料开始掉落。此时,由于物料的下落,物料表面重新达到最大稳定角开始停止掉落。然而,抄板一直随着转筒转动,使得抄板内物料的坡度一直发生改变,物料坡度又超过最大休止角。这个过程一直持续到抄板转动到一定位置(即抄板位置处于最大落料角δL时),此时抄板内的物料落空。通常,在计算抄板持有量时,会采用动力学休止角来作为物料发生掉落的依据,即抄板内的物料坡度超过γ时,物料开始掉落。该角主要与抄板在滚筒中的位置δ、动摩擦因数μ和弗劳德数Fr等有关。
1.2抄板持有量的计算
随着抄板的转动,一般可以将落料过程划分为3部分(R-1,R-2,R-3),如图1(a)所示。在转动过程中,当抄板转角δ超过动力学休止角γ时,落料过程从R-1区域转变到R-2区域,在这两个区域内,物料不仅受到抄板的作用还受到滚筒壁面的作用。当物料表面上的A点与D点重合时,从R-2区域转变到R-3区域,在该区域内,物料仅受抄板作用[4]。然而,抄板情况为图1(c)、图1(d)时只会经历R-1、R-3区域。因为在运转过程中,抄板上物料的A点与D点重合时抄板的转角不会超过动力学休止角γ,所以不会经历R-2区域;但是,当物料的休止角足够小时,由于物料表面只会与抄板接触(即A点不会超出D点),图1(c)、图1(d)的抄板落料过程只会经历R-3区域。以下根据不同的区域建立了不同组合下抄板持料量的数学模型。
2研究结果与分析
2.1最大落料角结果分析
通过MatLab编制以上推导公式的计算程序,模拟计算了120种不同组合(β、θ、a不同)下抄板的最大落料角。其中,物料动摩擦因数为0.53[8],转筒干燥机半径为300mm,且其抄板安装角为10°、30°、50°、70°、90°、110°,抄板间夹角为90°、110°、130°、150°,抄板纵向长度a为30、45、60、75、90mm,横向长度b为60mm。并且,根据Kelly和O'Donnell通过验证得出的公式(1)只适用于Fr小于0.4的情况[4],此次模拟的转筒干燥机角速度为0.84rad/s。表1给出了模拟结果中较为典型的数据。从模拟结果中可以得出,当a、θ不变时,δL随着安装角β的增大而增大;当a、β不变时,δL随着θ的增大而减小。当抄板情况如图1(a)、(b)、(c)时,且β、θ不变时,抄板最大落料角随着长度a的增大而增大;而图1(d)情况则反之,并且会出现最大落料角小于0°的情况,这是由于抄板无法抄起物料所导致的结果。另外,在图1(d)情况下,抄板的最大落料角非常小,这会使得干燥器的效率很低。因此,在探讨抄板优化问题上,不考虑图1(d)这种情况下的抄板。
2.2优化目标与结果分析
水平直径上均匀撒料虽好,但是物料应与热气均匀接触,如果在路径长的地方撒料多些,就可以使热效率高些。又因为圆筒中心热气量比边缘多以及在圆筒下半部分超出干燥圆的区域存在物料,所以落料均匀度考虑为物料在干燥圆横截面积上撒料均匀。评判干燥圆横截面积上落料均匀的具体方法如下:把干燥圆横截面积划分20个等分,以水平直径为X轴,铅垂直径为Y轴,圆心O为原点,采用定积分方法求解每个划分点的x坐标,每个划分点的铅垂线与干燥圆壁面(上半部分)有一个交点,连接圆心与每个点,可以得出每条连线与X轴的夹角δi(i=1~21,步长为1,δ1为0°),如图2所示。在合理的设计下,不仅希望落料过程中抄板在干燥圆面积上撒料越均匀越好,δL也应越接近180°越好。因此,优化函数为最大落料角和抄板在干燥圆而积上落料的均方差。并且,根据国内外实际情况,抄板的安装角一般为90°并且抄板间夹角一般不为锐角,由于机构的限制和不考虑图1(d)的情况,在研究抄板优化问题时只探讨安装角在70°~110°、抄板夹角在90°~130°以及抄板纵向长度在30~90mm之间的情况。其余参数同上。采用了线性加权和法来求解此多目标优化结果。其中,f1为1/δL的最优化值,f2为q的最优化值;均方差q=(1n∑ni=1(qi-qa)2)12,每相邻角度落料面积差qi=A(δi)-A(δi+1),qa为面积差的平均值。当δL≤δi+1-δi2,n=i;反之则n=i+1,且δi+1=δL。s1、s2为权重系数,由于干燥器的效率主要与抄板的撒料均匀有关,但是如果落料角很小、撒料很均匀,干燥器效率也不高,综合考虑下,取s1、s2分别为0.4、0.6。通过编写MatLab程序,确定优化函数,然后采用MatLab遗传算法工具箱进行计算,设置相关参数:最大代数为51,种群规模为20,交叉概率为0.2,选择概率为0.5。运行算法并显示结果,β、θ、a较优结果分别为:1.844rad、1.571rad、51.609mm。
3结论
关键词遗传算法;TSP;交叉算子
1引言
遗传算法是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应全局优化概率搜索算法。总的说来,遗传算法是按不依赖于问题本身的方式去求解问题。它的目标是搜索这个多维、高度非线性空间以找到具有最优适应值(即最小费用的)的点[1]。
基本遗传算法是一个迭代过程,它模仿生物在自然环境中的遗传和进化机理,反复将选择算子、交叉算子和变异算子作用于种群,最终可得到问题的最优解和近似最优解。
2遗传算法程序设计改进比较
2.1基本遗传算法对TSP问题解的影响
本文研究的遗传算法及改进算法的实现是以C++语言为基础,在Windows2000的版本上运行,其实现程序是在MicrosoftVisualStadio6.0上编写及运行调试的。
1)遗传算法的执行代码
m_Tsp.Initpop();//种群的初始化
for(inti=0;i<m_Tsp.ReturnPop();i++)
m_Tsp.calculatefitness(i);//计算各个个体的适应值
m_Tsp.statistics();//统计最优个体
while(entropy>decen||variance>decvar)//m_Tsp.m_gen<100)
{
//将新种群更迭为旧种群,并进行遗传操作
m_Tsp.alternate();//将新种群付给旧种群
m_Tsp.generation();//对旧种群进行遗传操作,产生新种群
m_Tsp.m_gen++;
m_Tsp.statistics();//对新产生的种群进行统计
}
2)简单的遗传算法与分支定界法对TSP问题求解结果的对比
遗传算法在解决NPC问题的领域内具有寻找最优解的能力。但随着城市个数的增加,已没有精确解,无法确定遗传算法求解的精度有多高。一般情况下,当迭代代数增大时,解的精度可能高,但是时间开销也会增大。因此可以通过改进遗传算法来提高搜索能力,提高解的精度。
2.2初始化时的启发信息对TSP问题解的影响
1)初始化启发信息
在上述实验算法的基础上,对每一个初始化的个体的每五个相邻城市用分支界定法寻找最优子路径,然后执行遗传算法。
2)遗传算法与含有启发信息的遗传算法求解结果的对比
当城市数增至20个时,用分支定界法已经不可能在可以接受的时间内得到精确的解了,只能通过近似算法获得其可接受的解。试验设计中算法的截止条件:固定迭代1000代。表2中的平均最优解为经过多次试验(10次以上)得到的最优解的平均值,最优解的出现时间为最优解出现的平均时间,交叉操作次数为最优解出现时交叉次数的平均值。
表220个城市的TSP问题求解结果数据
算法交叉操作
次数最优解
出现时间平均
最优解
简单遗传算法80244.479.4s1641.8
含初始化启发信息的GA79000.237.4s1398.9
从表2中可以看出,当初始种群时引入启发信息将提高遗传算法的寻优能力。同时缩短了遗传算法的寻优时间和问题的求解精度。
2.3交叉算子对TSP问题解的影响
1)循环贪心交叉算子的核心代码
for(i=1;i<m_Chrom;i++)
{
flag=0;
city=m_newpop[first].chrom[i-1];//确定当前城市
j=0;
while(flag==0&&j<4)
{
sign=adjcity[city][j];//adjcity数组的数据为当前城市按顺序排列的邻接城市
flag=judge(first,i,sign);//判断此邻接城市是否已经存在待形成的个体中
j++;
}
if(flag==0)//如果所有邻接城市皆在待扩展的个体中
{
while(flag==0)
{
sign=(int)rand()/(RAND_MAX/(m_Chrom-1));//随机选择一城市
flag=judge(first,i,sign);
}
}
if(flag==1)
m_newpop[first].chrom[i]=sign;
}
2)问题描述与结果比较
下面笔者用经典的测试遗传算法效率的OliverTSP问题来测试循环贪心交叉算子的解的精度和解效率。OliverTSP问题的30个城市位置坐标如表3所示[2]。
从表4、图1中可以看到,贪心交叉算子大大提高了遗传算法的寻优能力,同时也降低了交叉操作次数。在多次试验中,贪心交叉算子找到的最优解与目前记载的最佳数据的误差率为2.7%。而部分匹配交叉算子找到的最优解与目前记载的最佳数据的误差率高达7%。从而可以得到交叉算子对于遗传算法
2.4并行遗传算法消息传递实现的核心代码
1)主程序代码
//接收各个从程序的最优个体
for(i=0;i<slave;i++)
{
MPI_Recv(Rchrom[i],chrom,MPI_UNSIGNED,MPI_ANY_SOURCE,gen,MPI_COMM_WORLD,&status);
}
//计算接收各个从程序的最优个体的回路距离
for(i=0;i<slave;i++)
{
fitness[i]=0.0;
for(intj=0;j<chrom-1;j++)
fitness[i]=fitness[i]+distance[Rchrom[i][j]][Rchrom[i][j+1]];
fitness[i]=fitness[i]+distance[Rchrom[i][0]][Rchrom[i][chrom-1]];
}
//找到最优的个体并把它记录到文件里
for(i=0;i<slave;i++)
{
if(1/fitness[i]>min)
{
sign=i;
min=1/fitness[i];
}
}
fwrite(&gen,sizeof(int),1,out);
for(i=0;i<chrom;i++)
fwrite(&Rchrom[sign][i],sizeof(unsigned),1,out);
fwrite(&fitness[sign],sizeof(double),1,out);
//每九代向从程序发送一个最优个体
if(gen%9==0)
MPI_Bcast(Rchrom[sign],chrom,MPI_UNSIGNED,0,MPI_COMM_WORLD);
2)从程序代码
//将上一代的最优个体传回主程序
MPI_Send(Rchrom1,chrom,MPI_UNSIGNED,0,gen,MPI_COMM_WORLD);
//每九代接收一个最优个体并将其加入种群中替换掉最差个体
if(gen%9==0)
{
PI_Bcast(Rchrom2,chrom,MPI_UNSIGNED,0,MPI_COMM_WORLD);
Tsp.IndiAlternate(Rchrom2);
}
//进行下一代的计算
Tsp.Aternate();
Tsp.Generation();
Tsp.Statistics();
3)并行遗传算法的性能
笔者在MPI并行环境下,用C++语言实现了一个解决TSP问题的粗粒度模型的并行遗传算法。该程序采用的是主从式的MPI程序设计,通过从硬盘的文件中读取数据来设置染色体长度、种群的规模、交叉概率和变异概率等参数。试验环境为曙光TC1700机,测试的对象是OliverTSP问题的30个城市的TSP问题。
正如在测试串行遗传算法所提到的数据结果,并行遗传算法也没有达到目前所记录的最好解,但是它提高了算法的收敛性,并行遗传算法的收敛趋势如图2所示[4]。
图2遗传算法的收敛过程
3结束语
本文通过对基本遗传算法的不断改进,证明了添加启发信息、改进遗传算子和利用遗传算法固有的并行性都可以提高遗传算法的收敛性,其中对遗传算法交叉算子的改进可以大大提高遗传算法的寻优能力。
参考文献
[1]刘勇、康立山,陈毓屏著.非数值并行算法-遗传算法.北京:科学出版社1995.1
[2]IMOliverDJSmithandJRCHolland,Astudyofpermutationcrossoveroperatorsonthetravelingsalesman[C]//ProblemofthesecondInternationalConferenceonGeneticAlgorithmsandTheirApplication,Erlbaum1897:224-230
1.1基因编码设计
编码就是将遗传算法中处理不了的空间参数转换成遗传空间的由基因组成的染色体或个体的过程.其中基因在一定意义上包含了它所代表的问题的解.基因的编码方式有很多,这也取决于要解决的问题本身.常见的编码方式有:二进制编码,基因用0或1表示,通常用于解决01背包问题,如基因A:00100011010(代表一个个体的染色体);互换编码,主要用于解决排序问题,如调度问题和旅行商问题,用一串基因编码来表示遍历城市顺序,如234517986,表示在9个城市中先经过城市2,再经过城市3,依此类推;树形编码,用于遗传规划的演化编程或表示,其编码的方法就是树形结构中的一些函数,本文采用的是树形编码.
1.2交叉算子设计
交叉运算的含义是参照某种方式和交叉概率,将两组相互配对的个体互换部分基因,生成新个体的过程.交叉运算在遗传算法中起关键作用,是产生新个体的主要方法.交叉操作流程如图1所示.交叉操作首先判定要交叉的基因是否相同,如果相同进行子基因组的交叉,然后再判定交叉是否完成,没完成就继续,完成就退出;如果交叉的基因不相同,就要选择是否依据概率进行基因交换,选择交换就交换其所有的次级基因结构,然后再判定交叉是否完成,选择不交换就直接判定交叉是否完成.
1.3变异算子设计
变异操作从第i个子结构开始.依据变异概率进行第i个基因的变异,如果变异完成,就初始化其所有次级基因结构,如果变异没有完成,就进行子基因组的变异操作.重复操作上面的步骤,直至变异操作结束.
2遗传算法在机械产品设计中的应用
机械产品设计是在研究人机协同方案设计的工作机制上,建立产品的人机分析、人机约束模型和协同方案设计求解模型,确立人机协同系统的同步与异步交互、任务协同、数据共享、数据可视化、易用性等工作机制.
2.1基于遗传算法的数控车床设计
2.1.1数控车床总体设计任务分解
首先确定数控车床总体设计任务,然后根据多层次结构知识进化算法设计要求,将数控车床的总体设计任务分解。
2.1.2数控车床设计的基因编码表示
依据数控车床设计任务分解的结果,可以得出数控车床设计的基因编码图.数控车床设计任务按多层次结构划分为床身、滑台、刀架、尾台、冷却、控制器、电机.每个结构都包含多个选择方案.不同选择方案的有些结构含有子结构,并且这些子结构还可以进一步分解出多种选择方案.通过数控车床设计的基因编码,可看到数控车床设计任务每一层次的关系,包括各层次之间的约束关系.
2.2基于遗传算法的机械产品设计系统应用