4x4リバーシ完全解析
4x4リバーシ
リバーシ,つまり,オセロの盤面は,普通8x8の64マスですが,今回の対象は,4x4の16マスという小さなリバーシです.
初期の盤面で,黒2つ白2つを置いた状態から始まるので,パスを無視して考えれば,12手でゲームが終了します.
実装
ビットボードを用いた 4x4 オセロ 完全解析.こちらのページを参考にさせていただきました.
16bitのビットボードで,NegaMax法,NegaAlpha法,NegaScout法の3つを実装しました.
ハッシュテーブル(トランスポジションテーブル)は,単純にルートノード(初期局面)から数えた深さが一定値以下の時にだけ,登録と参照を行うこととしました.
結果
探索の結果は,上のページにもあるように,黒の8石負けとなりました.
先手が負けるっていうのもなんだか不思議な感じがします.
探索時間
各アルゴリズムを100回実行した時間の合計値をプロットしています.
実験環境はこんな感じ.
CPU | Intel Core i7 2700K@3.5GHz |
---|---|
OS | Ubuntu 12.04 32bit |
時間が最小となったのは,NegaAlpha法で,深さ5までハッシュテーブルを使ったもの.
100回の試行にかかった時間が,0.002259秒,つまり,1回の探索に,22.59マイクロ秒.
思った以上に速いですね.
初期局面における黒の合法手は4つ.その全ては対称性を考慮すると等価です.
なので,テーブルを使う深さが1から2になったときに,だいたい4分の1の探索時間になります.
しかし,NegaAlpha法の場合は,20分の1くらいになっています.バグでしょうか...
今後の課題
- Move Orderingや反復深化などの実装.
- MTD,PVSなどのより高度なアルゴリズムを試す.