Tsp问题的几种算法的分析
- 格式:doc
- 大小:87.00 KB
- 文档页数:24
TSP问题的几种常用求解算法比较旅行商问题(Traveling Salesman Problem, TSP)是典型的组合优化问题,很多优化问题都可以直接或间接的转为为TSP问题,而且TSP问题已被证明具有NPC计算复杂性,有很大的求解难度,因此研究TSP问题的求解方法有着很大的实际意义。
本文旨在介绍求解TSP的几种常用解法,并结合实例比较这些算法的性能,为TSP的求解提供一些参考。
1 TSP问题描述TSP问题的数学表述为:一个有穷的城市集合C={C1,C2,…,Cm},对于每一对城市Ci,Cj∈C有距离d(Ci,Cj)∈R+。
问:经过C中所有城市的旅行路线,记为序列,是否存在最小的正数B,对所有可能的序列都有2 TSP问题几种常用求解方法TSP问题有着很多求解算法,主要有。
2.1 贪婪算法贪婪算法[2](Greedy algorithm)是求解大规模TSP问题的常用算法之一,是一种求解优化问题的简单、迅速的求解办法。
贪婪法有限考虑当前情况下最优的优化测度,自顶向下,逐步迭代,具有算法简单,耗时短的特点。
但贪婪算法的求解结果往往不是最优的,甚至可能与全局最优解间有不小的差距。
2.2 模拟退火算法模拟退火(Simulated Annealing,SA)算法是求解TSP问题的有效方法之一,容易编程实现,求解速度快。
模拟退火是一种全局优化算法,加入了随机状态模型,使算法以概率选择的方式逼近最优状态,其收敛性可以得到严格的理论证明。
模拟退火算法具有一整套完整的退火搜索计划,包括足够高的初始温度、缓慢的退火速度、大量的迭代次数及足够的概率扰动[3]。
2.3 遗传算法遗传算法(Genetic Algorithm,GA)是一种常用的智能算法,具有全局搜索能力,对TSP问题有良好的效果。
遗传算法是由Michigan大学的J.Holland教授于1975年提出,算法通常由编码、个体适应度评估和遗传运算三部分构成,其中遗传运算包括染色体复制、交叉、变异和倒位等[4]。
TSP问题的近似算法近似算法是解决优化问题的一种有效方法,它可以在较短时间内得到一个接近最优解的解,而不是花费大量时间去寻找最优解。
TSP问题(Traveling Salesman Problem)是一个经典的优化问题,它的目标是找到一条经过所有城市的最短路径。
这个问题是一个经典的NP难题,意味着在合理的时间内找到准确的最优解是不可能的,最多只能得到近似解。
因此,近似算法在TSP问题中具有重要的应用价值。
常见的近似算法包括贪心算法、局部搜索算法、动态规划算法等。
下面我们将介绍其中几种经典的算法。
1. 贪心算法贪心算法是一种基于贪心策略的近似算法。
它的基本思想是每次选择当前最优解,直到得到一个接近最优解的解。
在TSP问题中,贪心算法的思路是从起点出发,每次选择距离当前城市最近的城市,直到遍历所有城市。
但是这种贪心策略往往不能得到最优解,因为它可能陷入局部最优解。
2. 局部搜索算法局部搜索算法是一种基于局部优化的近似算法。
它的基本思想是从一个随机的解出发,不断地进行局部搜索,直到得到一个接近最优解的解。
在TSP问题中,局部搜索算法的思路是从一个随机的解出发,通过交换城市的顺序来不断优化当前解,直到达到一定的迭代次数或无法继续优化为止。
这种算法的优点是效率高,缺点是易陷入局部最优解。
3. 动态规划算法动态规划算法是一种基于状态转移的近似算法。
它的基本思想是将一个复杂问题分解成若干个子问题,通过按顺序解决子问题来求解原问题。
在TSP问题中,动态规划算法通过定义状态、状态转移方程和初始状态来求解最短路径。
其时间复杂度为O(n^2*2^n),因此不适用于大规模的问题。
总结以上是常见的几种近似算法,在实际运用中可以根据问题的特点选择合适的算法。
虽然这些算法不能得到准确的最优解,但它们可以在短时间内得到一个接近最优解的解,具有重要的实际应用价值。
TSP资料处理结果的可靠性评估方法TSP(Traveling Salesman Problem,旅行推销员问题)是组合优化问题中的一个经典问题,该问题要求在给定一系列城市和两两之间的距离矩阵之后,寻找一条最短的路径,使得旅行推销员能够访问每个城市一次并回到起始城市。
在解决TSP问题时,数据处理结果的可靠性评估是非常重要的。
下面将介绍几种常见的TSP数据处理结果的可靠性评估方法:1.基于启发式算法的评估方法:TSP问题的规模非常庞大,准确求解通常不可行。
因此,常常采用启发式算法求解,并通过比较不同算法得到的结果来进行评估。
常用的启发式算法包括贪婪算法、禁忌和遗传算法等。
可以通过运行不同的启发式算法多次,比较它们的结果来评估数据处理结果的可靠性。
2.比较与已知最优解的偏差:对于一些特定规模较小的问题,可以通过计算与已知最优解的偏差来评估数据处理结果的可靠性。
已知最优解可以通过暴力、精确求解或通过计算最优路径的上界等方法获得。
3.重复计算结果的评估方法:对于TSP问题,由于问题的复杂性,算法可能陷入局部最优。
因此,处理结果的可靠性评估需要对算法进行多次重复计算。
通过多次计算结果的均值、方差等统计指标来评估数据处理结果的可靠性。
4.交叉验证的评估方法:交叉验证是一种常用的机器学习中的评估方法,可以用于评估TSP数据处理结果的可靠性。
将数据分成训练集和测试集,训练集用于选择算法的参数和训练模型,测试集用于评估模型的性能。
通过多次随机划分训练集和测试集,计算评估指标的均值和方差,可以评估数据处理结果的可靠性。
5.对假设进行检验的评估方法:对于TSP问题,可以对一些关键假设进行检验来评估数据处理结果的可靠性。
例如,可以检验最优路径中每个城市只出现一次的假设,如果存在重复访问城市的情况,则说明结果不可靠。
综上所述,TSP数据处理结果的可靠性评估方法包括基于启发式算法的评估方法、比较与已知最优解的偏差、重复计算结果的评估方法、交叉验证的评估方法和对假设进行检验的评估方法等。
v1.0 可编辑可修改TSP的几种求解方法及其优缺点一、什么是TSP问题旅行商问题,简称TSP,即给定n个城市和两两城市之间的距离,要求确定一条经过各城市当且仅当一次的最短路线。
其图论描述为:给定图G=(V,A),其中V为顶点集,A为各顶点相互连接组成的边集,设D=(dij)是由顶点i和顶点j之间的距离所组成的距离矩阵,要求确定一条长度最短的Hamilton回路,即遍历所有顶点当且仅当一次的最短距离。
旅行商问题可分为如下两类:1)对称旅行商问题(dij=dji,Πi,j=1,2,3,⋯,n);2)非对称旅行商问题(dij≠dji,ϖi,j=1,2,3,⋯,n)。
非对称旅行商问题较难求解,我们一般是探讨对称旅行商问题的求解。
若对于城市V={v1,v2,v3,⋯,v n}的一个访问顺序为T={t1,t2,t3,⋯,t i,⋯,t n},其中t i∈V(i=1,2,3,⋯,n),且记t n+1=t1,则旅行商问题的数学模型为:minL=。
TSP是一个典型的组合优化问题,并且是一个NP完全难题,是诸多领域内出现的多种复杂问题的集中概括和简化形式,并且已成为各种启发式的搜索、优化算法的间接比较标准。
因此,快速、有效地解决TSP有着重要的理论价值和极高的实际应用价值。
二、主要求解方法基于TSP的问题特性,构造型算法成为最先开发的求解算法,如最近邻点、最近合并、最近插入、最远插入、最近添加、贪婪插入等。
但是,由于构造型算法优化质量较差,迄今为止已开发了许多性能较好的改进型搜索算法,主要有:1)模拟退火算法2)禁忌搜索算法3)Hopfield神经网络优化算法4)蚁群算法5)遗传算法6)混合优化策略模拟退火算法方法1)编码选择:采用描述TSP解的最常用的一种策略——路径编码。
2)SA状态产生函数的设计:对于基于路径编码的SA状态产生函数操作,可将其设计为:①互换操作(SWAP);②逆序操作(INV);③插入操作(INS)。
TSP的几种求解方法及其优缺点一、什么是TSP问题旅行商问题,简称TSP,即给定n个城市和两两城市之间的距离,要求确定一条经过各城市当且仅当一次的最短路线。
其图论描述为:给定图G=(V,A),其中V为顶点集,A为各顶点相互连接组成的边集,设D=(dij)是由顶点i和顶点j之间的距离所组成的距离矩阵,要求确定一条长度最短的Hamilton回路,即遍历所有顶点当且仅当一次的最短距离。
旅行商问题可分为如下两类:1)对称旅行商问题(dij=dji,Πi,j=1,2,3,?,n);2)非对称旅行商问题(dij≠dji,?i,j=1,2,3,?,n)。
非对称旅行商问题较难求解,我们一般是探讨对称旅行商问题的求解。
若对于城市V={v1,v2,v3,?,v n}的一个访问顺序为T={t1,t2,t3,?,t i,?,t n},其中t i∈V(i=1,2,3,?,n),且记t n+1=t1,则旅行商问题的数学模型为:minL=。
TSP是一个典型的组合优化问题,并且是一个NP完全难题,是诸多领域内出现的多种复杂问题的集中概括和简化形式,并且已成为各种启发式的搜索、优化算法的间接比较标准。
因此,快速、有效地解决TSP有着重要的理论价值和极高的实际应用价值。
二、主要求解方法基于TSP的问题特性,构造型算法成为最先开发的求解算法,如最近邻点、最近合并、最近插入、最远插入、最近添加、贪婪插入等。
但是,由于构造型算法优化质量较差,迄今为止已开发了许多性能较好的改进型搜索算法,主要有:1)模拟退火算法2)禁忌搜索算法3)Hopfield神经网络优化算法4)蚁群算法5)遗传算法6)混合优化策略模拟退火算法方法1)编码选择:采用描述TSP解的最常用的一种策略——路径编码。
2)SA状态产生函数的设计:对于基于路径编码的SA状态产生函数操作,可将其设计为:①互换操作(SWAP);②逆序操作(INV);③插入操作(INS)。
3)SA状态接受函数的设计:min{1,exp(-△/t)}>random[0,1]准则是作为接受新状态的条件最常用的方案,其中△为新旧状态的目标值差,t为”温度”。
TSP问题综述及相应求解算法研究摘要: TSP 问题是组合优化中的经典问题。
其解决方法有局部优化方法和一些启发式算法。
关键词:TSP;2 - 交叉法算法;L in - Kernighan算法旅行商问题,即TSP问题(Traveling Salesman Problem)是数学领域中著名问题之一。
假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路经的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。
路径的选择目标是要求得的路径路程为所有路径之中的最小值。
它被证明是NP——难(NP——hard)问题并与VLS制造,输油管道铺设,电路布线等问题有关,学术界对该问题的认识日益深入。
由于求其确定解的时间是指数型的,不易掌握,因而对其近似算法的研究一直是算法设计中的一个重要课题。
目前已经有很多关于求解TSP近似最优解的算法。
主要包括:一些局部优化算法,如:近邻法(nearest - neighbor)最近插入(nearest insertion)、最远插入法(farthest insertion)、贪心法(greedy)、分枝定界法(branch and bound)、填空曲线法(space - filling curve )、Karp 法、2 - 交叉法(2 - op t )、k交叉法及L in - Kernighan 法等;一些启发式算法如模拟退火算法[3 ] 、遗传算法[4 ] 、蚁群算法[5 ] 、免疫算法[6 ] 、神经网络等。
下面就来分析一下TSP问题的各种算法。
( 1) 2 - op t算法它从城市的一个随机排列(称为路径T)开始并试图去改善它。
T 的邻域定义为交换T 中不相邻的两条边得到的所有路径的集合。
这种移动称为 2 - 交叉法(2 - op t),如图1、图2所示。
图1如果cost (0, 2) + cost (5, 6) > cost (0, 5) + cost (2, 6) ,即城市0和2 之间的距离与5和6之间的距离和大于0和5与2和6之间的距离和,那么路径T ( 0—2—4—1—8—7—3—5—6—9—0 )就替换(0—5—3—7—8—1—4—2—6—9—0) ,如图2所示。
路线设计算法路线设计算法通常用于解决旅行商问题(TSP,Traveling Salesman Problem),即在给定一组城市和各城市之间的距离(或成本)情况下,找到一条最短的路径,使得旅行商可以经过每个城市一次并返回起点城市。
以下是几种常见的路线设计算法:穷举法(Brute Force):穷举法是一种简单但非常耗时的方法,它遍历所有可能的路径组合,并计算每一条路径的总距离,最后选择最短路径作为解决方案。
然而,随着城市数量的增加,穷举法的计算时间呈指数增长,因此只适用于小规模的问题。
贪心法(Greedy Algorithm):贪心法是一种启发式算法,它在每一步选择当前最优的解决方案,并希望通过这种局部最优解来达到全局最优解。
在TSP中,贪心法可以从一个起始城市开始,每次选择距离最近的未访问过的城市作为下一个目的地,直到所有城市都被访问过,然后返回起始城市。
虽然贪心法计算速度较快,但结果不一定是最优解,因为它可能会陷入局部最优解而无法达到全局最优解。
动态规划法(Dynamic Programming):动态规划法是一种适用于TSP的精确解法,它通过将问题划分为子问题,并保存每个子问题的最优解,然后根据已解决的子问题来逐步解决更大规模的问题。
在TSP中,动态规划法使用一个二维数组来保存每一对城市之间的最短距离,并利用递推关系式来计算最优解。
尽管动态规划法能够找到最优解,但它的计算复杂度为O(n^2 * 2^n),其中n是城市的数量,因此在大规模问题上可能不太实用。
遗传算法(Genetic Algorithm):遗传算法是一种启发式优化算法,模拟了自然界中的进化过程。
在TSP中,遗传算法通过构建初始种群(即路径的集合),然后使用交叉、变异等操作来不断演化种群,直到找到满足停止条件的最优解。
遗传算法通常能够在较短的时间内找到较好的解决方案,尤其是对于大规模问题而言。
以上是一些常见的路线设计算法,每种算法都有其优缺点,具体选择取决于问题的规模、精确度要求和计算资源等因素。
TSP的几种求解方法及其优缺点TSP(Traveling Salesman Problem)是一种NP-hard问题,其目标是找到一条路径,使得旅行商经过所有城市并返回原始城市的总距离最小。
由于TSP在实际应用中具有广泛的应用,很多研究者提出了多种方法来解决TSP问题。
本文将介绍几种常见的TSP求解方法及其优缺点。
1.枚举法枚举法是最简单直观的方法,它遍历所有可能的路径,并选择总距离最小的路径作为最优解。
由于TSP问题的解空间随问题规模呈指数级增长,这种方法只适用于规模较小的问题。
枚举法的优点是保证找到最优解,缺点是耗时较长。
2.最近邻法最近邻法从一个起始城市出发,每次选择与当前城市距离最近的未访问城市作为下一个城市。
直到所有城市都被访问一遍,并返回原始城市。
最近邻法的优点是简单易实现,缺点是容易陷入局部最优解,从而得不到整体最优解。
3.插入法插入法从初始路径开始,将未访问的城市不断插入到已访问城市之间,直到所有城市都被访问一遍。
插入方法有多种,比如最短边插入、最长边插入和最佳位置插入等。
插入法的优点是相对于最近邻法来说,可以得到更好的解。
缺点是算法复杂度较高,计算时间较长。
4.遗传算法遗传算法是一种群体智能算法,模拟生物进化的过程,通过遗传操作寻找优秀的解。
在TSP问题中,遗传算法可以将城市路径看作染色体,并通过选择、交叉和变异等操作进行优化。
遗传算法的优点是能够快速找到次优解,并且对于规模较大的问题也适用。
缺点是需要调节大量参数,算法收敛速度较慢。
5.动态规划动态规划是一种由上而下的分治思想,将原问题分解为若干子问题,通过求解子问题的最优解来求解原问题。
在TSP问题中,可以通过建立状态转移方程来求解最优路径。
动态规划的优点是求解过程中可以剪枝,避免重复计算,能够得到精确解。
缺点是算法时间复杂度较高,不适用于大规模问题。
以上是几种常见的TSP求解方法及其优缺点。
不同的方法适用于不同的问题规模和实际应用场景。
TSP问题的算法研究简介旅行商问题(Traveling Salesman Problem,简称TSP)是指在旅行商(salesman)需要依次拜访多个城市,并最终返回起点城市的问题。
TSP是一个著名的NP-hard问题,在实际应用中有着广泛的应用。
本文将对TSP问题的算法研究进行探讨。
问题描述给定n个城市之间的距离矩阵D(n*n),以及起点城市,要求找到一条最短的路径,使得旅行商能够依次经过每个城市,并最终回到起点城市。
传统方法基于暴力搜索的穷举算法最简单直观的解决TSP问题的方法是穷举法。
即尝试遍历所有可能的路径,计算每条路径的总长度,并找出最短路径。
但这种方法的时间复杂度为O(n!),随着城市数量的增加,计算量呈指数级增长,不适用于大规模问题。
动态规划算法动态规划算法可以用于求解TSP问题的近似解。
其基本思想是将问题划分为子问题,并利用子问题的最优解求解原问题的最优解。
但是由于TSP问题的子问题形态特殊,采用动态规划算法时需要引入状态压缩技巧,以减小问题规模,提高求解效率。
进化算法遗传算法遗传算法是一种基于进化和遗传机制的优化算法,常用于解决TSP问题。
其基本思想是模拟生物进化中的遗传、突变、选择等过程,通过不断迭代优化求解策略,最终找到最优解。
遗传算法的步骤如下:1.初始化一组随机的路径作为初始种群。
2.计算每个路径的适应度评估值,即路径长度。
3.使用选择操作选取一部分适应度较高的个体作为父代。
4.使用交叉操作生成子代,在子代中引入新的解,并避免陷入局部最优解。
5.使用变异操作对子代进行突变,增加种群的多样性。
6.计算新种群中每个路径的适应度评估值。
7.重复步骤3-6,直到满足停止条件。
蚁群算法蚁群算法是基于蚁群觅食行为的启发式算法,常用于求解TSP问题。
其基本思想是通过模拟蚂蚁在寻找食物过程中的行为,不断更新路径信息素,从而实现解的优化。
蚁群算法的步骤如下:1.初始化一群蚂蚁,每只蚂蚁在一个城市开始。
摘要本文分析比较了tsp问题的动态规划算法,分支界限法,近似等算法。
分析了旅行商问题的时间度特点,针对启发式算法求解旅行商问题中存在的一些问题提出了改进算法。
此算法将群体分为若干小子集,并用启发式交叉算子,以较好利用父代个体的有效信息,达到快速收敛的效果,实验表明此算法能提高寻优速度,解得质量也有所提高。
关键词:旅行商问题TSPAbstractthis paper analyzed the time complexity of traveling salesman problem,then put forward some imprivement towards the genetic algorithm for solving this problen: divding the population into some small parent individual well.so it can quickly get into convergence, the experimental result indicates the impwoved algorithm can accelerate the apeed of finding solution and improve the precision.Keywords traveling salesman problem; genetic algorithm; subset; henristic crossover operator目录1、摘要--------------------------------------------------------------12、Abstract---------------------------------------------------------13、Tsp问题的提法------------------------------------------------24、回溯法求Tsp问题--------------------------------------------35、分支限界法求Tsp问题--------------------------------------76、近似算法求解Tsp问题-------------------------------------107、动态规划算法解Tsp问题----------------------------------12引言tsp问题刚提出时,不少人都认为很简单。
后来,人们实践中才逐步认识到,这个问题只是叙述简单,易于为人所理解而其计算复杂性却是问题的输入规模的指数函数,属于NP完全问题。
Tsp问题的实现思想已被应用到交通,管理等很多领域所以有必要探讨Tsp问题的算法。
这里给出Tsp问题的动态规划算法,回溯算法,分支限界法,近似算法,和改进的启发式算法,以及它们之间的分析比较。
正文:旅行售货员问题的提法是:某售货员要到若干城市去推销商品,已知各城市之间的路程(或旅费)。
他要选定一条从驻地出发,经过每个城市一遍,最后回到驻地的路线,使总的路程(或旅费)最小。
设G=(V,E) 是一个带权图。
图中各边的费用(权)为正数。
图中的一条周游路线是包括V中的每个顶点在内的一条回路。
周游路线的费用是这条路线上所有边的费用之和。
旅行售货员问题要在图G中找到费用最小的周游路线。
图1-1:回溯法:(1)回溯法的基本思想:确定了解空间的组织结构后,回溯法从开始结点(根结点)出发,以深度优先方式搜索整个解空间。
这个开始结点成为活结点,同时也成为当前的扩展结点处,搜索向纵深方向移至一个新结点。
这个新结点即成为新的活结点,并为当前扩展结点。
如果在当前的扩展结点处不能再向纵深方向移动,则当前扩展结点就成为死结点。
此时,应往回移动(回溯)至最近的一个活结点处,并使这个活结点成为当前的扩展结点。
回溯法以这种工作方式递归地在解空间中搜索,直至找到所要求的解或解空间中已无活结点时为止。
回溯法搜索解空间树时,通常采用两种则略避免无效搜索,提高回溯法的搜索效率。
其一是用约束函数在扩展结点处减去不满足约束的子数;其二是用界限函数剪去得不到最优解的子数。
这两类函数统称为剪支函数。
(2)回溯法解tsp问题:旅行售货员问题的解空间可以组织成一棵树,从书的根结点到任一叶结点的路径定义了图G的一条周游路线。
图5-3是当n=4时解空间树的示例。
其中从根结点A到叶结点L的路径上边的标号组成一条周游路线1,2,3,4,1。
而从根结点A到叶结点O的路径则表示周游路线1,3,4,2,1.图G的每一条周游路线都恰好对应于解空间树中一条从根结点到叶结点的路径。
因此,解空间树中叶结点个数为【(n-1)!】。
图1-2:对于图1-2的图G,用回溯法找最小费用路线时,从解空间树的根结点A出发,搜索至B,C,F,L.在叶结点L处记录找到的周游路线1,2,3,4,1,该周游路线的费用为59.从叶结点L返回至最近活结点F处。
由于F处已没有可扩展结点。
算法又返回到结点C处。
结点C成为新扩展结点,由新扩展结点,算法再移至结点G后又移至结点M,得到周游路线1,2,4,3,1,其费用为66.这个费用不比已有周游路线1,2,3,4,1的费用更小。
因此舍弃该结点。
算法又依次返回至结点G,C,B。
从结点B,算法继续搜索至结点D,H,N。
在叶结点N处,相应的周游路线1,23,2,4,1的费用为25.它是当前找到的最好的一条周游路线。
从结点N算法返回至结点H,D,然后在从结点D开始D开始继续向纵深搜索至结点O。
以此方法算法继续搜索遍整个解空间,最终得到最小费用周游路线1,3,2,4,1.在递归算法Backtrack中,当i=n时,当前扩展结点是排列数的叶结点的父结点。
此时算法检测图G是否存在一条从顶点x【n-1]到顶点x[n]的边和一条从顶点x[n]到顶点1的边如果这两条边都存在,则找到一条旅行售货员回路。
此时算法还需要判断这条回路的费用是否优于已找到的当前最优回路的费用bustc。
如果是则必须更新当前最优值bestc和当前最优解bestx。
当i<n时,当前扩展结点位于排列树的第i-1层。
图G 中存在从顶点xi-1]到顶点x[i]的边时,x[l,:i]构成图G的一条路径,且当x[;:i]的费用小于当前最优值时算法进入排列树的第i层,否则将剪去相应的子数。
算法中用变量cc记录当前路径x【l:i]的费用。
解旅行售货员问题的回溯算法可描述如下:Template<class Type>Class Traveling{friend Type tSP(int * *,int[],int,Type);private:void Backtrack(int i);int n,*x,*bestx;Type* *a,cc,bestx;Type * *a,cc,bestc,NoEdge;};Template<class Type>V oid Traveling<Type>::Backtrack(int i){If(i==n){If(a[x[n-1]])[x[n]!=NoEdge&&a[x[n]][1]!=N0Edge&&(cc+a [x[n-1]][x[n]+a[x[n][1]<best||bestc==NoEdge)){for(int j=1;j<=n;j++)bestx[j]=x[j];bestc=cc+a[x[n-1]][x[n]]+a[x[n]][1];}}else{for(int j=i;j<=n;j++)if(a[x[i-1][x[j]]!=NoEdge&&(cc+a[x[i-1]][x[j]]<bestc||bestc ==NoEdge)]{Swap(x[i],x[j];cc+=a[x[i-1]][x[[i]];Backtrack(i+10;cc-=a[x[i-1]][x[i]];swap(x[i],x[j]);}}}分支界限法:(1)分支界限法的基本思想:分支界限法以广度优先或以最小耗费(最大效益)优势的方式搜索问题的解空间树。
问题的解空间树是表示问题解空间的一棵有序树,常见的有子集树和排列树。
在搜索问题的解空间树时,分支界限法与回溯法的主要区别在于他们对当前扩展结点所采用的扩展方式不同。
在分支界限法中,每一个活结点只有一次机会成为扩展结点。
活结点一旦成为扩展结点,就一次性产生其所有儿子结点。
在这些儿子结点中,导致不可行解或导致非最优解得儿子结点被舍弃,其余儿子结点被加入活结点表中。
此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。
这个过程一直持续到找到所需的解或活结点表为空时为止。
(2)从活结点表中选择下一个扩展结点的不同方式导致不同的分支界限法。
最常用的有两种方式1.方式队列式(FIFO)分支界限法队列式分支界限法将活结点组织成一个队列,并按队列的先进先出原则选择下一个结点为当前扩展结点。
2.优先队列式分支界限法优先队列式的分支界限法将活结点表组织成一个优先队列,并按优先队列中规定的结点优先级选取优先级最高的下一个结点成为当前扩展结点。
(3)分支法解tsp问题:考察4城市旅行售货员的例子,如图5-3所示,该问题的解空间树是一棵排列树。
解次问题的队列式分支界限法以排列树中结点B作为初始扩展结点。
此时,活结点队列为空。
由于从图G的顶点1到顶点2,3和4均有边相连,所以结点B的儿子结点C,D,E均为可行结点,它们被加入到活结点队列中,并舍去当前扩展结点B。
当前活结点队列中的队首结点C成为下一个扩展结点。
由于图G的顶点2到顶点3和4有边相连,故结点C的2个儿子结点F和G均为可行结点,从而被加入到活结点队列中。
接下来,结点D和结点E相继成为扩展结点而被扩展。
此时活结点队列中的结点依次是F,G,H,I,J,K。
算法描述:算法开始时创建一个最小堆,用于表示活结点优先队列。
堆中每个结点的子树费用的下界lcost值是优先队列的优先级。
接着算法计算出图中每个顶点的最小费用出边并用minout记录。
如果所给的有向图中某个顶点没有出边,则该图不可能有回路,算法即告结束。
如果每个顶点都有出边,则根据计算出的minout作算法初始化。
算法的while循环体完成对排列树内部结点的扩展。
对于当前扩展结点,算法分2种情况进行处理:1、首先考虑s=n-2的情形,此时当前扩展结点是排列树中某个叶结点的父结点。
如果该叶结点相应一条可行回路且费用小于当前最小费用,则将该叶结点插入到优先队列中,否则舍去该叶结点。