じゃんけん対戦の強化学習サンプルコードです。
以下のライブラリを使用しています。
- OpenAI Gym
- Stable Baselines3 / PyTorch
- flask, docopt
- Anaconda をインストール、
conda env
コマンドを使い実行用環境を構築、conda activate
コマンドで環境に入る conda install pytorch torchvision cpuonly -c pytorch
pip install stable-baselines3[extra]
git clone https://github.com/coolerking/rock-paper-scissors.git
cd rock-paper-scissors
python train.py
tensorboard --logdir play_logs
- ブラウザで
http://127.0.0.1:6006/
を開く
引数のlogdir
のパスを prob_dist_logs
やjurina_logs
に変更することでほかの学習モデルのトレーニング可視化が可能です。
停止はCtrl+C。
学習済みモデルの平均報酬値を標準出力へ表示します。
python eval.py
以下のグラフは、平均報酬値結果を実行し、まとめたものです。
じゃんけんAI対戦ができるWebアプリケーションを起動します。
cd rock-paper-scissors
conda install flask
pip install docopt
python server.py
停止はCtrl+Cを押します。
- ブラウザで
http://127.0.0.1:5000/
を開く
- ブラウザで
http://127.0.0.1:5000/reload
を開く
動作させると、「あれ?」となるとおもいます。 実は上記の通り実行したWebじゃんけんアプリを何度か使うと、プレイヤーはAIがかならず1つの手を出し続けることに気づくと思います。
AI側の手をちらしたいと考えた時、どのようにこのコードを変更すればよいかは各自で考えてみてください。
ちらした手を出すことが収益最大化につながるようにするには..がヒントです。
オレは ようやくのぼりはじめた ばかりだからな
このはてしなく遠い 強化学習坂をよ..
未完
- 本サンプルコードは MITライセンス 準拠です。
上記OSS以外にも、以下のサイトを活用しています。
- 画像イメージは いらすとや より引用しています。
- Webアプリケーション(クライアントサイド側)は jQuery を使用しています。
- Web画面上のボタンは、CSSで作る!押したくなるボタンデザイン100(Web用) より引用しています。
- 男坂 車田正美