如何为水壶问题定义启发式函数?

我在尝试将水壶问题转化为启发式函数时遇到了一些问题。

有两个水壶,一个可以装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)

但我在一个问题(水壶的启发式函数)中也找到了这个答案,现在我很困惑。能有人向我解释一下吗?

max(estimate_from_parent – action_cost, estimate_from_this_node)


回答:

状态数量和可达性:

关于理论上的状态数量你是正确的(假设水桶只能装整数加仑的水 – 否则是无限的)。因为水桶X可以装6种可能的加仑数,而水桶Y可以装4种可能的加仑数,所以总的状态数是6*4=24。

从技术上讲,(3,1)也是可达的,在你找到解决方案后,所以有16种可能的状态。

启发式函数:

关于启发式函数,你可能需要花点时间思考你的目标。你希望在水桶x中有四加仑水。所以你离在水桶x中有四加仑水越近,你就越接近你的目标,你的启发式函数的值应该越低(因为它是一个估计的成本)。因此,当水桶x中有四加仑水时,你的启发式函数的值应该最低。你在这里提出的启发式函数,h(x,y) = (x * 5) + (y * 3),在(0,0)时是最低的。由于这不是你的目标节点,这不太可能是一个好的启发式函数。

在思考启发式函数时,找到一个使你的问题变得更难的约束然后放宽它通常是有用的。这有助于提出一个可接受且一致的启发式函数,因为你的启发式函数基本上是一个最佳情况的估计。对于这个问题,一个相当大的约束是只能向水桶x中添加某些量的水(即水桶y中的量,或者填满水桶x所需的量)。我们可以放宽这个约束,基本上得到h(x,y) = |X-4|(在链接的帖子中讨论的启发式函数,适应你的问题)。这绝对是可接受且一致的,因为它有效地表示了从那个节点一步达到目标的成本,如果这样一步是可能的话。如果你在目标节点,它将等于0。请注意,你的成本计算方式对于使这个启发式函数有用至关重要。

这是否解除了你的困惑?

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注