我最近开始学习人工智能入门课程,并被分配了一个任务,在Python中实现一个可接受的启发式函数,用A*搜索解决15-Puzzle问题。
我实现了曼哈顿距离以及其他一些启发式算法。Python代码运行得很好,算法实际上解决了这个问题,但我对曼哈顿距离启发式是否适用于这个特定问题有一些疑问。
根据理论,如果启发式算法从不高估到达目标的成本,则它是可接受的。这意味着启发式算法是乐观的,并且返回的成本永远不会大于实际成本。
当初始状态如下所示时(0表示空槽):
我实现了曼哈顿距离以及其他一些启发式算法。Python代码运行得很好,算法实际上解决了这个问题,但我对曼哈顿距离启发式是否适用于这个特定问题有一些疑问。
根据理论,如果启发式算法从不高估到达目标的成本,则它是可接受的。这意味着启发式算法是乐观的,并且返回的成本永远不会大于实际成本。
当初始状态如下所示时(0表示空槽):
1 2 3 4
0 6 7 8
5 9 10 12
13 14 11 15
我的程序可以在5步内解决问题,但是每个放错位置的方块的曼哈顿距离之和等于10,是实际成本的两倍。因此,实际成本远低于估计成本。这是否意味着启发式函数不可用或者我的逻辑有问题?
我考虑只计算空块的曼哈顿距离,但这会导致当空块处于正确位置但其他方块放错位置时,状态的预估成本为零。