实施国际象棋引擎有多难? [关闭]

问题描述 投票:45回答:13

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

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

你是否认为这是在machine learning研究生项目的范围内 - 假设有一个学生可以使用的开源实现,那么基本的事情就像返回给定数字的下一个可能的动作一样?可能太难了?

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

machine-learning chess
13个回答
54
投票

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

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

http://www.chessbin.com

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

  1. 代表棋盘和棋子所需的所有代码
  2. 与验证棋子运动有关的代码
  3. 图形用户界面,显示国际象棋的位置,允许您在棋盘周围移动棋子

我的网站基本上是专门为像你这样的人而设的;想要开始构建自己的国际象棋引擎的人。


0
投票

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

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


0
投票

一切都取决于你解决游戏AI的目标!如果它是一个2人游戏..容易!但AI很难......对,知名的开源是GNU Chess!

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


0
投票

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

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

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

XBoard的界面

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

我不确定这是否能让你得到你想要的一切,我认为我们的国际象棋引擎必须创建自己的棋盘表示并自己动手,但至少它会让你成为一个了解规则的图形板并拥有一个GUI。


0
投票

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


33
投票

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


8
投票

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

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


7
投票

我不能回答你的问题,但我可以回答你的最后评论

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

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


6
投票

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

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

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

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

alt text


4
投票

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

是的,有开源的,最主要的竞争者是GNU Chess,这是非常受尊重的。


2
投票

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

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

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

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


2
投票

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

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

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

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

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

这就是我的看法!


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.