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


当游戏开始时,幼虫开始,然后一只鸟可以移动(任何一只),然后是幼虫,等等。
我已经实现了一个MiniMax (Alpha Beta剪枝),并且我使用了下面的估价()函数(启发式函数)。
让我们给棋盘上的每个方格取以下数字。

因此,我们的评估功能将是
h(n) =幼虫位置值-鸟类位置值1-鸟类位置值2-鸟类位置值3-鸟类位置值
幼虫会尝试最大化启发值,而鸟类则会尝试MINIMIZe。
示例:

然而,这是一个简单而天真的启发。它的行为并不明智。我是人工智能的初学者,我想知道我能做些什么来改进这个启发功能?
什么是好的/明智的启发?
发布于 2015-11-11 05:07:21
这个怎么样:
最大值:幼虫
最低限度:鸟类
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(幼虫,line_8):为了反映幼虫更接近第1行的情况。
Σmin_distance(bird_n,幼虫):为了反映鸟类更接近幼虫的情况(以阻止它)。
我相信仍有很多值得考虑的地方,例如离幼虫最近的鸟应该优先选择移动,但上述功能的方向是有意义的,很多细节都可以很容易地加以改善。
发布于 2015-11-11 23:36:42
有一个简单的方法可以大大提高你的启发式。在当前的启发式中,平方A1的值比平方A8的值少8。这使得鸟类倾向于向左边的游戏板移动,因为向左的移动总是比向右的移动要高。这是很准确的。第1行上的所有方格都应该具有相同的值。这样,在第1a1行,第2a2行,等等,所有的正方形都会被分配。这样,鸟类和幼虫就不会倾向于向左移动,而是可以专注于做出一个好的移动。
发布于 2015-11-11 05:17:00
你可以考虑到这样一个事实:当幼体在板的两侧时,鸟类会比幼虫有一个位置优势,所以如果幼虫是最大的,那么改变板的侧瓦值要小一些。
https://stackoverflow.com/questions/33644353
复制相似问题