完整用遗传算法求解TSP问题Word文件下载.docx
- 文档编号:22374233
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:33
- 大小:130.66KB
完整用遗传算法求解TSP问题Word文件下载.docx
《完整用遗传算法求解TSP问题Word文件下载.docx》由会员分享,可在线阅读,更多相关《完整用遗传算法求解TSP问题Word文件下载.docx(33页珍藏版)》请在冰豆网上搜索。
遗传算法是基于生物学的,理解或编程都不太难。
下面是遗传算法的一般算法步骤:
1、创建一个随机的初始状态
初始种群是从解中随机选择出来的,将这些解比喻为染色体或基因,该种群被称为第一代,这和符号人工智能系统的情况不一样;
在那里,问题的初始状态已经给定了。
2、评估适应度
对每一个解(染色体)指定一个适应度的值,根据问题求解的实际接近程度来指定(以便逼近求解问题的答案).不要把这些“解”与问题的“答案”混为一谈,可以把它理解成为要得到答案,系统可能需要利用的那些特性。
3、繁殖(包括子代突变)
带有较高适应度值的那些染色体更可能产生后代(后代产生后也将发生突变)。
后代是父母的产物,他们由来自父母的基因结合而成,这个过程被称为“杂交”。
4、下一代
如果新的一代包含一个解,能产生一个充分接近或等于期望答案的输出,那么问题就已经解决了。
如果情况并非如此,新的一代将重复他们父母所进行的繁衍过程,一代一代地演化下去,直到达到期望的解为止.
5、并行计算
非常容易将遗传算法用到并行计算和群集环境中。
一种方法是直接把每个节点当成一个并行的种群看待。
然后有机体根据不同的繁殖方法从一个节点迁移到另一个节点。
另一种方法是“农场主/劳工”体系结构,指定一个节点为“农场主”节点,负责选择有机体和分派适应度的值,另外的节点作为“劳工”节点,负责重新组合、变异和适应度函数的评估。
6、术语说明
由于遗传算法是由进化论和遗传学机理而产生的搜索算法,所以在这个算法中会用到很多生物遗传学知识,以下是我们将会涉及到的一些术语:
1染色体(Chromosome)
染色体又可以叫做基因型个体(individuals),一定数量的个体组成了群体(population),群体中个体的数量叫做群体大小。
2基因(Gene)
基因是串中的元素,基因用于表示个体的特征。
例如有一个串S=01234,则其中的1,0,2,3这4个元素分别称为基因.它们的值称为等位基因(Alletes)。
3基因地点(Locus)
基因地点在算法中表示一个基因在串中的位置称为基因位置(GenePosition),有时也简称基因位。
基因位置由串的左向右计算,例如在串S=12043中,0的基因位置是3。
4基因特征值(GeneFeature)
在用串表示整数时,基因的特征值与二进制数的权一致;
例如在串S=1011中,基因位置3中的1,它的基因特征值为2;
基因位置1中的1,它的基因特征值为8.——不过本程序的基因无特征值;
5适应度(Fitness)
各个个体对环境的适应程度叫做适应度(fitness)。
为了体现染色体的适应能力,引入了对问题中的每一个染色体都能进行度量的函数,叫适应度函数。
这个函数是计算个体在群体中被使用的概率。
遗传算法中,针对三种遗传算子可进行如下的遗传操作。
一、选择算子
从群体中选择优胜的个体,淘汰劣质个体的操作叫做选择。
选择算子又叫再生算子(ReproductionOperator)。
选择的目的是把优化的解直接遗传到下一代或者通过配对交叉产生新的个体再遗传到下一代。
选择操作是建立在群体中个体的适应度评估基础上的,目前常用的选择算子有:
1.适应度比例方法(Fitnessproportionalmodel)
适应度比例方法是目前遗传算法中最基本最常用的选择方法。
它也叫赌轮(roulettewheele)或蒙特卡罗(MonteCarlo)选择。
设群体大小为
,其中个体的适应度值为
,则被
选择的概率为
:
可见
反映了个体
的适应度在整个群体的个体适应度总和中所占的比例。
个体适应度越大,被选择的概率就越高.
2.最佳个体保存方法(Elitistmodel)
此方法的思想是把群体中适应度最高的个体不进行配对交叉而直接复制到下一代中.采用这种选择方法的优点是:
进化过程中某一代的最优解可以不被交叉和变异操作所破坏。
但是,这是这样可能隐含了一种危机--导致早熟,即局部最优个体的遗传基因会急速增加而使进化有可能限于局部解。
也就是说,该方法的全局搜索能力不强,它更加适合于单峰性质的搜索空间搜索。
一般将这种方法与其它一些选择操作配合起来使用,才能有良好的效果。
另外,最佳个体保存方法还可加以推广,即在每一代的进化过程中保留多个最优个体不参加交叉、变异等遗传操作,而直接将它们复制到下一代群体中.这种选择方法也称为稳态复制。
3.排序选择方法(Rank—based)
排序选择方法是指在计算每个个体的适应度后,根据适应度大小顺序对群体中个体排序,然后把事先设计好的概率表按顺序分配给个体,作为各自的选择概率。
这种方法的不足之处在于选择概率和序号的关系必须事先确定。
此外,它和适应度比例方法一样都是一种基于概率的选择,所以仍然有统计误差.
此外还有一些比较常用的选择方法如期望值方法(Expectedvaluemodel)、联赛选择方法(Tournamentselectionmodel)等。
二、交叉算子
1.交叉算子的设计
实现个体结构重组的交叉算子设计一般与所求解的具体问题有关,一般包括以下一些要点:
①任何交叉算子需要满足交叉算子的评估准则,就是说交叉算子需要保证前一代中优秀个体的性状能在后一代的新个体中尽可能得到遗传和继承。
②交叉设计和编码设计是相互联系的。
也就是说,交叉算子设计和编码设计需协调操作.这也就是所谓的编码——交叉设计。
2.基本的交叉算子
①一点交叉(Onepointcrossover)
一点交叉又叫做简单交叉。
具体的操作是:
在个体串中随机设定一个交叉点,实行交叉的时候,该点前或后的两个个体的部分结构进行互换,并生成两个新的个体.如下图所示:
图2。
1一点交叉
②二点交叉(Twopointcrossover)
二点交叉与一点交叉类似,只是设值2个交叉点(随机设定),如下图所示:
2二点交叉
③一致交叉(Uniformcrossover)
一致交叉是指通过设定屏蔽字(mask)来决定新个体的基因继承两个旧个体中哪个个体的对应基因。
如下图所示:
3一致交叉
④算术交叉(ArithmeticCrossover)
算术交叉是指由两个个体的线性组合而产生出两个新的个体。
为了能够进行线性组合运算,算术交叉的操作对象一般是由浮点数编码所表示的个体.
假设在两个个体
,
之间进行算术交叉,则交叉运算后所产生出的两个新个体是:
其中,α是一参数,它可以是一个常数,此时所进行的交叉运算称为均匀算术交叉;
它可以是一个由进化代数所决定的变量,此时所进行的交叉运算称为非均匀算术交叉。
3.交叉算子与遗传算法的收敛型
遗传算法的收敛性不仅取决于编码,初始化群体,适应度函数,选择算子的设计,而且还取决于交叉算子和下面要提到的变异算子.但是,遗传算法的收敛性主要决定于作为其核心操作的交叉算子。
交叉算子收敛性是遗传算法研究中最重要的课题之一。
需要指出的是,交叉算子并未提供收敛性保证。
三、变异算子
变异操作的基本内容是对群体中的个体串的某些基因座上的基因值作变动。
例如,基于字符集{0,1}的二值码串,变异操作就是把1变成0或者把0变成1。
变异操作的步骤为:
在群体中所有个体的码串范围内随机的确定基因座,然后以事先设定的变异概率对这些基因座的基因值进行变异。
如下图所示:
图2.4简单位变异
遗传算法引入变异的目的有两个:
一个是使遗传算法具有局部的随机搜索能力。
当遗传算法通过交叉算子已接近最优解临近值时,利用变异算子的这种局部随机搜索能力可以加速向最优解收敛。
这种情况下变异概率应取较小值,否则已经接近最优解的值会因为变异而遭到破坏。
二是使遗传算法可以维持群体多样性,以防止出现早熟现象。
遗传算法中,交叉算子因为其全局搜索能力作为主要算子,变异算子因其局部搜索能力作为辅助算子。
遗传算法通过交叉和变异这一对相互配合又相互竞争的操作而使其具备兼顾全局和局部的均衡搜索能力。
遗传算法在组合优化中有着许多重要而且成功的应用实例,这里只涉及到了最典型的旅行商问题(TSP问题).旅行商问题,即TSP问题(TravelingSalesmanProblem)是数学领域中的著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路经的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。
路径的选择目标是要求得的路径路程为所有路径之中的最小值.。
即寻找一条最短的遍历n个城市的路径,或者说搜索整数子集X={1,2,…,n}的一个排列,使得
取最小值。
其中
表示城市i到
的距离。
TSP问题是一个组合优化问题.该问题可以被证明具有NPC计算复杂性。
因此,任何能使该问题的求解得以简化的方法,都将受到高度的评价和关注。
遗传算法求解可以得到问题的最优解,且算法简单,对于一些非线性、多模型、多目标的函数优化问题,用其它优化方法较难求解,而遗传算法可以方便的得到较好的结果.我将用遗传算法来求解一个简单的TSP问题,其中基因是n个城市的排列顺序,适应度应该是城市之间的距离总和,将距离作为权值.算法求解的问题就是对总距离最小的访问城市的路径排序.得到最短访问路径适应函数的最优排序.
本例中,首先以十进制方式对遍历29个城市的次序排列进行编码,例如码串12345678表示从城市1开始,依次经过城市2,3,4,5,6,7,8,最后返回城市1的遍历路径,这是一种针对TSP问题的最自然的编码方式.其边权值如下所示:
/*
01072411901248031676152157283133113297228129348276188150653411846722116910845167
10701481378812733618313495254180101234175176265199182674227827114625110519113979
241148037417125950931721723249131228039141234942235635520418243541729242411633727377
1901373740202234222192248421172877910738121152866870137151239135137242165228205
1248817120206139220246160319112163322240232314287238155653663001753075722012197
8012725923461038614172167351551573312722263622962321648537524914730111818860185
316336509222392386023343825420243923525421018731326615428232129816824995437190314435
76183317192202141233021318827219313130223398344289177216141346108571902454381243
152134217248467243821302063658920936828627836033328420111141232122135372266132111
1579523242160167254188206015922057149801321931271002895193241131169200161189163
28325449111731935120227236515904041761067916116514195187254103279215117359216308322
13318031228711255439193892204040210384325279415349285217138428310200354169241112238
113101280791631572351312095717621001861177523116581859223018474150208104158206
297234391107322331254302368149106384186069191593512516725544309245169327246335288
2281754123824027221023328680793251176901221225656108175113240176125280177266243
1291763491212322261879827813216127975191122024417866160161235118629227755155275
3482654221523143623133443601931654152315912224406617819828677362287228358299380319
27619935686287296266289333127141349165355617866011213222079296232181292233314253
1881823556823823215417728410095285811255666178112012816716917912069283121213281
15067204701551642822162012818721785167108160198132128088211269159197172189182135
65421821376585321141111952541389225517516128622016788029922910423611014997108
3412784351513663752983464121931034282304411323577791692112990353289213371290379332
184271417239300249168108321241279310184309240118362296179269229353012116234580189342
6714629213517514724957221131215200742451766228723212015910428912101542204193218
2212514241373073019519035316911735415016912592228181691972362131621540352147247350
1691051162425711843724572200359169208327280277358292283172110371345220352026517839
108191337165220188190432661612162411042461775529923312118914929080411472650124263
45139273228121603148113218930811215833526615538031421318297379189932471781240199
167797720597185435243111163322238206288243275319253281135108332342218350392631990
*/
对此29个城市的访问,要求每个城市都只能访问一次,并且最后要回到原来出发的城市.将以上29个城市之间的代号和距离权值用一个的数组matrix[maxstring][maxstring]进行存储和初始化。
接着在此基础上定义适应度函数。
适应度函数通常取路径长度
的倒数,即
。
如果结合TSP的约束条件(比如每个城市经过且只经过一次),则适应度函数可表示成为
.其中
是对TSP路径不合法的度量(比如取
为未遍历的城市的个数),
为惩罚系数,可以是距离的倍数。
然后进行遗传算子的设计:
以n个城市的遍历次序作为遗传算法的编码,因为在各种遗传操作中都隐含了TSP问题的合法性约束条件(例如,每个城市经过且经过一次),所以适应度函数取哈密而顿长度的倒数。
采用赌轮选择机制.一开始用随机方法产生初始群体。
随着遗传算法的执行,则保留M个教优的个体作为群体。
在每一代运算过程中,个体被选中的概率与其在群体中的相对适应度成正比.交叉方法采用改进的OX方法,这种方法的好处是,在两个父代串相同的情况下仍能产生一定程度的变异效果,这对维持群体内一定的多样化特性有一定的作用.变异方法采用“逆转"
与下山方法相结合的操作,称为“进化逆转”,主要目的是改善遗传算法的局部搜索能力.在基本遗传算法操作中,交叉操作在可行解空间中动作范围较宽,步伐较大,导致变异操作受“选择"
压力的作用,难以发挥局部搜索的功效。
因此,在遗传算法框架中加入适当的、基于邻域的局部搜索机制,构成一种全局搜索和局部搜索相结合的优化搜索算法。
下山方法就是一种很好的局部搜索方法。
这里,定义一次“逆转"
为进入一个解的邻居,则进化逆转就是一个单方向的(朝着改进方向的深度下山)和连续的“逆转”操作。
若“逆转"
使可行解的适应度提高,则继续执行逆转,如此反复直到适应度不再提高(这就是典型的下山过程)。
这一操作可以得到较好的效果.
将此算法编程实现,可得到如下的算法描述和流程框图:
TSP
START
数据初始化与内存空间分配;
gen=0;
初始化路径群体;
适应度统计;
显示初始路径;
do{
gen=gen+1;
选择操作;
交叉操作;
变异操作;
显示中间结果;
}while(不满足停止条件)
将计算结果写入文件;
内存空间释放;
END
实验分析
此问题即一个TSP问题,其中事件间相当于一个偏序集,解方法可以用递归和回溯法,时间复杂度比较复杂。
用遗传算法求解时,问题是要得到基因的一个序列与前面的不同,所以要在基因进行交叉和变异之后要进行基因序列的休整,使得整个基因序列保持完整,休整方法就是对重复基因进行更换。
用遗传算法求解问题时,很容易将问题限于局部忧化。
本程序代码在C—Free3。
5下编译通过,谢谢老师审阅!
附录:
代码
/****************************************/
/*********TSPwritebyLJ******************/
/****************************************/
#include<
stdio。
h〉
#include〈stdlib。
math.h〉
#include〈windows。
h>
#include〈time.h>
#definemaxpop100
#definemaxstring29
structindividual{
unsignedintchrom[maxstring];
floatx,fitness;
intparent[2];
intxsite;
};
structindividual*oldpop;
/*当前代种群*/
structindividual*newpop;
/*新一代种群*/
structindividual*temp,*p1;
unsignedintco_min,j
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 遗传 算法 求解 TSP 问题
![提示](https://static.bdocx.com/images/bang_tan.gif)