处理STRIPS规划中的循环操作

时间:2014-07-26 14:11:27

标签: search planning

如何修改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.在中间,它来回走动。我需要一个关于如何解决这个问题的想法,如果你能提供一个更好的伪代码。谢谢!

1 个答案:

答案 0 :(得分:2)

您遇到的问题是您的算法正在返回"答案"而不是最好的答案。您应该查看搜索算法以及它们如何保证找到最短路径,因为问题是同构的。

您获取这些结果的原因有很多,但一般来说,它应该与您正在使用的搜索方法相关。您的算法会尝试返回C'之前'前进到E'直接因为节点之间存在某种隐式排序偏好。

请注意,从A你只能去B;从B你可以去C或A - 而且你要去C.为什么不再来一次?如果你的算法没有进入从A到B到A(...)的无限循环,那么你很可能不会应用简单的深度优先搜索。这里的关键是要理解算法在达到D时决定返回C的原因。


除了理解你的算法和深入的输入外,这里有一些想法:

如果您有已访问过的节点列表并优先考虑非访问节点,那么您可能会找到更好/最佳的答案。如果节点之间的连接没有改变,是否有必要两次访问节点?

或者,您是否限制了达到答案的步骤数量?如果您事先知道达到目标所需的最大步骤数,那么限制您对该步数的答案应该会产生最佳答案。

只需继续搜索 - 而不是在达到第一个结果时停止 - 然后比较替代解决方案也是可能的。这可能非常糟糕,但也不可避免地取决于具体情况。