COSUMIに最大何目差で勝つことができるか? その2

[以前の関連記事] : COSUMIに最大何目差で勝つことができるか?

以前、「COSUMIに最大何目差で勝つことができるか?」という記事を書いたのですが、その時は15路盤までだったので、再度、19路盤でも調べてみました。

囲碁ブラウザゲーム COSUMI
http://www.cosumi.net/

調べたのは、直近約3ヶ月の対局のみ。まずは互先から調べてみましたが、COSUMIの石を全滅させた対局が何局かありました。その中で一番大差で勝っている対局は、夢の400目(?!)オーバーを達成されています。


Sorry, your browser doesn’t support WGo.js.

GNU Goが謎です…(地の計算も1目ずれてる(笑))

続いて、COSUMIに9子置かせた対局です。これは全滅させた対局は無いようです。それではベスト3を順に紹介していきます。まずは第3位、284目勝ち。


Sorry, your browser doesn’t support WGo.js.

最初に7回パスしているので、実質16子局(!)になっています。凄過ぎです。

次に第2位、290目勝ち。


Sorry, your browser doesn’t support WGo.js.

そして第1位、315目勝ち。


Sorry, your browser doesn’t support WGo.js.

うーん、GNU Goはもうちょっとがんばったほうがいいね(笑)。

悪手の指摘が少し正確になりました

COSUMIの5路盤~9路盤(レベル0)の対局リプレイでは、ユーザの打った悪手を指摘する時がありますが、これが少しだけ正確になりました。

オンライン囲碁ゲーム COSUMI
http://www.cosumi.net/

今までは、Fuegoに初手から調べさせて、ユーザから見たwin rateが下がったところを悪手としていました。ただ、これだと勝っている局面で、不必要な手入れをした方がいいと言うことがたびたび起こり、ちょっとみっともないことになっていました。そこで、今度からはさらにGNU Goの意見も聴くようにし、GNU Goが「確かにFuegoの指摘する手の方が得だ」と判断しないかぎり、COSUMIとしてはその手を悪手とは指摘しないようにしました(実際は、今までも今現在も、そこまで単純ではありませんが…)。

例えば、次の棋譜は実際にCOSUMIで打たれたものですが、最後に2回、自陣に手を入れろと指摘が入っています。Fuego的にはそうした方がだいぶwin rateが高くなるようですが、正しくはこれらの手は不必要な手入れであり、かなり問題のある指摘になっています。逆に、GNU Goはこういうところであまり不正確にならないので、Fuegoの主張をいい感じに却下してくれます。という訳で、今現在は、同じ棋譜の対局が行われても、悪手の指摘はしなくなっています。

[9路盤 レベル0] 黒(You)12目勝ち – オンライン囲碁ゲーム COSUMI

今回は同時に、Fuegoが悪手と判断する基準も緩くしたので、COSUMIが悪手とする回数自体はあまり変わっていないと思います。

ということで、今回の変更でなかなか良くなったのではと思っているのですが、サーバの負荷がしゃれになっていないので、これから何とかチューニングしてみます。なんだったら最後はお金の力で…(笑)

COSUMIで打たれた9路盤の棋譜を公開します

COSUMIの9路盤レベル5の対局の内、ユーザが勝った棋譜を、黒番白番それぞれ5000局ずつ、計10000局分公開します。

オンライン囲碁ゲーム COSUMI
http://www.cosumi.net/

人間が打った9路盤の棋譜を大量に入手するのは、意外と難しいように感じたので、なにかの役に立つかと思い公開することにしました。大量の棋譜をひとつのSGFファイルにまとめたら面白いかなとか、Fuego使って名局を探してみようかなとか、以前ちょっとだけ考えたことがあるんですが、なかなか腰が重くて未だできてませんので、もし誰かがやってくださるとうれしいです。もちろん、マンパワーで「COSUMI名局100選」を選出していただいても(笑)良いと思います。

今回公開する棋譜は直近の対局分なのですが、具体的にはだいたいここ20日間ぐらいの間に打たれたものになります。

http://www.perfectsky.net/misc/cosumi_9x9level5.zip

少し話は変わりますが、以前にも書いたとおり、白番よりは黒番持った方がほんの少し勝ちやすい傾向が今もあるようです。

[追記 2014/1/13]
公開した棋譜を少し眺めていたんですが、かなり頻繁にGNU Go先生が終盤でファンタしてますね(笑)。まあこれは、以前から分かってたことではあるんですが、でもこんなに多かったかなあ? ということで、少し調べてみることにしました。

COSUMIの9路盤レベル5では、まず独自のオープニングブックを使い、それが切れると38手目までFuegoが打って、その後GNU Goが終局まで打ちます(とは言っても、実際はいろいろ例外があります)。それを踏まえて次のグラフを見てください。

今回公開した棋譜の内、ユーザが黒番だった対局の、総手数が50手以上の対局(4202局)の30、34、38、42、46手目終了時点の形勢を、Fuegoを使って調べてみました。win rateが100%に近いほど黒番の人間ユーザが優勢ということになります。

まず驚くのは、34手目終了時まではやや左に偏っていることです。9路盤で34手目といえばだいぶ後の方ですが、ここから最終的には右端に張り付くんだと考えると、これはかなり特異な印象を受けます。そして、その前と比較して、38手目終了時以降は急に差が大きくなっているような気がしますので、これはやはり、GNU Go先生はファンタジスタと言わざるを得ませんね(笑)。個人的には46手目終了時のグラフを見ただけでも、ちょっと悲しくなります。30%以下からなんて、普通はそこからひっくり返らないんですが…

Fuegoにヨセを打たすとかなり不自然になるのでGNU Goを使っている訳ですが、GNU Goの手を一度FuegoでチェックしてだめそうならFuegoが打つとかは、した方がいいかもしれません。一番いいのは、GNU Goが後ほんの少しでいいので、強くなってくれることなんですが…

[追記 2014/1/14]
昨日のグラフに、10手目と20手目終了時点の形勢も調べて追加してみました。

さらに9路盤のレベル1も調べてみました。レベル5と同じくユーザが黒番で勝った直近の対局5000局の中から調べたのですが、総手数がレベル5の時より大幅に短いものが多いので(碁盤を真っ二つに分けたような分かりやすい対局が多いんです)、総手数は50手以上ではなく40手以上の対局(それでもたったの2217局しかありません)としました。ちなみに、レベル1ではまず独自のオープニングブックを使い、それが切れるとそこから終局までGNU Goが打ちます。要するに、レベル5のFuegoが打っているところをGNU Goが打つのと同じことになります。

うーん、これが普通だと思います。レベル5の方はちょっと問題がありますね…

COSUMI 5周年

COSUMIをスタートさせてから、今日で5年になります。

オンライン囲碁ゲーム COSUMI
http://www.cosumi.net/

この5年間の、1日あたりのCOSUMIが負けた数の推移はこんな感じ。

中央付近で0になっているのは震災の時に一時止めてたからで、最後のほうでぐっと伸びているのは19路盤をメインの対局ゲームに統合したからです(メインの対局ゲームの負けた数しか数えていません)。この数が増えていくのが、私にとって一番うれしいことです。なので、これからもみなさんどんどん負かしてください(笑)。トータルでは今現在4,620,131敗です。ものすごい数ですね…

当然のことながら、COSUMIが打っている手の数もものすごいことになっていて、1日あたり約1,900,000手ぐらい。平均して、79,167手/時間、1,319手/分、22手/秒(!)ぐらいになりますね。以前から漠然と思っていたのですが、今までGNU Goが生成した手(これを正確に定義するのはちょっと難しいんですが…)のほとんどは、「COSUMI上で」ではないかなと思っています。もしそうだとすれば、COSUMIは「GNU Goというすばらしいソフトを世に広めるのだ」と作り始めたサイトですので、こんなにうれしいことはありません。

COSUMIを最初に作っていたのが、本当に昨日のことのようです。もちろん、あの時は5年後にまさかこんなにたくさんの人に遊んでもらえるようになるとは思っていませんでした。どちらかというと、あの時はウェブサイトが完成しない可能性を心配していたのですが…(笑) 今まで、COSUMIで遊んでくださった方々、本当にありがとうございました。すばらしいソフトウェアをこんなに自由なライセンスで公開してくださっている、GNU GoとFuegoの開発者の方々にも改めてお礼申し上げます。あと5年はCOSUMIを続けていると思うので、その時どうなっているのか今から楽しみです。

9路盤でコンピュータの強さが選べるようになりました

COSUMIの9路盤で、レベル1からレベル4までコンピュータの強さを選べるようにしてみました。

オンライン囲碁ゲーム COSUMI
http://www.cosumi.net/

今回の変更直前の9路盤の強さは、(常に一定ではありませんでしたが)だいたいレベル3.5相当ぐらいでした。ですので、今回のレベル4は今までよりも少し強く、レベル4以下は今までよりも弱いです。将来的にはレベル5はいつか必ずできそうです。それより上はFuegoの進化しだいですね。それぞれのレベルの強さがころころ変わっては意味が無いと思うので、今後のアップデート時には、できるだけ同じ強さを維持できるように気をつけたいと思います。

一応、どのようにレベルの調整をしているかも、以下簡単に書いておきたいと思います。COSUMIの9路盤は、まず初手からCOSUMI独自のオープニングブックを使い、それが切れるとFuegoに考えさせ、そしてある一定の手数まで来るとGNU Goに考えさせていました(厳密にはもう少しややこしいことをやっていますが…)。今回はこの元々Fuegoに考えさせていた中盤を、GNU Go、Fuego 2000playout、Fuego 6000playout、Fuego 20000playoutにすることで、それぞれレベル1からレベル4の強さに調整しています。ちなみに、GNU GoとFuego 2000playout、Fuego 2000playoutとFuego 6000playout、Fuego 6000playoutとFuego 20000playoutの組み合わせで初手から終局まで丸々一局戦わせると、だいたい後者が勝率8割ぐらいになります。

COSUMIのサーバを交換しました(3回目)

昨日、COSUMIのメインのサーバを新しいのに交換しました。

オンライン囲碁ゲーム COSUMI
http://www.cosumi.net/

新しいサーバは、「さくらの専用サーバ」のエクスプレスシリーズの一番高いのです。お値段は、35,800円/月から13,800円/月に!(幸せです。いやほんとに) しかも、COSUMI的な性能はそれほど変わらないかなと思っていたのですが、新しいのは倍近く処理能力があるみたいで… 特に意外だったのは、GNU Goを同時にたくさん動かしている時に、Hyper-Threadingで4割ほど多く仕事してくれること。テストする前はゼロみたいなものだろうと思ってました。

サーバのスペックも良くなったので、少し贅沢にリソースを使うようにもしました。Fuegoのバージョンも0.4.1から1.1に変更(ずっとほったらかしだった…)。定石も少しアップデートしました。という訳で、もろもろ結構良くなっているはずです。

あと、今現在COSUMIのHTML5版を作成中です。最初は大変かなと思っていたのですが、作り始めたらそうでもなかった… とりあえず、iPhoneやiPadなどのiOS系で動くようにだけはしたいと思います。

19路盤

COSUMIで19路盤の対局もできるようにしました。

19路盤
http://www.cosumi.net/nineteen.html

COSUMIが黒番の時の初手以外は、もう完全に全部GNU Goです。正直、ローカルでお好きなGUI使ってGNU Goと対局してもらった方が何かと良いと思うので、存在意義がちょっと薄い気もしますが、まあとりあえず作ってみました。一応、この19路盤だけはサーバの負荷が高い時は対局できない仕様にさせてもらいますが、実際はたぶん基本的にいつでも動くと思います。というか、いつでも動くようにサーバを増強し続けたいと思います。

今回の19路盤の対局ゲームでは、さくらのVPSを初めて使ってみました。最近になって気づいたのですが、このサービスちょっと安過ぎではないでしょうか? 鯖をたくさん食べたければ(笑)丸ごと一匹買ってくるのが良いに決まってると思ってたのに、この小さい切り身はとってもお買い得に見えます。もし今回これでうまくいくようなら、今後はこのさくらのVPSをたくさん借りて負荷を分散させていく予定です。本当にありがたいことなんですが、現在のCOSUMIのアクセス量は4コアXeon2発ではとても捌ききれません… サーバが複数台の構成になるのは技術的にいろいろ大変ですが、もうこれは避けようがなさそうです。

7路盤スペシャルバージョンの定石を公開します

[以前の関連記事] : 7路盤スペシャルバージョン

COSUMIの7路盤スペシャルバージョンの定石を公開したいと思います。本当はもう少しちゃんとしたのができてからにしたかったのですが、なかなか終らないので… これからはアップデートするたびに随時公開していきます。

7路盤スペシャルバージョン
http://www.cosumi.net/seven.html

まずはSGFファイル。

http://www.perfectsky.net/misc/kifu/seven-20110608.sgf

ここにも貼り付けておきます。

以下、注意点を箇条書きにしていきます。

  • Bad Moveというコメントがついている手は地を損する手(以下、悪手と呼びます)で、それ以外の手は地を損することのない手(以下、最善手と呼びます)です。悪手・最善手の区別に、コウ材の数や、人間が見て自然な手かどうかなどといったことは一切考慮されていません。COSUMIは最善手だけを打ちます。
  • 悪手となっている手が実際は最善手ということはほとんどないと思いますが、その反対に最善手となっている手が実際は悪手ということはけっこうよくあります。特に、一度悪手を打った後の手順中には多いです。
  • COSUMIでは手順ではなく盤面の形で定石を持っているかどうか調べています。例えば、黒A・白B・黒C・白Dという手順が入っていたら、黒C・白B・黒Aの手順でも白Dと打ちます。ただし、コウは考慮されます。
  • COSUMIでは対称形は考慮されます。
  • GNU Goの尻拭い的な手順がけっこうたくさん入っています。あまり気にしないでください。
  • 棋譜管理ソフトの操作ミスで明らかにおかしな手順が入っている時もあると思います。それもあまり気にしないでください。

一応、現在の7路盤解析の進捗状況はというと、まず、COSUMIが負けたけどまだ定石を修正できていない対局の棋譜が5000局分ぐらいあります。その内の半分ぐらいは、GNU Goが最後に勝手に転んでるだけの対局なのでどうでもいいのですが、残りの半分はちゃんと調べないといけないやつで、これがパターン数で本当にだいたいですが20パターンぐらい。ただ、主だった変化はもう出尽くした感もあるので、この20パターンさえ調べられたら一応終わりかなと思います。

ということで、今回はその中から、比較的やっかいなのを2つ紹介します。興味があったら調べてみてください(何人かでつつくと楽しいかもしれません)。そして、結果を教えてください!

とりあえず、7路盤を調べるならまずはこのサイト。

七路盤の研究
http://olive.zero.ad.jp/qin/7ro/

その1。

先のサイトにはこの局面で、F4にあてて、F5に継ぐ手順が載っていますが、素人目には、C3が良い所に見えてしかたありません(Fuegoもここを曲がりたがります)。単に曲がるのが良いのか、F4に一本あててから曲がるのが良いのかはよく分かりませんが、最低でもどちらか一方は盤面9目ぐらいありそうに思えるのですがどうでしょうか? ちなみに、この形は7路盤調べ始めた時から、自分の中でラスボス的な扱いになっています(笑)。

その2。

私にはまず気がつかない手なんですが、この局面でC3にこすむ手があるようです。一見、ぬるく見えますが、この手がすごいのは、(相手から対称形で手を渡されたのに対し、さらに)相手に対称形で手を渡しているところで、白は右下半分だけで(左上半分だけで)、なにか手を捜さなければいけませんが、しかし狭い… この勝負どころで、選択肢がほとんどないのは白も怖いです。うーん、これは油断ならない手。一応、さすがにこの手は成立しないというのが私の予想なのですが、Fuegoに打ち次がせると黒の勝率もそれほど悪くないんですよね。ひょっとすると…

7路盤調べていていつも思うのは、「本当にちゃんと調べた人はいないんじゃないかな」ということです。盤面9目という話もまだ怪しい… でも自分が死ぬまでにはきっとはっきりするだろうと思うので、ちょっと楽しみです。

話が少しそれますが、こちらのサイトによると7×4では白は生きないけど、6×5なら生きがあるようです。面白いですね。ここまで来れば、6×6がコンピュータで解析されるのも、もう時間の問題でしょうか? できればそれまでに、ある程度しっかりした7×7の答えを出したいですね。人間様のすごさを見せてやる!(笑)

GNU Goに純碁を打たせる

正直、COSUMIを始めるまではあまりそういう認識ではなかったんですが、「囲碁のルールは難しい」と感じる人は少なくないようです。囲碁を始めてみたいと思っても、一番最初のルール覚えるところでつまづいてしまうらしい… 囲碁のルールが「シンプル」なのは間違いないと思うのですが、必ずしもすべての人に「わかりやすい」とは言えないのかもしれません。ただ、難しく感じる原因が、囲碁のルール自体ではなく、人や書籍やウェブサイトなど、ルールを教えるものにあることも多い気がします。じゃあなぜそうなってしまうのかというと、それは囲碁のルールがムズカシイからで…

ということで「純碁」です。もうみんなで純碁をやりましょう!

王銘エン九段著「純碁」
http://park6.wakwak.com/~igo/golax/jungo/ohmei.html

みんなで純碁をやると決まったので(笑)、GNU Goにも純碁を打ってもらうことにします。ここからが今回の本題です。

まず、使えそうな起動オプションを探してみます。とりあえずこのあたりかな?

$ gnugo --chinese-rules --play-out-aftermath --capture-all-dead

これで打たせたのがこの対局。

ちょっぴり感じが出てますが、最後はもっと自分の地に石を埋めていってもらわないといけません。そこで、読めないソースコードを読んだふりして、少し分かった気になってみます。aftermath.cの952行目あたりに以下の赤字部分を追加します(以下、すべてバージョン3.8の話です)。

  /* Case 7.
   * In very rare cases it turns out we need yet another pass. An
   * example is this position:
   *
   * |.....
   * |OOOO.
   * |XXXO.
   * |.OXO.
   * |O.XO.
   * +-----
   *
   * Here the X stones are found tactically dead and therefore the
   * corner O stones have been amalgamated with the surrounding
   * stones. Since the previous case only allows sacrificing
   * INESSENTIAL stones, it fails to take X off the board.
   *
   * The solution is to look for tactically attackable opponent stones
   * that still remain on the board but should be removed.
   */
  for (pos = BOARDMIN; pos < BOARDMAX; pos++) {
    if (board[pos] == other
	&& (worm[pos].unconditional_status == UNKNOWN
	    || do_capture_dead_stones)
	&& (DRAGON2(pos).safety == DEAD
	    || DRAGON2(pos).safety == TACTICALLY_DEAD)
	&& worm[pos].attack_codes[0] != 0
	&& !is_illegal_ko_capture(worm[pos].attack_points[0], color)) {
      DEBUG(DEBUG_AFTERMATH, "Tactically attack %1m at %1m\n",
	    pos, worm[pos].attack_points[0]);
      return worm[pos].attack_points[0];
    }
  }
  
  for (pos = BOARDMIN; pos < BOARDMAX; pos++) {
    if (ON_BOARD(pos)
    && board[pos] == EMPTY
    && is_allowed_move(pos, color)
    && safe_move(pos, color)) {
      return pos;
    }
  }
  
  /* No move found. */
  return PASS_MOVE;
}

ちなみに、is_allowed_moveを付けておかないと、ごくまれに非合法な手を打とうとしてエラーになる時があるようです。で、これで打たせたのがこの対局。

おー、これは純碁っぽいですね。地を埋めていくのがなんだか面白い。ただ、何局も打たせて調べていると、次のような局面で左上の1目の地を埋めてしまうことが判明しました…(それはsafe_moveなのか?(笑))

しかたないので、かなり無理やりですが、先ほど追加したコードの前にさらに以下の赤字部分を追加します。

  /* Case 7.
   * In very rare cases it turns out we need yet another pass. An
   * example is this position:
   *
   * |.....
   * |OOOO.
   * |XXXO.
   * |.OXO.
   * |O.XO.
   * +-----
   *
   * Here the X stones are found tactically dead and therefore the
   * corner O stones have been amalgamated with the surrounding
   * stones. Since the previous case only allows sacrificing
   * INESSENTIAL stones, it fails to take X off the board.
   *
   * The solution is to look for tactically attackable opponent stones
   * that still remain on the board but should be removed.
   */
  for (pos = BOARDMIN; pos < BOARDMAX; pos++) {
    if (board[pos] == other
	&& (worm[pos].unconditional_status == UNKNOWN
	    || do_capture_dead_stones)
	&& (DRAGON2(pos).safety == DEAD
	    || DRAGON2(pos).safety == TACTICALLY_DEAD)
	&& worm[pos].attack_codes[0] != 0
	&& !is_illegal_ko_capture(worm[pos].attack_points[0], color)) {
      DEBUG(DEBUG_AFTERMATH, "Tactically attack %1m at %1m\n",
	    pos, worm[pos].attack_points[0]);
      return worm[pos].attack_points[0];
    }
  }
  
  for (pos = BOARDMIN; pos < BOARDMAX; pos++) {
    if (ON_BOARD(pos)
    && board[pos] == EMPTY
    && (board[SOUTH(pos)] == EMPTY
        || board[WEST(pos)]  == EMPTY
        || board[NORTH(pos)] == EMPTY
        || board[EAST(pos)]  == EMPTY)
    && is_allowed_move(pos, color)
    && safe_move(pos, color)) {
      return pos;
    }
  }
  
  for (pos = BOARDMIN; pos < BOARDMAX; pos++) {
    if (ON_BOARD(pos)
    && board[pos] == EMPTY
    && is_allowed_move(pos, color)
    && safe_move(pos, color)) {
      return pos;
    }
  }
  
  /* No move found. */
  return PASS_MOVE;
}

これで打たせたのがこの対局。

地の埋め方がなんだかいい感じに臆病になっています(笑)。

ところが、これでもうOKかなと思っていたら、さらに別の問題が判明しました。次のような局面で白石を打ち上げてくれません…

これは先ほどのコードを追加したからとかではなく、そもそもGNU Goはこの巨大墓場を打ち上げてくれないようです(そういえば、COSUMIでも打ち上げてないのを見たことがある(笑))。最初は「これは純碁として致命的!」と思ったんですが、よく考えたら致命的なのは中国ルールでも日本ルールでも同じようなもの。ただ、囲碁を知っている人が打てば、普通こんな局面にはなったりしないので別にあれですが、純碁を打つような初心者の人なら、こんな局面にだってしてしまうかもしれないし、このまま終局したらなにかと誤解しかねないのでちょっとやな感じです。で、なんとかならないかなといろいろ試したところ、この局面の後、黒パス白パスとなると、今度は打ち上げてくれることに気づきました(GNU Goの中で、一体何が起こったのかは全くわかりません(笑))。正確には、--capture-all-deadオプションと、黒パスか白パスのどちらかひとつでも最後に付いていれば(2手打ちになるけど)、GNU Goは打ち上げてくれるようです。

ということで、時間のある時にこのあたりを何とかまとめて、COSUMIでも純碁が打てるようにしたいと思います。ちなみに、今回のようなことをしても、切り賃を意識したような純碁的に良い手を打つようになったり、純碁でスコア計算をしてくれるようになったりはしませんので注意してください。あくまでも、最後に上手に地を埋めていってくれるようになるだけです。

[追記 2011/5/13]
COSUMIでも純碁が打てるようにしました。

http://www.cosumi.net/jungo.html

棋譜の最後にパスを付けると、取れないコウが取れるようになってしまうので(気づくのが遅い!(笑))、(盤面全体の)巨大墓場は、GNU Goを使わずに自前のコードで打ち上げるようにしました。なので、純碁以外の対局ゲームでも、今度からは巨大墓場を打ち上げます。少し賢くなりました。

GNU Go 3.9.1

GNU Goの最新開発版、バージョン3.9.1がリリースされています。

GNU Go – GNU Project – Free Software Foundation (FSF)
http://www.gnu.org/software/gnugo/

ということで、バージョン3.8と対戦させてみました。

GNU Goは、両方のバージョンとも自分でコンパイルしました。使用したPCのOSはWindows XP、CPUはAthlon X2 BE-2400。それぞれの碁盤サイズごとに、先後を換えて100局ずつ計200局対戦させました。コミは6目半。同じような手順の対局ばかりになってもあれなんで、対局開始局面はGoGuiに入っているテスト用のを使っています。カッコ内は、一局あたりの平均消費時間です。ちょっとうっかりして、付けなくてもいいのに--never-resignオプションを付けてテストしてしまいましたが、結果にはほとんど関係ないと思います。

9路盤 GNU Go 3.9.1(8.2sec) 105勝 – 95勝 GNU Go 3.8(8.4sec)
19路盤 GNU Go 3.9.1(140.6sec) 90勝 – 110勝 GNU Go 3.8(141.9sec)

特に強くはなっていないようです。それより、再現条件がよく分からないんですが、レベルを下げるとたまにエラーを出して死ぬのが… このバージョンは、COSUMIでは使いません。

[追記 2011/2/7]
レベルを下げるとおかしくなるのは、たぶんこれですね。パッチ当てたら直りました。

第15回コンピュータオリンピック

2010.09.24  |  Fuego, GNU Go, MoGo, Zen, 囲碁, 将棋  |  Comments (0)

[以前の関連記事] : 第14回コンピュータオリンピック

今日から、日本の金沢で第15回コンピュータオリンピックが開かれています。今年は囲碁に13路盤部門、将棋に5五将棋部門が追加されています。

金沢 2010 (ICGA トーナメント)
http://www.grappa.univ-lille3.fr/icga/event.php?id=42&lang=3

The JAIST 20th Anniversary Events with the ICGA
http://www.jaist.ac.jp/ICGA-events-2010/olympiad/

さらに今年は、囲碁と将棋はネット中継があるようです。

ICGAの主なイベントのネット中継を実施
http://www.jaist.ac.jp/news/2010/0922_2.html

囲碁の19路はおそらくZenが一歩抜き出ていると思いますが、今年は去年出ていなかったMany Faces of Goも参加するみたいなので、意外と面白くなるかもしれません(他の伏兵だって居るかも…)。また、大会最終日の10月2日に、優勝ソフトと噂の史上最年少プロ棋士(そして秀行先生のお孫さん)、藤沢里菜初段との対局が行われます! しかも、これのネット中継もあります!! 何子で打つのかわかりませんが、すごく楽しみですね。

将棋の方も、今回は日本で開催されるということもあってか、去年とは打って変わって(笑)参加ソフトが多いです。激指、習甦、GPS将棋、Bonanzaなどが出ます。こちらも楽しみです。

[追記 2010/9/26]
9路盤の結果が出たようです。1位MyGoFriend、2位Fuego、3位Ericaでした。

MyGoFriendというソフトは初めて目にしましたが、こちらにウェブサイトがあります。

Home | mygofriend.net
http://www.mygofriend.com/

現在は9路に焦点を合わせて開発しているようで、今大会でも13路と19路には参加していません。

そして2位のFuegoですが、やっぱり9路では強いですね。3位のEricaは、この前のKGSの9路の大会で優勝していました。

ちょっと話変わりますが、今日、KGSにZen19とManyFaces1が居ました。Zen19は互先では3戦全勝、相手は全て3dでした! そして、ManyFaces1の対局を観戦しているZenAuthor… すでに火花が飛び散っています(笑)。

[追記 2010/9/28]
13路盤の結果が出たようです。1位Many Faces of Go、2位Fuego、3位MoGoでした。

Many Faces of Goの1位は順当なんでしょう。しかし、このソフトが9路では14チーム中10位(前回出場の一昨年は1位!)っていうのは、Many Faces of Goの作者が言われる「現在9路は良い定石を持っていないと勝てない」という事実を、如実に物語っている気がします。あくまでも推測ですが、MyGoFriendという新星の出現はこのあたりに秘密がありそうです。

明日からの19路は、やはり本命Zen、対抗Many Faces of Goでしょうか? FuegoやMoGoはどこまで食い込めるか…

[追記 2010/10/2]
19路は、1位Erica、2位Zen、3位Many Faces of Goでした。1位のEricaってこんなに強かったんですね… このソフトのことは今まで良く知らなかったのですが、9路と13路の結果からいって、19路はメダルもないかと思ってました。よく分かりませんが、Crazy Stoneの人が少しかんでるんでしょうか? 今日の対藤沢里菜戦が楽しみです。

(順当に強かった2位と3位をとばして)4位のMogoですが、ZenとMany Faces of Goとの対局は時間切れ負けでした(形勢は、Many Faces of Goとは良い勝負で、Zenには勝ってた?)。どうやら9路の時からトラブル続きだったようです。

5位のFuegoは、しちょうに取れない石を追っかけてましたね… おちゃめなのは嫌いじゃないです(笑)。

[追記 2010/10/2]
エキシビション対局は、藤沢里菜初段の中押し勝ちでした。コンピュータが強いプロ棋士に6子で勝つのは、まだまだ簡単なことではなさそうです。この対局のライブ映像は、録画されたものを今からでも見ることができます。

http://www.ustream.tv/channel/the-jaist-20th-an-ni-ver-sa-ry-events-go

GNU Go 3.8

2009.02.23  |  GNU Go, 囲碁  |  Comments (0)

GNU Goの新しい安定版、バージョン3.8がリリースされています。

GNU Go – GNU Project – Free Software Foundation (FSF)
http://www.gnu.org/software/gnugo/

ソースコードは、こちらからダウンロードできます。

早速、実力をチェックするために、以前の安定版、バージョン3.6と対戦させてみました。

GNU Goは、両方のバージョンとも自分でコンパイルしました。使用したPCのOSはWindows XP、CPUはAthlon X2 BE-2400。それぞれの碁盤サイズごとに、先後を換えて50局ずつ計100局対戦させました。コミは6目半。カッコ内は、一局あたりの平均消費時間です。

9路盤 GNU Go 3.6(9.1sec) 53勝 – 47勝 GNU Go 3.8(9.0sec)
13路盤 GNU Go 3.6(35.0sec) 49勝 – 51勝 GNU Go 3.8(32.9sec)
19路盤 GNU Go 3.6(132.5sec) 45勝 – 55勝 GNU Go 3.8(135.8sec)

うーん、全く進化してない…(笑) GNU Goの開発は、このままフェードアウトしていくのでしょうか? ちょっと寂しいですね。

[追記]
Windows用のバイナリはこちらからダウンロードできます。

囲碁思考エンジンFuegoについて調べてみた

2009.02.07  |  Fuego, GNU Go, MoGo, 囲碁  |  Comments (6)

オープンソースで開発されている、Fuegoという囲碁思考エンジンを最近知ったのですが、このソフト、KGSで2kというかなりの実力らしいので、気になってちょっと調べてみました。

Fuego
http://fuego.sourceforge.net/

Fuegoは、GUIを持たないテキストベースのシンプルなコマンドですので、普通に対局しようとする場合は、別途GTPに対応したGUIフロントエンドが必要になります。

まずはヘルプ。

$ fuego -help
Options:
  -config file execute GTP commands from file before
               starting main command loop
  -help        display this help and exit
  -maxgames n  make clear_board fail after n invocations
  -nobook      don't automatically load opening book
  -nohandicap  don't support handicap commands
  -quiet       don't print debug messages
  -size        initial (and fixed) board size
  -srand       set random seed (-1:none, 0:time(0))

Fuegoは起動すると常に、GNU Goに--mode gtpオプションを付けた時と同じような、GTPな状態になります。囲碁のルールや強さ(考慮時間)などは、起動時のオプションで指定することができないようですが、起動後、GTPコマンドでFuegoに教えることができます。

囲碁のルールは、go_rulesコマンドで変更できます。いわゆる日本ルールにする場合は

go_rules japanese

とします。引数は他にもchinesecgoskgsがあり、デフォルトはchineseを指定したのと同じ状態になっているのですが、このchineseを指定した時のコウのルールは、スーパーコウルールとなっています。もしこのコウのルールだけを変更したい場合は、go_param_rulesコマンドを使って

go_param_rules ko_rule simple

のようにします。

go_param_rules

と引数を取らなければ、現在設定されているルールを詳細に表示します。

強さは、考慮時間を変更するtime_settingsコマンドを使って変更できます。たくさん考えさせると、その分強くなります。例えば

time_settings 0 30 1

とすると、一手30秒で考えるようになります。と言いたいところなんですが、バグっているのかなんなのか、この指定ではなぜだかデフォルトよりも大幅に早く手を返してきてしまいます。次のような指定は、うまくいくようです。意味は一局1000秒です。

time_settings 1000 0 0

time_settingsコマンドの詳しい使い方は、こちらのGTPの仕様を見てみてください。

ただ、GUIフロントエンドからFuegoを使う場合に、こういったGTPコマンドが送れなかったり、仮に送れても手間が掛かって面倒なことが多いと思います。そういう場合のために、起動時に実行したいGTPコマンドを記述したコンフィグファイルを用意し、そのファイルを-configオプションを使って読み込ませることができます。例えば、次のような内容のファイルを用意します。

go_rules japanese
time_settings 1000 0 0

そして、GUIフロントエンドの設定では次のようにします(今回はコンフィグファイル名をfuego.confとしました。path/to/は適宜変更してください)。

path/to/fuego -config path/to/fuego.conf

これで、日本ルールで一局1000秒考えるFuegoと対戦できます。

Fuegoには、終局後、対局結果を調べる機能がありますが(final_scoreコマンド)、正確でなかったり結果を返してこないことがたまにあるようですので、この機能を使って目数などの対局結果を表示するGUIフロントエンドを使う時は注意してください。なんかおかしいなと思ったら、自分で数えた方がいいかもしれません。ちなみに、GNU Goはこのあたりけっこうしっかりしていて、ほとんど間違うことはありません。

ということで、Fuegoの使い方はだいたい分かりましたので、今度はGNU Goと対戦させてその実力を調べてみたいと思います。本当はMoGoとさせたかったんですが、なぜか頻繁にエラーが出て止まってしまいうまくいきません(しかも、その後PCの調子が明らかにおかしくなる…)。原因がはっきりしなくて気持ちが悪いのですが、よく分からないので今回は諦めました。

対局に使用したFuegoとGNU Goは、どちらともこちらのサイトからダウンロードしてきました。Fuegoはバージョン0.3.1、GNU GoはMinGW版の3.7.13。両方のソフトとも基本的にデフォルトのままですが、日本ルールのときはFuegoに

go_rules japanese

とGTPコマンドを送り、中国ルールの時はGNU Goに--chinese-rulesオプションを付けました。使用したPCのOSはWindows XP、CPUはAthlon X2 BE-2400。連続対戦させるために、GoGuiに入っていたgogui-twogtpというソフトを使いました(このソフト、最終的な結果をHTMLファイルにまとめることができたりと、めちゃくちゃ便利です)。それぞれの条件ごとに、先後を換えて20局ずつ計40局。コミは6目半です。対局中に他の作業もしていましたので、消費時間や強さに影響が出ている可能性もあります。カッコ内は、一局あたりの平均消費時間です。

9路盤 日本ルール Fuego(159sec) 35勝 – 5勝 GNU Go(16sec)
19路盤 日本ルール Fuego(1016sec) 14勝 – 26勝 GNU Go(261sec)
9路盤 中国ルール Fuego(163sec) 36勝 – 4勝 GNU Go(16sec)
19路盤 中国ルール Fuego(1049sec) 29勝 – 11勝 GNU Go(257sec)

とりあえず、9路盤での強さは本物ですね。GNU Goが相手では、どれくらい強いのかがよく分からないレベルです(笑)。19路盤はちょっと微妙… ただ、時間を増やせばまだまだ強くなりそうな感じはします。それから、他のモンテカルロな囲碁ソフトと同じく、デフォルトの中国ルールの方がだいぶ得意なようです。でも、日本ルールでもそれなりに打てるのはすばらしい。ちなみに、MoGoなどと同じく、「半目勝ちか中押し負け」な対局結果がすごく多かったです。

一応、少しだけ採れたMoGoとの棋譜も置いておきます。4局とも、中国ルールの9路盤。MoGoは--9オプションを付けただけです。時間はMoGoがFuegoの2倍弱ほど使っていました。これだけの対局数ではどちらがどれくらい強いのかはっきりしたことが分かりませんが、とにかくやっぱりMoGoは強いです。

[黒]Fuego vs [白]MoGo : 白(MoGo)中押し勝ち
[黒]Fuego vs [白]MoGo : 白(MoGo)中押し勝ち
[黒]MoGo vs [白]Fuego : 白(Fuego)中押し勝ち
[黒]MoGo vs [白]Fuego : 黒(MoGo)中押し勝ち

[以後の関連記事] : MoGoとFuegoを対戦させてみた

[追記]
コメントで教えていただいたんですが、一手あたりの考慮時間はgo_paramコマンドでtimelimitパラメータを変更するといいようです。一手30秒で考えるようにするには、

go_param timelimit 30

とします。

それからuct_param_searchコマンドでnumber_threadsパラメータを変更すると、マルチスレッドで動くようです。例えば、

uct_param_search number_threads 2

とすると、スレッド数が2になります。マルチコアなCPUを使用時は、この設定をぜひ試してみてください。

[追記]
ハードウェアにも依存するらしいのですが、スレッド数を変更したら、

uct_param_search lock_free 1

ともしたほうが良いそうです。難しくて私にはよく分かりませんが、この設定でLock-freeモードというのになります。

[追記]
GoGuiを使ってFuegoと対局する方法の解説ページを作ってみました。よかったら見てみてください。

http://www.perfectsky.net/fuego/index.html

「オンライン囲碁 COSUMI」始めました

コンピュータと対局できるオンライン囲碁サイトを、GNU Goを使って作ってみました。かなり以前からやってみたかったのですが、これがなかなかたいへんで、ひとまず公開できて今は少しほっとしています。

オンライン囲碁 COSUMI
http://www.cosumi.net/

とりあえず今は、7路盤と9路盤が遊べます。初心者向けですね。基本はGNU Goなんですが、それとは別に独自に用意した定石からも手を探すので、対局ごとにいろいろな形になる分、普通にGNU Goと対局するよりは面白いかもしれません(たぶん、ちょっぴり攻撃的です)。ちなみに今現在、9路盤の定石が10908局面分入ってます(対称形を重複して数えてますので、実質的にはもっと少ないですが…)。

今後、「定石を充実させてもう少し強くすること」と「11路盤の対局ができるようにすること」の2つは、必ず実現したいと思います。他にもいくつかやってみたいことがあるんですが、自分のスキルの問題もあって(笑)、何ができて何ができないのかまだよく分かりません。とにかく、少しでも多くの人にこのサイトで囲碁を覚えてもらえればと思っています。気軽に遊んでみてください!

それから、英語のページも用意したんですが、英語がおかしかったら教えていただけると助かります。

それからそれから、7路盤や9路盤用のスペシャルGNU Goの作り方を知っていたら教えていただけるとすごーく助かります。board.hMIN_BOARDMAX_BOARDMAX_HANDICAPだけは変更したんですが(ちなみにこれは有意な差がありました)、他に何か無いでしょうか? ここはけっこう切実なんですが…

モンテカルロなGNU Go

2008.04.18  |  GNU Go, 囲碁  |  Comments (0)

GNU Goの最新開発版、バージョン3.7.12が出ていたのでChangeLogを見ていたら、その中にこんな項目を見つけました。

new options –monte-carlo and –mc-games-per-level to use Monte Carlo UCT search on 9×9 and smaller boards

ついにGNU Goもモンテカルロだそうです! ということでさっそく実力を調べてみることにしました。

まずは、

gnugo-3.7.12.exe --monte-carlo

gnugo-3.7.12.exe

で先後を換えて50局ずつ計100局、9路盤で対戦させてみました。コミは6目半です。結果は、前者モンテカルロの63勝37敗となりました。なかなかやるなと最初思ったのですが、モンテカルロの消費時間が約13倍(!)と多いので、バランスをとるため、次に

gnugo-3.7.12.exe --monte-carlo --level 1

gnugo-3.7.12.exe

で対戦させてみました。結果は、モンテカルロの41勝59敗。しかもまだ1.2倍ほど時間を使っています。うーんまだまだだめかも… しかし、ここまでレベルを下げるのは、逆にモンテカルロがかわいそうな気がしたので、最後に

gnugo-3.7.12.exe --monte-carlo --level 5

gnugo-3.7.12.exe --level 15

で対戦させてみました。結果は、モンテカルロの59勝41敗。時間も先ほどまでとは逆に、非モンテカルロがモンテカルロの1.3倍ほど使っています(バランスとるの難しいな(笑))。

と言うことで結論、「新しいモンテカルロなGNU Goは時間をたくさん使えば結構強い」でした。本当は、–mc-games-per-levelというオプションも使って消費時間を調節できれば良かったのですが、すぐに適当な数字が出てくる気がしなかったのでやめておきました。

私は囲碁があまり強くないのであれですが、少し棋譜を見たかぎりでは、モンテカルロGNU Goの棋風は、石がガンガンぶつかって、相手の地になりそうな所にも入って行く少し攻撃的な感じでした。でもヨセは以前と比べてなんだかおかしいと思います。前半モンテカルロ、後半非モンテカルロで打ってくれたら結構いいかもしれません。まだチューニングが全然できていないみたいなので、これからに期待ですね。

現時点では、モンテカルロなGNU Goの情報はほとんどないようですが、興味のある人はこことかここを見てみてください。