实施国际象棋引擎有多难?

时间:2009-07-18 22:15:06

标签: machine-learning chess

我想知道实施国际象棋引擎有多难。是否已经有开源实现?

似乎你需要一个给定的棋盘星座的评分函数,以及探索几个可能的未来棋盘星座的快速方法。探索所有可能的未来动作当然是不可能的,因此人们可以贪婪地遵循最有希望的动作,或使用像simulated annealing这样的近似技术来概率地跟踪可能的动作。

您是否认为这属于machine learning研究生项目的范围 - 假设有一个学生可以使用的开源实现,它可以执行基本的操作,例如返回下一个可能的动作给出数字?可能太难了?

让不同的团队在国际象棋引擎上工作,然后让他们互相对抗,这将是一个有趣的项目......

13 个答案:

答案 0 :(得分:54)

去年我在C#中建立了自己的国际象棋引擎。这并不困难。在我的工作中我犯了错误,我发现互联网上的信息并没有清楚地呈现出来,而且大部分信息只是从其他网站上复制而来。

为了让其他人更轻松地完成这个过程,我一直在记录我的国际象棋引擎的开发,并在我的博客上发布了大部分源代码:

http://www.chessbin.com

我甚至创建了一个Chess Game Development Kit,它将帮助您开始开发自己的国际象棋引擎,其中包含:

  1. 代表国际象棋棋盘和棋子所需的所有代码
  2. 与验证棋子移动相关的代码
  3. 显示国际象棋位置并允许您在棋盘上移动棋子的图形用户界面
  4. 我的网站基本上是专门为像你这样的人而设的;想要开始建立自己的国际象棋引擎的人。

答案 1 :(得分:33)

是的,这绝对属于学生项目的范围。以下是我的存档中的一些链接,可以帮助您入门:

答案 2 :(得分:8)

Crafty是最受欢迎的国际象棋引擎之一。但是我不鼓励你将它用于用C语言编写的学生项目,非常复杂且非常难以理解,因为它是高度优化的。

出于教育目的,我建议您查看Adam Berents site,其中描述了他在C#中实施国际象棋引擎时所经历的过程。当然也可以使用源代码。在我看来,这是一个很好的起点。

答案 3 :(得分:7)

我无法回答您的问题,但我可以回答您的最终评论

  

“这将是一个有趣的项目   不同的团队工作在国际象棋引擎   然后让他们对抗每一个   其他......“

这已在FICS国际象棋服务器上完成。我建议你登录那里(需要telnet)并检查文档,你可能能够与能够给你关于他们的象棋机器人的特定提示的人取得联系

答案 4 :(得分:6)

现代PC上合理的国际象棋引擎肯定是可行的,特别是如果你已经足够老了,可以记住有许多国际象棋程序在1和2 MHz 8位机器上只使用几K内存就可以很好地运行。你现在可以用解释性的语言掏出一个国际象棋引擎,并从顶级的6502或Z80程序员那里击败他最快的东西。

我和Dan Spracklen一起工作,他和妻子Kathleen在1978年完成了Sargon。 Kathleen的兄弟为Apple II做了端口,我与他和他的儿子一起工作。 (当时我与这些家伙合作,国际象棋换利润的业务已经完成。我记得有一个人带出了Atari ST和Amiga国际象棋游戏,到那时他们的市场确实不多。)< / p>

Computer Gamesmanship”是对国际象棋节目的极好介绍,因为业余爱好者在1983年表演过它。阅读时仍然是一种乐趣。涵盖了好东西:alpha-beta,minimax等。

这是一本很好的书,你可以从那里开始,然后了解自那以后取得的进展。

alt text

答案 5 :(得分:4)

做一个好的很难,但可能在研究生项目的合适水平上(当我拿着我的计算机科学专业的时候,我的一个朋友为他的最后一年论文写了一个国际象棋引擎)。

是的,有开源的,领先的竞争者是GNU Chess,这是非常受尊重的。

答案 6 :(得分:2)

每年在我的大学,人工智能课程入门(第三年课程)要求学生从头开始创建国际象棋课程和论文,我们在课堂上介绍了关于对抗性搜索的章节,以便学生有足够的知识做到这一点。 对我们来说,这个项目既可以是我们自己也可以是另一个项目(显然,如果与合作伙伴合作,可以选择更好的项目,比如更深层次的等等)。 因为计算机图形学课程也是第三年的课程,学生可以将最终项目与人工智能课程的最终项目结合起来。

因为我正好在我的第三年并且正在修读这两门课程(现在已经在第一学期结束了),所以我和一位同时参加这两门课程的朋友合作,我们一直在研究这个课程。我们的考试结束(大约在12月21日),并且将在1月11日到期。

一个月内完全可行(特别是作为研究生项目)。我们正在制作一个3d国际象棋程序,因此它当然需要更多的工作而不仅仅是国际象棋引擎。 最难的部分将是决定董事会代表,实施所有规则(通过,铸造,促销等),创建启发式功能,以及游戏树(通常使用alpha-beta修剪)。

这是我们用来记录进度的网站,稍后我们完成后会托管代码和文件(现在它有点空)。 http://sites.google.com/site/chessatbrock/

答案 7 :(得分:2)

这取决于您的目标实力水平和编程技巧。 假设你遇到一个有经验的程序员,这是我的意见(我知道很多引擎,但从未编写过一个引擎):

*一个非常简单的引擎,可以击败初学者/业余爱好者(ELO 1200-1600):很多代码,但很容易。

*一个可以打败'俱乐部球员'的引擎(ELO 1800-2000):它开始变得艰难,你需要 打开书籍,优化和坚实的AI

*可以击败大师的引擎:很难,你需要几年的经验

*顶级发动机(如Rybka,Houdini,Stockfish,Hiarcs),可以在99%的时间内击败地球上的任何人:这是一项巨大的努力,你需要很多的耐心和多年的经验。

这就是我的看法!

答案 8 :(得分:0)

所有这些都取决于您修复游戏AI的目标! 如果它是一个2人游戏..容易!但AI非常难......对,知名的开源是GNU Chess!

一些算法:http://www.vclcomponents.com/s/0__/source_code_genetic_algorithm_chess
这是一个chess programming wiki

答案 9 :(得分:0)

您需要为给定状态生成所有vaild移动。那么对于每一种可能性你应该检查对手可能的动作。如果至少有一个让你的位置变差,那么你就不应该追随那个分支。要做到这一点,你需要某种评分来确定你的表现。国际象棋已经有一些关于哪个单位值得多少分的规则。仅仅展望这样的几个步骤就足够了。击败该计划仍然具有挑战性。

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

答案 10 :(得分:0)

我们做了一个mancala AI,然后是算法和数据结构(二年级CS)中的国际象棋AI。

然而,教授提供了大量的国际象棋引擎,我们必须做一些事情,比如改善决策功能,实施将死等等。

答案 11 :(得分:0)

在我的本科AI课程中,我们花了半个学期创建各种国际象棋引擎并使用XBoard或WinBoard测试它们。然后在学期结束时,我们举办了一场比赛,学生的国际象棋引擎在XBoard中相互竞争。总的来说,它运作得很好。

如果我没记错的话,与XBoard的接口相当容易。这是一些链接。

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

XBoard的界面

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

我不确定这是否能为您提供所需的一切,我认为我们的国际象棋引擎必须创建自己的棋盘表示并自行设置动作,但至少它会让您获得一个了解规则的图形板并有一个GUI。

答案 12 :(得分:0)

这可能过于简单,但仍然需要学习有趣的课程:我向您呈现ZX81 Chess game