改进的遗传算法求解TSP问题_3旅行商问题_24_34
用于求解TSP问题的遗传算法改进

用于求解TSP问题的遗传算法改进一、TSP问题简介TSP问题,全称Traveling Salesman Problem,即旅行商问题。
所谓TSP问题是指,给定一些点和每一对点之间的距离,求出一条遍历每个点恰好一次的最短路径,该问题的解决方法对实际问题中的路径规划和优化有着很大的参考价值。
二、遗传算法的基本思想遗传算法,是模拟自然界中生物遗传进化过程的一种演化计算方法。
它通过模拟生物的繁殖、变异、适应性等生命过程来寻找问题的最优解。
其基本的过程如下:1. 初始化:随机生成一个初始群体,每个个体表示一种可能的解决方案。
2. 选择:根据适应度函数,选择一定数量的优秀个体作为繁殖的父亲。
3. 交叉:将所选父亲进行交叉操作,生成新的子代个体。
4. 变异:对于一部分子代个体,进行变异操作。
5. 替换:用新的子代个体替换掉一部分原有的个体,形成新一代群体。
6. 结束条件:当某种条件达到时结束算法,否则返回步骤二。
在TSP问题中,遗传算法的基本实现方法如下:1.初始化:随机生成一个初始群体,每个个体表示一个解决方案,其中每个基因表示一个城市的编号。
例如,假设有10个城市,则每个个体就是由这10个城市编号随机排列组成的,例如:1-2-5-8-4-3-7-9-6-10等。
2.适应度函数:对于每个个体,计算其总路程,将总路程作为适应度函数的值。
4.交叉:将所选父亲进行交叉操作,生成新的子代个体,交叉方式一般有:顺序交叉法、部分映射交叉法、环形交叉法、边交叉法等。
5.变异:对于一部分子代个体,进行变异操作,变异的方式一般是:交换变异、倒位变异、随机抽样变异等。
7.结束条件:当达到一定条件时结束算法,比如迭代次数达到上限或者群体的适应度达到一定的水平。
传统的遗传算法在求解TSP问题时,存在一些问题:1.收敛速度慢:由于集合了交叉、变异等算子,每一代都要进行大量的计算,所以收敛速度慢。
2.易受陷入局部最优解:由于遗传算法采用的是局部搜索策略,所以可能会陷入到局部最优解中。
用于求解TSP问题的遗传算法改进

用于求解TSP问题的遗传算法改进遗传算法是一种常用的求解旅行商问题(TSP)的优化方法,它通过模拟自然界的遗传过程,不断迭代进化产生最优解。
传统的遗传算法在处理TSP问题时存在一些问题,如收敛速度慢、局部最优解问题等。
对遗传算法进行改进,使其更好地应用于求解TSP问题,是一个具有挑战性且值得研究的课题。
一、遗传算法简介遗传算法是一种模拟生物进化过程的优化算法,它通过模拟生物的遗传、突变、适应度等机制来搜索最优解。
在TSP问题中,遗传算法通过表示候选解的染色体、交叉、变异等操作,不断迭代产生最优解。
遗传算法的基本流程如下:1. 初始化种群:随机生成初始的候选解,构成初始的种群。
2. 选择操作:根据每个候选解的适应度(即路径长度),按照一定的概率选择一部分候选解作为父代。
3. 交叉操作:对选中的父代进行交叉操作,产生子代。
4. 变异操作:对子代进行变异操作,引入新的遗传信息。
5. 新种群生成:将父代和子代合并,按照一定规则生成新的种群。
6. 重复以上步骤,直到满足停止条件。
1. 收敛速度改进传统的遗传算法在处理TSP问题时,由于计算量较大,收敛速度比较慢。
为了改进这一问题,可以引入多种启发式算法,如模拟退火算法、禁忌搜索算法等,对遗传算法进行改进。
将这些算法作为辅助操作,引入更多的信息,以提高收敛速度。
2. 局部最优解问题在遗传算法的迭代过程中,容易陷入局部最优解,无法达到全局最优解。
为了解决这一问题,可以引入多种变异操作,如部分反转、位变异等,增加搜索空间,以期获得更优的解。
3. 适应度函数改进适应度函数的设计对遗传算法的性能有着重要影响。
在TSP问题中,适应度函数通常是路径长度,但这样的函数可能会导致算法陷入局部最优解。
可以尝试设计更复杂的适应度函数,考虑路径的多个方面因素,以减小局部最优的影响。
4. 种群初始化种群初始化是遗传算法的一个重要环节,它直接影响了算法的收敛速度和最终的解。
传统的种群初始化是随机生成的,容易导致种群分布不均匀,影响算法的局部搜索能力。
实验六:遗传算法求解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)参数设置对算法性能的影响种群大小:种群大小会影响算法的搜索能力和收敛速度。
基于改进的遗传算法求解旅行商问题

1引言旅行商问题(TSP)也称货郎担问题,它旨在寻求旅行商在遍历诸多城市一次最后回到起点城市的最短路径,是数学图论中的经典问题。
在实际生活中,像物流路径优化、车间调度和网络路由选址等都可归结为TSP,因此,TSP的研究具有重要的理论意义和实际价值。
Karp[1]证明了TSP是一个NP难问题,传统的优化算法在求解TSP问题时往往会陷入局部最优,尤其随着城市数量的增加,计算量也急剧增加,致使很多算法瘫痪。
因此智能优化算法强的搜索效率、快速的收敛速度在求解TSP中得到了广泛应用。
Aziz[2]提出了广义的蚁群算法,算法中融合了局部和全局两种信息素更新机制,提高全局迅游能力。
何湘竹[3]将混沌搜索机制融入基于教与学的优化算法求解TSP,通过benchmark实例仿真试验显示,新算法性能更优越。
段艳明[4]将果蝇优化算法的连续空间对应到离散规划,利用了遗传算法的交叉、变异操作进行路径的寻优,加快局部搜索能力和收敛速度。
遗传算法是一种模拟生物进化过程的随机搜索优化方法,与其他的局部搜索算法相比,遗传算法具有更强的鲁棒性,隐形的并行搜索机制增强了算法寻优能力,但遗传算法也存在缺陷,例如:种群常常会出现早熟收敛、易陷入局部最优的问题,使算法的搜索性能大大降低[5]。
针对这些问题,学者提出了许多解决方法,如参数控制、多种群的运用和交配限制[6-8]等。
2求解TSP的改进遗传算法鉴于目前遗传算法在优化领域的优越性能,论文以TSP 为例,提出了改进的遗传算法。
基于改进的遗传算法求解旅行商问题Solving TSP Problem Based on the Improved Genetic Algorithm吴军1,严丽娜2(1.宁夏大学新华学院,银川750021;2.北方民族大学,银川750021)WU Jun1,YAN Li-na2(1.XinhuaCollegeof NingxiaUniversity,Yinchuan750021,China;2.BeifangUniversityof Nationalities,Yinchuan750021,China)【摘要】论文提出了一种改进的遗传算法求解旅行商问题(TSP)。
一种改进的求解TSP问题的遗传算法

一种改进的求解TSP问题的遗传算法TSP( Traveling Salesman Problem, 旅行商问题) 的简单描述为:一位推销商要在N 个城市推销商品。
他从起点城市出发,经过每个城市一次且只经过一次后再回到起点城市。
需要求得一条推销商的最短旅行路径。
该问题用数学语言描述为:设有N个城市C=(1,2,3, ................................ ,N),其中任意两个城市的距离记为d(i,j),求一条经过C中所有城市一次且仅一次的闭合路径(C1,C2,C3,……,CN,C1),使得EN- 1i=1d(Ci,Ci+1)+d(CN,C1) 为最小。
TSP问题是一个典型的组合优化问题,并且是一个著名的NP难问题。
由于该问题的描述简单,且其实际模型在路径、网络、分配等优化问题中有着广泛的应用,故长期以来一直吸引着许多领域的研究人员对其算法改进的关注。
该问题中所有可能的路径总数与城市数量N是成指数型增长的,会产生“组合爆炸” 问题,即问题的计算量极大地超出了计算机所能承受的极限。
以N=50为例,使用每秒计算1亿次的计算机按穷举搜索法求解,需要计算5X 1048年。
因此,寻找出有效的近似求解算法对该问题具有重要的意义。
遗传算法在解决TSP问题中有其独特的特点,但是一个较难解决的问题是如何较快地找到最优解并防止算法出现“早熟” 现象。
为了保证算法的全局收敛性,就要维持群体的个体多样性,避免有效基因的丢失。
另一方面, 为了提高收敛速度,就要使群体尽快地向最优状态转移,这就会减少群体的个体多样性,从而陷入局部最优。
本文针对传统遗传算法在求解TSP问题中的上述局限性,提出了一种改进的遗传算法,并验证了其有效性。
1改进遗传算法设计1.1 编码方案编码问题是遗传算法应用中的首要问题,也是设计遗传算法时的一个关键步骤。
由于TSP问题是一个排列问题,而二进制编码需要特殊的修补算法,单个位的改变可能导致非法的旅行,因此TSP问题中二进制编码没有任何优势,需要选择其它编码方式。
遗传算法求解TSP问题的实现与改进

遗传算法求解TSP问题的实现与改进
遗传算法求解TSP问题的实现与改进
摘要:旅行商问题(Traveling Salesman Problem,简称TSP)已经被证明为NP难题。
通过应用遗传算法求解TSP问题,给出了遗传算法中各算子的实现方法,并用遗传算法(Genetic Algorithm,简称GA)和穷举法分别求解了15个城市的TSP问题,结果表明,遗传算法具有明显的优越性。
引入模拟退火的思想对遗传算法的变异算子进行改进,并求解了50个城市的TSP,得到了满意的结果。
关键词:遗传算法;TSP;模拟退火
0 引言
本文在分析遗传算法的基础之上求解TSP问题,并与穷举法所得结果进行比较。
表明了遗传算法在求解此问题上的优越性。
针对遗传算法的不足,结合模拟退火思想对遗传算法进行改进,取得了理想的试验结果。
1 算法设计
TSP问题的模型是简单而易于描述的。
实际应用中,像印刷电路板工艺这样的应用可能是和模型比较接近的。
但是模型中的城市之间的距离代表的是某个解的耗费,实际中不一定是欧氏距离,有可能点与点之间的耗费需要另外用权值给出。
而且在实际中,两个城市之间的消耗不一定是对称的,例如乘船到另一城市和返回的费用可能是不同的。
这里对TSP问题模型进行简化,在500×500的平面内随机生成。
用于求解TSP问题的遗传算法改进
用于求解TSP问题的遗传算法改进遗传算法是一种常用于解决旅行商问题(TSP)的优化算法。
TSP问题是指在给定一组城市和其之间的距离,找到一条最短路径,使得每个城市只访问一次并最终返回起始城市。
传统的遗传算法在解决TSP问题时存在一些缺点,例如收敛速度慢、易于陷入局部最优解等问题。
对遗传算法进行改进以提高求解TSP问题的效果和效率尤为重要。
改进初始化的方法。
传统的遗传算法一般采用随机生成的方法来初始化种群,但这样会导致种群的多样性不足、容易陷入局部最优解。
可以采用相邻交换法、插入法等启发式方法来生成初始化种群,增加种群的多样性,有助于全局搜索。
改进交叉和变异的操作。
传统的遗传算法中,交叉和变异操作一般是均匀随机进行的,但这样可能会导致交叉和变异带来的新个体的子路径中出现重复的城市,从而违反了TSP问题的约束条件。
可以采用部分映射交叉(PMX)等方法来保证交叉后子路径不会出现重复的城市,同时保持了种群的多样性;可以采用2-opt、3-opt等局部搜索方法来修复变异带来的子路径中出现的重复的城市,提高种群的质量。
可以引入自适应权重的选择策略。
传统的遗传算法中,选择策略一般是基于个体适应度的排序或轮盘赌选择的。
但这种选择策略可能会导致选择压力过大或过小,使种群收敛速度过快或过慢。
可以采用自适应权重的选择策略,根据种群适应度的分布情况动态调整选择概率,使得适应度较高的个体能够更有机会被选中,增加种群的多样性,提高全局搜索能力。
可以引入一些启发式的局部搜索方法。
传统的遗传算法中,局部搜索往往仅在变异操作中进行,但这样可能局部搜索的范围有限,难以跳出局部最优解。
可以在种群进化的过程中,根据种群的适应度情况,选择某些个体进行局部搜索,以进一步改善个体的质量。
对于求解TSP问题的遗传算法改进,可以从初始化方法、交叉和变异操作、选择策略和局部搜索等方面进行改进,以提高算法的效果和效率。
通过引入合适的启发式方法,增加种群的多样性,改善交叉和变异的操作,优化选择策略,加强局部搜索,可以有效地提高遗传算法在求解TSP问题中的性能。
用于求解TSP问题的遗传算法改进
用于求解TSP问题的遗传算法改进TSP问题(Traveling Salesman Problem)是指给定一系列城市以及它们之间的距离,求解出一条路径,使得从起点出发,经过每个城市一次后最终回到起点,并且使得路径的总距离最短。
TSP问题是一个经典的组合优化问题,具有较高的复杂性和难度。
遗传算法是一种模拟生物进化过程的优化算法,通过选择、交叉和变异等操作来改进解的质量。
在求解TSP问题时,遗传算法可以被改进以提高解的质量和求解效率。
对于遗传算法的编码方式,可以使用二进制编码、邻接矩阵编码或路径编码等方式。
路径编码是指将城市序号按照访问的先后顺序编码成一个序列,路径上的城市没有重复。
路径编码相对简洁,可以有效地减少编码长度和搜索空间。
对于遗传算法的选择操作,可以采用轮盘赌算法或锦标赛选择算法。
轮盘赌算法根据个体适应度值的比例来选择个体,适应度越高的个体被选中的概率越大,从而增加优秀个体被选择的机会。
锦标赛选择算法是随机选择一定数量的个体进行竞争,选择其中适应度最高的个体作为父代。
对于遗传算法的交叉操作,可以采用部分匹配交叉算法或顺序交叉算法。
部分匹配交叉算法从两个父代中随机选择一段子序列,并将该子序列按顺序保留在后代中,然后使用对应的父代序列填充剩余位置。
顺序交叉算法继承父代序列的一部分,然后按顺序填充剩余的城市。
对于遗传算法的变异操作,可以采用交换变异算子或插入变异算子。
交换变异算子随机选择两个位置,交换这两个位置的城市。
插入变异算子随机选择一个位置和一个城市,将该城市插入到选择位置之后。
除了上述改进之外,还可以对遗传算法的参数进行调优,例如种群大小、交叉概率、变异概率等。
种群大小的选择应该尽可能大,以增加搜索空间和解的多样性;交叉概率和变异概率的选择需要根据问题的复杂度和搜索的速度进行调整。
通过上述改进和调优,可以使遗传算法更有效地求解TSP问题,提高求解质量和效率。
但需要注意的是,TSP问题是一个NP难问题,任何优化算法都无法保证找到全局最优解,因此在实际应用中需要根据具体问题进行优化算法的选择和使用。
用遗传算法求解中国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问题。
TSP问题是指求一条遍历所有城市且总路程最短的路径。
然而,传统的遗传算法在处理TSP问题时存在一些问题,例如:固定交叉率和变异率容易陷入局部最优解、随着种群进化,个体编码长度会不断增加等等。
为了解决这些问题,人们对遗传算法进行了一些改进,例如:改变交叉率和变异率,改变交叉操作的方式,改进选取父代的方法,引入局部搜索等等。
以下将对这些方法进行简单介绍。
1.改变交叉率和变异率传统的遗传算法采用固定的交叉率和变异率。
当交叉率和变异率设置过高或过低时,都会对最终的结果造成不良影响。
因此,对于TSP问题来说,一种有效的方法是采用变化的交叉率和变异率,即在种群进化的过程中,根据当前种群的进化情况来不断调整交叉率和变异率。
例如:当种群进化较早期时,为了保证种群多样性,应该降低交叉率,增加变异率;当种群进化到后期时,为了保证收敛速度,应该逐渐增加交叉率,减小变异率。
2.改变交叉操作的方式传统的遗传算法采用单点交叉或多点交叉,然而这两种方式都容易产生局部最优解。
为了避免这种情况的发生,可以采用部分匹配交叉(PMX)或顺序交叉(OX)等其他交叉方式。
例如:PMX算法将父代个体随机选择两个基因片段,然后交换这两个基因片段中的元素,最后在生成的后代中进行局部搜索。
3.改进选取父代的方法传统的遗传算法采用轮盘赌法选择父代。
然而,轮盘赌法容易使得较优的个体被过度选中,导致种群收敛速度过慢。
因此,可以采用锦标赛选择法或随机选择的方式来选取父代。
例如:锦标赛选择法是在父代群体中随机选取一定数量的个体,然后从中选出拥有最优适应度值的个体作为父代,以提高种群收敛速度和全局最优解的质量。
4.引入局部搜索传统的遗传算法采用变异操作来增加种群的多样性,然而变异有时候也可能产生不良的后代。
因此,可以采用局部搜索来优化个体。
例如:基于变邻域搜索(VNS)的局部搜索算法能够较好地避免因变异操作导致的不良结果,使得个体逐步趋近全局最优解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3 旅行商问题3.1 旅行商问题概述3.1.1 旅行商问题的定义和数学模型① 定义旅行商问题(Traveling Salesman Problem ,简记TSP)是组合数学中一个古老而又困难的问题,它易于描述但至今尚未彻底解决,现己归入所谓的NP 完全问题类,经典提法为:有一货物推销员要去若干个城市推销货物,从城市1出发,经其余各城市一次,然后回到城市1,问选择怎样的行走路线,才能使总行程最短(各城市间距离为己知)。
该问题在图论的意义下就是所谓的最小Hamilton 圈问题,由于在许多领域中都有着广泛的应用,因而寻找其实际而有效的算法就显得颇为重要了。
遗憾的是,计算复杂性理论给予我们的结论却是,这种可能性尚属未知。
若设城市数目为n 时,那么组合路径数则为(n-1)!。
很显然,当城市数目不多时要找到最短距离的路线并不难,但随着城市数目的不断增大,组合路线数将呈指数级数规律急剧增长,以至达到无法计算的地步,这就是所谓的“组合爆炸问题”。
假设现在城市的数目增为20个,组合路径数则为(20-1)! ,如此庞大的组合数目,若计算机以每秒检索1000万条路线的速度计算,也需要花上386年的时间。
尽管现在计算机的计算速度大大提高,而且已有一些指数级的算法可精确地求解旅行商问题,但随着它们在大规模问题上的组合爆炸,人们退而求其次,转向寻找近似算法或启发式算法,经过几十年的努力,取得了一定的进展。
② 数学模型设(,)G V E =为赋权图,{1,2,}V n ="为顶点集,E 为边集,各顶点间距离为ij c ,已知(0,,,)ij ij c c i j V >=+∞∈,并设则旅行商问题的数学模型可写成如下的线性规划形式:ij ij i jMinZ c x ≠=∑1,(,)0,ij i j x ⎧=⎨⎩边在最优路线上其它,1,1,.1,{0,1},ij j i ij i jij i j S ij x i V x j V s t x K K V x i j V ≠≠∈⎧=∈⎪⎪=∈⎪⎨⎪≤−⊂⎪⎪∈∈⎩∑∑∑这里,K 为V 的所有非空子集,K 为集合K 中所含图G 的顶点个数。
前两个约束意味着对每个顶点而言,仅有一条边进出,后一约束则保证了没有任何子回路解的产生。
于是,满足上述约束的解构成了一条Hamilton 回路。
除此之外,模型还有其它一些等价的书写形式。
3.1.2 旅行商问题的分类旅行商问题按不同的分类方法可以分成为不同的种类。
① 据距离矩阵划分当,(,)ij ji c c i j V =∈时,问题被称为对称型旅行商问题。
反之,称为非对称型旅行商问题。
非对称型旅行商问题可以化为对称型旅行商问题,用对称型的方法求解。
当对所有,,[1,]i j k n ∈,有不等式ij jk ik c c c +≥成立时,问题被称为是满足三角形不等式的,简写成三角型旅行商问题。
三角形不等式在很多情况下是自动满足的,如:只要距离矩阵是由一度量矩阵导出的即可。
另一类自动满足的是闭包矩阵,ij c ⎡⎤⎣⎦是的[]ij c 闭包,是指在{1,2,}n "的完全图中,ij c 为边(,)i j 距离,则ij c 是i j →之最短路长。
一般而言,现实生活中的大多数问题都满足三角形不等式,它是旅行商问题中的一种主要类型。
个别不满足的,也可转换成其闭包问题,它们的旅行商问题解是等价的。
当ij c 是欧氏距离时,则称为欧氏距离的旅行商问题。
显然此类问题既是对称型旅行商问题也是三角型旅行商问题。
② 根据顶点的分布形态划分有均匀分布的(Uniform Points) 、聚集分布(Clustered Points)、随机距离矩阵(Random Matrices),此外还有旅行商问题库(TSPLI B)中的实际范例。
前三种都是人工模拟产生的旅行商问题,主要用于测试算法对不同分布形态的旅行商问题的表现,并计算算法的时间函数。
后一种实际范例才是人们关注的重点。
③ 根据距离矩阵在数据文件中的存储方式划分和来源划分MATRIX 型:距离矩阵直接给出。
EUC_ 2D 或CEIL_ 2D :给出顶点坐标,距离矩阵需计算才能得到。
CEO :给出顶点坐标,距离矩阵需计算才能得到,坐标来源于地理坐标。
3.1.3 旅行商问题的扩展旅行商问题的研究经过几十年发展,取得了一系列的成果。
除了经典的旅行商问题外,目前已引申出许多扩展形式,常见的有:① 最小哈密尔顿链的问题这是起点和终点不同的旅行商问题,前面提到的许多算法都可略作修改,用于求解该类问题。
② 瓶颈问题目标函数为{,,}ij ij Max c x ""且,,i j i j G ≠∈的旅行商问题。
③ 非对称旅行商问题距离矩阵非对称的旅行商问题。
④ 多人旅行商问题由多人完成环游的旅行商问题。
该问题可转换成等价的单人问题,只需将点1改为m 个虚拟点(1',2',')m "其间用边连接,距离为充分大,ij M c ∑∑;各虚拟点'i 到j 的距离'1i j j c c =,对新问题求解其旅行商问题后,从虚拟点'i 进入原网络再回到虚拟点'j 的那段路线即是m 人中某一个的环游路线。
⑤ 多目标旅行商问题若各边弧上有m 个权值,则使得哈密尔顿圈上相应的m 个目标值都尽可能小的解就称为多目标旅行商问题的(Pareto)有效解。
如实际问题中常常需要考虑:路程最短、时间最少、费用最省、风险最小等等多方面的因素。
由于多目标意义下的所谓最优解是一种“折衷解”、“非劣解”,因此,多目标旅行商问题解的含义为:假定有一哈密尔顿圈的解H ,若不存在任何其它回路解Q ,使得()(),1,2,k k Z Q Z H k m ≤=",其中至少有一个不等式严格成立(k Z 为相应的目标函数值),则H 为Pareto 解。
⑥ 依次排序问题这类问题是非对称旅行商问题,在给定的一系列顶点和距离矩阵下,寻找最短从顶点1到顶点n 哈密尔顿链,同时满足限制:某些顶点要在另一些顶点之前被连接。
⑦ 载货量受限制的选径问题给定n -1个顶点和一个仓库,已知顶点和顶点、顶点和仓库的距离。
卡车的载货量受限制,卡车每次在部分顶点和仓库之间往返,寻求一条经过所有顶点的最短路线。
一般来说,这些扩展问题都有特殊的不同于对称型旅行商问题的求解方法,但也可将它们转化成对称型旅行商问题求解。
3.1.4 研究旅行商问题的意义旅行商问题是一个NP完全问题,目前任何NP完全问题都不能用任何已知的多项式算法求解;若任何一个NP完全问题有多项式算法,则一切NP完全问题都有多项式算法。
由此,不少人猜测任何NP完全问题都没有多项式算法,但至今无人证明。
事实上,人们普遍认为,不发展全新的数学技术就证明不了这个猜想。
这样一种认识的实际意义就在于许多人相信,难计算是这样一类问题的固有性质,因此它们不可能用有效算法求解,而所有能精确求解NP完全问题的算法,在最坏情况下都需要指数级的时间。
另外,旅行商问题是一个理想化的问题,大多数对于此问题的研究都不是为了直接的实际应用,但这些研究可以经转化后用于许多现实的组合优化问题。
很自然地可以想到,旅行商问题的成果可以应用于运输和物流问题。
旅行商问题最早的应用是在上个世纪的四十年代,应用于校车路线的优化。
现在,旅行商问题在越来越多的领域得到应用。
①电路板钻孔进度的安排。
在这个应用当中,电路板上的孔代表旅行商问题中的城市,钻头从一个钻孔移动到另一个钻孔。
寻找最短路径变成了寻找最省时的钻头移动时间。
尽管目前钻机的工艺技术发展很块,但钻头的移动时间仍然是一个令人头疼的问题。
②基因测序。
Concorde是一种求解旅行商问题的程序。
美国国家卫生机构的研究人员利用这一程序来进行基因测序。
在这一应用中,局部的基区图谱作为城市,城市与城市的距离代表某张图谱与其它图谱相连的可能性。
研究人员试图寻找一种可能性最高的连接方式把这些局部的图谱合成为整张基因图谱。
③半导体的线路设计。
一家半导体生产厂家应用Concorde程序来优化半导体的线路设计,这样可以节省刻制半导体的时间,也能减少半导体电路消耗的能量。
④ 光缆的线路设计。
贝尔电话公司利用Concorde程序来设计光缆的铺设线路,同样的方法也应用于电话和电力线路的铺设当中。
⑤ 在机器人控制等其它方面,旅行商问题也有许多应用。
3.2 旅行商问题的求解3.2.1 旅行商问题的精确解法①可解特殊旅行商问题的精确算法对于旅行商问题的一些特殊情况,业已研究出一系列非常完美的结果,如:机器排序问题等。
由于可解情形的结果都是成熟的定理,因此严格来说已不属算法研究的范畴。
② 线性规划算法这是求解旅行商问题的最早的一种算法,主要是采用整数规划中的割平面法,即先求解模型中由前二个约束构成的松驰线性规划问题,然后通过增加不等式约束产生割平面,逐渐收敛到最优解。
Dantzig 等人早在1954年就求解过n= 42的旅行商问题最优解。
70年代中期对于TS 多面体理论的研究,产生了一些比较有效的不等式约束,如:子回路消去不等式、梳子不等式等等。
目前,常用的方法是先用近似算法来求得近似解,再将此近似解作为下限,用线性规划方法来精确求解或证明此下限为最优解。
③ 动态规划算法由于动态规划算法的时间复杂度为2(2)n O n ,空间复杂度为(2)n O n ,故除了很小规模的问题外,几乎不予采用。
④ 分支定界算法分支定界法是一种应用范围很广的搜索算法,它通过有效的约束界限来控制搜索进程,使之能向着状态空间树上有最优解的分支推进,以便尽快找出一个最优解。
该方法的关键在于约束界限的选取,不同的约束界限,可形成不同的分支定界法。
1)以分派问题为界通过求解相应的分派问题,得到旅行商问题的一个下界,以此进行分支定界搜索。
这是一种使用较多的分支定界算法。
2)以匹配问题为界通过求解相应的匹配问题,得到旅行商问题的一个下界,以此进行分支定界 搜索。
该方法适用于对称型旅行商问题。
3)以最小权1生成树问题为界通过求解相应的最小权1生成树问题,得到旅行商问题的一个下界,以此进 行分支定界搜索。
在此基础上,Held 和Karp(1970) 曾将问题加以转换,得到更紧的下界,有时甚至能将搜索树整个显示出来。
虽说分支定界法对于较大规模的问题并不十分有效,可有时却被用来求解近似解。
而且,将分支定界法与一些启发式算法相结合,常常能获得一些意外的成 功。
3.2.2 旅行商问题的近似解法由于精确式算法所能求解的问题规模非常有限,实际中使用的往往都是多项式阶数的近似算法或启发式算法。
算法的好坏用*/C C E ≤来衡量,C 为近似算法所得到的总行程,C*为最优总行程,E 为最坏情况下,近似解与最优解的总行程之比所不超过的上界值。