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

我想知道如何实现一个国际象棋引擎 。 有没有开源的实现?

看起来你需要一个给定棋盘星座的得分函数,以及探索几个未来棋盘星座的非常快速的方法。 探索所有可能的未来动作当然是不可能的,所以人们可以贪婪地遵循最有前途的动作,或者使用类似模拟退火的近似技术来概率地追踪可能的动作。

你认为这是在一个机器学习研究生项目的范围之内 – 假设有一个学生可以使用的开放源码实现,那么基本的东西就像返回给定数字的下一个可能的动作一样? 可能太难了?

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

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

为了让其他人更容易通过这个过程,我一直在logging我的国际象棋引擎的发展,并在我的博客上发布了很多源代码:

http://www.chessbin.com

我甚至创build了一个国际象棋游戏开发工具包 ,让你开始开发自己的国际象棋引擎,其中包含:

  1. 代表棋盘和棋子的所有代码
  2. 与validation棋子运动有关的代码
  3. graphics用户界面,显示国际象棋的位置,并允许你移动棋盘周围

我的网站基本上是专为像你这样的人 想要开始build立自己的国际象棋引擎的人。

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

  • 这是一个有用的国际象棋编程维基 。
  • 这是一个简单的国际象棋程序devise介绍 。
  • 这是一个更高级的介绍 。
  • 这是对复杂searchalgorithmMTD的一个很好的分析 。
  • 这是validation移动代的好指南。
  • 这描述了国际象棋程序的基本架构 。
  • 这是关于黑暗思想国际象棋程序很多很好的信息 。
  • 这是关于国际象棋程序devise的更多笔记 。
  • 合理介绍旋转的纸板 。
  • 合理的介绍魔术贴纸 。
  • 这是一个来自两位写国际象棋程序的学生的旧报告。
  • 最后,这里是维基百科的计算机象棋 。

狡猾是顶级的国际象棋引擎之一,完全开源。 不过,我不鼓励你把它用于C语言写的学生项目,因为它是高度优化的,非常复杂,很难理解。

为了教育目的,我build议看看Adam Berents网站 ,他描述了他在C#中实现一个国际象棋引擎时所经历的过程。 源代码当然可用。 在我看来,这是一个很好的起点。

我无法回答你的问题,但我可以回答你最后的评论

“让不同的团队在国际象棋引擎上工作,然后让他们互相竞争是一个有趣的项目……”

这已经在FICS国际象棋服务器上完成了。 我build议你在那里login(需要telnet)并检查文档,你或许可以联系到能够给他们chessbots的特定提示的人

现代个人电脑上合理的国际象棋引擎当然是可行的,特别是如果你足够大的话,记得有很多国际象棋程序在1和2MHz的8位机器上只用了几K的内存就可以发挥出色。 现在,你可以用一种解释的语言来榨出一个国际象棋引擎,然后用顶级的6502或者Z80程序员打败他的最紧密的东西。

我和丹·斯普拉克伦(Dan Spracklen)一起工作,丹·斯普拉克伦(Dan Spracklen)于1978年与妻子凯瑟琳(Kathleen)合作, 凯瑟琳的兄弟做了苹果二号的港口,我和他和他的儿子一起工作。 (当时我和这些人一起工作,为消费者赢利的事业已经完成了,我记得有一个人拿出了Atari ST和Amiga Chess的游戏,到那时真的没什么市场。

“ 电脑游戏 ”是1983年业余爱好者进行国际象棋程序的一个了不起的介绍。读取它仍然是一种乐趣。 涵盖好的东西:alpha-beta,minimax等

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

替代文字http://g-ecx.images-amazon.comhttp://img.dovov.comG/01/ciu/a9/01/ef2de893e7a081414e106110.L._AA240_.jpg

要做好一个很难,但可能在一个研究生项目的适当水平(当我拿着我的计算机科学学士学位时,我的一个朋友为他的gradle论文写了一个国际象棋引擎)。

是的,有开放源代码的,领先的竞争者是GNU国际象棋 ,这是非常尊重。

每年在我的大学里,“人工智能入门”课程(三年级课程)要求学生从头开始创build一个国际象棋程序和一篇论文,并且我们讲了一个关于对话式search的章节,让学生有足够的知识去做。 对于我们来说,这个项目既可以独立完成,也可以与其他项目完成(显然,如果与合作伙伴一起完成更好的项目,比如更深入的合作等)。 因为计算机graphics学课程也是第三年课程,学生可以把最后一个项目和AI课程的最后一个项目结合起来。

由于我正好在我的第三年,正在参加两门课程(现在已经在第一学期结束了),我和一个同时参加这两门课程的朋友合作,自从我们结束之后, (大约在12月21日),并于1月11日到期。

一个月内完全可行(特别是作为研究生项目)。 我们正在制作一个三维国际象棋程序,因此它需要更多的工作,当然不只是一个国际象棋引擎。 最难的部分将决定董事会的代表性,执行所有规则(en passant,castling,promotion等),创build一个启发式函数,以及游戏树(通常用alpha-beta修剪)。

这里是我们用来logging进度的网站,稍后我们完成代码和文件的主持(现在有点空)。 http://sites.google.com/site/chessatbrock/

这取决于你所针对的力量水平和你的编程技能。 假设你是一个有经验的程序员 ,这里是我的观点(我知道很多引擎,但从来没有编码):

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

*一个可以击败“俱乐部球员”的引擎(ELO 1800-2000):开始变得艰难,你需要开放书籍,优化和坚实的人工智能

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

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

这就是我看到它!

您需要为给定的状态生成所有的vaild移动。 那么对于每一个可能性,你应该检查对手可能的举动。 如果至less有一个让你的位置变差,那么你不应该跟随那个分支。 要做到这一点,你需要一些评分,以确定你在做什么。 国际象棋已经有一些关于哪个单位值多less分的规则。 只看这几步就足够了。 打败该计划仍然是具有挑战性的。

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

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

然而,教授提供了大块的棋盘引擎,我们不得不做一些事情,比如提高决策function,实行将军等等。

所有这一切都取决于你关于游戏AI的目标。 如果这是一个2球员的游戏..容易! 但是AI很难…对,众所周知开源是GNU Chess!

一些algorithm: http : //www.vclcomponents.com/s/0__/source_code_genetic_algorithm_chess
这是一个国际象棋编程维基 !

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

如果我记得正确的话,连接到XBoard是相当容易的。 这里有一些链接。

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

XBoard界面

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

我不确定这是否能让你获得所有你想要的东西,我认为我们的国际象棋引擎必须创build他们自己的棋盘格,并且自己动手,但是至less可以让你获得一个知道规则的graphics板, GUI。

这可能太简单了,但是还是值得学习的有趣课程:我向你展示ZX81国际象棋游戏