一.问题描述
假设有一个旅行商人要拜访n(研究n=10)个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。
二.遗传算法(GA)概述
遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法,它最初由美国Michigan大学J.Holland教授于1975年首先提出来的,并出版了颇有影响的专著《Adaptation in Natural and Artificial Systems》,GA这个名称才逐渐为人所知,J.Holland教授所提出的GA通常为简单遗传算法(SGA)。
三.问题分析
TSP问题就是寻找一条最短的遍历n 个城市的最短路径, 即搜索自然数子集W= { 1 ,2 , ⋯, n} ( W的元素表示对n 个城市的编号) 的一个排列 π( W) = { V1 , V2 , ⋯, Vn} , 使len = ∑ d ( Vi , Vi+1) + d ( V1 , Vn)取最小值, 式中的d ( Vi , Vi+1) 表示城市Vi 到城市Vi + 1的距离。
遗传算法是具有“生成+检测”的迭代过程的搜索算法。遗传算法是一种群体型操作,该操作以群体中的所有个体为对象。选择、交叉和变异是遗传算法的3个主要操作算子,它们构成了所谓的遗传操作,使遗传算法具有了其它传统方法所没有的特性。遗传算子包含如下6个基本因素:
1.参数编码:由于遗传算法不能直接处理解空间的解数据,因此必须通过编码将它们表示成遗传空间的基因型串结构数据。 我们采用整数编码的方式,用0-9来表示10个城市。
2.种群初始化:由于遗传算法的群体型操作需要,所以必须为遗传操作准备一个由若干初始解组成的初始种群。初始种群的每个个体都是通过随机方法产生。
3. 适应度函数:遗传算法在搜索进化过程中一般不需要其他外部信息,仅用适应度值来评估个体或解的优劣,并作为以后遗传操作的依据。 设一个解遍历初始行走的总距离为D,N=1000(根据具体路径而变化),则适应度fitness=pow(2,N/D)。即总距离越高,适应度越低,总距离越低(解越好),适应度越高。
4.选择操作:选择或复制操作是为了从当前群体中选出优良的个体,使它们有机会作为父代为下一代繁殖子孙。个体适应度越高,其被选择的机会就越多。此处采用与适应度成比例的概率方法进行选择。具体地说,就是首先计算群体中所有个体适应度的总和,再计算每个个体的适应度所占的比例,并以此作为相应的选择概率。采用轮盘赌方法。
5. 交配操作:交配操作是遗传算法中最主要的遗传操作。常用的交配规则如下:常规交配法、基于次序的交配法、基于位置的交配法、基于部分映射的交配法。这里采用基于部分映射的交配法。例如:
父代路径1: 0 6 8 5 1 3 2 9 7 4 0