恥ずかしい写真

Kuronekonyacaren

左の写真は、去る2009年6月20日に行われた、CGFオープンの9路盤での黒番「caren」、白番「くろねこにゃ」の戦い…になってない様子です。

(なお、写真提供は、YSSと彩の作者の山下さんです。)

棋譜を残し忘れたので、お見せするのに時間がかかってしまいました。

ちょっと設定を間違えて、MCの中で使うパターンデータベースファイルとして、変なデータを読み込んでしまい…結果として、毎回のMCによる終局までのシミュレーションの結果がメチャクチャになり、こんな惨状が起きてしまいました。

この局面を写真に撮って貰った直後、プログラマーの判断で投了したのですが…もしも、最後までやったら、どうなってたのかな…とか、今更考えてみたり。

| | コメント (2) | トラックバック (0)

学習失敗、というか何と言うか。

9路盤の学習、先の通り、してみました。

結論から言うと、一部成功しているものの、明らかに弱くなっています(爆)。

成功例ですが、例えば、いきなり盤の端に打つような変な手が明らかに減っています。

が。

プレイアウトの中で盤の端に打つ手の確率も減っているようで…そうなってしまうと、盤の端まで追って行って石を殺すことがMCの中で出来ません(爆)

石を取る手があったら優先的に読むとか入れていこうとすると、処理がえらい重くなるのも分かっているので…さて、どうしたものか(--;

| | コメント (0) | トラックバック (0)

九路盤で学習してみました

…データとしてよいものが取れているかどうかはまだ謎ですが。

方法は、基本的に棋譜からの学習なのですが、自己対戦から3x3のパターンを切り出し、パターンの登場頻度と実際にそこが最善手として打たれた回数を求めて、回数/頻度をMC部の中で確率として使うようにしてみました。

さて、『完全ランダム』なMC部と、頻度を考慮したMC部とで、どちらが強くなっているか、実験ですね。

今回は、単純にパターンを抜き出したのですが、厳密には、

・その着手で石が取れる場合/取れない場合

・その着手でダメが増える/増えない

などを考慮しないと、何となくまずいことになりそうです(--;

 <ちょっと実験してみた感じだと、どうも何かおかしいような…。

| | コメント (0) | トラックバック (0)

囲碁の方は、棋譜からの『学習』に挑戦中

囲碁の方は、棋譜から、実現確率のパターンを学習することに挑戦中。

・候補手の周囲の石8近傍だけを見る簡単なパターン

・32bitに収まるように出来るだけ大きなパターン

とを考えているので、多少変則的なものになるのかな…。これらをモンテカルロシミュレーションの中で、打つ手の確率にあて、さらにUCTのノードを作成する時には、もっと大きなパターンも用意して、progressive wideningを行うつもりです。

これに成功したら、19路でもそこそこ打てるものになりそうだと思ってます。(予備実験はまだですが。)

こっちの方が実は将棋よりも優先順位が高かったりします…。

さて、きっちりと片付けて将棋に戻ろう。

まぁ、勝也の中をある程度知っている私の感覚としては、ある程度大きなパターンを準備して、ある程度大きな棋譜データから学習しても、手でパターン追加しないといけないっていうことも十分にありそうに思うんですけれどね…。でも、まずは実証実験から。

| | コメント (0) | トラックバック (0)

GTPが検索キーワードになってるみたいなので。

GTPのクライアント側実装例を示そうかな、とか思ったら勝也のGTP対応ソースをどこかに置いて来てます。

何か今週はこんなことばかりやってるような気がする…。

何やってるんだかなぁ。

というわけで、予告:くろねこにゃのソースはGTP対応してから公開します。

アルゴリズムの解説は、工学社から発刊する予定の『コンピュータ囲碁のアルゴリズム(仮題)』にて。

さて、もっと原稿書かないといけない状態に自分を追い込んだぞ、と…。

| | コメント (0) | トラックバック (0)

『くろねこにゃ』でCGF特別例会に参加してきました

実質10日間で書いたプログラムで参戦。厳密には、このブログでくろねこにゃと読んでいたものともちょっと違うので、何と名前を付けたらいいものか?

途中の試合運びで、明らかになんか盤面認識が変なことは分かってたんですが、原因が追求できず。で…やっと原因が分かって、最終戦前にバグ修正したら、最終戦だけ勝てましたOTL。1勝6敗。棋譜は…掲載に耐えません(苦笑)。

いや、思考ログとか残してればまだ色々とこういうバグがこうなるとか、面白ネタを提供できそうなんですが、ログも残してない&バグ修正前のプログラムが残ってないので、再現が…。

後は、囲碁の棋譜再現、どうやってやろうかなぁという問題もありますね。多分、フリーでいいものがいっぱいあると思うんですけれど。

で、バグのことを考えると、I/Oの連載用に書いてたプログラムの方が強かったみたいです(苦笑)。あれはあれでまた別のバグがあるんですが…。(I/O連載版は、最終的に日本ルールで動かすことを念頭においていたので、中国ルールだと色々とまずいことが…。例えば、スーパーコウには対応していないですし。勝敗の判定が最終地+ハマだったり。)

今回、普段持ち歩いているノートと、普段使っているデスクトップの速さの差に参りました。幾らなんでも単位時間あたりのプレイアウト数が5倍も違うとは思いませんでした(--;クロックで2倍くらいしか違わないし、コア数も同じなのになぁ。

最大の違いは、デスクトップのOSが2000、ノートのOSがVistaなこと。

ウイルススキャンの速度とかも全然違うかも知れませんね。どーにかして、XPでポータブルで、高速なノートが欲しいなぁと切実に感じました(--;

さて、今後の方針。

・プレイアウトをもっと精密にする。
 とりあえず、3x3のパターンを作成する予定です。

・まだ多分残っているであろうバグを消し去る。

・プレイアウトの高速化
 一番簡単なのは、プレイアウト部分のマルチスレッド化かなぁ。

・19路への再挑戦

・日本ルールへの再挑戦

…とりあえず、これ位、片付けて、UEC杯に参加できるといいなぁ。

| | コメント (0) | トラックバック (0)

とりあえず、これでいいかな?

まず、盤の端では、相手から打てないところでも石を繋げる手なら打つように変更。

次に、ある程度盤面が込み合ってきた場合には、パスを可能手に追加するように変更。これで、セキの自爆の問題は回避。

最後に、アタリだったら取る手を優先するように…と言うところで、下らない間違いをしているのを発見。ちゃんと書き直したら、どうやらまともに動くみたいです。

UCB1→UCB1-TUNEDにする作業は、一旦やってみたものの、式を正しく書いている『つもり』なのに、何か却って弱くなっている感じなので、何か計算式を勘違いしていないかどうか、その内再チェックすることにして…コンピュータ将棋選手権やら、今抱えている仕事やらがちゃんと終わるまで、ねこにゃは封印しておこうかと思います。

あ。

ねこにゃなんですが、今は9路しか打てないので。

「くろねこにゃ」と呼んでます(w

| | コメント (2) | トラックバック (0)

ねこにゃ、弱くなったか?

『相手から打てないところには打たない』というルールで手を絞り込んでいたのですが、例えば、図のような局面。

 ABCDE
1┌○○┬
2●○┼┼
3●○┼┼
4├●○┼
5●●○┼

ここで、黒番だと、A4に打ってくれないのですよね。で、黒A1に打って、白A4に打たれて石を取られて、また黒A3・黒A2・黒A1として、白A4、以下無限ループ(苦笑)。

相手から打てないだけで判定してはダメだな、というのは明らかなんですが、さーて、どう調理しようかな。

それから、課題がもう一つ。

勝率が十分に高い時に、相手がパスしたらパスするというロジックを入れたら、パスした局面ではまだ全然途中で勝負が付いてない(苦笑)。というより、勝也の勝敗判定を借りて勝敗を判定すると、思い切り負けてる。

…で、手で勝也を相手に続きを打ってみたら、盤面全部がセキになるというすばらしい棋譜が出来上がり。…セキのことを考えると、合法手にパスを入れないとまずいみたい。(現在は、合法手にパスを入れていないので、こんな風に盤面全体がセキになったら、ちょうどそこで手番を持っているプレイヤーが、『自爆』してしまいます。)

UCT+MC囲碁、細かい所を詰めていくと、結構色々課題が出てくるものです。

あ、そうだ。

現在、手の選択に、UCB1を使っているのですが、これをUCB1-TUNEDにしようと言うのも思ってたんだっけ。

それから、まだシミュレートしていない手の中では、アタリになっている石を取る手を優先的に選択するようにしたら、なんとなくかえって弱くなった感じがします。

コンピュータ将棋も同じですが、工夫のしどころは、実験と経験を積みながら身に付けていくか、先人の知恵を拝借してみて、うまく行く・行かない、行くなら何故、行かないなら何故かをちゃんと分析していくという作業が欠かせないですね。

…いい加減、世界コンピュータ将棋選手権に向けて、『うさぴょん』の開発に戻らなくては。

| | コメント (0) | トラックバック (0)

UCTなど

ねこにゃの開発は、少しだけ進展。

長らくバグっていた連の差分更新やらその他を諦めて、超シンプルなコードから書き直し。

この状態で、ほぼ完全にランダムに手を選択すると、

9路の初手からは、平均110手でシミュレート完了・1500Playout/sec位でした。

で、そのままUCB1・UCTを入れてみて、10秒思考で勝也と対局。

勝也は、ほとんどの局面で1手1秒もかけずにバシバシ打ってくるので、大分思考時間に差がありますが、どうやら『中国ルールなら』互角に戦えるっぽい感じです。

…そして、また『日本ルール』の壁にぶちあたってます。

単純に勝也がパスした局面でパスすると、ほぼ確実に負けてるんですよね(苦笑)。その後、ごちゃごちゃ打ってると、いつの間にか戦いが全盤面を巻き込んでいて、怪しげな手で『中国ルールなら』勝っているという感じ。

そう、日本ルールでは2~3目負けてるんです…OTL

『日本ルール用終局判定』とか作成して、『日本ルールで』勝っていたら相手がパスしたらパスするとか、そういう工夫をするか、あらかじめ少しコミを大きめに設定しておくという手があるかと思うんですが…前者は結構実装が大変。そして後者については、試してみたら、『負けてる』と思い込んで、暴れまくって状況を悪くするケースが目立つ目立つ(苦笑)。

そして、この程度のシミュレーションの精度や速度では、19路では使い物にならないこともほぼ明らか。

シミュレーションの精度をあげて行く工夫と、速度を上げるための何かを並行して考えていかないとダメですね。速度を上げるには、一つ比較的簡単な方法があって、モンテカルロシミュレーション部分を並列化するというのがあるのですが、手持ちのマシンでは所詮2倍とか4倍程度しか早くならないですし。精度を上げていく方は、読まなくてもいいような変な手も読んでいるので、これをどうにかしていく(パターンを使うことになるでしょうね)方向が一つと、UCTの各ノードで、とりあえず全候補手を(ランダムな順で)読んでみる代わりに、一部の候補手(たとえばアタリの石を逃げる手や石を取る手)の優先度をあげていくとか、最初は一部の候補手しか読まない(適当な回数シミュレートしてみて、どうも思わしい手がないと思ったら別の候補手も読む)とか、そういう工夫が必要そうです。

また、UCTに関しても、単純に上のノードに1回のシミュレーションの結果を繰り上げるのではなくて、もっとMinMax的なことをやってもいいような気がしています。

たとえば、あるノードで、次にある手を打たれたら「勝ちはない」のなら、そのノードの勝率は完全に0にしてしまうとか。…全然理論的な裏づけはないんですが(苦笑)。

うーん…先の、最初は一部の候補手しか読まないとか、キラー手的な手を先に読むだけで、同じような効果が得られるか…。

いまいち、どういう風にチューニングしていけばいいのか、という感覚が掴めない感じですね。未だにアルゴリズム的に何となく納得できていないっていうのが一番大きな理由かも知れません。うまく行くことは分かるんだけれど、っていう意味では、αβでも同じような感覚が未だにありますね、そういえば。

…長い長い呟きでした。しかも、誰の役にも立ちそうにないし(苦笑)。

| | コメント (1) | トラックバック (0)

UCTを組み込んでみる

『ねこにゃ』にUCTを組み込んでみました。

ちょっとバグがありましたが、今回はすんなりと動きました。

が。現在は、動作に大問題あり。

シミュレーションの回数を多くすれば問題にならなそうですが、まだ探索していない手を優先的に探索するようにしているので、二手目以降、見込みのない手を無駄に多く探索してしまうんですよね。結構大真面目に対策を考えないと。

…Progressive wideningとか取り入れないとダメですかね…。

| | コメント (2) | トラックバック (0)

昨日の『ねこにゃ』の勝ちはまぐれだったようです

ちょっとだけ、『梅沢由香里のやさしい囲碁』でトレーニング。

詰め碁を少し復習。(終盤でコウ絡みの詰め碁を間違えてひどい目にあったので。)

で。

あんまり争いにならないようにやったら、さっくり勝ってしまいました。

どう見てもダメな手を、何手かに一回打つんですよね。原因は割りとはっきりしていて、まだUCTを組み込んでいないのと、シミュレーションの精度が悪いせいで、こちら側の明らかな応手を見落としているせい。(より正確には、こちら側の明らかな応手を打つ確率が低く見積もられているせい、ですね。)

…さっさとUCTにしましょう。

あ。

UCB1を組み込むのは、昨晩やってみました。

最初はconstant exploration parameterを適当に設定してやってみたのですが、この値は真面目にチューニングしないと、かなりまずそうです。(探索の『偏り』が思ったようにいってない感じです。勝率が低くて切り捨てた手ももっとシミュレートして欲しい。)

…ちゃんとUCB1-TUNEDにするのがベストかな。

| | コメント (0) | トラックバック (0)

久し振りに進展

『ねこにゃ』の開発、久し振りに進展しました。

結局、速度向上のために差分で連を持っていたりするところを一旦全部捨ててみて、9路で初手からなら1500Playout/secでした。合法手の生成のところで重い処理をしているのをその気になれば省けるはずなので、3000Playout/sec位は(データ構造が盤面のみでも)出せそうですね。

で、モンテカルロシミュレーションを組み込むのは当たり前として、UCTやUCBに行く前に、『シミュレーションの誤差』の方から考えてみることにしました。

シミュレーション自体がまだパターンも何も組み込んでいないのでシミュレーションの結果自体があんまり信用できないという問題はあるんですが(苦笑)。

n回のシミュレーションによる実際の値との誤差は、1/sqrt(n)に比例する(はず)と言うのを前提にプログラミング。

で、9路で10秒間=初手なら15000Playoutでデータ測定。

とりあえず、『実際の値』と『本当の勝率』の間の誤差がどれ位あるのか、定数項の設定をまだ最適化していない(これは、同一の手を10回・100回・1000回・10000回とかシミュレートすることで定数項を推測は出来るはずですね。2^n乗でやるのがコンピュータ屋さん的な感じですかね?)状態ですが、現在、

初手
可能手81手
総シミュレーション回数 15672回
一番シミュレートを多く行った手のシミュレート回数 198回
一番シミュレートの少ない手のシミュレート回数 80回

一番勝率の高かった手:(5,6) 勝率:0.555556

てな感じです。まだ何かでかいバグがありそうな気もするんですが、とりあえず…

・パターンを使って一回あたりのシミュレーションの精度を上げる
・まずは、UCB1にしてみる&UCTを組み込む

という、割と重めのテーマが残っています。

とはいえ、パターンの方は、元データのあてもできましたし、今のシミュレーション回数の割り当て方法をUCB1にするのもUCB-TUNEDにするのも比較的簡単です。また、UCTにするのも、まぁ大体作業的には見えています。(データ構造としては、この辺を意識した構造を構築済みなので。)

というわけで、久し振りに大分視界がクリアになった、これから一気に強くできるな、と思ったところで。

…現行の、いわば『しょぼい』バージョンに私が負けました(涙)。

…いくらなんでも、囲碁弱すぎだ、私。

| | コメント (0) | トラックバック (0)

うまくうごかなーい

「ねこにゃ」が動きません。

UCTの実装をどこかで絶対に間違えている、という妙な自信だけがあります…(--;

…9路で勝也に勝てるようになるのがまずは最初の目標なんだけどなぁ。

| | コメント (0) | トラックバック (0)

UEC杯

すっこーんと申し込みを忘れてましたOTL

まぁ、申し込んでいても未だに日本ルールの対応とか出来てない&19路がまともに動かないので、棄権していたような気はものすごーくするんですが。NNGSのプロトコルの対応もまだ出来てなかったし…(--;

今日仕事がいっぱい押し詰まったりすることがなければ、観戦には行ける予定…です。

『勝也』のGUIは作成しているわけですし、『勝也』のNNGSプロトコル対応も随分前にやった(でも、何故か終局処理に問題があるらしいので今回、修正はしてみました)ので、選手と言えば選手での参加になるんですが…『勝也』の思考エンジンは(ソースは見てるけれど)全然触っていないんですよね(苦笑)。何か微妙…。

| | コメント (0) | トラックバック (0)

岐阜の大会中止?

モチベーションがく落ち…。

いや、多分代わりの大会が開催されるとは思うんですが。

後は、時期次第ですね…。9月一杯位まで、仕事がかなり押し詰まってる感じなのです。

| | コメント (3) | トラックバック (0)

そしてねこにゃも

「ねこにゃ」も先には進んでませーん(苦笑)。

単純に『純碁で』ランダムに終局まで合法手で進めて、地…というか、純碁の場合、石を数えるところまでは出来てますが。(そういえば、まだplayout/秒も計測してないや)

『日本ルール』は難しいですねぇ…。想像していた以上に純碁とのギャップがあります。何かうまくサボる?方法があると思うんですが、まだ思いつかない状態です。(いや、多分先行しているプログラムの公開されているソースとか論文とか読めばいいんじゃないかという気は「ものすごく」するんですが。)UCTまで実装できれば、単純に、純碁で黒石が置かれることが分かった部分は黒地とする、でいいのかなぁ…。うぅむ。

まともにやると、最低限でも連の生死探索をしないとならないと思うのですけれど、実はデータ構造上、「連」すら持っていないのですよね>ねこにゃ

いや、その、どうせモンテカルロ法にするのなら不要かな、とか思って(爆)。

| | コメント (2) | トラックバック (0)

碁石と碁笥はあったんだけど

ほんのちょっとだけ、お片付けをしました。

で、碁石と碁笥を発掘しました。

(ついでに、MtGの英語版のカードも紙袋に一杯分程。)

碁笥、ちゃんと二つあるんですが…黒石と白石が両方にごちゃごちゃになって入ってます(--;

これは、誰かさん(私ではない)が詰め碁を盤上でやってみるのに片方に一緒に入れてた方が都合が良かったからではないかとか推測…。(弟と五目並べで遊んでた時には、黒石と白石を混ぜてしまったりはしなかったはず。)

さらに、碁盤が見つかりませんOTL

将棋の盤駒は昔使っていたものを発掘する作業は諦めて、マグネットの安い奴を買ったんですが…囲碁の方はどうしたものかなぁ(--;

…開発と関係ないようなあるような、そんな話、でした。

| | コメント (2) | トラックバック (0)

劫にょバグを直しましたのにゃ

ねこにゃの劫にょバグを直しましたのにゃ。

…あまりに恥ずかしいにょでどう間違えてたにょかは書けないにょにゃ。

それにぃしても、今みゃでどうして気が付かなかったのか不思議にゃのにゃ。

| | コメント (0) | トラックバック (0)

ねこにゃにバグ発見ー。

I/Oの連載記事を書いていて、ねこにゃのバグ発見。

…「劫」の実装を間違っていたらしい。がーん。まだルール通りに打つことも出来ないプログラムだったとは…。

| | コメント (0) | トラックバック (0)

囲碁ソフト開発中…

予告通り、囲碁ソフト「ねこにゃ」開発中です。

まずは、シンプルに、純碁ルールベースでモンテカルロ碁を実装してみていますが…。

…遅い(苦笑)。9路でも話にならないような遅さです。まぁ、この辺はまだ何も工夫をしていないのでいいかなぁ。真面目に最適化するとしたら、どういう構造がいいんだろうとか、頭の痛いことは沢山ありますが(--;

で、純碁ベースなので、自陣に石を打つのが大好き(苦笑)。

というか、そもそも自陣を2眼を残して埋め尽くすまで、終局しないんですよねー…。

いやー…ここから19路を打てるようにするとか、自陣に不必要に手を入れないようにするとか、地を数えられるようにするとか…考え始めると、色々課題が大きいですねぇ(--;

純碁→日本ルールの隔たりなんて、そんなにないんじゃないかと思ってましたが、思いの外壁が厚いようです…。

まぁ、こうやってぶちぶち書いていると、いきなり目の前がクリアになる瞬間がやってきたりするわけですけれど。<そんなわけでぶちぶち書いてます(w。

| | コメント (12) | トラックバック (1)

「ねこにゃ」開発計画

以前から手を出そうと思ってたんですが、囲碁プログラムの開発に手を染めることにしました。<と書いて自分を追い込む作戦です。

名前は、「ねこにゃ」です。

今年の岐阜の大会(があるのかどうかという問題もありますが)への参加を目指す予定。

| | コメント (2) | トラックバック (0)