2017-10-08 25 views
0

我一直在阅读这个问题以供参考重复的状态: Graph Search vs Tree Search识别的状态空间树

一位评论者提出此评论这正是我所面临的形势。

“更正式地说,一个'单一状态'可以被树搜索多次访问,而不是一个节点。由于搜索树中的每个节点都对应着沿着状态空间图的单个路径,最多一次通过树搜索访问过。“

我的搜索算法正在生成与已经在搜索树中的节点相同的节点。检测这个新生成状态已经存在的最佳方法是什么,所以我可以避免进入无限循环? 我无法使用封闭列表,并需要为DFS执行循环检测。做这个的最好方式是什么?这是来自AI课程的作业题目,我正在为练习而做,而不是提交。我只是出于好奇而建立代理。任何帮助表示赞赏

回答

0

我想发布一个答案,我自己的问题的完整性。我最终在从根节点接触的每个节点中设置了一个访问位,并且如果我访问过设置了访问标志的节点(这是正常方式),则会得出一个周期。

我基本上有一堆名为“顶点”和“边缘”的对象,这些对象位于这些顶点之间,如果我曾经遍历另一端的边缘,而这个顶点是我设置了访问标志的顶点,知道代码中有一个循环。正如在其他链接中提到的,每个节点基本上都是一个具有不同状态对象的新对象,但状态对象基本上代表了代理以前的位置,并且我们希望避免生成此重复节点。