50

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

似乎您需要针对给定的棋盘星座的评分功能,以及探索几个可能的未来棋盘星座的非常快速的方法。探索所有可能的未来走势当然是不可能的,因此人们可以贪婪地追随最有希望的走势,或者使用模拟退火等近似技术来概率地追随可能的走势。

你认为这是否在机器学习研究生项目的范围内——假设有一个学生可以使用的开源实现,它会做一些基本的事情,比如返回给定图形的下一个可能动作?大概太难了吧?

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

4

13 回答 13

56

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

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

http://www.chessbin.com

我什至创建了一个国际象棋游戏开发工具包,可以帮助您开始开发自己的国际象棋引擎,其中包含:

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

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

于 2009-07-23T12:38:32.333 回答
36

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

于 2009-08-05T12:31:29.273 回答
9

Crafty是顶级国际象棋引擎之一,并且完全开源。但是,我不鼓励您将它用于用 C 编写的学生项目,因为它是高度优化的,非常复杂且难以理解。

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

于 2009-07-18T22:31:21.950 回答
7

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

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

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

于 2009-07-18T22:27:15.810 回答
6

现代 PC 上的一个合理的国际象棋引擎当然是可行的,特别是如果你足够大,还记得有许多国际象棋程序在 1 和 2 MHz 8 位机器上只使用几 K 的内存就可以玩得很好。现在,您可以用解释性语言推出国际象棋引擎,并击败顶级 6502 或 Z80 程序员编写他最紧凑最快的东西。

我和 Dan Spracklen 一起工作,他在 1978 年和他的妻子 Kathleen 一起制作了最初的Sargon 。Kathleen 的兄弟完成了 Apple II 的移植,我与他和他的儿子一起工作。(在我和这些人一起工作的时候,国际象棋为消费者盈利的业务已经完成。我记得有一个人推出了 Atari ST 和 Amiga Chess 游戏,当时他们真的没有多少市场。)

计算机游戏技巧”是对国际象棋编程的精彩介绍,因为业余爱好者在 1983 年进行了此操作。它仍然是一种阅读乐趣。涵盖了好东西:alpha-beta、minimax 等。

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

替代文字

于 2009-07-19T02:59:01.487 回答
4

做好一个很难,但对于一个研究生项目来说可能是正确的水平(当我攻读计算机科学专业时,我的一个朋友为他的最后一年的论文写了一个国际象棋引擎)。

是的,有开源的,主要的竞争者是GNU Chess,它非常受人尊敬。

于 2009-07-18T22:18:39.853 回答
4

这取决于您所针对的强度水平和您的编程技能。假设您是一位经验丰富的程序员,这是我的意见(我知道很多引擎,但从未编写过一个):

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

*一个可以击败“俱乐部球员”的引擎(ELO 1800-2000):它开始变得困难,你需要打开书籍、优化和可靠的 AI

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

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

我就是这么看的!

于 2013-06-28T17:32:34.440 回答
2

每年在我的大学,人工智能入门课程(三年级课程)都要求学生从头开始创建一个国际象棋程序以及一篇论文,我们在讲座中介绍了对抗性搜索的一章,以便学生有足够的知识去做。对我们来说,这个项目既可以由我们自己完成,也可以与其他人一起完成(如果与合作伙伴一起完成,显然期待更好的程序,例如更深的层等)。由于计算机图形学课程也是三年级课程,学生可以将其期末项目与人工智能课程的期末项目结合起来。

由于我恰好在第三年并且正在学习这两门课程(现在已经在第一学期结束),我和一位同时参加这两门课程的朋友合作,我们从我们的课程结束就一直在研究这个项目考试(大约在 12 月 21 日),将于 1 月 11 日到期。

它在一个月内完全可行(尤其是作为研究生项目)。我们正在制作一个 3d 国际象棋程序,因此它当然需要比国际象棋引擎更多的工作。最困难的部分将是决定棋盘表示、实施所有规则(通过、castling、升级等)、创建启发式函数和游戏树(通常通过 alpha-beta 修剪完成)。

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

于 2010-01-03T02:41:12.950 回答
0

一切都取决于您确定的游戏 AI 目标!如果是 2 人游戏.. 简单!但是人工智能是相当困难的......对,众所周知的开源是 GNU Chess !

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

于 2009-07-18T22:20:26.650 回答
0

您需要为给定状态生成所有有效动作。然后,对于每一种可能性,您都应该检查对手可能的动作。如果其中至少有一个使您的位置变得更糟,那么您不应该遵循该分支。为此,您需要某种评分来确定您的表现。国际象棋已经有一些关于哪个单位值多少分的规则。像这样向前看几步就足够了。击败该计划仍然具有挑战性。

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

于 2009-07-18T22:31:21.357 回答
0

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

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

于 2009-07-18T22:34:41.677 回答
0

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

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

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

XBoard 接口

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

我不确定这是否能让你得到你想要的一切,我认为我们的国际象棋引擎必须创建自己的棋盘表示并自己提出动作,但至少它为你提供了一个了解规则并有一个图形棋盘图形用户界面。

于 2009-07-18T22:46:18.067 回答
0

这可能太简单了,但仍然值得学习有趣的课程:我向您介绍ZX81 国际象棋游戏

于 2013-02-23T18:10:05.050 回答