スポンサーリンク

AI Q学習#2

プログラム完成

前回強化学習のQ学習を確認したが、これをPythonを使い三目並べに実装した。このプログラムを紹介する。

三目並べ

まずは三目並べのエンジン部分だ。ちなみにPythonに不慣れなためPythonらしい記述にはなっていないところは割り引いて見て欲しい。

マス目を3×3の二次元配列としたがプログラミングを進めるにつれ二次元配列より一次元配列の方がよかった?と疑問に思うようになた。なぜならPythonは一次元配列のハンドリングが非常に柔軟にできることがわかってきたからだ。他の言語なら二次元配列の方が楽にできるが、Pythonの場合は検討が必要なようだ。

配列作成時に配列の数を引数により決定している。これは四目、五目並べと機能拡張を考慮してのことだ。

エンジン部分で重要な機能は勝利判定だ。三目並べのようにマス目が少ないなら、力業でロジックが組める(JavaScriptのお勉強)。しかし今回は四目、五目並べ対応を行った。

入力された座標を起点として二方向×四方向に同じマークが何個存在しているか確認している。この走査方向を下記のようにデーター化している。

23行~51行目の関数checkFinal()がロジックだ。この辺もPythonらしいロジックなら、もっとスッキリしていたかもしれない。

三目並べの他機能として、手を打つsetKiban()、打てる場所を探すserchBlank()、手が打てるかのチェックcheckKiban()、棋盤を表示するdisplay()、棋盤をクリアするclear()関数を実装した。

このエンジン機能が出来上がれば、人対人の対戦なら容易に構築できるだろう。

Qテーブルのキー作成

エンジンにはQ学習用の関数も実装されている。それが、関数kibanToString()だ。この関数は棋盤情報を文字列することにより、Qテーブルのキーとしているのだ。

Pythonは間口広く、奥が深ーい

Pythonに慣れるにつれ初期に記述したこのクラスに不満を持つようになった。「もっとPythonらしく書けないか?」。一部機能を覚えたてのリスト処理を使い、書き直したのだが…実行速度が遅くなってしまった。Q学習で大量処理を行うので速度は注視しなければいけない。

恐らくPythonに慣れた人は実行速度を落とすことなく、Pythonらしいく書き換えることができるのだろう。Pythonは記述しやすく、奥の深ーい言語だと悟った。


前へ<ーーー>つづく

タイトルとURLをコピーしました