如何定义水壶的启发式功能?

时间:2014-10-01 16:44:24

标签: algorithm search artificial-intelligence a-star heuristics

我试图将水壶问题放入启发式功能中,但我发现了一些问题。

有2个水壶,一个可容纳5个(x),另一个可容纳3(y)加仑的水。目标是(y,x)=(0,4)。

我无法弄清楚如何将其置于启发式函数中,而且我对状态的数量有疑问。如果我承认这些动作(从龙头中取出一个,将一个倒入排水管,从一个倒到另一个,直到接收水壶装满或浇水壶是空的),有15个可能的状态,但如果我考虑关于加仑数的所有可能性,有24种可能性。这是对的吗?

(0,0)

(3,0)(0,5)

(0,3)(3,5)(3,2)

(3,3)(0,2)

(1,5)(2,0)

(1,0)(2,5)

(0,1)(3,4)

(0,4)

我认为此问题的启发式函数可以定义为:

h(x,y) = (x * 5) + (y * 3)

但我也找到了一个问题的答案(Heuristic function for Water Jug) 现在我很困惑。有人可以向我解释一下吗?

max(estimate_from_parent - action_cost,estimate_from_this_node)

1 个答案:

答案 0 :(得分:5)

状态数和可达性:

你对理论的状态数是正确的(假设桶只能有一个整数加仑 - 否则它是无限的)。因为X可以包含6个可能的加仑数,而Y可以包含4个加仑,所以状态总数为6 * 4 = 24.

从技术上讲,在找到解决方案后,(3,1)也可以访问,因此有16种可能的状态。

启发式功能

就启发式功能而言,您可能需要花一点时间考虑一下您的目标。你想在桶x里加4加仑。因此,你越接近铲斗x中的四加仑,你就越接近你的目标,你的启发函数的值应该越低(因为它是估计的成本)。因此,当桶x中有四加仑时,应该发生启发函数的最低值。您在此处提出的启发式函数h(x,y) = (x * 5) + (y * 3)在(0,0)处最低。由于这不是您的目标节点,因此这不是一个很好的启发式功能。

在考虑启发式功能时,找到一个能让你的问题更加困难然后放松的约束通常很有用。这有助于提出一种可接受且一致的启发式方法,因为您的启发式方法基本上是最佳案例估计。对于这个问题,一个相当大的限制是你可以添加到铲斗x的一定量的水(即铲斗y中的数量,或者填充铲斗x所需的量)。我们可以放松这个约束,基本上最终得到h(x,y) = |X-4|(链接帖子中讨论的启发式函数,适应你的问题)。这绝对是可接受和一致的,因为如果采取这样的步骤是可能的话,实际上从一个步骤到该目标的成本是多少。如果您在目标节点,它将等于0.请注意,计算成本的方式对于使其成为有用的启发式方法至关重要。

这是否可以消除您的困惑?