【问题标题】:Handling looping actions in STRIPS planning处理 STRIPS 规划中的循环动作
【发布时间】:2014-07-26 14:11:27
【问题描述】:

如何修改 STRIPS 以避免进入循环或重复操作?假设我们有 A - B - C - D - E 作为区域(遍历问题),它们都是双向的。初始状态是我们处于 At(A),目标是我们需要处于 At(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。在中间,它来回走动。我需要一个关于如何解决这个问题的想法,以及你是否可以提供一个更好的伪代码。谢谢!

【问题讨论】:

    标签: search planning


    【解决方案1】:

    您面临的问题是您的算法返回的是“答案”而不是最佳答案。您应该看看搜索算法以及它们如何保证找到最短路径,因为问题是同构的。

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

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


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

    如果您有一个已经访问过的节点列表并优先考虑未访问过的节点,也许您会找到更好/最佳的答案。如果它们之间的连接不改变,是否需要两次访问节点?

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

    简单地继续搜索 - 而不是在达到第一个结果时停止 - 然后比较替代解决方案也是一种可能。这可能会非常糟糕,但也不可避免地取决于上下文。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多