文章目录

  • 一、算法合辑
    • 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代码实现相关推荐

  1. 【运筹优化】求解二维矩形装箱问题的算法合辑 + Java代码实现

    文章目录 一.算法合辑 1.1 结合自定义策略 1.1.1 结合自定义策略的禁忌搜索算法(98.80%) 1.2.1 结合自定义策略的蚁群算法(96.70%) 1.2 堆优化的天际线启发式算法(98. ...

  2. c++调用cplex求解例子_视频教程 | 用Python玩转运筹优化求解器IBM CPLEX(二)

    编者按 优化求解器对于做运筹学应用的学生来说,意义重大. 然而直到今天,放眼望去,全网(包括墙外)几乎没有一个系统的Cplex中文求解器教程. 作为华人运筹学的最大的社区,『运筹OR帷幄』 责无旁贷, ...

  3. 【Matlab多目标优化求解】粒子群算法求解智能微电网多目标优化问题【含源码 383期】

    一.代码运行视频(哔哩哔哩) [Matlab多目标优化求解]粒子群算法求解智能微电网多目标优化问题[含源码 383期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  4. 【Matlab多目标优化求解】粒子群算法求解配电网抢修优化问题【含源码 777期】

    一.代码运行视频(哔哩哔哩) [Matlab多目标优化求解]粒子群算法求解配电网抢修优化问题[含源码 777期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  5. 【运筹优化】ACO蚁群算法求解TSP问题(Java实现)

    文章目录 代码 Ant蚂蚁类 AntColonyOptimization_TSP蚁群算法类 运行结果 代码 Ant蚂蚁类 import lombok.Data;import java.util.Arr ...

  6. 【运筹优化】AFSA人工鱼群算法求解无约束多元函数最值(Java代码实现)

    文章目录 前言 优化目标 求解结果 迭代结果可视化 算法流程 Java代码 可视化代码 前言 本文以求解二元函数最小值为例,如果需要求解多元函数,只需要修改以下变量即可: varNum:变量维度数 u ...

  7. 数学建模常用算法:启发式优化算法合辑(内含多种智能优化算法,使用java实现算法、详细注释、并进行结果可视化)

    一.启发式算法介绍   启发式算法(heuristic algorithm)是相对于最优化算法提出的.一个问题的最优算法求得该问题每个实例的最优解.启发式算法可以这样定义:一个基于直观或经验构造的算法 ...

  8. 【优化求解】基于灰狼算法GWO求解最优目标matlab代码

    1 简介 Mirjalili 等人提出了一种新的群体智能算法---灰狼优化算法(GWO),并通过多个基准测试函数进行测试,从结果上验证了该算法的可行性,通过对比,GWO 算法已被证明在算法对函数求解精 ...

  9. 【优化求解】基于蚁狮算法求解最优多目标Matlab代码

    1 简介 蚁狮优化算法( Ant Lion Optimizer,ALO) 是 Mirjalili 研究并提出的一种群智能优化算法.算法具有调节参数较少.易于实现等优点,成为近几年进化计算领域的重要算法 ...

最新文章

  1. linux cdig 工具,linux常用工具su与su -
  2. bootstrap的td可以增加title样式_3.CSS样式的三种使用方式
  3. poj2182 Lost Cows-线段树
  4. 已经安装mysql xampp_windows 7 本机已安装mysql5的情况上 安装XAMPP
  5. mysql choose when_可以使用choose,一个when 和 otherwise 来实现if-else判断_学小易找答案...
  6. 构建“.NET研究” View 时可能用到的代理函数调用顺序
  7. 我的世界seus光影java版下载_minecraft SEUS V11.0光影存档
  8. 查看表空间大小和使用率,增加表空间大小的四种方法
  9. 中国电子教育产业前景规划与未来投资方向预测报告2022年版
  10. Windows xp sp3 补丁下载-cuyahoga
  11. sketch插件的学习 末尾链接有彩蛋
  12. Authorization loop detected on Conduit with realm “WSMAN“
  13. 图像融合:Image Fusion with Guided Filtering
  14. 微信小程序中层叠轮播图(仿微信朋友圈swiper样式)
  15. 分析称诺基亚仅押宝WP成自救牵绊
  16. 罗德里格旋转公式 (Rodrigues’ Rotation Formula)
  17. 组合数学4-全排列生成算法
  18. opporeno3详细参数_opporeno3pro参数配置详情-opporeno3pro手机性能评测
  19. Ubuntu tcpdump详解
  20. 【历史上的今天】3 月 6 日:Unix 版权争夺战;豆瓣网上线;谷歌推出了 Google Play

热门文章

  1. Bootstrap 思维导图
  2. 游戏建模师好找工作吗?学多久可以出师?
  3. linux系统中list命令的含义,linux tasklist命令详解
  4. 三年的php简历_php程序员简历
  5. 美国飞行员睡眠训练法:心事再多,都能让你在120秒内入睡
  6. Java工程师-招聘要求
  7. 数据刷新中的并行改进(三) (r5笔记第79天)
  8. 独立产品灵感周刊 DecoHack #041 - 那些独立开发者是怎么养活自己的
  9. 搭建自己私人网盘-Nextcloud
  10. docker部署owncloud私人网盘