首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >博弈的更好的启发式函数(AI Minimax)

博弈的更好的启发式函数(AI Minimax)
EN

Stack Overflow用户
提问于 2015-11-11 04:38:08
回答 3查看 5K关注 0票数 4

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

  • 幼虫可以对角向前和对角向后移动。
  • 鸟只能对角向前移动
  • 幼虫如果能到达第1线(篱笆)就会获胜。
  • 如果鸟类没有行动,幼虫也会获胜。
  • 鸟类不能“吃”幼虫。
  • 如果幼虫不能移动(根本不能移动),鸟类就会获胜。

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

我已经实现了一个MiniMax (Alpha Beta剪枝),并且我使用了下面的估价()函数(启发式函数)。

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

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

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

幼虫会尝试最大化启发值,而鸟类则会尝试MINIMIZe。

示例:

然而,这是一个简单而天真的启发。它的行为并不明智。我是人工智能的初学者,我想知道我能做些什么来改进这个启发功能?

什么是好的/明智的启发?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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,幼虫):为了反映鸟类更接近幼虫的情况(以阻止它)。

我相信仍有很多值得考虑的地方,例如离幼虫最近的鸟应该优先选择移动,但上述功能的方向是有意义的,很多细节都可以很容易地加以改善。

票数 2
EN

Stack Overflow用户

发布于 2015-11-11 23:36:42

有一个简单的方法可以大大提高你的启发式。在当前的启发式中,平方A1的值比平方A8的值少8。这使得鸟类倾向于向左边的游戏板移动,因为向左的移动总是比向右的移动要高。这是很准确的。第1行上的所有方格都应该具有相同的值。这样,在第1a1行,第2a2行,等等,所有的正方形都会被分配。这样,鸟类和幼虫就不会倾向于向左移动,而是可以专注于做出一个好的移动。

票数 2
EN

Stack Overflow用户

发布于 2015-11-11 05:17:00

你可以考虑到这样一个事实:当幼体在板的两侧时,鸟类会比幼虫有一个位置优势,所以如果幼虫是最大的,那么改变板的侧瓦值要小一些。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33644353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档