【问题标题】:How to prevent A* search from repeating paths如何防止 A* 搜索重复路径
【发布时间】:2018-02-24 01:32:54
【问题描述】:

我正在做 8 拼图挑战,我必须以最短路径成本以正确的顺序排列图块。 对于我的启发式方法,我将错位瓷砖的数量 + n 瓷砖的距离组合到其目标位置。

目标是

1 2 3
8 0 4
7 6 5

这样的谜题

1 2 3 
7 8 4
6 0 5

效果很好

但是有了这个配置

1 3 4
8 0 2
7 6 5

它无限选择这个组合为最短的

1)

1 0 4
8 3 2
7 6 5

2)

1 3 4
8 0 2
7 6 5

然后 1) 然后 2)

【问题讨论】:

标签: artificial-intelligence a-star sliding-tile-puzzle


【解决方案1】:

如果您查看wikipedia 上的算法伪代码,您会注意到他们命名为closedSet 的东西。这是一个集合,您可以在其中存储已扩展的状态(已为其生成后继的状态)。然后,遍历所有后继者(或伪代码中的邻居)的循环从以下开始:

if neighbor in closedSet
    continue        // Ignore the neighbor which is already evaluated.

这段代码的目的是完全防止您的问题发生。

请注意,您为 closedSet 选择的数据结构将显着影响算法的运行时间。它不应该像一个列表,检查一个对象是否已经在其中需要遍历整个列表。相反,您将希望查看诸如哈希映射/集合之类的东西(确切的术语取决于您选择的编程语言)。

【讨论】:

    猜你喜欢
    • 2013-01-20
    • 2012-02-06
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 2020-04-21
    相关资源
    最近更新 更多