イベント

超早碁九路盤 AI対決 技術サポート

第I部 GoGui を使いこなそう。

1. GoGui をインストールして囲碁を打ってみましょう。

大会では、フリーソフト GoGui (ver 1.3.0) という囲碁対戦ソフトを使用します。 まずは、GoGUI をインストールして、石を並べてみましょう。

GoGuiのページ: http://gogui.sourceforge.net/

GoGui Ver.1.3.0: http://sourceforge.jp/projects/sfnet_gogui/downloads/gogui/1.3.0/gogui-1.3.0.zip/

全リリースバージョン: http://sourceforge.jp/projects/sfnet_gogui/releases/

(1) ファイルをダウンロードして解凍したら、lib フォルダの中にある、gogui.jar をクリックしましょう。GoGui が立ち上がります。(注) Java のランタイムが必要です。

(2) まずは碁盤をクリックして交互に石を置いてみましょう。メニュー画面の「Game」から「Size」で九路盤を指定して打ってみるといいでしょう。

(3)「File」から「Save as」を選んで、自分の打った棋譜をセーブしてみましょう。逆に、「File」から「Open」を選んでファイルをロードして棋譜を再現してみましょう。棋譜のファイルは囲碁ソフトに共通の「SGF形式」ですので、他の囲碁ソフトやネット上にあるSGFファイルもダウンロードして活用することが出来ます。

2. ネット上にあるフリーの囲碁AIプログラムと対戦してみよう

では、囲碁AIプログラムと対戦してみましょう。ここでは、有名なフリー囲碁ソフト GNU Go と対戦する方法を解説します。

GNU Go: http://www.gnu.org/software/gnugo/

Windows 版ダウンロード: http://www.gnu.org/software/gnugo/download.html

GNU Go は1999年頃から継続して開発されて来たフリーの囲碁AIプログラムで、自分の囲碁プログラムの強さを測る指標として活用できます。GoGui は、GTP(Go Text Protocol)という通信形式で、囲碁AIプログラムと接続します。ですので、GTPに対応した囲碁AIプログラムを登録して対戦することが出来ます。

メニュー「Program」から「New Program」を選んで、先にダウンロードした GNU Go の Exe ファイルを指定しましょう。この時、プログラムによっては引数の指定が必要ですので、

gnugo.exe --mode gtp --level 1

などと指定しましょう。レベル(1~10、デフォルトは10)を指定して強さを変化させることが出来ます。これで対戦準備は終了です。あとはGoGuiメニュー「Game」から先番の選択、盤面サイズなどを設定してスタートになります。GNU Go と腕を競ってみましょう。

GNU Go に限らず、GTP に対応しているソフトをいろいろダウンロードして試してみましょう。

[参考] Aya: http://www32.ocn.ne.jp/~yss/

注)上記と同様にExeファイルを選んで 「Aya.exe –mode gtp」と指定しましょう。

3. 囲碁AIプログラム同士を対戦させてみよう。

さて、いよいよ囲碁AI同士を対戦させてみましょう。GoGui は、GUI 上からコンピュータ同士を対戦させることが出来ません。バッチファイルのスクリプトから対戦させることが出来ます。

ここでは GNU Go 同士を対戦させてみます。
サンプルファイルを示して説明しましょう。[バッチファイルサンプル ダウンロード (右クリック→対象をファイルに保存)]
プログラム同士を対戦させるには、先程の gogui,jar に加えて、同じフォルダに含まれている gogui-twogtp.jar が必要です。以下のように書きます。これをバッチファイルに書いて実行するとよいでしょう。


rem Computer 1 設定
set COM1=D:\MyDocument\gnugo-3.8\gnugo.exe --mode gtp

rem Computer 2 設定
set COM2=D:\MyDocument\gnugo-3.8\gnugo.exe --mode gtp --level 9

rem 対戦を起動。プログラムへのパス、対戦条件、棋譜ファイル名、時間制限などを指定します。
D:\gogui-1.3.0\lib\gogui.jar -size 9 -program "java -jar D:\gogui-1.3.0\lib\gogui-twogtp.jar -black \"%COM1%\" -white \"%COM2%\" -size 9 -sgffile gogui_autotaisen" -time 1s+1s/1 -computer-both

(注意)「プログラムパス -サイズ -対戦用プログラムパス -黒設定 -白設定 –盤面サイズ -SGFファイル名 -時間設定 -COM同士対戦設定 」になっています。「-time 1s+1s/1」は持ち時間は1秒、これを超えるとその後は一手一秒で指す、を意味します(実質一手一秒)。これは大会仕様です。
(注意)上記のスクリプトでプログラム同士を対戦させると、同じフォルダ内に、対戦をロックしておく「gogui_autotaisen.lock」と棋譜ファイル「gogui_autotaisen-0.sgf」が残る場合があります。これらのファイルが対戦後残っていると、新しく対戦が立ち上がらない場合もあります。二回目に立ち上がらない場合は、このファイルを取り除いてみましょう。

この例は、GNU Go 同士の対戦ですが、自分の作ったプログラムとGNU Go を対戦させてみましょう。上記設定は、CEDEC 2011 における大会ルールに準拠して考慮時間が短いですが、開発中は適当な長さにしておいて、後から高速化して対応する時に、1秒ルールに落としてみるとよいでしょう。

では、第二部では、GTPに対応した囲碁プログラムの作り方を紹介します。

ページトップへ

第II部 囲碁プログラムを作ろう

ここでは、簡単にGTPに対応した囲碁プログラムの作成方法をご紹介します。Windows プログラミングや、Visual Studio に慣れていない方も簡単に参加できるように解説します。

1. Windows プログラミング環境を揃えよう

最もよく使われているWindows 上のプログラミング環境は、Visual Studio (以下、VS)です。Visual Studio Express はダウンロードして使用することが出来ます。

Microsoft Visual Studio Express 2010
http://www.microsoft.com/japan/msdn/vstudio/express/

2. プロジェクト・ファイルを利用しよう

レギュレーションに記述しておりますように、GTPに準拠しGoGui (ver 1.3.0)で動作するプログラムであれば応募可能です。しかしGTP は仕様が公開されていますが、一からプログラムを書くのはなかなかたいへんです。

GTP http://www.lysator.liu.se/~gunnar/gtp/

CEDEC CHALLENGE 2011 では、参加者の皆様に、囲碁AIのアルゴリズムのプログラミングに専念して頂くため、GoGui、GTPへの対応済みのフレームワーク(サンプルプログラム)を提供いたします。以下からダウンロードください。(参考にして下さい、ということで、これを使わなければならないということではありません)

Visual Studio Express 2008 プロジェクト・ファイル
[VS2008プロジェクト・ファイル ダウンロード ]

Visual Studio Express 2010 プロジェクト・ファイル
[VS2010 プロジェクト・ファイル ダウンロード ]

(フォルダ内の ソリューションファイル[.sln] をクリックすると起動します。「ソリューションのリビルド」(表示されているソリューション・エクスプローラのボックス内の一番上の行を右クリックするなど)を実行してください)

本プログラムは、世界囲碁大会 岐阜チャレンジ 2004 で公開された通信対戦対応サンプルライブラリを、GoGui Ver1.3.0 上で囲碁プログラムとして動作できるように修正したプログラムです。GTPに準拠しています。最低限、着手を決める関数(genmove)を書き換えてコンパイルするだけで、囲碁AIプログラムを作成しGoGui上で動作させることが出来ます。

以下、このプログラムについて解説します。

・ gtp.h/gtp.cpp ... GTP の実装です。この部分は書き換える必要はないです。
・ engine.h ... engine クラスの定義です。この部分も基本的に書き換える必要はありませんが、簡単に目を通してください。
・ CEDEC_GO.h/CEDEC_GO.cpp ... engine クラスの派生クラス sample_engine を実装しています。genmove 関数が思考関数で次の着手を決定します。この部分を書き換えてください。デフォルトでは左上から順番に空いている場所に置いて行きます。
 (1) 最初にへッダーファイルでプログラム・エントリー名などを書き換えてください。
 (2) 盤面は2重配列 board に記録されています。
 変数値 BLACK,WHITE,EMPTY などは、engine.h で定義されています。
 (3) 手順のデータはベクター moves に格納されています。

コンパイルして出来た exe ファイル(CEDEC_GO,exe など)をGoGui のメニュー「Program」から「New Program」を選んで指定して対戦してみましょう。或いは、第I部で解説したスクリプトで他のプログラムと対戦させてみましょう。このサンプルの実行ファイルの場合は --mode gtp オプションは必要ありません。

 

それでは皆様のご応募をお待ちしています。

お問い合わせ: CEDEC CHALLGENGE「超早碁九路盤AI対決」ワーキンググループ cedec_ai@cesa.or.jpまで電子メールでお問い合わせ下さい。

ページトップへ