下载
Linux系统中,下载LKH求解器,目前更到3.0.9了
wget http://akira.ruc.dk/~keld/research/LKH-3/LKH-3.0.9.tgz
tar xvfz LKH-3.0.9.tgz
cd LKH-3.0.9
make
测试
运行在LKH-3.0.9里的名为LKH的可执行文件,并带上参数表.par文件
// 求解TSP问题
./LKH pr2392.par
//求解mTSP问题(多旅行商问题)
./LKH whizzkids96.par
结果如下
…… 省略了些 主要是后面显示success
* 1: Cost = 378787, Gap = 0.1997%, Time = 0.21 sec.
* 3: Cost = 378634, Gap = 0.1592%, Time = 0.27 sec.
* 4: Cost = 378615, Gap = 0.1542%, Time = 0.32 sec.
* 8: Cost = 378032, Gap = 0.0000%, Time = 0.50 sec. =
Run 9: Cost = 378032, Gap = 0.0000%, Time = 0.50 sec. =
* 1: Cost = 378032, Gap = 0.0000%, Time = 0.15 sec. =
Run 10: Cost = 378032, Gap = 0.0000%, Time = 0.15 sec. =
Successes/Runs = 10/10
Cost.min = 378032, Cost.avg = 378032.00, Cost.max = 378032
Gap.min = 0.0000%, Gap.avg = 0.0000%, Gap.max = 0.0000%
Trials.min = 1, Trials.avg = 5.8, Trials.max = 29
Time.min = 0.14 sec., Time.avg = 0.30 sec., Time.max = 0.61 sec.
Time.total = 6.39 sec.
par文件参数说明
PROBLEM_FILE 指的是包含路径点信息的tsp、atsp文件路径
OPTIMUM 指的是已知的最佳路径长度,是结束判断的条件之一
RUNS指的是循环计算路径的轮数,是结束判断的条件之一
MAX_TRIALS每轮run的最大试验次数
MOVE_TYPE指定本地搜索中使用的移动类型。数值可以是 2、3、4 或 5,表示使用 2-opt、3-opt、4-opt 还是 5-opt。默认值:5
SEED随机数生成的初始种子
TOUR_FILE最好的tour的名称及输出路径
tsp/atsp等文件参数说明
DIMENSION 点数
下面的内容可选的类型都在TSPLIB_DOC.pdf文件中,一共两部分
规格部分
TYPE包含TSPLIB_DOC.pdf文件中的不同类型
EDGE_WEIGHT_TYPE城市之间代价计算方法
pr2392 是用的欧式距离
whizzkids96 是用的EXPLICIT,明确点间代价
EDGE WEIGHT FORMAT 当选用EXPLICIT类型时,对代价的类型描述
whizzkids96 是用的dimension * dimension 的矩阵
数据部分
pr2392用的 NODE_COORD_SECTION 即给出所有的点的二维坐标
whizzkids96 用的 EDGE_WEIGHT_SECTION 则是所有点间的权重,与dimension相关
自定义
对应上面的参数生成自己的par和不同问题的tsp、atsp等对应文件格式
mark一下:c++的调用方法有人GitHub开源了个清楚的
https://github.com/dringakn/lkh_tsp_solver
一个tsp数据集的网站
http://comopt.ifi.uni-heidelberg.de/software/TSPLIB95/