Pythonで三目並べ対戦GUIを作ってみた

お疲れ様です。

「三目並べ」、いわゆる「〇×ゲーム」の対戦GUIPythonで作ったので簡単に紹介します。

GUIのイメージ

背景

元々は会社の技術系の勉強会で三目並べのAIを作ったことが始まりです。
教化学習の手法の1つであるQ学習を適用して作成したAIとMiniMax法を使ったルールベースの方法の両方を作成していました。
Q学習の方は下記のサイトのソースコードを使用しました。
Q学習の仕組みについても下記のサイトは非常に参考になりました。
qiita.com なお、MiniMax法に関してはChatGPTに元となるソースコードを作ってもらったので参考サイトはありません。

作成

それぞれ作ってみて実際にAI同士の対戦やAIと人間の対戦をしてみたい!ということで作成したQ学習とMiniMax法を組み込んだ対戦GUIを個人的に作成しました。
GUIの作成には、業務でよく使用するwxPtrhonを使用しました。

ソースコード

作成したコードは以下になります↓
勉強会で作成した学習や評価用のスクリプトも一緒に格納しています。
github.com

GUIのイメージ(初期)
上部のラジオボタンで各プレイヤー(〇、×)の対戦エージェントを指定し、開始でゲームを開始します。
Q学習AI、MiniMax法の他、ランダムで入力するエージェントと人手での入力を選択可能です。
人間が操作する場合は、盤面の区画をクリックすることでその部分に"〇"or"×"が入力されます。

所感

それぞれの対戦エージェントで試してみた感想ですが、やはりMiniMax法最強ですね…笑
というか、実装がすべての状態を総当たりで見てるので弱いはずがないんですが。

Q学習に関しては、100万回学習でもまだ人間が勝てる程度の強さにしかなりませんでした。
パラメータを調整したり学習回数を増やしたりしてもそれほど変化が無かったので、これくらいが限界なのか…。
この辺は機会があれば改良なんかもしてみたいです。