更好的游戏启发功能(AI Minimax)

时间:2015-11-11 04:38:08

标签: artificial-intelligence heuristics minimax alpha-beta-pruning evaluation-function

有一个我用java编程的游戏。游戏很简单(参见下图)。有4只鸟和1只幼虫。这是一个2人游戏(AI vs Human)。

enter image description here

  • 幼虫可以向前倾斜并向后倾斜
  • 鸟类只能向前倾斜
  • 幼虫如果可以到达第1行(围栏)
  • 就会获胜
  • 如果鸟类没有动作,幼虫也会获胜
  • 鸟儿不能“吃掉”幼虫。
  • 如果幼虫没有向左移动(根本无法移动),鸟类会获胜

enter image description here

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

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

让我们在棋盘上的每个方格上给出以下数字。

enter image description here

因此,我们的评估功能将是

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

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

示例:

enter image description here

然而,这是一个简单而天真的启发式方法。它不会以聪明的方式行事。我是AI的初学者,我想知道如何改进这个启发式功能?

什么是好的/知情的启发式?

3 个答案:

答案 0 :(得分:2)

这个怎么样:

最大值:幼虫

最低限度:鸟类

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):反映鸟类更接近幼虫的条件(阻止它)。

我相信仍有许多事情可以考虑,例如,最接近幼虫的鸟应该优先选择移动,但关于上述功能的方向是有意义的,并且许多细节可以被认为是轻松改进。

答案 1 :(得分:2)

有一种简单的方法可以大大改善你的启发式。在当前的启发式算法中,方形A1的值比方形A8的值小8。这使得Bird倾向于向游戏板的左侧移动,因为向左移动总是高于向右移动。这是准确的。第1行上的所有方块应具有相同的值。因此,分配行1 a 1,行2 a 2等中的所有正方形。这样,鸟类和幼虫不会倾向于向左移动,而是可以集中精力进行良好的移动。

答案 2 :(得分:1)

你可以考虑这样一个事实:当幼虫位于木板的两侧时,幼鸟将具有优于幼虫的位置优势,因此如果幼虫是MAX,那么将木板的侧边砖值更小。 / p>