我正在尝试使用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移动=>成本1,然后将放错位置的B移动=>成本1),而是2。
我的问题是:我应该这样计算最小距离并不关心过度估计,还是应该将其除以2?根据瓷砖的移动方式,同样的成本可以使一块瓷砖克服两倍的距离(参见移动1和2)。
我尝试了两个版本。虽然分割距离给出了更好的到达目标的最终路径成本,但它访问了更多的节点=>花费的时间比未分割的要多。如何正确计算?我应该使用哪一个?
滑块拼图是一种游戏,其中白色(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移动=>成本1,然后将放错位置的B移动=>成本1),而是2。
我的问题是:我应该这样计算最小距离并不关心过度估计,还是应该将其除以2?根据瓷砖的移动方式,同样的成本可以使一块瓷砖克服两倍的距离(参见移动1和2)。
我尝试了两个版本。虽然分割距离给出了更好的到达目标的最终路径成本,但它访问了更多的节点=>花费的时间比未分割的要多。如何正确计算?我应该使用哪一个?