LKH公司
2.0.10版 (2022年11月)
LKH是Lin-Kernighan启发式算法在求解旅行商问题中的有效实现。
计算实验表明LKH是非常有效的。 尽管算法是近似的,但最优解的产生频率非常高。 LKH为我们能够获得的所有已解决问题提供了最佳解决方案; 包括一个109399-city实例(在撰写本文时,最大的非平凡实例已求解为最优)。 此外,该算法还改进了一系列具有未知最优值的大规模实例的最佳已知解,其中包括1904711个城市实例( 世界TSP ).
这个 DIMACS TSP挑战 (2000)提供了许多基准实例。 它们的规模从1000到10000000个城市不等。 LKH目前持有所有具有未知optima的实例的记录。 将当前最佳游览的长度制成表格 在这里 .
David Soler提供了 126个非对称实例 使用已知的optima,并报告LKH在这些实例上的性能 在这里 . 您可以下载588个非对称实例及其最佳LKH解决方案教程 在这里 . 此外,从 2021年亚马逊最后一英里路线研究挑战数据集 以及他们最好的LKH解决方案教程可供下载 在这里 .
Stefan Hougardy和Zhongxianghui提供了 欧氏旅行商问题的难以求解实例 。此类型的实例最多可下载100000个引用 在这里 .列出了最佳LKH解决方案 在这里 .
LKH已在报告中进行了描述
K.Helsgaun,
Lin-Kernighan旅行推销员启发式的有效实现 .
数据记录器 ( 计算机科学写作 )1998年第81号, 罗斯基勒大学。
K.Helsgaun,
Lin-Kernighan TSP启发式中K-opt移动的有效实现 .
数据记录器 ( 计算机科学著作 )2006年第109号, 罗斯基勒大学(2007年11月修订)。
K.Helsgaun,
约束旅行的Lin-Kernighan-Helsgaun TSP解的推广 销售人员和车辆路线问题 . 《技术报告》,计算机科学,罗斯基勒大学,2017年。
K.Helsgaun,
在Lin-Kernighan-Helsgaun TSP求解器中使用POPMUSIC生成候选集 . 《技术报告》,计算机科学,罗斯基勒大学,2018年。
在报纸上
K.Helsgaun,
Lin-Kernighan旅行推销员启发式的有效实现 .
欧洲运筹学杂志, 126(1):106-130 (2000).
K.Helsgaun,
Lin-Kernighan TSP启发式的一般k-opt子运动 .
数学规划计算, 1(2-3):119-163 (2009).
É. D.Taillard和K.Helsgaun,
针对旅行推销员问题的流行音乐 .
欧洲运筹学杂志 第272卷第2期,第420-429页(2019年)。
R.Tinós、K.Helsgaun和D.Whitley,
Lin-Kernighan-Helsgaun旅行推销员启发式中的高效重组 . PPSN XV,论文集I,第95-107页(2018年)。
可以看到LKH的科学应用列表 在这里 .
安装
LKH是用编程语言C实现的。该软件完全是用ANSI C编写的,可移植到许多计算机平台和C编译器。
可在此处下载代码: LKH-2.0.10.tgz型 (压缩的tar文件,大约1.5 MB)。
在Unix/Linux机器上执行以下命令:
焦油xvfz LKH-2.0.10.tgz 光盘LKH-2.0.10 制作
名为LKH的可执行文件现在可在目录LKH-2.0.10中使用。
可以下载Windows机器的独立可执行文件 在这里 。Visual Studio 2022项目可用 在这里。 另一种可能性是使用 Cygwin公司 (用于Windows的类Linux环境)。
该代码用于学术和非商业用途。 作者保留本规范的所有权利。
LKH-3型 是LKH-2的一个扩展,用于解决受限旅行商和车辆路径问题 在这里 .
2.0.10版的变更:
现在,旅游业可能会被泽维尔·克莱斯特(Xavier Clarist)的重组重组(Clarist)所重组。
CLARIST重组是通过在参数文件中给出以下规范来使用的
重组=克莱斯特
LKH-2.0.9变更:
现在可以通过POPMUSIC在LKH的参数文件中提供以下规范来创建候选集:
CANDIDATE_SET_TYPE=流行音乐
参数的值 最大标准值 用于修剪候选集。 然而,还有一些其他与流行音乐相关的参数。 如果未指定,它们将采用默认值。 这些参数包括:
流行音乐_样品_尺寸= <整数> 样本大小。 默认值:10
流行音乐_解决方案= <整数> 要生成的解决方案数。 默认值:50
流行音乐_MAX_NEIGHBORS= <整数> 迭代3-opt-for中用作候选的最大最近邻数 流行音乐。 默认值:5
流行歌曲= <整数> 用于POPMUSIC迭代3-opt的试验数量。 如果该值为零,则试验次数是要优化的子路径的大小。 默认值:1
流行音乐_INITIAL_TOUR= { 对 | 不 } 指定是否将第一个生成的POPMUSIC巡更用作Lin-Kernighan的初始巡更。 违约: 不
2.0.8版的变更:
Tours现在可以通过GPX2(广义分区交叉2)而不是IPT(迭代部分转录)进行重组。
GPX2通过在参数文件中提供以下规范来使用:
重组=GPX2
可能的设置包括:
重组= { 综合产品组 | GPX2(全球定位系统2) }
IPT为默认设置。
GPX2代码由Renato Tinós编写,并由Keld Helsgaun改编为LKH。
新边权重类型:
地板_2D 地板_3D TOR_2D型 TOR_3D型
2.0.7版的变更:
增加了一个近似的K中心聚类算法,用于旅游分区(新关键字: K中心) 改进了HCP和HPP实例的性能。
2.0.6版的变更:
增加了Lozano、Herrera和Cano提出的在稳态遗传算法中保持有用多样性的替换策略(CD/RW)。
2.0.5版的变更:
Guibas和Stolfi对Delaunay三角剖分的实现已被Geoff Leach更快的实现所取代。
2.0.4版的变更:
增加了子问题的多级压缩(2.0.3版只允许一个级别)。
2.0.3版的变更:
添加了一个简单的遗传算法。 新关键字: 人口_大小 .第一个发现的旅游 人口_大小 跑步构成了最初的旅游人数。 在剩余的每一次运行中,使用边缘重组交叉(ERX)的变体将当前人口中的两个巡更(父巡更)重组为一个新巡更(子巡更)。 父母的选择是随机线性偏向于群体中的最佳成员。 孩子被用作下次跑步的初始巡视。 如果这次跑步产生的巡游比人群中最差的巡游更好,那么最终的巡游将取代最差的巡回游。 通过要求人群中的所有旅游都有不同的成本,避免了过早的趋同。
2.0.2版的变更:
解决子问题的代码中的微小更改。 增加了基于摩尔空间填充曲线的旅游构造启发式。 新建关键字: 摩尔 .
2.0.1版的变更:
改进的距离缓存和更快的添加/删除测试 k个 -选择动作。 这样可以将执行速度提高5-10%。
2.0版的变更(2007年11月):
新版本通过数据结构和算法扩展了前一个版本,用于解决非常大的实例,并通过工具获得更高质量的解决方案。 已经进行了许多更改。 下面简要介绍了这些新功能。
1.一般k-opt移动
LKH-2中获得高质量解决方案的最重要手段之一是使用通用 k个 -选择动作。 在Lin-Kernighan算法的原始版本中,移动被限制为那些可以分解为2-opt或3-opt移动,然后是2-opt移动(可能为空)序列的移动。 这种限制简化了实现,但如果寻求高质量的解决方案,则不一定是最佳的设计选择。 LKH-1已经证明了这一点,它使用5选项顺序移动作为基本移动组件。 LKH-2将这一想法向前推进了一步。 现在 k个 -opt移动可以用作子移动,其中 K(K) 是任何大于或等于2且小于城市数的选定整数。 每个子移动都是连续的。 然而,在搜索此类移动的过程中,也可以检查非连续移动。 因此,与Lin-Kernighan算法的原始版本相比,非连续移动不仅仅是作为最后手段尝试,而是集成到普通搜索中。
2 . 分区
为了降低求解大规模问题实例的复杂性,LKH-2使得将问题划分为更小的子问题成为可能。 每个子问题都是单独解决的,其解决方案(如果可能)用于改进给定的总体路线。 即使是小问题实例的解决方案有时也可能受益于分区,因为它有助于在搜索过程中集中精力。 目前,LKH-2实现了以下五种分区方案:旅游段分区、卡普分区、Delaunay分区、, K(K) -表示分区和Sierpinski分区。
三 . 路线合并
LKH-2提供了一个巡回合并过程,该过程试图使用包括所有巡回边缘的实例的局部优化,从两个或多个给定巡回中产生尽可能好的巡回,并且其中巡回的公共边缘是固定的。 接近最佳的巡更通常共享许多公共边。 因此,此实例的输入图通常非常稀疏,这使得使用 k个 -选择移动较大的值 k个 .
4 . 迭代部分转录
迭代部分描述是提高基于局部搜索的启发式算法性能的一般过程。 它试图通过将任一解决方案的某些部分替换为另一解决方案的相关部分来改进两个单独的解决方案。 该程序可通过搜索两个旅游的子链应用于TSP,这两个旅游包含不同顺序的相同城市,并且具有相同的初始和最终城市。 LKH-2在每个局部最优巡更和迄今为止的最佳巡更上使用该程序。 实现的算法是由莫比乌斯、弗雷斯勒本、默兹和施赖伯描述的算法的简化版本。
5 . 骨干引导搜索
由固定数量的初始试验产生的巡视的边缘可以用作后续试验的候选边缘。 该算法是Zhang和Looks给出的算法的简化版本,对于 VLSI实例 .
6 . 用于解决超大实例的数据结构和算法
Delaunay三角剖分可用于加快确定alpha-nearst候选边的速度,巡更可在内部由三层树表示。
新关键字:
BACKBONE_TRIALS=<整数> 回溯={YES|NO} CANDIDATE_SET_TYPE={ALPHA|DELAUNAY[纯]|NEAREST-NEIGHBOR|QUADRANT} EXTRA_CANDIDATES=<整数>[对称] EXTRA_CANDIDATE_SET_TYPE={NEAREST-NEIGHBOR|QUADRANT} GAIN_CRITERION={YES|NO} INITIAL_TOUR_ALGORITHM={波卢夫卡|GREEDY|NEAREST-NEIGHBOR|QUICK-BORUVKA|SIERPINSKI|WALK} INITIAL_TOUR_FRACTION=<[0;1]>中的实数 KICKS=<整数> KICK_TYPE=<整数> MAX_BREADTH=<整数> MERGE_TOUR_FILE=<string> NONSEQUENTIAL_MOVE_TYPE=<整数> PATCHING_A=<整数>[受限|扩展] PATCHING_C=<整数>[受限|扩展] 子问题SIZE=<整数>[DELAUNAY | KARP | K-MEANS | ROHE | SIERPINSKI][压缩][边框] 子问题_TOUR_FILE=<string>} SUBSEQUENT_MOVE_TYPE=<整数> SUBSEQUENT_PATCHING={YES|NO} #<字符串>
删除的关键字:
回溯车辆类型 合并_ OUR_文件_1 合并_ OUR_文件2
可以找到LKH-2.0参数的简短描述 在这里 .
1.3版的变更 :
距离类型 GEOM公司 已添加(请参见 http://www.tsp.gatech.edu/world/ ).
现在可以通过以下关键字在参数文件中提供其他控制信息:
回溯车辆类型 候选人_文件 初始_ OUR_文件 最大_ SWAP 合并_ OUR_文件_1 合并_ OUR_文件2 受限搜索
1.2版的变更 :
如果 抓捕 功能由系统支持。
版本1.1的变更 :
对于非对称问题的解决,代码变得更加健壮。 在某些情况下,由于整数溢出,前面的代码可能会出错。
[ 家 ]