我正在开发一款国际象棋游戏,目前我正试图实现一个极小极大算法。我之前没有这样做,也是我所知道的关于如何以编程方式表示和实现以下评估功能特征(材料,移动性,方块表,中心控制,被困件,王安全,节奏和典当结构)对我来说不太清楚(如果有人可以向我详细解释,我将不胜感激)。我已经能够为每个棋子分配值,棋子动作值和每个棋子的方形表。目前我们遇到的问题是如何生成经过攻击和防御的值,这些值将从分数中加上或减去。这里的想法是,我想奖励AI代理人保护其碎片并惩罚它以攻击碎片。谢谢你的进步。
答案 0 :(得分:3)
您提到的每个评估功能都会占用计算时间。你可能已经意识到,国际象棋引擎的力量来自两个方面:
两者都争夺同样宝贵的资源,计算时间。 评估往往是基于启发式的,因此有点模糊,而 search 往往会产生更具体和相关的结果。如果你开始构建引擎,那么我会建议专注于搜索,同时保持评估基本(但不弱!)。通过这种方式,您将能够准确地确定出错的地方,从而避免可能的早期失望。此外,像Stockfish这样的流行引擎也是在首先构建强大的搜索算法时开始的。
如果你有足够的耐心去阅读这篇文章,请允许我指出两个有用的评估资源:
希望有所帮助:)
答案 1 :(得分:0)
我认为你不应该包括对攻击和防守部分的计算。 minmax算法已经以更有效的方式考虑了这一功能。
在受到攻击的情况下,如果在下面的移动中对手可以接受它。如果您尝试在静态评估函数中评估此可能性,如果要正确执行此操作,则会遇到麻烦。如果我的受保护的棋子被对手女王带走,那不是问题。你如何考虑到这一点?如果我的女王被相反的棋子占领但移动典当会让国王受到攻击?
这些注意事项由minmax算法更好地管理,而不是评估者。考虑到要知道你可以吃/可以吃多少块,你应该考虑所有可能的移动,你可能会花费相同的时间用于在minmax算法中更深层次。此外,如果你后来决定在minmax中继续前进一步,那么浪费时间。