2017年4月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

tweet

  • tweets

« やったぁyowai_gpsに勝ったー | トップページ | フリーハードウェア »

将ぎの実けんレポート

ぼくの春休みの宿だいでは、FPGAの将ぎのエンジンのこう成をいろいろ変えて、ノードの数がどう変わるかを調べました。

次の10通りのこう成をくらべました。

(ア) き本アルファベータ
(イ) (ア)+ 反ぷく深化
(ウ) (イ)+ FUTILITY PRUNING(もどき)
(エ) (ウ)+ EXTENDED FUTILITY PRUNING(もどき)
(オ) (エ)+ 深さ=1では打つ手を指さない
(カ) (オ)+ NULLMOVE PRUNING、さい帰なし、R3D=7(※)
(キ) (カ)で NULLMOVE PRUNING のさい帰をありにした
(ク) (キ)で R3D=6 にした
(ケ) (キ)で R3D=5 にした
(コ) (ク)+ PVS

    (※)R3Dは、R=3とする深さのことです

これらの10通りをえらんだ理ゆうですが、まずさい初はき本アルファベータからはじめて、それからほ木先生のプリントに「こうするといいよ」と書かれていたことを一つずつつい加していきました。「もどき」とあるのは、FPGAでは先生のやっている通りに作るのがむずかしかったので、ハードでもできるように少しさぼっちゃいました。てへ。ごめんなさい。

(オ)の「打つ手を指さない」は、静止探さくでStandPatを使っているので、深さ=1で当たりの手を打っても、次に相手にパスされるとむだになるなぁ、と思ってこうしました。ちなみにぼくは今もやっぱり、StandPatはとっても気もちわるいなぁと思っています。だけどStandPatにしないとまた別の問だいが出てくるので、今はこうしています。このへんの事じょうについては、また夏休みの宿だいにでも考えてみたいと思います。

(キ)~(ケ)ですが、ほ木先生のプリント(2006年8月 じょうほうしょ理)を読むとさい帰かどうかよくわかりませんでした。R3Dは7みたいです。小宮先生のプリントではさい帰でないコードになっていました。Fabian先生のFruitのかい説では「つねにR=3でさい帰」となっていました。どうするのがいいのかわからなかったので、いろいろ変えてやってみました。

15~25分切れ負けだと、だいたい1手10~15秒くらいで指さないといけないと思います。島先生の「読みのぎ法」の25問をとかせて、適ぎ深さを変えながら1問あたりの平きんノード数をみてみました。えらんだ手が少しずつ変わっているので、単じゅんにくらべるのはもしかしたらあまりよくないのかもしれません。だけどとりあえずノード数だけならべてみます。

1問あたりの平きんノード数の表

     深さ6     7      8

ア       23042520
イ       12112786     90207415
ウ                    75797284
エ                    68488777
オ                    38210226
カ                    35529881
キ                    16160660     80446932
ク                                 74772127
ケ                                 74589707
コ                                 66844067

FPGAは6.25Mnps (※)で動いているので、たとえば62500000ノードだと10秒になります。
※"nodes per second"というのがふ通の言い方のようなので、合わせました

[まとめ]

ほ木先生の言うとおりにしていったら、はじめは深さ6しか読めなかったのに、深さ8まで読めるようになりました。このおかげでKShogi初きゅうやyowai_gpsに勝てるようになったので、とってもうれしかったです。やっぱりほ木先生はすごいなぁ、と思いました。

    おわり

ついしん とーとつですがアルジャーノンに花たばをあげてください。

« やったぁyowai_gpsに勝ったー | トップページ | フリーハードウェア »

将棋プロセサ」カテゴリの記事

コメント

アルジャーノンと違って、どんどん結果が良くなってますね(^^;

>小宮先生のプリントではさい帰でないコードになっていました。
 はじめ何のことか判らなかったんですが、
 doNullの条件のことですね?
 たしかにFruitのソースを確認すると再帰的にNullMovePruningをしてますね(その代わり、verificationもしている)

 元々、NullMoveを初めて知ったのは山下さんの解説で、そこでは再帰的じゃなかったんですよ(^^;
ちょっとわらしも実験してみます(^^;

はいdoNullのことです。
あでもverificationなんてあったんだっけ。何やってるのかわからんなこれ。うかつに再帰でNULLMOVEやるとまずいんですかね。

まあ前向き枝刈りで読み抜けが出るのは覚悟のうえで「深く読むためにノード数減らす」を目的にして、とりあえず実験してみました。そもそもこの実験では手の良し悪しぜんぜん見てないし。指し手が悪くなってたら元に戻すつもりです。

再帰でやってしまうと、連続パスも含まれてしまうし、お互いにパスする場合も含まれるし、
局面によっては副作用が出るかもしれません。
色んな局面で実験しないと危険かも?

今回も実験してみたんですが(fruitのような確認はしていない)、
misakiでは自己対戦では弱くなるようでした。
システムに依存すると思うので、なんとも言えませんけど(実装方法が悪いのかもしれない)

NullMovePruningは効果が大きいので、色々と工夫してみる価値は充分あると思います。

しかし、FPGAなのに各種枝狩り手法を実装して、凄いですね!

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/507007/12006001

この記事へのトラックバック一覧です: 将ぎの実けんレポート:

« やったぁyowai_gpsに勝ったー | トップページ | フリーハードウェア »