tsp问题算法
① 阆椾紶绠楁硶瑙e喅TSP闂棰
1885骞村勾锛岃揪灏旀枃鐢ㄨ嚜铹堕夋嫨𨱒ヨВ閲婄墿绉岖殑璧锋簮鍜岀敓鐗╃殑杩涘寲銆
杈惧皵鏂囩殑镊铹堕夋嫨瀛﹁村寘𨰾涓変釜鏂归溃锛
涓娄笘绾20骞翠唬锛屼竴浜涘﹁呯敤缁熻$敓鐗╁﹀拰绉岖兢阆椾紶瀛﹂吨鏂拌В閲婅揪灏旀枃镊铹堕夋嫨鐞呜猴纴褰㈡垚鐜颁唬缁煎悎杩涘寲璁恒
绉岖兢阆椾紶瀛﹁や负锛
阆椾紶绠楁硶涓涓庣敓鐗╁︾浉鍏崇殑姒傚康鍜屾湳璇涓庝紭鍖栭梾棰树腑镄勬弿杩扮殑鍏崇郴锛
涓娄笘绾60骞翠唬涓链燂纴Holland鎻愬嚭浣崭覆缂栫爜鎶链銆
杩欑嶆妧链阃傜敤浜庡彉寮傚拰浜ゅ弶镎崭綔锛岃屼笖寮鸿皟灏嗕氦鍙変綔涓轰富瑕佺殑阆椾紶镎崭綔銆
Holland灏呜ョ畻娉旷敤浜庤嚜铹跺拰浜哄伐绯荤粺镄勮嚜阃傚簲琛屼负镰旂┒涓锛屽湪1975鍑虹増浜嗗紑鍒涙ц宪浣溾淎daptation in Natural and Artifical System钬濄
涔嫔悗锛屼粬灏嗙畻娉曞簲鐢ㄥ埌浼桦寲浠ュ强瀛︿範涓锛屽苟灏嗗叾锻藉悕涓洪仐浼犵畻娉曪纸绠绉癎A锛夈
阆椾紶绠楁硶锘烘湰镐濊矾锛
娴佺▼锲撅细
链甯哥敤绛栫暐锛氲矾寰勭紪镰
鐩存帴閲囩敤锘庡竞鍦ㄨ矾寰勪腑镄勪綅缃𨱒ユ瀯阃犵敤浜庝紭鍖栫殑鐘舵併
渚嬶细涔濆煄甯俆SP闂棰桡纴璺寰勶细5-4-1-7-9-8-6-2-3
璺寰勭紪镰侊细(5 4 1 7 9 8 6 2 3)
杈揿叆锛
10锘庡竞鍧愭爣涓猴细
(41, 94)锛(37, 84)锛(54, 67)锛(25, 62)锛(7, 64)锛 (2, 99)锛(68, 58)锛(71, 44)锛(54, 62)锛 (83, 69)
杩愯岀粨鏋滐细
python婧愮爜锛 https://github.com/wangjiosw/GA-TSP
GA鏄涓绉嶉氱敤镄勪紭鍖栫畻娉曪纴瀹幂殑浼樼偣链夛细
闅忕潃璁$畻链烘妧链镄勫彂灞曪纴GA镒堟潵镒埚缑鍒颁汉浠镄勯吨瑙嗭纴骞跺湪链哄櫒瀛︿範銆佹ā寮忚瘑鍒銆佸浘镀忓勭悊銆佺炵粡缃戠粶銆佷紭鍖栨带鍒躲佺粍钖堜紭鍖栥乂LSI璁捐°侀仐浼犲︾瓑棰嗗烟寰楀埌浜嗘垚锷熷簲鐢ㄣ
② tSp Concorder算法原理
tsp问题遗传算法将多目标按照线性加权的方式转化为单目标,然后应用传统遗传算法求解
其中w_i表示第i个目标的权重,f_k表示归一化之后的第i个目标值。我们很容易知道,这类方法的关键是怎么设计权重。比如,Random Weight Genetic Algorithm (RWGA) 采用随机权重的方式,每次计算适应度都对所有个体随机地产生不同目标的权重,然后进行选择操作。Vector-Evaluated Genetic Algorithm (VEGA) 也是基于线性加权的多目标遗传算法。如果有K个目标,VEGA 会随机地将种群分为K个同等大小子种群,在不同的子种群按照不同的目标函数设定目标值,然后再进行选择操作。VEGA 实质上是基于线性加权的多目标遗传算法。VEGA 是第一个多目标遗传算法,开启了十几年的研究潮流。
1.TSP问题是指假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。本文使用遗传算法解决att30问题,即30个城市的旅行商问题。旅行商问题是一个经典的组合优化问题。一个经典的旅行商问题可以描述为:一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要经过所有城市后,回到出发地。应如何选择行进路线,以使总的行程最短。从图论的角度来看,该问题实质是在一个带权完全无向图中,找一个权值最小的Hamilton回路。由于该问题的可行解是所有顶点的全排列,随着顶点数的增加,会产生组合爆炸,它是一个NP完全问题。TSP问题可以分为对称和不对称。在对称TSP问题中,两座城市之间来回的距离是相等的,形成一个无向图,而不对称TSP则形成有向图。对称性TSP问题可以将解的数量减少了一半。所以本次实验的TSP问题使用att48数据,可在tsplib中下载数据包。演化算法是一类模拟自然界遗传进化规律的仿生学算法,它不是一个具体的算法,而是一个算法簇。遗传算法是演化算法的一个分支,由于遗传算法的整体搜索策略和优化计算是不依赖梯度信息,所以它的应用比较广泛。我们本次实验同样用到了遗传算法(用MATLAB编写)来解决TSP问题。
③ TSP解决之道——蚁群算法
蚁群算法java实现以及TSP问题蚁群算法求解
蚁群算法原理与应用讲解
蚁群算法原理与应用1 -自然计算与群体智能
1、蚁群算法(Ant Clony Optimization,ACO)是一种群智能算法,它是由一群无智能或有轻微智能的个体(Agent)通过相互协作而表现出智能行为,从而为求解复杂问题提供了一个新的可能性。
2、是一种仿生学的算法,是由自然界中蚂蚁觅食的行为而启发。(artificial ants;双桥实验)
3、运作机理:当一定路径上通过的蚂蚁越来越多时,其留下的信息素轨迹也越来越多,后来蚂蚁选择该路径的概率也越高,从而更增加了该路径的信息素强度,而强度大的信息素会吸引更多的蚂蚁,从而形成一种正反馈机制。
4、蚁群算法欧化过程中的两个重要原则:
a、蚂蚁在众多路径中转移路线的选择规则。
b、全局化信息素更新规则。信息素更新的实质就是人工蚂蚁根据真实蚂蚁在访问过的边上留下的信息素和蒸发的信息素来模拟真实信息素数量的变化,从而使得越好的解得到越多的增强。这就形成了一种自催化强化学习(Autocatalytic Reinforcement Learning)的正反馈机制。
1、描述:蚂蚁数量m;城市之间的信息素矩阵pheromone;每次迭代的m个蚂蚁的最短路径 BestLength;最佳路径BestTour。 每只蚂蚁都有 :禁忌表(Tabu)存储已访问过的城市,允许访问的城市表(Allowed)存储还可以访问的城市,矩阵( Delta )来存储它在一个循环(或者迭代)中给所经过的路径释放的信息素。
2、 状态转移概率 :在搜索过程中,蚂蚁根据各条路径上的信息量及路径的启发信息来计算状态转移概率。在t时刻蚂蚁k由元素(城市)i转移到元素(城市)j的状态转移概率:
τij (t) :时刻路径(i, j)上的信息量。ηij=1/dij :启发函数。
α为信息启发式因子 ,表示轨迹的相对重要性,反映了蚂蚁在运动过程中积累的信息在蚂蚁运动时所起的作用,其值越大,则该蚂蚁越倾向于选择其它蚂蚁经过的路径,蚂蚁之间的协作性越强;
β为期望启发式因子 ,表示能见度的相对重要性,反映蚂蚁在运动过程中启发信息在蚂蚁选择路径中的受重视程度,其值越大,则该状态状态转移概率越接近于贪心规则;
3、 息素更新规则 :
ρ表示信息素挥发系数;Δτij(t)表示本次循环中路径(i, j)上的信息素增量,初始时刻Δτij(t) =0。
4、三种信息增量计算方法:
区别:第一种利用了全局信息,在走一圈后更新。二、三中都利用的是局部信息。通常使用第一种。
5、TSP中流程图
④ 退火算法的应用领域及示例
作为模拟退火算法应用,讨论旅行商问题(Travelling Salesman Problem,简记为TSP):设有n个城市,用数码1,…,n代表。城市i和城市j之间的距离为d(i,j) i,j=1,…,n.TSP问题是要找遍访每个域市恰好一次的一条回路,且其路径总长度为最短.。
求解TSP的模拟退火算法模型可描述如下:
解空间 解空间S是遍访每个城市恰好一次的所有回路,是{1,……,n}的所有循环排列的集合,S中的成员记为(w1,w2,……,wn),并记wn+1= w1。初始解可选为(1,……,n)
目标函数 此时的目标函数即为访问所有城市的路径总长度或称为代价函数:
我们要求此代价函数的最小值。
新解的产生 随机产生1和n之间的两相异数k和m,
若k<m,则将
(w1,w2,…,wk,wk+1,…,wm,…,wn)
变为:
(w1,w2,…,wm,wm-1,…,wk+1,wk,…,wn).
如果是k>m,则将
(w1,w2,…,wm,wm+1,…,wk,…,wn)
变为:
(wm,wm-1,…,w1,wm+1,…,wk-1,wn,wn-1,…,wk).
上述变换方法可简单说成是“逆转中间或者逆转两端”。
也可以采用其他的变换方法,有些变换有独特的优越性,有时也将它们交替使用,得到一种更好方法。
代价函数差 设将(w1,w2,……,wn)变换为(u1,u2,……,un),则代价函数差为:
根据上述分析,可写出用模拟退火算法求解TSP问题的伪程序:
Procere TSPSA:
begin
init-of-T; { T为初始温度}
S={1,……,n}; {S为初始值}
termination=false;
while termination=false
begin
for i=1 to L do
begin
generate(S′form S); { 从当前回路S产生新回路S′}
Δt:=f(S′))-f(S);{f(S)为路径总长}
IF(Δt<0) OR (EXP(-Δt/T)>Random-of-[0,1])
S=S′;
IF the-halt-condition-is-TRUE THEN
termination=true;
End;
T_lower;
End;
End
模拟退火算法的应用很广泛,可以较高的效率求解最大截问题(Max Cut Problem)、0-1背包问题(Zero One Knapsack Problem)、图着色问题(Graph Colouring Problem)、调度问题(Scheling Problem)等等。 模拟退火算法的应用很广泛,可以求解NP完全问题,但其参数难以控制,其主要问题有以下三点:
⑴ 温度T的初始值设置问题。
温度T的初始值设置是影响模拟退火算法全局搜索性能的重要因素之一、初始温度高,则搜索到全局最优解的可能性大,但因此要花费大量的计算时间;反之,则可节约计算时间,但全局搜索性能可能受到影响。实际应用过程中,初始温度一般需要依据实验结果进行若干次调整。
⑵ 退火速度问题。
模拟退火算法的全局搜索性能也与退火速度密切相关。一般来说,同一温度下的“充分”搜索(退火)是相当必要的,但这需要计算时间。实际应用中,要针对具体问题的性质和特征设置合理的退火平衡条件。
⑶ 温度管理问题。
温度管理问题也是模拟退火算法难以处理的问题之一。实际应用中,由于必须考虑计算复杂度的切实可行性等问题,常采用如下所示的降温方式:
T(t+1)=k×T(t)
式中k为正的略小于1.00的常数,t为降温的次数 优点:计算过程简单,通用,鲁棒性强,适用于并行处理,可用于求解复杂的非线性优化问题。
缺点:收敛速度慢,执行时间长,算法性能与初始值有关及参数敏感等缺点。
经典模拟退火算法的缺点:
⑴如果降温过程足够缓慢,多得到的解的性能会比较好,但与此相对的是收敛速度太慢;
⑵如果降温过程过快,很可能得不到全局最优解。
模拟退火算法的改进
⑴ 设计合适的状态产生函数,使其根据搜索进程的需要
表现出状态的全空间分散性或局部区域性。
⑵ 设计高效的退火策略。
⑶ 避免状态的迂回搜索。
⑷ 采用并行搜索结构。
⑸ 为避免陷入局部极小,改进对温度的控制方式
⑹ 选择合适的初始状态。
⑺ 设计合适的算法终止准则。
也可通过增加某些环节而实现对模拟退火算法的改进。
主要的改进方式包括:
⑴ 增加升温或重升温过程。在算法进程的适当时机,将温度适当提高,从而可激活各状态的接受概率,以调整搜索进程中的当前状态,避免算法在局部极小解处停滞不前。
⑵ 增加记忆功能。为避免搜索过程中由于执行概率接受环节而遗失当前遇到的最优解,可通过增加存储环节,将一些在这之前好的态记忆下来。
⑶ 增加补充搜索过程。即在退火过程结束后,以搜索到的最优解为初始状态,再次执行模拟退火过程或局部性搜索。
⑷ 对每一当前状态,采用多次搜索策略,以概率接受区域内的最优状态,而非标准SA的单次比较方式。
⑸ 结合其他搜索机制的算法,如遗传算法、混沌搜索等。
⑹上述各方法的综合应用。
⑤ 爬山算法(Hill Climbing)解决旅行商问题(TSP)
旅行商问题 TSP(Travelling Salesman Problem)是数学领域中着名问题之一。
TSP问题被证明是 NP完全问题 ,这类问题不者宽腔能用精确算法实现,而需要使用相似算法。
TSP问题分为两类: 对称TSP (Symmetric TSP)以及 非对称TSP (Asymmetric TSP)
本文解决的是对称TSP
假设:A表示城市A,B表示城市B,D(A->B)为城市A到城市B的距离,同理D(B->A)为城市B到城市A的距离
对称TSP中,D(A->B) = D(B->A),城巧升市间形成无向图
非对称TSP中,D(A->B) ≠ D(B->A),城市间形成有向图
现实生活中,可能出现单行线、交通事故、机票往返价格不同等情况,均可以打破对称性。
爬山算法是一种局部择优的方法,采用启发式方法。直观的解释如下图:
爬山算法,顾名思义就是 爬山 ,找到第一个山峰的时候就停止,作为算法的输出结果。所以,爬首衫山算法容易把局部最优解A作为算法的输出,而我们的目的是找到全局最优解B。
如下图所示,尽管在这个图中的许多局部极大值,仍然可以使用 模拟退火算法(Simulated Annealing) 发现全局最大值。
必要解释详见注释
此处根据经纬度计算城市间距离的公式,请参考 Calculate distance between two latitude-longitude points? (Haversine formula)
此处初始化数据源可以使用 TSPLIB 中所提供的数据,此程序大致阐述爬山算法的实现。
编写于一个失眠夜
菜鸟一枚,欢迎评论区相互交流,加速你我成长•ᴗ•。