我正在开发一个国际象棋游戏,目前我正在尝试实现一个极大极小算法。我以前没有这样做过,而且我对如何以编程方式表示和实现以下评估函数功能(材料,移动性,棋子方桌,中心控制,陷阱棋子,国王安全,节奏和棋子结构)也不是很清楚(如果有人能给我详细解释,我将不胜感激)。我已经能够为每个棋子赋值,棋子动作值和每个棋子的方桌。我目前的问题是如何生成要从得分中添加或减去的攻击和防御值。这里的想法是,我想奖励保护其碎片的AI代理,并惩罚它被攻击的碎片。感谢预付款。
发布于 2014-07-12 16:39:43
您提到的每个评估功能都将占用计算时间。正如你可能已经知道的,国际象棋引擎的实力来自两个来源:
两者都在争夺同样有价值的资源,计算时间。评估往往是基于启发式的,因此有点模糊,而搜索往往会产生更具体和相关的结果。如果你开始构建一个引擎,那么我建议你专注于搜索,同时保持基本的评估(但不是弱!)。这样,您将能够准确地指出哪里出了问题,从而避免可能的早期失望。此外,像Stockfish这样的流行引擎也是从构建一个强大的搜索算法开始的。
如果你有足够的耐心阅读这篇文章,让我为你指出两个有用的资源来进行评估:
希望它能有所帮助:)
发布于 2014-07-12 16:10:00
我认为你不应该包括攻击和防御部分的计算。minmax算法已经以一种更有效的方式考虑了该功能。
如果在接下来的一步中,对手可以拿到它,那么在攻击中的一小块。如果你试图在静态评估函数中评估这种可能性,如果你想正确地这样做,你会遇到麻烦。如果我的受保护的兵被对手的皇后拿走了,这不是问题。你是如何考虑这一点的?如果我的王后被对方的棋子夺走,但移动棋子会使国王受到攻击?
这些注意事项最好由minmax算法来管理,而不是由计算器来管理。考虑到,要知道你可以吃多少块/可以吃多少块,你应该考虑所有可能的移动,并且你可能会花费与minmax算法中更深一级的时间相同的时间。此外,如果您稍后决定在minmax中继续前进一步,那么这段时间是浪费的。
https://stackoverflow.com/questions/24710968
复制相似问题