Artificial intelligence A*搜索算法启发式函数

Artificial intelligence A*搜索算法启发式函数,artificial-intelligence,a-star,heuristics,Artificial Intelligence,A Star,Heuristics,我试图用a*算法找到任意长度的滑块拼图的最优解 滑块式拼图是一种白色(W)和黑色(B)的游戏,它们排列在一个带有单个空白(-)的线性游戏板上。给定棋盘的初始状态,游戏的目的是将棋盘排列成目标图案 例如,我目前在董事会上的状态是BBW-WWB,我必须实现BBB-WWW状态。 瓷砖可以通过以下方式移动: 1.滑入相邻的空白区域,费用为1。 2.跳过另一块瓷砖进入空白区域,花费1英镑。 3.跳过2块瓷砖进入空白空间,花费2美元 我已经实现了所有功能,但我不确定启发式函数。它计算当前状态下错位磁贴到目标

我试图用a*算法找到任意长度的滑块拼图的最优解

滑块式拼图是一种白色(W)和黑色(B)的游戏,它们排列在一个带有单个空白(-)的线性游戏板上。给定棋盘的初始状态,游戏的目的是将棋盘排列成目标图案

例如,我目前在董事会上的状态是BBW-WWB,我必须实现BBB-WWW状态。 瓷砖可以通过以下方式移动: 1.滑入相邻的空白区域,费用为1。 2.跳过另一块瓷砖进入空白区域,花费1英镑。 3.跳过2块瓷砖进入空白空间,花费2美元

我已经实现了所有功能,但我不确定启发式函数。它计算当前状态下错位磁贴到目标状态下最近放置的相同颜色磁贴的最短距离(最小成本)

考虑到当前状态BWB-W和目标状态BB-WW的给定问题,启发式函数给出的结果为3。(根据最小距离:B=0+W=2+B=1+W=0)。但实现目标的实际成本不是3(移动错位的W=>cost 1,然后移动错位的B=>cost 1),而是2

我的问题是:我应该这样计算最小距离,而不在乎高估,还是应该除以2?根据瓷砖可以移动的方式,一块瓷砖可以以相同的成本克服两倍的成本(参见移动1和2)


我试了两种版本。虽然分割的距离为实现的目标提供了更好的最终路径成本,但它访问的节点数=>比未分割的节点花费更多的时间。正确的计算方法是什么?我应该使用哪一个?

我不清楚这个问题的可接受启发式函数是什么样子的,所以我不会承诺说,“使用除以二的函数。”但我会告诉你,你提出的简单函数是不可接受的,因此不会给你带来好的性能。为了使A*正常工作,所使用的启发式必须是可接受的;为了允许,启发式算法必须绝对总是给出一个乐观的估计。这一个没有,正是您在示例中强调的原因


(虽然现在我想起来了,除以2似乎是一种合理的方式来强制受理。我只是不打算承诺。)

你的启发是不可接受的,所以你的a*不能保证每次都能找到最佳答案。可接受的启发式方法决不能高估成本


一个比将启发式成本除以3更好的启发式方法是:不增加每个字母到其最终位置的距离D,而是增加ceil(D/2)。这样,一个字母1或2,得到一个1值,3或4,得到一个2值,依此类推

我愿意承诺除以2。你能做的最好的事情就是以1个成本移动2个空间。所以除以2得到了一个最好的情况,它是可接受的和一致的。