更好的游戏启发式函数(AI Minimax)

Better Heuristic function for a game (AI Minimax)

我在 java 中编写了一个游戏。游戏很简单(参考下图)。有4只鸟和1只幼虫。这是一款 2 人游戏(AI vs Human)。

游戏开始时,幼虫开始,然后一只鸟可以移动(任何一只),然后是幼虫,等等...


我已经实现了 MiniMax(Alpha Beta 剪枝)并且我正在使用以下 evaluate() 函数(启发式函数)。

让我们为棋盘上的每个方块指定以下数字。

因此,我们的评价函数将是

h(n)=幼虫位置值-鸟1位置值-鸟2位置值-鸟3位置值-鸟4位置值

幼虫将尝试最大化启发值,而鸟类将尝试最小化它

示例:

但是,这是一种简单而幼稚的启发式方法。它的行为并不聪明。我是 AI 的初学者,我想知道我可以做些什么来改进这种启发式功能?

什么是 good/informed 启发式?

这个怎么样:

最大:幼虫

最少:鸟

H(t)=max_distance(larva,line_8)+Σmin_distance(bird_n,larva)

H(t)=Σmin_distance(bird_n,larva) - min_distance(larva,line_1)

max_distance(larva,line_8):反映幼虫越接近1号线的情况。

Σmin_distance(bird_n,larva):反映鸟类离幼虫较近(挡住它)的情况。

我相信还有很多东西可以考虑,比如离幼虫最近的鸟应该优先选择移动,但是上面函数的方向是有道理的,很多细节可以认为可以轻松改进它。

你可以考虑到当幼虫在板的两侧时鸟类比幼虫有位置优势,所以如果幼虫是 MAX 则将板的侧面图块值更改为更小.

有 1 种简单的方法可以显着改进您的启发式算法。在您当前的启发式算法中,方块 A1 的值比方块 A8 的值小 8。这使得小鸟倾向于向游戏板的左侧移动,因为向左移动总是比向右移动更高。这是准确的。第 1 行的所有方块应具有相同的值。因此,将第 1 行的所有方块分配为 1,第 2 行的所有方块分配为 2,等等。这样,鸟类和幼虫就不会倾向于向左移动,而是可以专注于做出好的移动。