artificial-intelligence - 如何防止 A* 搜索重复路径

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

我正在进行 8 个谜题的挑战,我必须以最短的路径成本以正确的顺序排列图 block 。 对于我的启发式,我将错误放置的图 block 数量+ n 个图 block 到其目标位置的距离组合起来。

目标是

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)

最佳答案

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

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

该段代码的目的是为了防止您的问题发生。

请注意,您为 closeSet 选择的数据结构将显着影响算法的运行时间。它不应该像列表一样,检查对象是否已在其中需要循环遍历整个列表。相反,您会想要查看诸如 HashMap /集合之类的内容(确切的术语取决于您选择的编程语言)。

关于artificial-intelligence - 如何防止 A* 搜索重复路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48958474/

相关文章:

algorithm - 曼哈顿距离是否仍然是这个修改后的 n 谜题中可接受的启发式算法?

algorithm - 谁能更清楚地解释 Nilsson 在 8-puzzle 中的序列得分?

c - 带有数组的 C 实现中的 Star 算法?

algorithm - TSP的GA算法方法

java - 构建 A* 算法的问题

c++ - 为 I/O 以外的事物重载移位运算符是否是一个好的设计?

algorithm - 8 个难题可解性规则是否适用于任何目标状态?

python - 为什么我的解决方案无法解决需要多于 1 步的棋盘的 8puzzle 问题?

artificial-intelligence - 大脑的计算机模拟

graph - AI 中的边缘搜索与 A* 算法