如何设计最佳旅行计划

时间:2012-02-14 04:17:18

标签: algorithm

我正在开发一个旅行计划程序。每个城市都有一个名为rateOfInterest的房产。两个城市之间的每条道路都有时间成本。问题是,考虑到开始城市,以及我们想要花费的具体时间,如何输出最有趣的路径(即城市的rateOfInterest的总和)。我在考虑使用一些贪心算法,但有没有算法可以保证最佳路径?

编辑正如@robotking所说,我们允许多次访问地点,这只是第一次访问时很有趣。我们有50个城市,每个城市大约有5个相邻的城市。每条边的成本函数是时间或距离。我们不必访问所有城市,只需使用给定的成本函数,我们需要返回具有最高ROI的最佳部分旅行。我希望这会让问题更加清晰!

3 个答案:

答案 0 :(得分:1)

http://en.wikipedia.org/wiki/Travelling_salesman_problem,请注意决策问题版本是“(其中,给定长度L,任务是决定是否任何游览比L更短)”。如果有人给我一个旅行推销员问题要解决,我可以将所有城市设置为具有相同的利率,然后决定问题是时间L的最有趣的路径是否实际访问所有城市并返回。

因此,如果您的问题有一个有效的解决方案,那么就不太可能为旅行商问题提供有效的解决方案。

如果你想要比贪婪的搜索更进一步,那么旅行商问题的一些方法可能适用 - http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.26.5150描述“迭代本地搜索”,这看起来很有趣,参考TSP。

答案 1 :(得分:1)

这听起来非常像加权方式的TSP实例,这意味着有一些顶点比其他顶点更令人满意......

现在,您可以找到尝试每种可能排列的最佳路径(使用回溯和一些修剪使其更快),具体取决于我们所讨论的城市数量。看到TSP问题是一个n! n>之后的问题10你可以忘记它......

如果您的城市数量不是那么小,那么找不到最佳路径是不可行的,所以放弃了想法......但是,很可能有一个足够好的启发式算法来近似一个足够好的解决方案。

Steven Skiena建议将“模拟退火”作为接近此类难题的首选启发式算法。它非常像“爬山”方法,但是更灵活或更宽容。我的意思是,在“爬坡”中,你总是只接受改进你的解决方案的改变,在“模拟退火”中,在某些情况下你实际上接受改变,即使它使你的解决方案在本地变得更糟,希望你在路上拿回你的钱......

无论哪种方式,用于近似类似TSP的问题的任何方法都适用于此。

答案 2 :(得分:1)

如果您想要最优,请使用强力穷举搜索,其中叶子是时间用完的叶子。只要搜索树的预期深度小于10且最差情况小于15,您就可以生成实用的算法。

现在,如果您考虑未来并期望您的城市网络增长,那么您无法确保最佳性。在这种情况下,您正在处理本地搜索问题。