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

问题描述 投票:4回答:1

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

有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)

algorithm search artificial-intelligence a-star heuristics
1个回答
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.请注意,计算成本的方式对于使其成为有用的启发式至关重要。

这会清除你的困惑吗?

© www.soinside.com 2019 - 2024. All rights reserved.