实现一个象棋引擎有多难?

50
我在想实现一款国际象棋引擎有多难。是否已经存在开源实现?
似乎需要为给定的棋局设定一个评分函数,并以非常快的方式探索几个可能的未来棋局。当然不可能探索所有可能的未来着法,因此可以贪婪地跟随最有前途的着法,或者使用类似模拟退火这样的近似技术以概率性地跟随可能的着法。
您认为这是否在机器学习研究生项目的范围内——假设学生能够使用基本功能,例如返回给定棋子的下一步可能移动的开源实现?可能过于困难了吗?
有不同的团队研发国际象棋引擎然后让它们相互对战的确是一个有趣的项目...

感谢所有的回答。另一个方面是棋谱数据库。http://www.chessgames.com 上使用了一个大型的数据库,但是否有可供免费使用的数据库?此外,理想情况下,人们希望在比赛进行中学习对手的下棋方式,以更好地预测他或她的下一步棋。 - Frank
13个回答

0

你需要为给定的状态生成所有有效的移动。然后对于每种可能性,你应该检查对手的可能移动。如果其中至少有一个会使你的位置变差,那么你就不应该跟随那个分支。为了做到这一点,你需要一些评分来确定你的表现如何。象棋已经有一些规则来确定哪个单位值多少分。只需要向前看几步就可以了。打败程序仍然是具有挑战性的。

当然,这远非完美:真正的玩家可以牺牲一些单位来实现长期目标。这个算法不会这样做。


那就是阿尔法贝塔算法,对吧?你最后的评论很正确:如果人类对手为了获得长期利益而牺牲一枚棋子,那么他正在进行一步计算机没有预料到的走法。这可能就是国际象棋大师战胜优秀的国际象棋引擎的方法。 - Frank
我差不多搞对了。现在,我知道它的名称后,我找到了实际的算法: http://en.wikipedia.org/wiki/Alpha-beta_pruning#Pseudocode 它并不那么容易决定哪些分支是无用的。我的答案中的算法精度较低,但更快。 - stribika

0

我们在算法和数据结构(大二计算机科学)课程中完成了曼卡拉AI和国际象棋AI。

然而,教授提供了大量的国际象棋引擎代码,我们需要做的是改进决策函数、实现将军等其他功能。


0
在我本科的人工智能课程中,我们花了半个学期创建各种棋类引擎,并使用XBoard或WinBoard进行测试。然后,在学期结束时,我们举行了一场比赛,让学生的棋类引擎在XBoard中相互竞争。总体而言,效果还不错。
如果我没有记错的话,与XBoard的接口相当容易。以下是一些链接。

http://www.gnu.org/software/xboard/

XBoard的接口

http://www.tim-mann.org/xboard/engine-intf.html

我不确定这是否能满足您的所有需求,我认为我们的国际象棋引擎必须创建自己的棋盘表示并自行制定移动,但至少它可以为您提供一个知道规则并具有图形用户界面的棋盘。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接