先日行われたコンピューター囲碁プログラムである「AlphaGo」と韓国のトッププロであるイ・セドルの対局は、大方の予想を覆して4勝1敗というAlphaGoの勝利に終わりました。今回はこの対局の様子をUbuntu上で再現してみることにしましょう。
なぜUbuntu?
AlphaGoはただのプログラムなので残念ながら(まだ?)直接碁盤の上に石を置くことはできません。よってイ・セドルとの対局でもコンピューター上の画面を介して指し手を指示する必要がありました。その時に使われたソフトウェアがUbuntu上で動くGoGuiだった 、ただそれだけなのです。ちなみにリンク先の画像は、第四局の180手目を受けて、AlphaGoが投了している時の様子です。
ちなみにAlphaGoはGoogle Cloud Platform上で、機械学習ライブラリであるTensorFlow などを用いているという話です 。TensorFlowはPythonで使用できるライブラリであり、セットアップガイド ではUbuntuにインストールする方法も紹介されているので、もしかしたらバックエンドでもUbuntuが動いていたのかもしれませんね。なお、AlphaGoそのもののソースコードは公開されていません[1] 。
GoGuiとGo Text Protocol
「GoGui 」は囲碁を遊べるJava製のGUIアプリケーションです。一般的な囲碁ゲームと異なり、このアプリケーションにはいわゆる「CPUプレーヤー」がいません。黒番も白番もGoGui以外の誰かが入力する必要があります。
別にコンピューターしか友達がいない「ぼっちユーザー」にいじわるしようとしているわけではありません。GoGuiは他の囲碁ゲームと通信することでどちらかの手番、もしくはその双方をコンピューターにすることができるのです。このとき使われる通信プロトコルがGo Text Protocol (GTP)です。AlphaGoもGTPでGoGuiと通信することで、イ・セドルと対局したというわけです。
GoGuiはJava製なので、Javaの実行環境が必要です。よってGoGuiに加えてJavaの実行環境もインストールしています。
$ sudo apt install default-jre
$ wget http://downloads.sourceforge.net/project/gogui/gogui/1.4.9/gogui-1.4.9.zip
$ unzip gogui-1.4.9.zip
$ cd gogui-1.4.9/
GoGuiには起動スクリプトが含まれています。それを実行すればアプリケーションが起動します。よく使うのであれば、.desktopファイル を作って「~/.local/share/applications/」に保存しておきましょう。
$ ./bin/gogui
図1 GoGuiアプリケーション
GoGuiそのものの操作はそこまで難しくないでしょう。普通に黒番から一手ずつクリックするだけです。詰碁をやりたいならあらかじめいくつか石を置いておくことも可能ですし、一手戻ったり進んだりすることもできます。あとで説明するようにゲームをファイルとして保存できますし、盤面をPNG画像やTeXファイルとして保存もできます。
GNU Goのインストール
コンピューター囲碁と対戦したい場合は別途プログラムが必要です。そこで今回はGNU Go を利用しましょう[2] 。
$ sudo apt install gnugo
GNU GoそのものはただのCUIプログラムです。何も引数を渡すに起動すると、ASCII形式で碁盤を表示しながら対局します。GNU Goはそのままだと白番となりますので、プロンプトにあわせて黒石を置いていきましょう。置く場所は列をアルファベットで、行を数字で指定します。たとえば右上隅の星なら「Q16」となります[3] 。
さて、GoGuiのメニューにある「プログラム」の「新規プログラム」から、対局相手の囲碁プログラムを指定できます。GNU Goは「--mode」オプションで「gtp」を指定することで、GTP経由で対局を行います。そこでコマンドには「gnugo --mode gtp」を入力してください。
図2 プログラムの指定
あとは「プログラムの起動」から登録したプログラムを起動するだけです。初期設定ではプログラムは白番になりますので、とりあえず適当に黒を打ってください。するとGNU Goが自動的に白石を置きます。プログラムに与えるオプション によってレベルなども調整できます。
対局メニューの「コンピュータの手番」で黒番にすることも可能ですし、「 両方」を選択することで、GNU Go同士を対戦することも可能です。
図3 GNU Go vs. GNU Goを100手目まで
異なるプログラムを対戦させたい場合は、binディレクトリにあるgogui-twogtp を使用しましょう。たとえばコマンドに以下のように入力します。
./bin/gogui-twogtp -black "gnugo --mode gtp" -white "gnugo --mode gtp --level 5"
白の手番はレベルが低くなっているので、思考時間は短いですが弱くなります。
AlphaGo vs. イ・セドルの棋譜
GoGuiを始めとする囲碁プログラムはSmart Game Format に従ったSGFファイルに棋譜を保存できます。実際、AlphaGoのサイト でも、昨年行われたヨーロッパ王者であるFan Huiとの対局のSGFファイルをダウンロードできます。残念ながらイ・セドルとの対局のSGFファイルはまだ公開されていませんが、Wikipediaの記事 には棋譜が残っているので、それを元にSGFファイルを作ってしまいましょう。
手順は単純で、棋譜に従って石を順番に置いていき、最後にファイルとして保存するだけです。石を置き間違えたら、一手戻った上で編集メニューの「子ノードの削除」を選択してください。子ノードを削除しないと間違った手がノードとして残ることになります。
実際に第1局から第5局までのファイルを以下にアップロードしてあります。
図4 第2局、ほとんどの解説者がミスだと思ったものの、後に評価が覆ったAlphaGoによる167手目
図5 第4局、中国のトッププロが「the hand of God」と言ったというイ・セドルによる78手目
コンピューター囲碁の可能性
「プロに勝つためにはあと10年必要」と言われたコンピューター囲碁の世界において、AlphaGoは深層学習とコンピューターリソースと資金力をもって、一気にその壁をぶち破ってくれました。対局者を含めた棋士や関係者もコメントしているように、これからのコンピューター囲碁の進化と囲碁界との相互作用が楽しみです。
家庭でAlphaGoと対局できるようになるのはまだまだ先のことになるでしょう。しかしながら今回紹介したGNU Goの他にも、Fuego やPachi といったオープンソースの囲碁プログラムやuliGo という詰碁プログラムも存在します。これを気に囲碁を遊んでみてはいかがでしょうか。
図6 ルールがわからなくてもこのようなことはできる(SGFファイル )