【运筹优化】求解TSP问题的算法合辑 + Java代码实现
文章目录
- 一、算法合辑
- 1.1 SA模拟退火算法
- 1.2 TS禁忌搜索算法
- 1.3 ACO蚁群算法
- 1.4 GA遗传算法
- 1.5 ILS迭代局部搜索算法
- 1.6 VNS变邻域搜索算法
- 1.7 ALNS自适应大邻域搜索算法
- 二、算法运行示例
- 三、测试用例说明
- 四、TSP路径可视化
一、算法合辑
1.1 SA模拟退火算法
【运筹优化】SA模拟退火算法求解TSP问题(Java实现)
模拟退火算法求解tsp问题:48个城市...
初始解为:[0, 4, 5, 9, 17, 10, 16, 36, 38, 13, 43, 11, 20, 30, 3, 7, 21, 25, 37, 39, 42, 18, 45, 8, 47, 29, 41, 12, 28, 34, 32, 19, 24, 2, 31, 33, 26, 6, 23, 44, 1, 14, 22, 27, 35, 46, 40, 15]
最佳迭代次数:20436
最短路程为(伪欧氏距离):13258.608285728313
最佳路径为:[21, 40, 15, 7, 37, 30, 43, 36, 18, 26, 16, 42, 29, 5, 27, 35, 6, 17, 45, 32, 19, 46, 47, 25, 3, 1, 28, 33, 2, 22, 10, 12, 13, 24, 4, 41, 9, 34, 44, 23, 31, 38, 20, 11, 14, 39, 8, 0, 21]
求解用时:0.472 s
-------------------------------------------------------------------------
模拟退火算法求解tsp问题:48个城市...
初始解为:[0, 40, 14, 34, 25, 8, 37, 22, 13, 2, 24, 1, 19, 38, 47, 11, 45, 36, 9, 17, 27, 10, 12, 26, 46, 15, 32, 18, 35, 6, 20, 4, 7, 43, 44, 31, 5, 41, 30, 21, 3, 28, 42, 23, 16, 39, 29, 33]
最佳迭代次数:8331
最短路程为(欧氏距离):39498.407326103916
最佳路径为:[4, 47, 25, 3, 34, 44, 9, 23, 41, 1, 28, 40, 15, 7, 37, 30, 45, 43, 17, 6, 36, 18, 26, 16, 42, 29, 5, 27, 35, 32, 19, 46, 20, 31, 38, 24, 12, 10, 39, 8, 0, 21, 2, 14, 11, 22, 13, 33, 4]
求解用时:0.474 s
-------------------------------------------------------------------------
1.2 TS禁忌搜索算法
【运筹优化】(改进)TS禁忌搜索算法求解TSP问题(Java实现)
数组型禁忌搜索求解tsp问题:48个城市...
初始解:[8, 9, 16, 7, 46, 22, 6, 5, 41, 18, 30, 35, 0, 26, 23, 3, 37, 27, 17, 39, 1, 14, 10, 42, 20, 38, 28, 34, 33, 44, 29, 47, 24, 15, 13, 25, 19, 43, 21, 11, 40, 4, 45, 32, 12, 31, 2, 36]
最佳迭代次数:62437
最短路程为(伪欧氏距离):10671.03579944003
最佳路径为:[14, 32, 45, 35, 29, 42, 26, 16, 18, 36, 5, 27, 6, 17, 43, 30, 37, 8, 7, 0, 39, 2, 21, 15, 40, 33, 28, 1, 25, 3, 34, 44, 9, 23, 41, 4, 47, 38, 31, 20, 12, 24, 13, 22, 10, 46, 19, 11, 14]
求解用时:2.157 s
-------------------------------------------------------------------------
数组型禁忌搜索求解tsp问题:48个城市...
初始解:[39, 21, 6, 47, 42, 24, 33, 22, 0, 2, 46, 8, 16, 25, 27, 29, 45, 36, 44, 3, 26, 41, 9, 17, 20, 10, 1, 14, 12, 31, 5, 13, 37, 19, 35, 28, 18, 34, 40, 4, 7, 15, 23, 38, 30, 43, 32, 11]
最佳迭代次数:97655
最短路程为(欧氏距离):33555.27645708514
最佳路径为:[8, 7, 0, 39, 14, 11, 10, 12, 24, 13, 22, 2, 21, 15, 40, 33, 28, 1, 25, 3, 34, 44, 9, 23, 41, 4, 47, 38, 31, 20, 46, 19, 32, 45, 35, 29, 42, 16, 26, 18, 36, 5, 27, 6, 17, 43, 30, 37, 8]
求解用时:2.412 s
-------------------------------------------------------------------------
树型禁忌搜索求解tsp问题:48个城市...
初始解:[0, 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, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47]
最佳迭代次数:1327
最短路程为(伪欧氏距离):11784.944565636517
最佳路径为:[47, 4, 28, 33, 2, 0, 7, 8, 37, 30, 43, 17, 6, 27, 18, 36, 5, 42, 16, 26, 29, 35, 45, 32, 14, 11, 19, 46, 12, 20, 38, 31, 23, 9, 44, 34, 3, 25, 41, 1, 40, 15, 21, 39, 10, 22, 13, 24, 47]
求解用时:3.443 s
-------------------------------------------------------------------------
树型禁忌搜索求解tsp问题:48个城市...
初始解:[0, 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, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47]
最佳迭代次数:1550
最短路程为(欧氏距离):38188.50171871759
最佳路径为:[23, 44, 34, 3, 25, 1, 28, 33, 40, 15, 37, 30, 43, 17, 6, 35, 32, 11, 10, 12, 38, 31, 20, 46, 19, 29, 42, 16, 26, 18, 36, 5, 27, 45, 14, 39, 8, 7, 0, 21, 2, 22, 13, 24, 47, 4, 41, 9, 23]
求解用时:3.377 s
-------------------------------------------------------------------------
1.3 ACO蚁群算法
【运筹优化】ACO蚁群算法求解TSP问题(Java实现)
蚁群算法求解tsp问题:48个城市...
最佳迭代次数:156
最短路程为(伪欧氏距离):11107.778186984036
最佳路径为:[46, 12, 24, 13, 22, 10, 11, 14, 45, 32, 19, 16, 42, 26, 18, 36, 5, 29, 35, 27, 6, 17, 43, 30, 37, 7, 0, 8, 39, 2, 21, 15, 40, 33, 47, 4, 28, 1, 25, 3, 34, 44, 9, 41, 23, 31, 38, 20, 46]
求解用时:2.885 s
-------------------------------------------------------------------------
蚁群算法求解tsp问题:48个城市...
最佳迭代次数:44
最短路程为(欧氏距离):35156.69540961502
最佳路径为:[39, 8, 37, 30, 43, 17, 6, 27, 35, 29, 5, 36, 18, 26, 42, 16, 19, 32, 45, 14, 11, 10, 22, 13, 24, 12, 46, 20, 31, 38, 47, 4, 41, 9, 23, 44, 34, 3, 25, 1, 28, 40, 33, 2, 21, 15, 0, 7, 39]
求解用时:2.781 s
-------------------------------------------------------------------------
1.4 GA遗传算法
【运筹优化】GA遗传算法求解TSP问题(Java实现)
遗传算法求解tsp问题:48个城市...
初始解为:39492.9415375181
最佳迭代次数:18085
最短路程为(伪欧氏距离):11716.839185306864
最佳路径为:[37, 0, 7, 8, 39, 14, 32, 11, 10, 22, 40, 15, 21, 2, 33, 13, 12, 24, 4, 47, 28, 1, 3, 25, 41, 9, 34, 44, 23, 31, 38, 20, 46, 19, 45, 35, 6, 5, 36, 18, 16, 42, 26, 29, 27, 17, 43, 30, 37]
求解用时:3.007 s
-------------------------------------------------------------------------
遗传算法求解tsp问题:48个城市...
初始解为:126129.17281692004
最佳迭代次数:94162
最短路程为(欧氏距离):37319.47142582528
最佳路径为:[21, 15, 40, 33, 2, 13, 24, 4, 28, 1, 25, 3, 34, 44, 9, 23, 41, 47, 38, 31, 20, 46, 22, 12, 10, 11, 19, 32, 45, 29, 26, 18, 36, 16, 42, 5, 35, 17, 27, 6, 43, 30, 37, 14, 39, 8, 7, 0, 21]
求解用时:3.044 s
-------------------------------------------------------------------------
1.5 ILS迭代局部搜索算法
【运筹优化】ILS局部迭代搜索算法求解TSP问题(Java实现)
局部迭代搜索算法求解tsp问题:48个城市...
初始解为:[0, 29, 13, 35, 12, 23, 11, 19, 6, 43, 45, 10, 16, 9, 39, 47, 25, 3, 22, 31, 28, 27, 21, 7, 46, 37, 15, 41, 44, 26, 14, 33, 40, 30, 8, 1, 20, 18, 34, 38, 4, 5, 2, 24, 42, 32, 36, 17]
最佳迭代次数:0
最短路程为(伪欧氏距离):10601.127449906018
最佳路径为:[15, 21, 2, 22, 13, 24, 12, 10, 11, 14, 39, 8, 0, 7, 37, 30, 43, 17, 6, 27, 5, 36, 18, 26, 16, 42, 29, 35, 45, 32, 19, 46, 20, 31, 38, 47, 4, 41, 23, 9, 44, 34, 3, 25, 1, 28, 33, 40, 15]
求解用时:0.278 s
-------------------------------------------------------------------------
局部迭代搜索算法求解tsp问题:48个城市...
初始解为:[0, 23, 46, 39, 4, 36, 24, 6, 5, 44, 20, 17, 15, 19, 18, 2, 32, 28, 7, 8, 11, 12, 3, 10, 31, 37, 42, 41, 43, 13, 21, 40, 30, 14, 29, 1, 16, 27, 38, 33, 25, 35, 47, 9, 45, 26, 34, 22]
最佳迭代次数:0
最短路程为(欧式距离):33555.276457085136
最佳路径为:[47, 38, 31, 20, 46, 19, 32, 45, 35, 29, 42, 16, 26, 18, 36, 5, 27, 6, 17, 43, 30, 37, 8, 7, 0, 39, 14, 11, 10, 12, 24, 13, 22, 2, 21, 15, 40, 33, 28, 1, 25, 3, 34, 44, 9, 23, 41, 4, 47]
求解用时:0.288 s
-------------------------------------------------------------------------
1.6 VNS变邻域搜索算法
【运筹优化】VNS变邻域搜索算法求解TSP问题(Java实现)
变领域搜索算法求解tsp问题:48个城市...
初始解为:[0, 33, 40, 8, 7, 29, 6, 46, 36, 38, 12, 43, 24, 21, 1, 25, 5, 10, 34, 42, 11, 45, 15, 23, 19, 18, 28, 16, 27, 39, 20, 31, 13, 30, 14, 37, 2, 4, 47, 3, 17, 26, 41, 32, 9, 44, 22, 35]
最佳迭代次数:14
最佳邻域:1
最短路程为(伪欧氏距离):10601.12744990602
最佳路径为:[12, 10, 11, 14, 39, 8, 0, 7, 37, 30, 43, 17, 6, 27, 5, 36, 18, 26, 16, 42, 29, 35, 45, 32, 19, 46, 20, 31, 38, 47, 4, 41, 23, 9, 44, 34, 3, 25, 1, 28, 33, 40, 15, 21, 2, 22, 13, 24, 12]
求解用时:1.028 s
-------------------------------------------------------------------------
变领域搜索算法求解tsp问题:48个城市...
初始解为:[0, 8, 15, 43, 1, 31, 6, 32, 17, 41, 23, 12, 42, 25, 18, 11, 47, 39, 16, 44, 26, 19, 21, 29, 37, 28, 10, 7, 13, 33, 38, 4, 20, 9, 5, 46, 22, 40, 14, 2, 27, 45, 36, 3, 24, 35, 30, 34]
最佳迭代次数:17
最佳邻域:1
最短路程为(欧氏距离):34672.496967443556
最佳路径为:[39, 0, 7, 8, 37, 30, 43, 17, 6, 27, 5, 36, 18, 26, 16, 42, 29, 35, 45, 32, 19, 46, 12, 20, 38, 31, 23, 9, 44, 34, 3, 25, 1, 41, 47, 4, 28, 40, 15, 21, 2, 33, 13, 24, 22, 10, 11, 14, 39]
求解用时:0.983 s
-------------------------------------------------------------------------
1.7 ALNS自适应大邻域搜索算法
【运筹优化】ALNS自适应大领域搜索算法求解TSP问题(Java实现)
自适应大领域搜索算法求解tsp问题:48个城市...
初始解为:[0, 17, 20, 33, 34, 18, 3, 45, 1, 28, 27, 47, 37, 29, 19, 43, 35, 24, 8, 6, 5, 9, 4, 23, 22, 7, 11, 16, 26, 12, 2, 39, 10, 41, 36, 46, 14, 38, 44, 42, 30, 32, 40, 21, 15, 13, 31, 25]
最佳迭代次数:79334
最短路程为(伪欧氏距离):11445.721083723423
最佳路径为:[3, 34, 44, 23, 9, 41, 47, 38, 31, 12, 13, 24, 20, 46, 19, 11, 10, 22, 39, 14, 32, 45, 35, 29, 16, 42, 26, 18, 36, 5, 27, 6, 17, 43, 30, 37, 7, 8, 0, 2, 21, 15, 40, 33, 4, 28, 1, 25, 3]
求解用时:0.352 s
-------------------------------------------------------------------------
自适应大领域搜索算法求解tsp问题:48个城市...
初始解为:[0, 23, 7, 4, 13, 14, 45, 29, 1, 35, 22, 46, 34, 47, 40, 39, 2, 6, 41, 3, 19, 18, 8, 31, 20, 17, 21, 32, 16, 24, 10, 9, 44, 15, 26, 27, 28, 36, 11, 12, 30, 37, 42, 43, 38, 25, 5, 33]
最佳迭代次数:76250
最短路程为(欧氏距离):35852.28551388712
最佳路径为:[4, 47, 24, 13, 12, 22, 10, 11, 14, 39, 21, 15, 40, 28, 1, 41, 25, 3, 34, 44, 9, 23, 31, 38, 20, 46, 19, 32, 45, 35, 29, 42, 16, 26, 18, 36, 5, 27, 6, 17, 43, 30, 37, 8, 7, 0, 2, 33, 4]
求解用时:0.336 s
-------------------------------------------------------------------------
二、算法运行示例
public class Run {// 分割线public static String line = "-------------------------------------------------------------------------";public static void main(String[] args) throws Exception {List<double[]> locationList = getLocationList();// 模拟退火算法saTest(new ArrayList<>(locationList));// 数组型禁忌搜索tsArrayTest(new ArrayList<>(locationList));// 树型禁忌搜索tsTreeTest(new ArrayList<>(locationList));// 蚁群算法acoTest(new ArrayList<>(locationList));// 遗传算法gaTest(new ArrayList<>(locationList));// 局部迭代搜索算法ilsTest(new ArrayList<>(locationList));// 变领域搜索算法vnsTest(new ArrayList<>(locationList));// 自适应大领域搜索算法alnsTest(new ArrayList<>(locationList));}// 树型禁忌搜索测试public static void tsTreeTest(List<double[]> locationList) throws Exception {long startTime = System.currentTimeMillis();System.out.println("树型禁忌搜索求解tsp问题:"+locationList.size()+"个城市...");new TreeTS_TSP(locationList).solve();System.out.println("求解用时:"+(System.currentTimeMillis()-startTime)/1000d+" s");System.out.println(line);}// 数组型禁忌搜索测试public static void tsArrayTest(List<double[]> locationList) throws Exception {long startTime = System.currentTimeMillis();System.out.println("数组型禁忌搜索求解tsp问题:"+locationList.size()+"个城市...");new ArrayTS_TSP(locationList).solve();System.out.println("求解用时:"+(System.currentTimeMillis()-startTime)/1000d+" s");System.out.println(line);}// 蚁群算法测试public static void acoTest(List<double[]> locationList) throws Exception {long startTime = System.currentTimeMillis();System.out.println("蚁群算法求解tsp问题:"+locationList.size()+"个城市...");new AntColonyOptimization_TSP(locationList).solve();System.out.println("求解用时:"+(System.currentTimeMillis()-startTime)/1000d+" s");System.out.println(line);}// 遗传算法测试public static void gaTest(List<double[]> locationList) throws Exception{long startTime = System.currentTimeMillis();System.out.println("遗传算法求解tsp问题:"+locationList.size()+"个城市...");new GeneticAlgorithm_TSP(locationList).solve();System.out.println("求解用时:"+(System.currentTimeMillis()-startTime)/1000d+" s");System.out.println(line);}// 自适应大领域搜索算法测试public static void alnsTest(List<double[]> locationList) throws Exception{long startTime = System.currentTimeMillis();System.out.println("自适应大领域搜索算法求解tsp问题:"+locationList.size()+"个城市...");new ALNS_TSP(locationList).solve();System.out.println("求解用时:"+(System.currentTimeMillis()-startTime)/1000d+" s");System.out.println(line);}// 模拟退火算法public static void saTest(List<double[]> locationList) throws Exception{long startTime = System.currentTimeMillis();System.out.println("模拟退火算法求解tsp问题:"+locationList.size()+"个城市...");new SA_TSP(locationList).solve();System.out.println("求解用时:"+(System.currentTimeMillis()-startTime)/1000d+" s");System.out.println(line);}// 局部迭代搜索算法public static void ilsTest(List<double[]> locationList) throws Exception{long startTime = System.currentTimeMillis();System.out.println("局部迭代搜索算法求解tsp问题:"+locationList.size()+"个城市...");new ILS_TSP(locationList).solve();System.out.println("求解用时:"+(System.currentTimeMillis()-startTime)/1000d+" s");System.out.println(line);}// 变领域搜索算法public static void vnsTest(List<double[]> locationList) throws Exception{long startTime = System.currentTimeMillis();System.out.println("变领域搜索算法求解tsp问题:"+locationList.size()+"个城市...");new VNS_TSP(locationList).solve();System.out.println("求解用时:"+(System.currentTimeMillis()-startTime)/1000d+" s");System.out.println(line);}private static List<double[]> getLocationList() throws IOException {FileInputStream fis = new FileInputStream("src/main/java/Algorithm/TSP/data/att48.txt");List<double[]> locationList = new ArrayList<>();int len = 0;StringBuilder sb = new StringBuilder();while ((len=fis.read())!=-1){sb.append((char)len);}fis.close();String[] split = sb.toString().split("\n");for (String s : split) {String[] s1 = s.split(" ");double[] doubles = new double[]{Double.parseDouble(s1[1]),Double.parseDouble(s1[2])};locationList.add(doubles.clone());}return locationList;}}
三、测试用例说明
以上使用的是tsplib上的数据att48,这是一个对称TSP问题,城市规模为48,其最优值为10628(取整的伪欧氏距离)。tsplib地址:http://comopt.ifi.uni-heidelberg.de/software/TSPLIB95/tsp/
四、TSP路径可视化
【运筹优化】JavaFx实现自适应屏幕的TSP路径可视化
【运筹优化】求解TSP问题的算法合辑 + Java代码实现相关推荐
- 【运筹优化】求解二维矩形装箱问题的算法合辑 + Java代码实现
文章目录 一.算法合辑 1.1 结合自定义策略 1.1.1 结合自定义策略的禁忌搜索算法(98.80%) 1.2.1 结合自定义策略的蚁群算法(96.70%) 1.2 堆优化的天际线启发式算法(98. ...
- c++调用cplex求解例子_视频教程 | 用Python玩转运筹优化求解器IBM CPLEX(二)
编者按 优化求解器对于做运筹学应用的学生来说,意义重大. 然而直到今天,放眼望去,全网(包括墙外)几乎没有一个系统的Cplex中文求解器教程. 作为华人运筹学的最大的社区,『运筹OR帷幄』 责无旁贷, ...
- 【Matlab多目标优化求解】粒子群算法求解智能微电网多目标优化问题【含源码 383期】
一.代码运行视频(哔哩哔哩) [Matlab多目标优化求解]粒子群算法求解智能微电网多目标优化问题[含源码 383期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...
- 【Matlab多目标优化求解】粒子群算法求解配电网抢修优化问题【含源码 777期】
一.代码运行视频(哔哩哔哩) [Matlab多目标优化求解]粒子群算法求解配电网抢修优化问题[含源码 777期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...
- 【运筹优化】ACO蚁群算法求解TSP问题(Java实现)
文章目录 代码 Ant蚂蚁类 AntColonyOptimization_TSP蚁群算法类 运行结果 代码 Ant蚂蚁类 import lombok.Data;import java.util.Arr ...
- 【运筹优化】AFSA人工鱼群算法求解无约束多元函数最值(Java代码实现)
文章目录 前言 优化目标 求解结果 迭代结果可视化 算法流程 Java代码 可视化代码 前言 本文以求解二元函数最小值为例,如果需要求解多元函数,只需要修改以下变量即可: varNum:变量维度数 u ...
- 数学建模常用算法:启发式优化算法合辑(内含多种智能优化算法,使用java实现算法、详细注释、并进行结果可视化)
一.启发式算法介绍 启发式算法(heuristic algorithm)是相对于最优化算法提出的.一个问题的最优算法求得该问题每个实例的最优解.启发式算法可以这样定义:一个基于直观或经验构造的算法 ...
- 【优化求解】基于灰狼算法GWO求解最优目标matlab代码
1 简介 Mirjalili 等人提出了一种新的群体智能算法---灰狼优化算法(GWO),并通过多个基准测试函数进行测试,从结果上验证了该算法的可行性,通过对比,GWO 算法已被证明在算法对函数求解精 ...
- 【优化求解】基于蚁狮算法求解最优多目标Matlab代码
1 简介 蚁狮优化算法( Ant Lion Optimizer,ALO) 是 Mirjalili 研究并提出的一种群智能优化算法.算法具有调节参数较少.易于实现等优点,成为近几年进化计算领域的重要算法 ...
最新文章
- linux cdig 工具,linux常用工具su与su -
- bootstrap的td可以增加title样式_3.CSS样式的三种使用方式
- poj2182 Lost Cows-线段树
- 已经安装mysql xampp_windows 7 本机已安装mysql5的情况上 安装XAMPP
- mysql choose when_可以使用choose,一个when 和 otherwise 来实现if-else判断_学小易找答案...
- 构建“.NET研究” View 时可能用到的代理函数调用顺序
- 我的世界seus光影java版下载_minecraft SEUS V11.0光影存档
- 查看表空间大小和使用率,增加表空间大小的四种方法
- 中国电子教育产业前景规划与未来投资方向预测报告2022年版
- Windows xp sp3 补丁下载-cuyahoga
- sketch插件的学习 末尾链接有彩蛋
- Authorization loop detected on Conduit with realm “WSMAN“
- 图像融合:Image Fusion with Guided Filtering
- 微信小程序中层叠轮播图(仿微信朋友圈swiper样式)
- 分析称诺基亚仅押宝WP成自救牵绊
- 罗德里格旋转公式 (Rodrigues’ Rotation Formula)
- 组合数学4-全排列生成算法
- opporeno3详细参数_opporeno3pro参数配置详情-opporeno3pro手机性能评测
- Ubuntu tcpdump详解
- 【历史上的今天】3 月 6 日:Unix 版权争夺战;豆瓣网上线;谷歌推出了 Google Play