在棋类游戏评估功能方面需要帮助

时间:2014-07-12 08:03:34

标签: java algorithm artificial-intelligence chess

我正在开发一款国际象棋游戏,目前我正试图实现一个极小极大算法。我之前没有这样做,也是我所知道的关于如何以编程方式表示和实现以下评估功能特征(材料,移动性,方块表,中心控制,被困件,王安全,节奏和典当结构)对我来说不太清楚(如果有人可以向我详细解释,我将不胜感激)。我已经能够为每个棋子分配值,棋子动作值和每个棋子的方形表。目前我们遇到的问题是如何生成经过攻击和防御的值,这些值将从分数中加上或减去。这里的想法是,我想奖励AI代理人保护其碎片并惩罚它以攻击碎片。谢谢你的进步。

2 个答案:

答案 0 :(得分:3)

您提到的每个评估功能都会占用计算时间。你可能已经意识到,国际象棋引擎的力量来自两个方面:

  • 搜索
  • 评价

两者都争夺同样宝贵的资源,计算时间。 评估往往是基于启发式的,因此有点模糊,而 search 往往会产生更具体和相关的结果。如果你开始构建引擎,那么我会建议专注于搜索,同时保持评估基本(但不弱!)。通过这种方式,您将能够准确地确定出错的地方,从而避免可能的早期失望。此外,像Stockfish这样的流行引擎也是在首先构建强大的搜索算法时开始的。

如果你有足够的耐心去阅读这篇文章,请允许我指出两个有用的评估资源:

  1. Chess Programming Wiki's evaluation page:这个网站可能是国际象棋引擎开发的最佳在线资源。
  2. Link to a basic but not weak evaluation function:这是C#代码。很遗憾,我无法找到基于此评估的原始文章。
  3. 希望有所帮助:)

答案 1 :(得分:0)

我认为你不应该包括对攻击和防守部分的计算。 minmax算法已经以更有效的方式考虑了这一功能。

在受到攻击的情况下,如果在下面的移动中对手可以接受它。如果您尝试在静态评估函数中评估此可能性,如果要正确执行此操作,则会遇到麻烦。如果我的受保护的棋子被对手女王带走,那不是问题。你如何考虑到这一点?如果我的女王被相反的棋子占领但移动典当会让国王受到攻击?

这些注意事项由minmax算法更好地管理,而不是评估者。考虑到要知道你可以吃/可以吃多少块,你应该考虑所有可能的移动,你可能会花费相同的时间用于在minmax算法中更深层次。此外,如果你后来决定在minmax中继续前进一步,那么浪费时间。