我在爬山算法和水壶问题上有一个问题:
给定两个水壶,其中一个可以容纳X升水,另一个可以容纳Y升水,确定在其中一个水壶中精确获得D升水所需的步骤数。
从开始状态,(X,Y)=(0,0),它可以生成一些状态:
(x,y)=(0,y)
或
(X,Y)=(X,0)
从这些状态,它可以生成其他状态,直到结束状态,即(x,d)或(d,y)。
那么,我可以估计这个问题的启发式函数吗如何知道哪个州比其他州好?
谢谢大家。
最佳答案
将状态空间中的每个状态表示为(x,y)本身。
启发函数:每s的h(s)=(x,y)=x-d+y-d|
(假设您希望最小化h(.))
请考虑,这只是一个贪婪的决定,假设其中一个水壶包含的水量太近太多,这是一个良好的状态!显然这对于目标状态来说是正确的,但是它不能保证达到一个最优的解决方案,因为它根本不是HC所期望的!
为什么是这个?因为它是可以接受的,你可以用它(可能当你的老师要求时)来得到一个*并且它会给你一个最佳答案。
考虑到“爬山”算法的以下问题,不要期望太高:
山麓问题
局部峰值吸引程序的注意力,而不是试图达到“顶部”
高原问题
区域平坦,因此很少有程序吸引到一条路径上的另一条路径上
岭问题
每一步都是向下的,虽然不是在本地的最低限度