首页 文章

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

提问于
浏览
45

我想知道实施 chess engine 会有多难 . 是否已经有开源实现?

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

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

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

13 回答

  • 54

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

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

  • 4

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

  • 0

    我们在算法和数据结构(大二学生CS)中进行了mancala AI,然后是国际象棋AI .

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

  • 33

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

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

  • 0

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

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

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

  • 0

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

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

  • 0

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

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

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

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

    alt text http://g-ecx.images-amazon.com/images/G/01/ciu/a9/01/ef2de893e7a081414e106110.L.AA240.jpg

  • 0

    这取决于您的目标强度水平和编程技巧 . 假设你区域 experienced programmer ,这是我的意见(我知道很多引擎,但从未编码过):

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

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

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

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

    这就是我的看法!

  • 8

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

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

    http://www.chessbin.com

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

    • 代表国际象棋棋盘和棋子所需的所有代码

    • 与验证棋子移动相关的代码

    • 图形用户界面,显示国际象棋的位置,允许您在棋盘周围移动棋子

    我的网站基本上是专门用于像你一样的人;想要开始构建自己的国际象棋引擎的人 .

  • 6

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

  • 2

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

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

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

    这是我们完成的网站(现在有点空) . http://sites.google.com/site/chessatbrock/

  • 7

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

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

  • 2

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

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

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

    XBoard的界面

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

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

相关问题