Google Colaboratoryでボードゲームの対戦といった、リアルタイムではないインタラクティブな処理をさせる方法を調べた。
あらまし
書籍「AlphaZero 人工知能プログラミング実践入門」の「人間とAIの対戦」では ローカル環境でPythonのGUIライブラリTkinterを使用して動かすよう書かれている。 しかし他にAnacondaやTensorFlowなどの環境を構築しないといけないので面倒。 なので対戦もColab上で動かしたい。
当初は print
での盤面表示と1行入力でいいかと思ってたんだけど、プロポーショナルフォントなので幅がずれるのとキーボード入力が手間だったので、
グラフィックス表示やボタン入力ができないかと調べてみた。
グラフィックス表示
Google ColaboratoryでPILで何か描画して表示する - Qiita
を参考に、PILの Image
を使用してみた。
ImageDraw
でプリミティブの描画(line
, rectangle
, ellipse
など)ができる:
from PIL import Image, ImageDraw |
UI表示
Coalb上でボタンなどのUIを表示するには ipywidgets
モジュール(Jupyter Widgets)が使える。
ボードゲームの盤面のようなグリッド状の要素は GridBox
が使える。
子要素に Button
を指定して、クリックを判定できるようにする:
from ipywidgets import Button, Layout, GridBox |
button.on_click(...)
でクリック判定
UI表示後の処理
人間の入力を促すためにUIを表示したら、Colabのセルは実行から抜けることになる。
ボタンがクリックされたら処理を続けるようにするため、 on_click
に指定したコールバック内で続きの処理を行えるようにしておく。
セルの出力クリア
三目並べ程度なら各手番の盤面の状態を出力したままにして続けて表示でもいいんだけど、かさばるし過去のUIが操作されると気持ち悪いのでクリアしてやる:
from IPython.display import clear_output |
- How to Clear Python Output Programatically in Google Colaboratory? - Stack Overflow
- 実行したセルの出力のみクリアされる
ソース
動かし方
- AlphaZero 深層学習・強化学習・探索 人工知能プログラミング実践入門 | ボーンデジタル からファイルをダウンロード
- zipを展開した
6_7_tictactoe/model/best.h5
をGoogleDriveにアップロード