【问题标题】:States graph for the '3 jugs of water' [closed]“3壶水”的状态图[关闭]
【发布时间】:2012-12-13 09:45:25
【问题描述】:

关于三壶水的问题:

我们有 3 个水壶,第一个水壶的容量是 12,第二个水壶的容量是 8,第三个水壶的容量是 3。 初始状态为:(0,0,0) 后继函数是:

  1. 添加:完全填满锯齿
  2. 倒入另一个:将一个水壶的内容物倒入第二个(直到第一个空或第二个完全装满)
  3. Empty 是:清空 jar 中的所有内容

目标状态为:(1,1,1)


我想画出它的状态树。我自己做的,但我不确定它是否正确?

         (0,0,0)
        /   |    \
       /    |     \
      /     |      \
(12,0,0) (0,8,0) (0,0,3)

(12,0,0)的子节点是:(12,0,0),(12,8,0),(12,8,3),(0,8,3),(0 ,0,3),(0,0,0),(9,8,3),(12,8,0),(4,8,3),(12,0,3),(12,5 ,3),(12,5,3),(12,8,0)

其中 (12,0,0),(0,0,0)==>因为它在根目录中,(12,8,0)==> 是失败节点,我们不展开它们。

我认为如果我扩展 (0,0,3),我将达到我的目标状态: 节点 (0,0,3) 的子节点:(3,0,0),(0,3,0),(0,0,3),(1,1,1) (1,1,1 ) 我的目标状态是对的吗?

问题:我理解正确吗?这些是状态和生成的树吗?

【问题讨论】:

  • 这不是真正的编程问题吧?
  • @musefan:是的。例如,Die-Hard Problem 可以用 A* 求解。这是使用归约图解决问题的基础培训。
  • 那么 OP 希望用什么编程语言来回答?这更多是关于编程的算法。
  • 算法在这里非常好。我们不仅回答“如何在 C 中拆分字符串”,还回答算法,可以在以后翻译成任何 PL 中的代码,这与编程非常相关,在这里非常好。
  • hmmm...我以为我们有一个专门的算法站点...不过似乎没有

标签: algorithm artificial-intelligence graph-algorithm


【解决方案1】:

该图对于第一步是正确的,但是 - 您展开兄弟 (12,0,0)、(0,8,0) 和 (0,0,3) 错误。
您应该在每次迭代中执行单个步骤,而不是多个步骤,并且不要尝试执行多个步骤。

因此:

successors((12,0,0)) = { (12,0,3), (12,8,0), (0,0,0), (9,0,3), (4,8,0) }
successors((0,8,0)) = { (12,8,0), (0,8,3), (8,0,0), (0,5,3), (0,0,0) }
successors((0,0,3)) = { (12,0,3), (0,8,3), (3,0,0), (0,3,0), (0,0,0) }

(对于每个状态,您只能执行 1 个允许的操作,而不是更多 - 以获取后继/后续状态)。

通过不断扩展这些,您最终将获得所有可能性。


仅供参考,这个问题有时被称为The Die Hard Problem,它是通过构建状态graph 并运行寻路算法(例如A*BFS)使用图算法简化来解决问题的经典示例.

【讨论】:

  • 您的意思是您可以一步从 (12,0,0) 转到 (12,0,3) 吗?从技术上讲,我认为这是两个步骤。
  • @AlexanderChertov:这是一个步骤,给定(12,0,0) - 将容量3(第三个)完全装满水,留下(12,0,3)。 (标准问题假设有无限的水源可以完全重新装满水壶,您可以完全装满其中的每一个。)
  • 我会说重新填充是一个单独的步骤。
  • @AlexanderChertov: (0,0,0)->(12,0,0)->(12,0,3),这里实际上没有重新填充。您填充 12 个锯齿(第 1 步),然后填充 3 个锯齿(第 2 步),总共 2 个操作(= 步)。如果您认为这一步不是微不足道的一步,请具体说明它是哪一步。 (请注意,如果您认为这是问题所在,则从湖中填充 3 的锯齿没有先决条件)。因此,从 (12,0,0)(而不是从初始状态)到 (12,0,3) 的转移是一个步骤。
  • 你是对的。抱歉,我没有专心。
猜你喜欢
  • 2012-10-03
  • 1970-01-01
  • 1970-01-01
  • 2017-10-31
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多