鉴于有一个15平方的拼图,我们将使用星型搜索来解决这个难题。启发函数是曼哈顿距离。
现在有成本为T的人提供解决方案,我们不确定此解决方案是否是最佳解决方案。提供此信息后,
对于这个问题,我考虑了几种方法。
答案 0 :(得分:1)
您需要知道T是否是最佳解决方案。如果您不知道最佳解决方案,请使用平均成本;一条好的道路比一般的好。如果T已经好于平均水平,那么您就不需要找到新的路径。
是。启发式算法是帮助算法做出正确决策的假设。 A *算法做出以下假设:
良好的启发式方法极大地提高了性能(A *因此而有用)。糟糕的启发式方法使搜索远离了良好的解决方案并消除了性能。我的建议是了解你正在寻找的游戏;在国际象棋中,通常最好避免失去女王,因此这可能是一种很好的启发式方法。
在15x15搜索空间的情况下,启发式技术对性能影响最大,尤其是。在较大的搜索空间(2000x2000)中,充分利用数据和整数等高效数据结构可以提高性能。
您提供的解决方案实际上都是一样的;如果路径不如您拥有的其他路径一样好,请忽略它们。像A *这样的搜索算法会为你做这件事,正如j_random_hacker以迂回的方式说的那样。
OPEN列表是一组可能的动作;选择最好的并忽略其余的。 CLOSED列表是已经选择的一组移动,不是您想要忽略的移动。
(1) d(x) = Djikstra's Algorithm
(2) g(x) = Greedy Search
(3) a*(x) = A* Algorithm = d(x) + g(x)
为了让你的A *更贪婪(更喜欢次优但快速的解决方案),将g(x)的成本乘以贪婪搜索; (4) a*(x) = d(x) + 1.1 * g(x)
我实际测试了这个到1500x2000的搜索空间。 (3),标准A *,花了大约5秒来找到对方的目标。 (4)只用了几毫秒就找到了目标,证明了使用启发式算法的价值。
您还可以向A *添加其他启发式,例如: