Artificial intelligence 如何防止*搜索重复路径
我正在做8个拼图的挑战,在那里我必须以最短的路径成本以正确的顺序排列瓷砖。 对于我的启发,我结合了#错放的瓷砖+n个瓷砖到目标位置的距离 目标是Artificial intelligence 如何防止*搜索重复路径,artificial-intelligence,a-star,sliding-tile-puzzle,Artificial Intelligence,A Star,Sliding Tile Puzzle,我正在做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)然后2)如果您查看上的算法伪代码,您会注意到它们命名为closedSet。这是一个集合,您可以在其中存储已扩展的状态(已为其生成后
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)然后2)如果您查看上的算法伪代码,您会注意到它们命名为
closedSet
。这是一个集合,您可以在其中存储已扩展的状态(已为其生成后续状态)。然后,通过所有继任者(或伪代码中的邻居)的循环从以下内容开始:
if neighbor in closedSet
continue // Ignore the neighbor which is already evaluated.
这段代码的目的是准确地防止您的问题发生
请注意,为closedSet
选择的数据结构将显著影响算法的运行时间。它不应该像列表一样,检查对象是否已经在其中需要在整个列表中循环。相反,您需要查看类似哈希映射/集的内容(确切的术语取决于您对编程语言的选择)。请查看。
1 3 4
8 0 2
7 6 5
if neighbor in closedSet
continue // Ignore the neighbor which is already evaluated.