如何修改STRIPS以避免进入循环或重复操作?假设我们有A - B - C - D - E作为区域(遍历问题),它们都是双向的。初始状态是我们在(A),目标是我们需要在(E)。结果可能是
`Travel(A, B) - Travel(B, C) - Travel(C, D) - Travel(D, C) -
Travel(C, B) - Travel(B, C) - Travel(C, D) - Travel(D, E)
。
简而言之,它走了A - B - C - D - C - B - C - D - E.在中间,它来回走动。我需要一个关于如何解决这个问题的想法,如果你能提供一个更好的伪代码。谢谢!
答案 0 :(得分:2)
您遇到的问题是您的算法正在返回"答案"而不是最好的答案。您应该查看搜索算法以及它们如何保证找到最短路径,因为问题是同构的。
您获取这些结果的原因有很多,但一般来说,它应该与您正在使用的搜索方法相关。您的算法会尝试返回C'之前'前进到E'直接因为节点之间存在某种隐式排序偏好。
请注意,从A你只能去B;从B你可以去C或A - 而且你要去C.为什么不再来一次?如果你的算法没有进入从A到B到A(...)的无限循环,那么你很可能不会应用简单的深度优先搜索。这里的关键是要理解算法在达到D时决定返回C的原因。
除了理解你的算法和深入的输入外,这里有一些想法:
如果您有已访问过的节点列表并优先考虑非访问节点,那么您可能会找到更好/最佳的答案。如果节点之间的连接没有改变,是否有必要两次访问节点?
或者,您是否限制了达到答案的步骤数量?如果您事先知道达到目标所需的最大步骤数,那么限制您对该步数的答案应该会产生最佳答案。
只需继续搜索 - 而不是在达到第一个结果时停止 - 然后比较替代解决方案也是可能的。这可能非常糟糕,但也不可避免地取决于具体情况。