实验六:遗传算法求解TSP问题实验

合集下载

TSP问题求解实验报告

TSP问题求解实验报告

TSP问题求解(一)实验目的熟悉和掌握遗传算法的原理,流程和编码策略,并利用遗传求解函数优化问题,理解求解TSP问题的流程并测试主要参数对结果的影响。

(二)实验原理巡回旅行商问题给定一组n个城市和俩俩之间的直达距离,寻找一条闭合的旅程,使得每个城市刚好经过一次且总的旅行距离最短。

TSP问题也称为货郎担问题,是一个古老的问题。

最早可以追溯到1759年Euler提出的骑士旅行的问题。

1948年,由美国兰德公司推动,TSP成为近代组合优化领域的典型难题。

TSP是一个具有广泛的应用背景和重要理论价值的组合优化问题。

近年来,有很多解决该问题的较为有效的算法不断被推出,例如Hopfield神经网络方法,模拟退火方法以及遗传算法方法等。

TSP搜索空间随着城市数n的增加而增大,所有的旅程路线组合数为(n-1)!/2。

在如此庞大的搜索空间中寻求最优解,对于常规方法和现有的计算工具而言,存在着诸多计算困难。

借助遗传算法的搜索能力解决TSP问题,是很自然的想法。

基本遗传算法可定义为一个8元组:(SGA)=(C,E,P0,M,Φ,Г,Ψ,Τ)C ——个体的编码方法,SGA使用固定长度二进制符号串编码方法;E ——个体的适应度评价函数;P0——初始群体;M ——群体大小,一般取20—100;Ф——选择算子,SGA使用比例算子;Г——交叉算子,SGA使用单点交叉算子;Ψ——变异算子,SGA使用基本位变异算子;Т——算法终止条件,一般终止进化代数为100—500;问题的表示对于一个实际的待优化问题,首先需要将其表示为适合于遗传算法操作的形式。

用遗传算法解决TSP,一个旅程很自然的表示为n个城市的排列,但基于二进制编码的交叉和变异操作不能适用。

路径表示是表示旅程对应的基因编码的最自然,最简单的表示方法。

它在编码,解码,存储过程中相对容易理解和实现。

例如:旅程(5-1-7-8-9-4-6-2-3)可以直接表示为(5 1 7 8 9 4 6 2 3)(三)实验内容N>=8。

实验六:遗传算法求解TSP问题实验2篇

实验六:遗传算法求解TSP问题实验2篇

实验六:遗传算法求解TSP问题实验2篇第一篇:遗传算法的原理与实现1. 引言旅行商问题(TSP问题)是一个典型的组合优化问题,它要求在给定一组城市和每对城市之间的距离后,找到一条路径,使得旅行商能够在所有城市中恰好访问一次并回到起点,并且总旅行距离最短。

遗传算法作为一种生物启发式算法,在解决TSP问题中具有一定的优势。

本实验将运用遗传算法求解TSP问题,以此来探讨和研究遗传算法在优化问题上的应用。

2. 遗传算法的基本原理遗传算法是模拟自然界生物进化过程的一种优化算法。

其基本原理可以概括为:选择、交叉和变异。

(1)选择:根据问题的目标函数,以适应度函数来评估个体的优劣程度,并按照适应度值进行选择,优秀的个体被保留下来用于下一代。

(2)交叉:从选出的个体中随机选择两个个体,进行基因的交换,以产生新的个体。

交叉算子的选择及实现方式会对算法效果产生很大的影响。

(3)变异:对新生成的个体进行基因的变异操作,以保证算法的搜索能够足够广泛、全面。

通过选择、交叉和变异操作,不断迭代生成新一代的个体,遗传算法能够逐步优化解,并最终找到问题的全局最优解。

3. 实验设计与实施(1)问题定义:给定一组城市和每对城市之间的距离数据,要求找到一条路径,访问所有城市一次并回到起点,使得旅行距离最短。

(2)数据集准备:选择适当规模的城市数据集,包括城市坐标和每对城市之间的距离,用于验证遗传算法的性能。

(3)遗传算法的实现:根据遗传算法的基本原理,设计相应的选择、交叉和变异操作,确定适应度函数的定义,以及选择和优化参数的设置。

(4)实验流程:a. 初始化种群:随机生成初始种群,每个个体表示一种解(路径)。

b. 计算适应度:根据适应度函数,计算每个个体的适应度值。

c. 选择操作:根据适应度值选择一定数量的个体,作为下一代的父代。

d. 交叉操作:对父代进行交叉操作,生成新的个体。

e. 变异操作:对新生成的个体进行变异操作,以增加搜索的多样性。

实验六:遗传算法求解TSP问题实验3篇

实验六:遗传算法求解TSP问题实验3篇

实验六:遗传算法求解TSP问题实验3篇以下是关于遗传算法求解TSP问题的实验报告,分为三个部分,总计超过3000字。

一、实验背景与原理1.1 实验背景旅行商问题(Traveling Salesman Problem,TSP)是组合优化中的经典问题。

给定一组城市和每两个城市之间的距离,求解访问每个城市一次并返回出发城市的最短路径。

TSP 问题具有很高的研究价值,广泛应用于物流、交通运输、路径规划等领域。

1.2 遗传算法原理遗传算法(Genetic Algorithm,GA)是一种模拟自然选择和遗传机制的搜索算法。

它通过选择、交叉和变异操作生成新一代解,逐步优化问题的解。

遗传算法具有全局搜索能力强、适用于多种优化问题等优点。

二、实验设计与实现2.1 实验设计本实验使用遗传算法求解TSP问题,主要包括以下步骤:(1)初始化种群:随机生成一定数量的个体(路径),每个个体代表一条访问城市的路径。

(2)计算适应度:根据路径长度计算每个个体的适应度,适应度越高,路径越短。

(3)选择操作:根据适应度选择优秀的个体进入下一代。

(4)交叉操作:随机选择两个个体进行交叉,生成新的个体。

(5)变异操作:对交叉后的个体进行变异,增加解的多样性。

(6)更新种群:将新生成的个体替换掉上一代适应度较低的个体。

(7)迭代:重复步骤(2)至(6),直至满足终止条件。

2.2 实验实现本实验使用Python语言实现遗传算法求解TSP问题。

以下为实现过程中的关键代码:(1)初始化种群```pythondef initialize_population(city_num, population_size): population = []for _ in range(population_size):individual = list(range(city_num))random.shuffle(individual)population.append(individual)return population```(2)计算适应度```pythondef calculate_fitness(population, distance_matrix): fitness = []for individual in population:path_length =sum([distance_matrix[individual[i]][individual[i+1]] for i in range(len(individual) 1)])fitness.append(1 / path_length)return fitness```(3)选择操作```pythondef selection(population, fitness, population_size): selected_population = []fitness_sum = sum(fitness)fitness_probability = [f / fitness_sum for f in fitness]for _ in range(population_size):individual = random.choices(population, fitness_probability)[0]selected_population.append(individual)return selected_population```(4)交叉操作```pythondef crossover(parent1, parent2):index1 = random.randint(0, len(parent1) 2)index2 = random.randint(index1 + 1, len(parent1) 1)child1 = parent1[:index1] +parent2[index1:index2] + parent1[index2:]child2 = parent2[:index1] +parent1[index1:index2] + parent2[index2:]return child1, child2```(5)变异操作```pythondef mutation(individual, mutation_rate):for i in range(len(individual)):if random.random() < mutation_rate:j = random.randint(0, len(individual) 1) individual[i], individual[j] = individual[j], individual[i]return individual```(6)更新种群```pythondef update_population(parent_population, child_population, fitness):fitness_sum = sum(fitness)fitness_probability = [f / fitness_sum for f in fitness]new_population =random.choices(parent_population + child_population, fitness_probability, k=len(parent_population)) return new_population```(7)迭代```pythondef genetic_algorithm(city_num, population_size, crossover_rate, mutation_rate, max_iterations): distance_matrix =create_distance_matrix(city_num)population = initialize_population(city_num, population_size)for _ in range(max_iterations):fitness = calculate_fitness(population, distance_matrix)selected_population = selection(population, fitness, population_size)parent_population = []child_population = []for i in range(0, population_size, 2):parent1, parent2 = selected_population[i], selected_population[i+1]child1, child2 = crossover(parent1, parent2)child1 = mutation(child1, mutation_rate)child2 = mutation(child2, mutation_rate)parent_population.extend([parent1, parent2]) child_population.extend([child1, child2])population =update_population(parent_population, child_population, fitness)best_individual =population[fitness.index(max(fitness))]best_path_length =sum([distance_matrix[best_individual[i]][best_individual[i +1]] for i in range(len(best_individual) 1)])return best_individual, best_path_length```三、实验结果与分析3.1 实验结果本实验选取了10个城市进行测试,遗传算法参数设置如下:种群大小:50交叉率:0.8变异率:0.1最大迭代次数:100实验得到的最佳路径长度为:1953.53.2 实验分析(1)参数设置对算法性能的影响种群大小:种群大小会影响算法的搜索能力和收敛速度。

利用遗传算法求解TSP问题

利用遗传算法求解TSP问题

利⽤遗传算法求解TSP问题⼀、摘要TSP问题是指给定平⾯上N个点及每点的坐标,求⼀条路径,遍历所有的点并回到起点,使这条路径长度最⼩。

TSP问题是⼀个组合优化问题。

该问题可以被证明具有NPC计算复杂性。

因此,任何能使该问题的求解得以简化的⽅法,都将受到⾼度的评价和关注。

遗传算法是⼈⼯智能⽅法的⼀种,⽤于求解各种传统⽅法不⽅便求解或耗时很长的问题。

下⾯给出遗传算法求解TSP问题的步骤。

在传统遗传算法求解TSP的基础上,提出了⼀种新的编码⽅式,并且讨论了⼀种优化⽅法的可⾏性。

本次实验的程序⾸先在matlab上验证了基本的算法,然⽽由于matlab运⾏较慢,故⼜移植到C++平台上,经过测试,实验结果良好。

⼆、算法实现遗传算法的实现主要包括编码、选择、交叉、编译、将个体放⼊新种群这么⼏个步骤,经过很多代的编译求解,以逼近最优解。

下⾯讨论每⼀个步骤的实现,其中编码⽅式是我在考虑了传统编码⽅式不利于计算的缺点下,重新设计的⼀种全新的编码⽅式。

编码在传统TSP问题中,编码可以直接采⽤⼆进制编码或⾃然编码的形式,⽐如直接把城市转化成(2,5,4,1,3,6)的形式,表⽰从2到5到4到1到3到6最后回到起点。

但是在求解TSP问题时,如果直接采⽤此种编码⽅式,会导致在交叉或变异时出现冲突的情况。

如(2,5,4,1,3,6)和(3,5,6,1,2,4)交换后变成了(2,5,6,1,2,6)和(3,5,4,1,3,4),显然路径出现了冲突的现象,传统的解决⽅式是通过逐步调整的⽅法来消除冲突,但是这种⽅法增加了编码的复杂度,不利于问题的求解,根据问题的特点,提出了采⽤⼀种插⼊序号的编码⽅式。

假设6个城市(1,2,3,4,5,6)现在有编码(1,1,2,2,1,3),让第n个编码表⽰n放在第⼏个空格处。

那么⽣成路径的规则是⾸先取1放在第⼀个(1),然后取2放在第⼀个空格处(2,1),然后取3放在第⼆个空格处(2,3,1),然后取4放在第⼆个空格处(2,4,3,1)然后取5放在第⼀个空格处(5,2,4,3,1)最后取6放在第3个空格处(5,2,6,4,3,1)。

TSP问题的遗传算法实验报告

TSP问题的遗传算法实验报告

TSP问题的遗传算法实验报告一实验题目TSP问题的遗传算法实现二实验目的1熟悉和掌握遗传算法的基本概念和基本思想;2加深对遗传算法的理解,理解和掌握遗传算法的各个操作算子;3理解和掌握利用遗传算法进行问题求解的基本技能。

三实验要求1 以10/30个结点的TSP问题为例,用遗传算法加以求解;2 掌握遗传算法的基本原理、各个遗传操作和算法步骤;3 能求出问题最优解,若得不出最优解,请分析原因;4 要求界面显示每次迭代求出的局部最优解和最终求出的全局最优解。

四数据结构请说明染色体个体和群体的定义方法。

typedef struct{int colony[POPSIZE][CITY_NUM+1];//城市种群,默认出发城市编号为0,则城市编号的最后一个城市还应该为0 每CITY_NUM个城市的排列组合为一个染色体double fitness[POPSIZE];// 路径适应值double Distance[POPSIZE];//路径实际长度int BestRooting[CITY_NUM+1];//最优城市路径序列double BestFitness;//最优路径适应值double BestValue;//最优路径长度}TSP,*PTSP;五实验算法1 说明算法中对染色体的编码方法,适应度函数定义方法;染色体的编码方法:0~9一个排列组合为一条染色体。

适应度函数的定义方法:取路径长度的倒数。

void CalFitness(PTSP city,int m){int i,j,t=0;int start,end;for(i=0;i<POPSIZE;i++){//求适应值city->Distance[i]=0;for(j=1;j<=CITY_NUM;j++){start=city->colony[i][j-1];end=city->colony[i][j];city->Distance[i]=city->Distance[i]+CityDistance[start][end];}city->fitness[i]=N/(city->Distance[i]);}}2 采用的选择、交叉、变异操作算子的具体操作;void Select(PTSP city){//选择算子int i,j;double sum=0,r,t;double p[POPSIZE],q[POPSIZE+1];int copey[POPSIZE][CITY_NUM+1];q[0] = 0;for (i=0;i<POPSIZE;i++)sum+=city->fitness[i];for (i=0;i<POPSIZE;i++){p[i] = city->fitness[i]/sum;q[i+1] = q[i]+p[i];}for (i=0;i<POPSIZE;i++){t = rand()%(10000);r = t/10000;for (j=0;j<POPSIZE;j++)if (r<=q[j+1]){*copey[i] = *city->colony[j];break;}}for (i=0;i<POPSIZE;i++)*city->colony[i] = *copey[i];}void AOX(PTSP city,int n,int m)//改进启发式算法{int A[CITY_NUM-1],B[CITY_NUM-1];int i,j;int k=1+CROSS_NUM,t=1+CROSS_NUM;for (i=0;i<CITY_NUM-1;i++){A[i] = city->colony[n][i+1];B[i] = city->colony[m][i+1];}for (i=3;i<CROSS_NUM+3;i++){city->colony[n][i-2] = B[i];city->colony[m][i-2] = A[i];}for (i=0;i<CITY_NUM-1;i++){for (j=0;j<CROSS_NUM;j++)if (A[i] == B[j+3])break;if (j == CROSS_NUM)city->colony[n][k++] = A[i];for (j=0;j<CROSS_NUM;j++)if (B[i] == A[j+3])break;if (j == CROSS_NUM)city->colony[m][t++] = B[i];}}int check1(int r[],int n)//判重{int i;for (i=0;i<n;i++)if (r[i] == r[n]){return true;}return false;}void Cross(PTSP city,double pc){//交叉概率是pint i;int r[20];for (i=0; i<POPSIZE*pc;i++){r[i] = rand()%(POPSIZE);while (check1(r,i))r[i] = rand()%(POPSIZE);}for (i=0;i<POPSIZE*pc;i=i+2)AOX(city,r[i],r[i+1]);}void XCH(PTSP city,int n)//对换变异{int r,t;int c;r = rand()%(CITY_NUM-1)+1;t = rand()%(CITY_NUM-1)+1;while (r==t)t = rand()%(CITY_NUM-1)+1;c = city->colony[n][r];city->colony[n][r] = city->colony[n][t];city->colony[n][t] = c;}void Mutation(PTSP city,double pm){//变异概率是pmint i;int r[20];for (i=0; i<POPSIZE*pm;i++){r[i] = rand()%(POPSIZE);while (check1(r,i))r[i] = rand()%(POPSIZE);XCH(city,r[i]);}}3 实验中采用的算法参数的最佳选择值是多少。

遗传算法(GA)解决TSP问题

遗传算法(GA)解决TSP问题

遗传算法(GA)解决TSP问题 遗传算法解决TSP问题遗传算法遗传算法的基本原理是通过作⽤于染⾊体上的基因寻找好的染⾊体来求解问题,它需要对算法所产⽣的每个染⾊体进⾏评价,并基于适应度值来选择染⾊体,使适应性好的染⾊体有更多的繁殖机会,在遗传算法中,通过随机⽅式产⽣若⼲个所求解问题的数字编码,即染⾊体,形成初始种群;通过适应度函数给每个个体⼀个数值评价,淘汰低适应度的个体,选择⾼适应度的个体参加遗传操作,经过遗产操作后的个体集合形成下⼀代新的种群,对这个新的种群进⾏下⼀轮的进化。

TSP问题TSP问题即旅⾏商问题,经典的TSP可以描述为:⼀个商品推销员要去若⼲个城市推销商品,该推销员从⼀个城市出发,需要经过所有城市后,回到出发地。

应如何选择⾏进路线,以使总的⾏程最短。

从图论的⾓度来看,该问题实质是在⼀个带权完全⽆向图中,找⼀个权值最⼩的哈密尔顿回路。

遗传算法解决TSP问题概念介绍:种群 ==> 可⾏解集个体 ==> 可⾏解染⾊体 ==> 可⾏解的编码基因 ==> 可⾏解编码的分量基因形式 ==> 遗传编码适应度 ==> 评价的函数值(适应度函数)选择 ==> 选择操作交叉 ==> 编码的交叉操作变异 ==> 可⾏解编码的变异遗传操作:就包括优选适应性强的个体的“选择”;个体间交换基因产⽣新个体的“交叉”;个体间的基因突变⽽产⽣新个体的“变异”。

其中遗传算法是运⽤遗传算⼦来进⾏遗传操作的。

即:选择算⼦、变异算⼦、交叉算⼦。

遗传算法的基本运算过程(1)种群初始化:个体编码⽅法有⼆进制编码和实数编码,在解决TSP问题过程中个体编码⽅法为实数编码。

对于TSP问题,实数编码为1-n的实数的随机排列,初始化的参数有种群个数M、染⾊体基因个数N(即城市的个数)、迭代次数C、交叉概率Pc、变异概率Pmutation。

(2)适应度函数:在TSP问题中,对于任意两个城市之间的距离D(i,j)已知,每个染⾊体(即n个城市的随机排列)可计算出总距离,因此可将⼀个随机全排列的总距离的倒数作为适应度函数,即距离越短,适应度函数越好,满⾜TSP要求。

用遗传算法求解中国34个省会TSP的问题

用遗传算法求解中国34个省会TSP的问题

用遗传算法求解中国34个省会TSP的问题题目:用遗传算法求解中国34 个省会TSP 问题源代码分享在本人博客:2012-1-17智能控制技术及其应用大作业专业: 控制工程学号:XXXXXX姓名:XXX用遗传算法求解中国34 个省会TSP 问题一、TSP 问题的描述旅行商问题(TSP)可以具体描述为:已知n 个城市之间的相互距离,现有一个推销员从某一个城市出发,必须遍访这n 个城市,并且每个城市只能访问一次,最后又必须返回到出发城市,如何安排他对这些城市的访问次序,可使其旅行路线的总长度最短。

现给出中国34 个省会数据,要求基于此数据使用遗传算法解决该TSP 问题。

图1 中国34 省会位置city =1.西藏2.云南3.四川4.青海5.宁夏6.甘肃7.内蒙古8.黑龙江9.吉林10.辽宁11.北京12 天津13.河北14.山东15.河南16.山西17. 陕西18.安徽19.江苏20.上海21.浙江22.江西23.湖北24.湖南25,贵州26. 广西27.广东28.福建29.海南30.澳门31.香港32.台湾33.重庆34.新疆像素坐标如下:Columns 1 through 11100 187 201 187 221 202 258 352 346 336 290211 265 214 158 142 165 121 66 85 106 127Columns 12 through 22297 278 296 274 265 239 302 316 334 325 293135 147 158 177 148 182 203 199 206 215 233Columns 23 through 33280 271 221 233 275 322 250 277 286 342 220216 238 253 287 285 254 315 293 290 263 226Column 3410477二、遗传算法的介绍2.1 遗传算法遗传算法的基本原理是通过作用于染色体上的基因寻找好的染色体来求解问题,它需要对算法所产生的每个染色体进行评价,并基于适应度值来选择染色体,使适应性好的染色体有更多的繁殖机会,在遗传算法中,通过随机方式产生若干个所求解问题的数字编码,即染色体,形成初始种群;通过适应度函数给每个个体一个数值评价,淘汰低适应度的个体,选择高适应度的个体参加遗传操作,经过遗产操作后的个体集合形成下一代新的种群,对这个新的种群进行下一轮的进化。

TSP问题的遗传算法求解

TSP问题的遗传算法求解

TSP问题的遗传算法求解一、问题描述假设有一个旅行商人要拜访N个城市,要求他从一个城市出发,每个城市最多拜访一次,最后要回到出发的城市,保证所选择的路径长度最短。

二、算法描述(一)算法简介遗传算法(GeneticAlgorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,通过模拟自然进化过程搜索最优解。

遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择个体,并借助于自然遗传学的遗传算子(geneticoperators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。

这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。

(摘自百度百科)。

(二)遗传算子遗传算法中有选择算子、交叉算子和变异算子。

选择算子用于在父代种群中选择进入下一代的个体。

交叉算子用于对种群中的个体两两进行交叉,有Partial-MappedCrossover、OrderCrossover、Position-basedCrossover等交叉算子。

变异算子用于对种群中的个体进行突变。

(三)算法步骤描述遗传算法的基本运算过程如下:1.初始化:设置进化代数计数器t=0、设置最大进化代数T、交叉概率、变异概率、随机生成M个个体作为初始种群P2.个体评价:计算种群P中各个个体的适应度3.选择运算:将选择算子作用于群体。

以个体适应度为基础,选择最优个体直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代4.交叉运算:在交叉概率的控制下,对群体中的个体两两进行交叉5.变异运算:在变异概率的控制下,对群体中的个体两两进行变异,即对某一个体的基因进行随机调整6.经过选择、交叉、变异运算之后得到下一代群体P1。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验六:遗传算法求解TSP问题实验一、实验目的熟悉和掌握遗传算法的原理、流程和编码策略,并利用遗传求解函数优化问题,理解求解TSP问题的流程并测试主要参数对结果的影响。

用遗传算法对TSP问题进行了求解,熟悉遗传算法地算法流程,证明遗传算法在求解TSP问题时具有可行性。

二、实验内容参考实验系统给出的遗传算法核心代码,用遗传算法求解TSP的优化问题,分析遗传算法求解不同规模TSP问题的算法性能。

对于同一个TSP问题,分析种群规模、交叉概率和变异概率对算法结果的影响。

增加1种变异策略和1种个体选择概率分配策略,比较求解同一TSP问题时不同变异策略及不同个体选择分配策略对算法结果的影响。

1. 最短路径问题所谓旅行商问题(Travelling Salesman Problem , TSP),即最短路径问题,就是在给定的起始点S到终止点T的通路集合中,寻求距离最小的通路,这样的通路成为S点到T点的最短路径。

在寻找最短路径问题上,有时不仅要知道两个指定顶点间的最短路径,还需要知道某个顶点到其他任意顶点间的最短路径。

遗传算法方法的本质是处理复杂问题的一种鲁棒性强的启发性随机搜索算法,用遗传算法解决这类问题,没有太多的约束条件和有关解的限制,因而可以很快地求出任意两点间的最短路径以及一批次短路径。

假设平面上有n个点代表n个城市的位置, 寻找一条最短的闭合路径, 使得可以遍历每一个城市恰好一次。

这就是旅行商问题。

旅行商的路线可以看作是对n个城市所设计的一个环形, 或者是对一列n个城市的排列。

由于对n个城市所有可能的遍历数目可达(n- 1)!个, 因此解决这个问题需要0(n!)的计算时间。

假设每个城市和其他任一城市之间都以欧氏距离直接相连。

也就是说, 城市间距可以满足三角不等式, 也就意味着任何两座城市之间的直接距离都小于两城市之间的间接距离。

2. 遗传算法遗传算法是由美国J.Holland教授于1975年在他的专著《自然界和人工系统的适应性》中首先提出的,它是一类借鉴生物界自然选择和自然遗传机制的随机化搜索算法。

通过模拟自然选择和自然遗传过程中发生的繁殖、交叉和基因突变现象,在每次迭代中都保留一组候选解,并按某种指标从解群中选取较优的个体,利用遗传算子(选择、交叉和变异)对这些个体进行组合,产生新一代的候选解群,重复此过程,直到满足某种收敛指标为止。

遗传算法在本质上是一种不依赖具体问题的直接搜索方法,是一种求解问题的高效并行全局搜索方法。

其假设常描述为二进制位串,位串的含义依赖于具体应用。

搜索合适的假设从若干初始假设的群体集合开始。

当前种群成员通过模仿生物进化的方式来产生下一代群体,如随机变异和交叉。

每一步,根据给定的适应度评估当前群体的假设,而后使用概率方法选出适应度最高的假设作为产生下一代的种子。

下面介绍几个遗传算法的几个基本概念:(1)染色体(Chromosome):在使用遗传算法时,需要把问题的解编成一个适合的码子。

这种具有固定结构的符号串既是染色体,符号串的每一位代表一个基因。

符号串的总位数成为染色体的长度,一个染色体就代表问题的一个解,每个染色体也被称为一个个体。

(2)群体(Population):每代所产生的染色体总数成为群体,一个群体包含了该问题在这一代的一些解的集合。

(3)适应度(Fitness):对群体中每个染色体进行编码后,每个个体对应一个具体问题的解,而每个解对应于一个函数值。

该函数值即适应函数,就是衡量染色体对环境适应度的指标,也是反映实际问题的目标函数在前一代群体的基础上产生新一代群体的工作成为遗传操作,基本的遗传操作有:(1)选择(Select):按一定的概率从上代群体中选择M对个体作为双亲,直接拷贝到下一代,染色体不发生变化。

(2)交叉(Crossover):对于选中进行繁殖的两个染色体X,Y,以X,Y为双亲作交叉操作,从而产生两个后代X1,Y1.(3)变异(Mutation):对于选中的群体中的个体(染色体),随机选取某一位进行取反运算,即将该染色体码翻转。

用遗传算法求解的过程是根据待解决问题的参数集进行编码,随机产生一个种群,计算适应函数和选择率,进行选择、交叉、变异操作。

如果满足收敛条件,此种群为最好个体,否则,对产生的新一代群体重新进行选择、交叉、变异操作,循环往复直到满足条件。

遗传算法原型:GA(Fitness,Fitness_threshold,p,r,m)Fitness:适应度评分函数,为给定假设赋予一个评估分数Fitness_threshold:指定终止判据的阈值p:群体中包含的假设数量r:每一步中通过交叉取代群体成员的比例m:变异率初始化群体:P←随机产生的p个假设评估:对于P中的每一个h,计算Fitness(h)当[maxFitness(h)]<Fitness_threshold,做产生新的一代Ps:(1)选择:用概率方法选择P的(1-r)p个成员加入Ps.从P中选择假设hi的概率用下面公式计算:(2)交叉:根据上面给出的,从P中按概率选择r(p/2)对假设.对于每对假设<h1,h2>,应用交叉算子产生两个后代.把所有的后代加入Ps(3)变异:使用均匀的概率从Ps中选择m%的成员.对于选出的每个成员,在它表示中随机选择一个为取反(4)更新:P←Ps(5)评估:对于P中的每个h计算Fitness(h)从P中返回适应度最高的假设3. TSP问题的遗传算法设计与实现对于n个城市的问题,每个个体即每个解的长度为n,用s行, t列的pop矩阵,表示初始群体,s表示初始群体的个数,t为n+1,矩阵的每一行的前n个元素表示城市编码,最后一个元素表示这一路径的长度。

城市的位置可以手动输入,使用一个N×N矩阵D存储,D(i,j)代表城市i和城市j之间的距离。

D(i,j)=sqrt((Xi-Xj).^2+(Yi-Yj).^2)。

在TSP的求解中,可以直接用距离总和作为适应度函数。

个体的路径长度越小,所得个体优越,距离的总和越大,适应度越小,进而探讨求解结果是否最优。

选择就是从群体中选择优胜个体、淘汰劣质个体的操作,它是建立在群体中个体适应度评估基础上。

这里采用方法是最优保存方法。

本实例中交叉采用部分匹配交叉策略,先随机选取两个交叉点,然后将两交叉点中间的基因段互换,将互换的基因段以外的部分中与互换后基因段中元素冲突的用另一父代的相应位置代替,直到没有冲突。

变异操作是以变异概率Pm对群体中个体串某些基因位上的基因值作变动,若变异后子代的适应度值更加优异,则保留子代染色体,否则,仍保留父代染色体。

这有助于增加种群的多样性,避免早熟收敛(非全局最优)。

判断结束准则是固定指定了迭代的次数当算法达到迭代次数时,算法结束,输出当前的最优解。

在根据适配值计算并选择的时候,记录下来的当前最优值,在变异后加入跟新的群体,保证新的迭代循环中TSP解越来越好(不会变差)。

在选择的一种操作是拿最优的K个替换最差的K个个体,本例是按适配值选择,并使群体数目变少,当每次变异操作后,产生随机路径补充群体是群体数目不变,再次循环,一定程度上防止因初始群体的选择问题而陷入局部最优。

4. TSP问题的遗传算法的具体步骤解最短路径的遗传算法如下:Generate[p(n)];表示程序开始时要首先产生一个群体,群体个数为nEvaluate[p(h)];表示计算每个个体适应度,h是种群中的一个个体Repeat roof Generations times;重复下面的操作,直到满足条件为止Select p(h) from p(n-1);表示从前一代群体中选择一对双亲,用于交叉、变异操作,P(n)代表第n代群体Crossover and mutation p(n);进行交叉和变异操作Learning[p(n)];自学习过程Evaluate[p(h)];计算新生成的种群中每个个体的适应度End;具体流程图如下所示:流程图5.遗传算法求解不同规模的TSP问题的算法性能(1)遗传算法执行方式说明:●适应度值计算方法:当前路线的路径长度●个体选择概率分配方法:适应度比例方法●选择个体方法:轮盘赌选择●交叉类型:PMX交叉●变异类型: 两点互换变异(2)实验模拟结果:图1-1(3)分析由图1-1可知,遗传算法执行时间随着TSP问题规模的增大而增大,并且大致为线性增长。

五、不同参数下的计算结果对比(1)种群规模对算法结果的影响实验次数:10最大迭代步数:100交叉概率:0.85变异概率:0.15表1-1如表1-1所示,显然最短路径为25.1652m,最优路径为1-0-9-1-3-6-7-5-8-4-2或3-1-0-9-2-4-8-5-7-6,注意到这是一圈,顺时针或者逆时针都可以。

当种群规模为10,20时,并没有找到最优解。

(2)交叉概率对算法结果的影响 实验次数:15 种群规模:25 最大迭代步数:100 变异概率:0.15 实验结果:表1-2(注:红色表示非最优解)在该情况下,交叉概率过低将使搜索陷入迟钝状态,得不到最优解。

(3)变异概率对算法结果的影响实验次数:10种群规模:25最大迭代步数:100交叉概率:0.85实验结果:表1-3又表1-3可知,当变异概率过大或过低都将导致无法得到最优解。

注:(2)(3)的实验数据与(1)的实验数据不同,详见附录。

六、不同变异策略和个体选择概率分配策略对算法结果的影响(1)两点互换变异与插入变异的比较:●试验次数(CASNUM):10●城市数(POINTCNT):10●种群规模(POPSIZE):100●最大迭代步数(GENERATIONS):100●交叉概率(PC):0.85●变异概率(PM):0.15●选择个体方法:轮盘赌选择●交叉类型:PMX交叉●个体选择概率分配方法:适应度比例方法a.变异类型: 两点互换变异表1-4两点互换变异程序结果b.变异类型: 插入变异表1-5插入变异程序结果分析:两点互换变异20次模拟中,4次得到非最优解;而插入变异只有2次;插入变异的最好适应度平均值比两点互换变异小0.14755,最差适应度平均值和总的适应度平均值都比两点互换下,并且在Release下,运行时间前者比后者快218.3ms。

可见在该条件下(交叉概率,变异概率,种群规模等),插入变异比两点互换变异的算法效果要好。

(2)个体选择分配策略●试验次数(CASNUM):10●城市数(POINTCNT):10●种群规模(POPSIZE):100●最大迭代步数(GENERATIONS):100●交叉概率(PC):0.85●变异概率(PM):0.15●选择个体方法:轮盘赌选择●交叉类型:PMX交叉●变异类型: 两点互换变异a.个体选择概率分配方法:适应度比例方法同表1-4b.个体选择概率分配方法:非线性排序方式表1-6非线性排序方式程序结果分析:个体选择概率分配方式采用非线性排序方式时,程序运行结果非常糟糕。

相关文档
最新文档