Ubuntu Weekly Recipe

第414回UbuntuでAlphaGoと対局した気分になる

先日行われたコンピューター囲碁プログラムである「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アプリケーション

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手目まで
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手目
第2局、ほとんどの解説者がミスだと思ったものの、後に評価が覆ったAlphaGoによる167手目
図5 第4局、中国のトッププロが「the hand of God」と言ったというイ・セドルによる78手目
第4局、中国のトッププロが「the hand of God」と言ったというイ・セドルによる78手目

コンピューター囲碁の可能性

「プロに勝つためにはあと10年必要」と言われたコンピューター囲碁の世界において、AlphaGoは深層学習とコンピューターリソースと資金力をもって、一気にその壁をぶち破ってくれました。対局者を含めた棋士や関係者もコメントしているように、これからのコンピューター囲碁の進化と囲碁界との相互作用が楽しみです。

家庭でAlphaGoと対局できるようになるのはまだまだ先のことになるでしょう。しかしながら今回紹介したGNU Goの他にも、FuegoPachiといったオープンソースの囲碁プログラムやuliGoという詰碁プログラムも存在します。これを気に囲碁を遊んでみてはいかがでしょうか。

図6 ルールがわからなくてもこのようなことはできるSGFファイル
ルールがわからなくてもこのようなことはできる

おすすめ記事

記事・ニュース一覧