Git Product home page Git Product logo

im0qianqian / reversi-based-rl Goto Github PK

View Code? Open in Web Editor NEW
72.0 3.0 13.0 1.07 GB

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

Home Page: https://www.dreamwings.cn/reversi-based-rl

License: MIT License

JavaScript 9.56% HTML 1.71% CSS 3.71% Python 64.82% Batchfile 0.14% Shell 0.13% TeX 19.93%
reversi othello-game othello-ai reinforcement-learning python deep-reinforcement-learning

reversi-based-rl's Introduction

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.

reversi-based-rl's People

Contributors

im0qianqian avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

reversi-based-rl's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.