旅行商问题

计算科学 优化 算法 C++
2021-11-28 11:06:27

首先是一些背景。旅行商问题 (TSP) 是找到一次通过一系列点的最有效路线。但是,没有完美的函数可以在合理的时间内解决这个问题。因为每增加一个点,可能的路线数量就会大大增加。这是就阶乘函数而言:

n!

其中“n”是点数。

我正在做一个项目,试图检查为 TSP 提供答案的不同算法的数学特性。我正在尝试检查产生答案所需的时间之间的关系,以及该答案与正确答案的接近程度。这意味着我正在使用蛮力算法检查每条可能的路线,然后将比较其他算法,并将它们的最短长度与正确答案的长度进行比较。

目前我正在比较贪婪推销员方法和蛮力方法,但我想要一些其他相当简单的算法可以用来解决这个问题。如果有什么常用的方法我应该做更多的研究,或者有什么效果很好的方法,请告诉我这个过程背后的基本概念。例如,贪婪推销员方法总是去最近的点,而蛮力方法是检查所有可能的路线。

我很欣赏建议的任何算法或方法。

3个回答

随机算法通常工作得非常好。一个例子是模拟退火或其许多变体。

在我的论文中,我使用了 ESA 的开源优化工具箱 PaGMO,其中还有一个名为 PyGMO 的 Python 实现可用。本页提供了有关如何使用 PyGMO 解决旅行商问题的书面教程。由于 PaGMO 和 PyGMO 都包含大量不同的优化算法,因此尝试这些算法并查看它们的性能可能会很有用。

蚂蚁有一种随机行走的方式(或多或少),当它们找到食物来源时,它们会回到巢穴并在途中释放信息素。如果其他蚂蚁碰巧走过这些信息素线之一,它们就会跟随它到达食物来源。他们在释放自己的信息素的同时也偷工减料,让从巢穴到食物的路线慢慢优化。我已经读到有类似的算法可以在服务器网络(路由)中找到网络包的最短路径。

维基:蚂蚁算法

可能是模拟退火算法在精神上相似,但考虑蚂蚁更有趣。如果 TSP 问题有类似的算法,我不会感到惊讶,而且调查应该很有趣。