我正在为Blocksworld问题开发一个启发式解决方案。
我尝试使用多个块作为我的h(n)。它似乎没什么效果。
有人可以为问题指出一个合适的启发式方法,并用一些例子来解释它是如何工作的。
Blocksworld Problem Example:
Initial(starting State):
Stack 0: D,B
Stack 1: A,E
Stack 2: C
Stack 3: F
Goal State:
Stack 0: A,B,C,D,E,F
答案 0 :(得分:0)
Blocksworld问题包括一堆木块,它们被标记,一张桌子和一个理想的终点位置。允许移除顶部块并将其放置在另一个堆栈或桌面上(启动新堆栈),但不允许移动另一个块覆盖的块。目标是以最小的移动次数达到最终状态。
使用A *,我们需要一个启发式方法来确定移动是否接近或远离我们的目标。因此,对于每个块的位置得分为1,然后从底部到顶部在最终位置对桩进行评分,计算块到所需位置的距离(因此,如果块在顶部,则得分-1,如果它在第二个位置,得分为-2,然后对下一个块做同样的事情,所以如果两个块被反转,它会给你一些不准确的度量,但希望不会太糟糕)。
我不知道这将如何表现。它显然是一个开放的编程问题。