オセロAIの大会で優勝したよ!
GGSというサーバー上で開催されたオセロAIトーナメントで優勝しました.
この記事では,このトーナメントについてお話します.
GGSとは
GGS(Generic Game Server)は様々なボードゲームで対戦できるゲームサーバーです.現在では,オセロAI LOGISTELLOの作者であるMichael Buro氏が管理しており,新規アカウントはBuro氏にお願いすることで作成できます.Buro氏のホームページを漁ると,GGSは2000年代には活発に稼働していたことがみてとれますが,現在ではかなり過疎化が進んでおり,人間が対局しているところを見たことがありません.
少し余談ですが,GGS関連の資料を漁るとチラホラ"NEC"の文字をみかけます.実はこのNECは日本電気株式会社のことを指しています.これはBuro氏のかつての所属がNEC北米研究所だったことが理由です.また,Buro氏が開発したAIであるLOGISTELLOで用いられた手法(パターン評価)は現在のAIに大きな影響を与えています.意外なところで日本企業が絡んでいるのですが,当のNECはあまりアピールしていません(悲しい).
オセロAI「Kalmia」の軌跡とトーナメントに参加したきっかけ
今回のトーナメントには「Kalmia」という名前で参加しました.実はこのAI自体は8年前に高校のイベントで展示したのが始まりです.とはいっても,現在のコードには当時書いたコードの断片は残っておらず,名前だけが受け継がれています.また,開発も8年間継続的に行ったというよりは,飽きては再開してを繰り返しています.Kalmiaの手法は以下のように変遷していきました(分かる人向けに書いているので読み飛ばして構いません).
2018年: モンテカルロ木探索(UCT) + 一様ランダムな着手によるプレイアウト
2019年: モンテカルロ木探索(UCT) + ヒューリスティックな知識を用いたランダムな着手によるプレイアウト
2021年: モンテカルロ木探索(UCT)+ パターン評価を用いた勝率を予測する評価関数
2023年: 法 + 遺伝的アルゴリズムで構成したパターンを用いた評価関数
2026年: 法 + パターンとFactorization Machineを用いた評価関数
このように割と手法が二転三転していることがわかります.
トーナメントへ参加するきっかけとなったのは今年の冬頃で,Egaroucidという最強格のオセロAIを開発しているにゃにゃんさんからお誘いを受けたのが始まりでした.ただ,そのときは修論に追われていたため,少し間があいて今年の3月末に初めて参加しました.初参加時には色々とトラブルを起こしてしまい,5位という結果に終わりました.以降は4月と5月,そして今回の6月のトーナメントに参加しました.4月は3月と異なりトラブルなしで終えることができ,3位という結果となりました(4位とかなり僅差でした).5月もなんだかんだで3位を獲ることができました.
Edaxの助け
GGSでは,テキストベースの独自のプロトコルで通信する必要があります.そして,このGGSのプロトコルというのが意外に情報に乏しく,現在鋭意通信プログラムを実装中です.はい,実はまだGGSとの通信を実装していないのです.じゃあ,どうやってトーナメントに参加したんだという話なのですが,今回は最強格のオセロAIであるEdaxのソースコードの大部分を流用いたしました.Edaxは最初からGGSとの通信に対応しているため,ありがたく使わせていただいた形です.ただし,Edaxが用いている手法と私が用いている手法では評価関数(局面の有利不利を判定するモジュール)が異なるため,一部ソースコードを書き換えて,オリジナルの評価関数をEdaxに移植しました.なお,書き換えたソースコードはこちらで公開しています.
最強のプログラム「ymatioun」
ymatiounは,アメリカのYouri Matiounine氏が開発したプログラムです.恥ずかしながら,トーナメントに参加するまでこのプログラムの存在を存じ上げなかったのですが,とてつもなく強いプログラムです.トーナメントでは1位が当たり前で,ほかのプログラムが2位を争うといったような状況が少なくとも私が初参加したときから続いていました.余談ですがYouri Matiounine氏本人もKaggleのCompetitions Grandmasterらしく,世界に400人もいない強い人です.
トーナメントの結果
Kalmiaが見事1位! 遂にymatiounを打倒!と言いたいところですが,実際のところ運が良かったような気がします.というのもymatiounとKalmiaとの直接対決では,Kalmiaの2勝5敗3分と負け越しており,ymatiounは相変わらずの高パフォーマンスを魅せていました.今回はたまたまKalmiaの他プログラムに対する勝率がymatiounよりも僅かに高かったがために1位になれたという結果です.その差はわずか0.5ポイント,すなわち引き分け1回分の差です.
Kalmiaの今後
先に述べたようにKalmiaは評価関数以外はEdaxのソースコードを用いています.そのため,探索部のハイパーパラメータなどはKalmiaの評価関数に合わせてチューニングされていません.Edaxは非常に洗練された探索エンジンを持つプログラムではありますが,やはりEdaxへの依存は早々に無くしたいです.今後のTODOリストは以下の通りです.
- GGSとの通信の自前実装
- 探索の並列化手法であるLazy SMPの検討
- 評価関数のパラメータの削減
ただ,これに加えていろいろとやらなければいけないことが別にあるので,次回のトーナメントに間に合うかは微妙です.




