我需要一个算法来找到最佳路径

时间:2010-01-03 11:53:32

标签: algorithm

我需要一种算法来找到寻路问题的最佳解决方案。问题可以表述为:

  • 在起点,我可以沿着多条不同的路径前进。
  • 每一步都有另外多种可能的选择。
  • 每个步骤可以执行两项操作:
    • 确定路径是否可接受的边界条件。
    • 确定路径是否已到达最终目的地并且可以选择为最佳路径的条件。
  • 在每个步骤中,可以消除许多路径,只允许“好”路径增长。

我希望这充分描述了我的问题,也是一种可能的暴力解决方案。

我的问题是:蛮力是问题的最佳/唯一解决方案,我还需要一些关于算法最佳编码结构的提示。

5 个答案:

答案 0 :(得分:5)

看看A *,并使用长度作为边界条件。

http://en.wikipedia.org/wiki/A%2a_search_algorithm

答案 1 :(得分:2)

您正在寻找某种状态空间搜索算法。在不了解特定问题的情况下,很难推荐一个在另一个上面。

如果你的空间是开放式的(无限树搜索),或者几乎如此(例如国际象棋),你需要一种能够修剪没有希望的路径的算法,以及选择有希望的路径。 alpha-beta算法(许多 OLD 国际象棋程序使用)立即浮现在脑海中。

A *算法可以提供良好的结果。从A *中获得良好结果的关键是选择一个良好的启发式(加权函数)来评估当前节点和各种后继节点,以选择最有希望的路径。简单的路径长度可能不够好。

Elaine Rich的AI教科书(老人但很好)花了相当多的时间在各种搜索算法上。完全披露:在我在UT Austin的大学期间,我是该文本的一只豚鼠。

答案 2 :(得分:1)

你是否试过breadth-first search?(BFS),如果长度是最佳路径的标准 您还必须修改算法以忽略“不可接受的路径”

答案 3 :(得分:1)

如果您的问题与您描述的完全一样,您有两种选择:深度优先搜索和广度优先搜索。

深度优先搜索会考虑一条可能的路径,一直到最后(或者只要它可以接受),然后才与其他路径进行比较。

广度优先搜索可能更合适,在每个交叉点,您考虑所有可能的后续步骤,并使用一些分数对每个可能步骤的顺序进行排名。这使您可以优先搜索并更快地找到好的解决方案(但证明您已经找到了最好的解决方案,只需深度优先搜索,并且不太容易并行化)。 / p>

但是,根据问题的详细信息,您的问题可能也适用于Dijkstra's algorithm。如果是,这是一个更好的方法!

这也是开发自己的算法的一个很好的起点,它比迭代搜索要好得多(如果这样的算法实际上可能,它可能不是!)

答案 4 :(得分:0)

A * plus floodfill和动态编程。很难实现,太难以在一个简单的帖子中描述而且太有价值而不能放弃,所以很抱歉我无法提供更多信息但是搜索洪水填充和动态编程会让你走上前进的道路如果你想去那里路由。

相关问题