我试图将水壶问题放入启发式功能中,但我发现了一些问题。
有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)
答案 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.请注意,计算成本的方式对于使其成为有用的启发式方法至关重要。
这是否可以消除您的困惑?