我想写一个应用程序,帮助说旅行推销员/音乐家计划他们的旅行。
所以这是关于制定有效的行程。
因此,他们会输入他们的起点和终点以及他们想要访问的地点,程序会输出建议的路线以包含地图上的那些点。
假设为网络上的节点提供边缘信息,建议的路线显然会最小化时间,距离和财务成本。
有人可能会发布一些伪代码或指向描述解决此问题所需的必要算法的网站的指针。
我看过A *,但这似乎只是一个起点和终点。
欢迎任何想法
谢谢
亚历
答案 0 :(得分:3)
正如其他作者所写,这是一个旅行的销售员问题。对于您的音乐家旅游刨床,您需要两者:(i)计算从一个位置到另一个位置的最低成本路径[通过物理网络]和(ii)计算给定起点和终点位置的最佳位置序列的算法和其他限制,如时间窗口。
(i)可以用例如Dijkstra,A *,Contraction Hierarchies
来解决(ii)可以用Held-Karp,分支和限制/切割[确切]和Lin-Kernighan,或任何其他(元)启发式解决,也可用于解决车辆路径问题(VRP)[启发式] < / p>
但是,有效地实施这些算法无关紧要。因此,我建议您使用现有的软件。对于(i)GraphHopper将是一个完美的选择,对于(ii)你可以尝试jsprit。两者都是用Java编写的,都是开源的。
答案 1 :(得分:1)
TSP(旅行商问题)就是你想要的,你只需要调整成本函数,这样它就不是纯粹基于距离了。最有可能的是,您希望将距离转换为实际的美元价值,以计算旅行费用和旅行时间。
最好有一个滑块将计算偏向旅行时间或旅行费用(时间就是钱和所有)。尽管如此,还不清楚如何优化TSP实例的计算密集程度。
答案 2 :(得分:1)
如上所述,这是traveling salesman problem(TSP)的情况。请注意,当 n (城市数量)不是太大时,可以使用强力算法求解TSP。音乐家可能只想访问15个或更少的城市,因此您仍然可以通过强力搜索找到最佳路径。您只需计算不同城市之间的权重(距离和其他因素),然后检查所有可能性以找到最佳路线。如果有超过20个城市,您仍然可以找到最佳解决方案,但您需要比直接暴力搜索更好的算法。