2014-07-12 27 views
0

我正在开发国际象棋游戏,此刻我正试图实现一个极小极大算法。我之前没有这样做过,也很少了解如何以编程方式表示和实现以下评估功能特性(材料,机动性,片方形表,中心控制,被困件,国王安全,节奏和典当结构)我很清楚(如果有人能详细向我解释,我会很感激)。我已经能够为每件棋子分配值,分块动作值和一张方形桌子。目前我们遇到的问题是如何生成Piece攻击和防守值,这些值将会从得分中增加或减少。这里的想法是,我想奖励人工智能代理人保护它的作品并惩罚它受到攻击。感谢进步。需要关于国际象棋游戏评估功能的帮助

回答

0

我认为你不应该包括对攻击和防守棋子的计算。该功能已被minmax算法以更有效的方式考虑在内。

如果在随后的移动中对手可以拿下它,那么一件受到攻击。如果你尝试在静态评估函数中评估这种可能性,如果你想正确地做到这一点,你将会遇到麻烦。如果我的受保护的棋子被对手皇后拿走,那不是问题。你如何考虑这一点?如果我的女王被对面的棋子占据,但移动棋子让国王受到攻击?

这些考虑因素最好由minmax算法管理,而不是评估者。考虑要知道你可以吃多少块/可以吃掉,你应该考虑所有可能的动作,并且你可能会花费相同的时间,以便在minmax算法中使用更深的一层。此外,如果您后来决定在minmax中确实进一步进一步,那么时间就会被浪费掉。

3

您提到的每个评估功能都会占用计算时间。正如你可能已经知道,一个国际象棋引擎的棋力有两个来源:

  • 搜索
  • 评估

而且两者争夺同一宝贵的资源,计算时间。 评价往往是基于启发式的,因此有点模糊,而搜索倾向于产生更具体和相关的结果。如果你开始建立一个引擎,那么我会建议把重点放在搜索上,同时保持基本的评估(但不要弱!)。这样你就可以确切地知道哪里出了问题,从而避免可能的早期失望。而且,像鳕鱼这样的流行引擎也首先建立了一个强大的搜索算法。

如果你已经足够的耐心远远阅读,让我指出你两个有用的资源进行评估:

  1. Chess Programming Wiki's evaluation page:这个网站可能是在一般国际象棋引擎发展的最好在线资源。
  2. Link to a basic but not weak evaluation function:这是C#代码。不幸的是,我无法找到基于此评估的原始文章。

希望它能帮助:)

+0

非常感谢您的回答,它可以帮助 – user3816650