轻松打败世界级棋手!Facebook 开源 AI 围棋源代码

来自:开源最前线(ID:OpenSourceTop)

整编综合自:田渊栋(知乎)、https://research.fb.com/facebook-open-sources-elf-opengo/


近日,Facebook AI Research(FAIR)正式宣布开源基于 ELF 平台创建的 ELF OpenGo,这是一款 AI 机器人,它已经击败了世界冠军职业棋手。以下为博文内容:


轻松打败世界级棋手!Facebook 开源 AI 围棋源代码


受 DeepMind 的启发,今年早些时候,我们研究开发出了可扩展的、轻量级框架 ELF,期望达到 AlphaGoZero 最近的水平。目标是创建一个开源实现的系统,该系统可以自学围棋并能够打败职业棋手。最后,通过发布我们的代码和模型,来激励更多的人去思考这项技术新的应用和研究方向。

ELF OpenGo 已经成功打败了其他开源机器人和人类棋手。我们对 LeelaZero(基于Deepmind最新论文的围棋人工智能)进行了一系列的比赛(198 胜 2 负),2018 年 4 月 25 日),我们还击败了 4 位世界排名前 30 的围棋棋手,14 胜 0 负的记录。


轻松打败世界级棋手!Facebook 开源 AI 围棋源代码


我们还对 2016 年 6 月首次发布的ELF进行了改进,升级了更高效,更友好的 API 以及支持对数千台计算机进行分布式计算的框架。作为 PyTorch 的一部分,ELF 使研究人员能够轻松尝试不同的强化学习思想,并进行快速灵活的实验。

如今 ELF OpenGo 已经取得了十分不错的成绩,但田渊栋博士在知乎上发表的一篇感想文章中提到:这个项目不是为了做最好的围棋程序,不是说要打败谁。我们做这个是因为以下三个目的:

(1) AlphaGoZero/AlphaZero算法很有意思,我们想知道为什么它有效果,是怎么会有效果的,是不是如同宣传的那样是百试百灵的通用算法,是不是只要堆机器,强人工智能马上就来了?还是说其实这个算法有什么问题和弱点?DeepMind不开源也不透露细节,文章里面一些地方也没有写得很清楚。我之前写过Blog讨论过,但是没有第一手经验总不是很踏实。所以本着研究目的,我们需要复现一下,先有复现,才有创新,这个是做研究的习惯。

(2) 今年年初我重写了ELF的核心代码,另外也加了分布式训练,需要找个具体应用来测试一下。站在这个角度上,AlphaGoZero/AlphaZero是个完美的选择,再说之前也有DarkForest的代码和围棋程序的经验,所以把它们拼起来不用花太多力气。

(3) 不管是通用算法还是分布式平台,都可以用来干很多别的事情,不一定是围棋,不一定是游戏。如果我们去看ELF OpenGo的代码,会发现其实很大一部分和围棋一点关系也没有,完全适用于其它方向的工作。而围棋对我们来说,只是一个把算法和平台做好的手段。在这一点上,花点时间把围棋做好是值得的。

田渊栋博士表示,随着今天 ELF OpenGo 的发布,这三个目的都已达到。当然,他们更希望的是能够借此机会推广一下 ELF 平台和 PyTorch 深度学习框架,让更多的人使用和完善它。

代码地址:https://github.com/pytorch/ELF

相关推荐
Alex围棋游戏源码 研究目标、研究内容和拟解决的关键问题 经过对围棋对弈软件的分析,基本确定围棋对弈系统的研究目标为: 该系统功能包括:人机围棋对弈功能,局域网围棋对弈功能,局域网对弈时聊天功能,对弈中悔棋功能,求和功能及其他扩展功能等。 研究内容为: 1. 实现游戏模式选择功能:通过主界面,可以选择围棋的游戏模式。有人机对弈,局域网对弈等选择。 2. 实现人机对弈中人工智能:在人机对弈中,电脑可以根据棋局判断下一步下子。 3. 实现局域网对弈功能:选择局域网对弈后,登陆服务器,可以选择游戏台号,与已经选择同台号的对手对弈。 4. 实现局域网对弈时的聊天功能:在局域网对弈中,可以与对手聊天,增加游戏的趣味性。 5. 实现对弈中游戏的附加功能:对弈时悔棋功能,求和功能,计时功能等。 6. 根据系统的需求,进行可行性分析,制作,构建合适系统。 7. 分析系统基本功能,根据系统的每个功能模块,分析各个模块的用户界面设计。 8. 研究实现主程序功能和其他功能。 研究的基本思路和方法、技术路线、实验方案及可行性分析 基本思路和方法: 1. 熟悉围棋各种规矩,了解系统需要实现的功能。 2. 根据系统需求,完善系统功能模块。 3. 人机对弈中电脑的人工智能对弈实现。 4. 对弈中悔棋功能的实现。 5. 局域网对弈的实现。 6. 局域网对弈的聊天功能实现。 7. 熟悉C#网络通信编程,熟悉相关类和函数。
电脑围棋门径 ——陈志行   1、显示棋盘棋子及其他必须显示的内容;设置黑白选择、进子及有关的功能。 2、设置计算和记录棋子串气数的功能,赋予提子和禁着的功能。 3、设计一种函数,表征每个棋子对周围的影响,用以划分势力范围,作为静态形式判断的基础。 4、对盘上各着点分别试进黑子和白子,比较进子前后的静态形势,以估算该点的进子价值,成为着点选择的基本依据。 5、用多步搜索法判断棋子串是否可以歼灭或逃出,并分别记为“死”、“活” 和“半死”。这种搜索还可以包括“双吃”(叫吃一串后歼灭另一串)的可能性。 6、规定开局时的一些大点及其价值,设置随机地选取等价大点的功能。开局大点可以纳入定式的范畴。 7、把棋子划分为块,考虑各块的眼位和出路以及块间的相邻关系,以估算各块的危险性(负目数),从而构成静态形势判断的完整体系。 8、建立棋形效率模式,指明愚形、忌形和急所,从而增建由静态形势判断所估算的进子价值。 9、估算棋子串被歼与逃出的静态形势 以估算歼逃价值。 10、设置定式库,规定定式中每步的价值;设置从定式库取数据来行棋的程序段。 11、设置大场、中盘侵分、收官等的数据库和程序段。 12、记录先手着点及其价值,以供寻劫、收官、做眼等参考。 13、设置利用以上各种数据按照适当方式选择着点的程序段。 14、设置在优势和劣势下采用不同策略的功能。 15、设置搜索广度和深度的选择功能使思考时间得以随时调整。 16、设置终局判断、PASS(弃权一手)及在对方PASS后如何处理的功能。 17、设置棋谱记录、计时、发声、显示形式对比、计算胜负等功能。 首先必需完成1、2部分。其次不妨先解决3、4,这样程序就算是会下棋了。不过,叫吃也不会逃,或者只会逃叫吃却不懂征子,也是不堪一击的。这样应解决5。第一步可以先解决二气问题、即三气就算已经逃出。 棋子分块以及眼位估计是获得战斗力的重要环节。这一功能解决后,棋力可望达到高手让不了30子的程度。然后设置行棋模式又是一个关键,解决后让25子恐怕也困难了。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页