4

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

在此处输入图像描述

  • 幼虫可以斜向前和斜向后移动
  • 鸟类只能沿对角线向前移动
  • 如果能到达 1 号线(栅栏),则幼虫获胜
  • 如果鸟儿没有动作,幼虫也会获胜
  • 鸟类不能“吃掉”幼虫。
  • 如果幼虫没有向左移动(根本无法移动),鸟类获胜

在此处输入图像描述

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


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

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

在此处输入图像描述

因此,我们的评价函数为

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

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

例子:

在此处输入图像描述

然而,这是一种简单而幼稚的启发式方法。它不会以聪明的方式行事。我是 AI 的初学者,我想知道我可以做些什么来改进这个启发式函数?

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

4

3 回答 3

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):反映larva离1号线更近的情况。

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

我相信还有很多事情可以考虑,例如离幼虫最近的鸟应该优先选择移动,但是关于上面功能的方向是有道理的,并且可以考虑很多细节来轻松改进它.

于 2015-11-11T05:07:21.383 回答
2

有一种简单的方法可以显着改善您的启发式方法。在您当前的启发式中,正方形 A1 的值比正方形 A8 的值小 8。这使得小鸟倾向于向棋盘的左侧移动,因为向左移动总是高于向右移动。这一点都不准确。第 1 行的所有方格都应具有相同的值。因此将第 1 行中的所有方格分配为 1,将第 2 行中的所有方格分配为 2,依此类推。这样鸟类和幼虫就不会倾向于向左移动,而是可以专注于做出好的移动。

于 2015-11-11T23:36:42.860 回答
1

您可以考虑这样一个事实,即当幼虫位于棋盘两侧时,鸟类将比幼虫拥有位置优势,因此如果幼虫为 MAX,则将棋盘的侧瓦值更改为更小。

于 2015-11-11T05:17:00.470 回答