/Reversi-based-RL

🎲 又是一个黑白棋,毕业设计(reinforcement learning)

Primary LanguagePythonMIT LicenseMIT

Reversi-based-RL

呐~ 是吧

我又回来了,依旧是你熟悉的黑白棋,依旧秦时明月的故事背景~

不同的,是你看不到的,用心去感受吧~

啦啦啦~


开箱教程

环境配置

  • python == 3.6
  • keras-gpu == 2.2.4
  • tensorflow-gpu == 1.14.0

主要文件说明

  • src/config.py 参数配置文件,其中 project_root_path 设置为项目路径,需更改

  • src/coach.py 为强化学习 self-play 训练类

  • src/referee.py 为指挥者,指挥两个 player 的交互

  • src/web 为一个简单的客户端/服务端,有着更好的体验玩耍该游戏,demo:https://www.dreamwings.cn/reversi-based-rl

    • 服务端启动:python -m src.web.server.web_ssl_server,可能需更改 config.py 下的 web_ssl_cert_file、web_ssl_key_file 等参数
    • 客户端启动:使用浏览器打开 src/web/client/index.html
  • src/main.py 为程序执行文件,可参照 main 下的说明执行相应的命令

    • 查看帮助:python -m src.main --help
    • 训练模型:python -m src.main train --simu 5 --lr 0.0001 --bs 128 --epochs 20 --use_multiprocessing,具体参数可参看 src/config.py 中的说明
    • 测试模型:python -m src.main run --vs random_player rl_player
  • tutorial/slide/im0qianqian.pdf 为毕设答辩时所用,毕业论文暂未上传

  • data/best.h5 是提供的模型训练好的参数文件

something

  • 本项目是我的本科毕业设计,可能一些细节还没有仔细完善好,也欢迎大家积极提出 pr
  • 因为时间原因,可能这一份 README 组织的并不是很好,也没有去其他地方宣传本份作品,若觉得本项目对你有所帮助,欢迎点一个 star
  • 在项目配置中遇到什么问题也欢迎提交 issue
  • 大一时的课程设计链接,虽然是同一个游戏,但有了不同的内涵:https://github.com/im0qianqian/Reversi

进程计划

  • 开题报告(2019.02.25 - 2019.03.10)
  • 中期检查(2019.04.20 - 2019.04.30)
  • 作品验收(2019.05.16 - 2019.05.19)
  • 毕业论文(2019.05.20 - 2019.05.29)
  • 毕业答辩(2019.05.30 - 2019.06.06)

To-Do

Web

client

  • 游戏逻辑
  • AI (Minimax + Alpha–beta pruning)
  • 交互接口

server

  • 简易的 web 服务器,用来和客户端进行交互

Python

  • Reversi 游戏逻辑,感谢 Eric P. Nichols 的实现,不过里面有点 bug 千千还是去仔细读懂并修复了QAQ,同时也支持了 Python3
  • 不同 AI 参与的指挥者 referee
  • Player
    • Human 手动操作
    • 基于随机策略的 AI
    • Botzone 本地 AI 配置(可使用本地 AI 与平台进行对战)
    • 基于贪心策略的 AI
      • 可贪心使得当前转换棋子数量最大
      • 可贪心使得对方行动力最小
    • 基于深度强化学习的 AI(最重要)
      • MCTS
      • Keras NNet
      • 多进程 self-play
      • TPU 支持(差一个谷歌云存储 QAQ)
  • Botzone
    • 本地 AI 配置
    • 可参与天梯对局的 AI

记录

好难啊啊啊啊啊啊啊,没有进展 QAQ

by im0qianqian 2019.04.04


前些天一直在学习如何用强化学习设计 AI,之后想了想后端的游戏逻辑也要实现,于是这两天开工终于差不多完成了,与 Botzone 的本地 AI 配置交互也差不多可以用了,或许也有隐藏的 bug 等待发现,先这样吧~ 接下来继续学习强化学习~

by im0qianqian 2019.04.09


看了一下午的 MCTS,似懂非懂的样子,那一堆概率上的公式理解起来虽然不难,但却不知道如何推到这一步的 QAQ,明天继续看,早点手动实现进行下一步。

嗯~今天一拳超人第二季也更新了,坐在机房里看了一集,下午吃完饭回来以后一直不想继续看书,刷了几道 HackerRank AI 部分的题目,还是有点无聊~

旁边的位置,依旧空空的,快点回来好不好,都是千千的错,心情越来越奇怪了,还是虚拟一场 cf 打打吧。

by im0qianqian 2019.04.10


感冒了,有点难受,可能是前天淋雨的关系吧!

今天看完了 MCTS,照着步骤应该可以手动实现出来了,但是读了读别的论文发现在 MCTS 中可以结合神经网络进行预测,之前我一直以为这两个是相互独立的关系,唔~再去看看神经网络这块的内容返回来写。

by im0qianqian 2019.04.11


完成了 MCTS 部分,接下来便是神经网络了,不清楚这一块实现起来会不会非常麻烦,今天一直很困想睡觉

哦对,林老师中午给千千打电话了,看样子智能所完挂了???不过一开始就联系的林老师,也希望能够成为他的学生,保佑千千呀~

by im0qianqian 2019.04.12


嗯~这两天没有继续做毕设,一来呢 botzone 上不去了,二来剩下的部分需要深度学习的知识,所以千千想去学学基础啦~就这样~

然后,千千有新导师啦~开心~

by im0qianqian 2019.04.15


坐等今晚天梯上分,哒哒……

by im0qianqian 2019.04.17


五一放假了,然而今天是停电的一天,只能待在宿舍了 QAQ

早晨去了渔人码头做完了 ingress 银牌子的 link,坐等明天到账~

by im0qianqian 2019.04.30


唔,好多好多天没有在这里写过记录了欸~

前几天呀,千千突然对如何训练这个 AI 有了思路,我们呐,可以使用两个 NNet AI 模拟对局,对局结束以后将赢家所有走过的局面赋值 1,输家走过的局面赋值 -1,然后扔到 neural network 里训练,随着 model 的迭代,这种局面会变得越来越好的对吧!

然后便写完了第一个版本的 coach,设置 simulation_count=20,模拟 20 次对局,使用 10 × 2 次双方交战进行测试,当新的 model 胜率超过阈值 0.55 时便迭代版本。

但是呢~ 真正执行起来感觉大部分时间都用在了 self-play 上面欸,真正的 fit 只占了很少的时间。

怎么办呢?Python 多线程是假的,那我们多进程来实现吧!

于是用了一天的时间把原先的 coach 重构为多进程的版本,然后在本地测试了一番~

以下是本地多进程测试,执行 8 次 self-play

进程数目 每次 self-play 时间(单位:秒) 总时间
1 15 136
2 20 90
4 55 135
8 120 未知

可以发现,进程数目增加时每次 self-play 时间会变长,当然这是正常现象咯~ 好多个进程在争夺显卡资源,如果有再好一点的配置就好啦 QAQ

千千的电脑只有 Intel Core i7-6700HQ + NVIDIA GeForce GTX 960M 的配置 QAQ

嗯~ 很早之前 lsx 推荐了 Google 的 colab,然后把自己的程序部署上去试了试,发现执行好慢呀,每次 self-play 需要 50s,fit 起来更慢(感觉是 CPU 在跑的那样子),于是弃坑,继续本地训练

前天的时候想再去 colab 上试试,咦,发生了什么,为什么这么快,那我们就先测试一下吧!

以下是 colab 多进程测试,执行 12 次 self-play

进程数目 每次 self-play 时间(单位:秒) 总时间
1 10 132
2 15 98
4 33 106
8 80 未知

可以发现,这个速度比千千本地好多了,那就放在它上面训练吧!

可是昨天再测试的时候又变得很慢了,虽然搞不懂为什么会这样,跑了跑单进程的例子发现时间正常,会不会 colab 限制了多进程的显卡资源呢?

唔~ 好不容易写好的多进程版本欸,于是千千又去增加了参数 use_multiprocessing 来控制是否使用多进程,这样如果多进程跑不了的话先暂时用单进程替代咯~

不得不说,Google 的 TPU fit 起来是真的快,不过 self-play 时间都差不多咯,千千也给它适配了一下,虽然貌似得用谷歌云存储才能把 model 从 TPU 上存储下来 QAQ,可是谷歌云的注册国家里没有**,导致没有办法注册呢~

前天的时候呀,千千一不小心把训练好的 model 从谷歌云盘里删掉了,然后又从回收站里恢复了出来,可是恢复出来有好几个重名的文件呢,估计是历史版本吧!

可是这些版本里哪个是最好的呢,千千又让他们之间进行对局整合了一份表单,挑选出来最好的版本,然后好奇之下去使用文件 MD5 值看看这个版本是第几次 iteration 的结果,然后,然后它居然是第一次的 QAQ,也就是说之后的几个版本都白训练了?

一定是参数设置的太宽松了,去改改接着训练~ 呐,就是这样啦~

接下来几天搞搞论文,程序呢就放在 colab 上跑啦~

by im0qianqian 2019.05.09


现在完成了 93 次迭代,其中成功了 24 次,每一次都得一个多小时呢 QAQ,botzone 中的最新 rating 已经超过 1000 分啦~ 开心,这是个值得纪念的时间点呐!

by im0qianqian 2019.05.15


???为什么昨天晚上 colab 从第 17 次迭代开始的?

by im0qianqian 2019.05.16


这几天都在赶论文呢 QAQ,进度 75%

by im0qianqian 2019.05.21


保佑保佑,今晚查重率超低~

by im0qianqian 2019.05.23


小组答辩结束,欢迎新一轮的大组答辩呐~ 2019.06.06

by im0qianqian 2019.05.31


恭喜千千喜提校优 + rk 1,感谢周老师最后的把关指导,感谢大家的捧场!QvQ,以后的研究生生活继续努力~

by im0qianqian 2019.06.06


The End.