【问题标题】:Best-First search in Boost Graph LibraryBoost Graph Library 中的最佳优先搜索
【发布时间】:2011-05-28 08:50:44
【问题描述】:

我开始使用 boost 图形库。我需要一个最佳优先搜索,我可以通过零成本使用 astar_search 来实现它。 (如果我错了,请纠正我。)

但是,我想知道是否还有其他可能性这样做?如果不考虑成本,算法应该会稍微高效一些。

编辑:抱歉描述不清楚。我实际上正在实施潜在的现场搜索,因此我没有与边缘相关的任何成本/权重,而是需要进行最陡下降搜索(这可以克服局部最小值)。

感谢任何提示!

【问题讨论】:

标签: c++ boost boost-graph


【解决方案1】:

您绝对可以使用 A* 来解决这个问题;你需要 h(x) 为 0,而不是 g(x)。 A* 根据

定义的 F 对节点进行评分
F(n) = g(n) + h(n).

TotalCost = PathCost + Heuristic.

g(n) = 路径成本,从初始状态到当前状态的距离

h(n) = 启发式,从当前状态到最终状态的成本估计。

来自Wikipedia

Dijkstra 算法,作为另一种 最佳优先搜索示例 算法,可以看作是一种特殊的 A* 的情况,其中所有 x 的 h(x) = 0。

【讨论】:

  • 抱歉,如果我没有清楚地表达我在寻找什么,请查看我的编辑。
【解决方案2】:

如果您对 C++ 感到满意,我建议您尝试一下YAGSBPL

【讨论】:

    【解决方案3】:

    正如 Aphex 的回答所建议的,您可能想要使用 Dijkstra 算法;设置边缘权重的一种方法是将w(u, v) 设置为potential(v) - potential(u),假设它是非负的。 Dijkstra 的算法假定边权重为正,因此距离随着您远离源节点而增加。如果您正在寻找最小的潜力,请翻转减法的两侧;如果您有上下波动的潜力,则可能需要使用 Bellman-Ford 之类的东西,这不是最好的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-23
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多