【发布时间】:2011-05-26 02:32:21
【问题描述】:
我的任务是编写 A* 算法(提供启发式算法)的实现,以解决旅行商问题。我了解算法,它很简单,但我看不到实现它的代码。我的意思是,我明白了。节点的优先级队列,按距离 + 启发式(节点)排序,将最近的节点添加到路径上。问题是,如果不能从前一个最近的节点到达最近的节点会发生什么?一个人实际上如何将“图形”作为函数参数?我只是看不到算法实际上是如何工作的,就像代码一样。
我在发布问题之前阅读了维基百科页面。反复。它并没有真正回答这个问题——搜索图表是一种方式,与解决 TSP 方式不同。例如,您可以构建一个图,其中任何给定时间的最短节点总是导致回溯,因为两条相同长度的路径不相等,而如果您只是尝试从 A 到 B,那么两条路径相同的长度是相等的。
您可以得出一个图,通过始终先走最近的方式永远无法到达某些节点。
我真的不明白 A* 如何适用于 TSP。我的意思是,找到从 A 到 B 的路线,当然,我明白了。但是TSP?我没有看到连接。
【问题讨论】:
-
A* 似乎是我从 CS 课程中记得的一个很好的总结。 Dijkstra algorithm 非常相似(但更简单),因此开始时可能会更好。优先级队列在这两种情况下都很方便。
-
@pst:如果你想从 A 点到 B 点,A* 和 Dijkstra 的算法很有用。如果你想通过具有特定约束的路径从 A 点到 A 点,那么,那是另一回事。
-
当我在 Uni 的时候(上个千年),我们有一个任务是用我们想要的任何语言实现 A*,大多数人选择了我们最熟悉的 C++,但我选择了 Prolog,因为它看起来更适合这个问题。长话短说,我完成任务的速度比大多数人都快,你也许可以从 Prolog 开始,跳过中间阶段。
-
“[...] 或特定于语言的代码,例如 Boost。” Boost::graph 有一个 A* 的实现
-
作为副本被关闭的......
标签: algorithm a-star traveling-salesman