人は駒得のみに生くるにあらず その21

futility pruning(以下、単にfutilityと記す)をやってみました。

iteration回数を増やすためには
・null move pruning
・LMR
・futility pruning
とこの3つらしく(←人聞き)、null move pruningは軽いわりにそこそこiterationが回りました。しかしfutilityは駄目です。

平手の開始局面で比較してみました。

・depth 13にて 10946612 nodes , 3741152nps [null move]
・depth 13にて 5497431 nodes , 2700113nps [null move,探索中に1手詰め,futility]
・depth 13にて 5497068 nodes , 2364330nps [null move,探索中に1手詰め,futility,置換表の手でfutility]

futilityをすると、半分ぐらいのノード数になります。枝刈りできています。しかしnpsも25〜30%ぐらい減っています。探索中に1手詰を呼び出すと5〜10%ぐらい減っていたのですが、誤差程度だったので正確に計測していませんでした。

futilityするコストは大変高いということがわかりました。普通なら評価関数などのコストのほうがはるかに上回るはずなのですが、駒割だけの評価関数ですから、相対的にfutilityのコストが目につきます。

futilityは、自玉に王手がかかっていなくて、次の指し手で敵玉にも王手がかからないときに適用されます。安定したノード、すなわち、そんなに評価値が変動しないだろうという局面で適用されます。

「3手の間に急激に龍一枚分も丸得することはないだろう」だとか、そういう仮定のもとに枝刈りをします。

普通、駒を動かすことで(駒の働きを点数化しているなら)なだらかに点数が変動するのですが、駒割だけの評価関数ですと、駒を取ったときにしか点数はつかず、futilityの前提条件自体が崩れています。

つまり
・(駒割だけの評価関数にとって)futility重すぎる
・(駒割だけの評価関数にとって)futilityの枝刈りが妥当ではない
という理由により、futilityは適用しないほうがマシなのではないかと私は思いました。以前のバージョンと対戦させても、iterationが1回多く回っているのにどうも弱いです。R50ぐらい下がっているように思います。

以上の話は駒割のみの評価関数で、「世界最速の指し手生成ルーチン」を用いていることが前提にあるので、もし指し手生成ルーチンが遅くて、futilityの比重がそんなでもない場合は当てはまらないのかも知れません。かなり特殊な話だと思っておいてください。

あと同様の理由で1手詰め判定も、もしかしたら呼び出さないほうが強いのではないかと少し思います。1手詰め判定を呼び出すことによって30%ぐらいnpsがダウンするなら、その分たくさんのノードを読むほうが強くなるのではないかと思います。

「駒得だけの評価関数で」という縛りはなかなか奥深いです。

明日はLMRを実装してみます。これで駄目なら、もうひよこ将棋は大幅な向上は見込めないと思います。futilityが失敗したことで、意外と早く頭打ちになりそうです。

れさぴょんが稲庭を始めたようです

http://wdoor.c.u-tokyo.ac.jp/shogi/view/2011/10/25/wdoor+floodgate-900-0+lesserpyon_sakura_vps_test+hiyoko_shogi_v0.12_1t1c+20111025033002.csa

ひよこ将棋のほうは指し手生成の順番に歩を突いていくだけという変な将棋ですが。

floodgate上は千日手はノーカウントなので痛くも痒くもありませんが、それでも稲庭相手に千日手もカッコ悪いので明日対策を考えます。

人は駒得のみに生くるにあらず その22

LMR実装してみました。適当実装なので20行ぐらい書いただけですが。
初期局面でiterationは20ぐらい回るようになりました。

いくらiterationが回っても終端ノードで0ばかりなので意味があるのかどうかはよくわかりません。npsはさほど落ちていないように思います。

futility pruningはオフにしました。

ひよこ将棋v0.12のほうはPVがうまく更新されず1手詰めの局面で投了するバグがあったようでpishogiに負けまくってました。
ひよこ将棋v0.14のほうは全然デバッグもしていませんが、0.12のほうよりはマシだと思うので、ひよこ将棋v0.14としてfloodgateに投入しておきます。

人は駒得のみに生くるにあらず その23(最終回)

LMRを実装してざっくざっく枝刈りできていますが、ちっとも強くなっていませんでした。むしろ弱くなっています。評価関数の精度が悪すぎて(駒得のみなので)読みこぼしが多いのでLMRと相性が悪いのでしょうね。

もう少し改良すべきところもあるのですが、まあそれらの改良をしても300ぐらいしかあがりそうにないので、「人は駒得のみに生くるにあらず」というのを身をもって体験したということで、ひよこ将棋チャレンジ(駒得のみの評価関数でどこまで強くなるのか)はここで終わりとします。

ひよこ将棋v0.14をのちほど公開しておきます。

このブログで公開後、ひよこ将棋は毎日50か100ずつRを上げてきましたので最後のバージョンはfloodgateではR1700程度のようです。

ここまで応援してくださったみなさん、本当にありがとうございました。
次は、「ひよこカルロ将棋」のチャレンジが始まります。お楽しみに!!

ひよこ将棋 v0.14公開しました。

ひよこ将棋 v0.14(おそらく最終版)を公開しました。floodgateにて二週間レーティングではR1700程度だと思います。

ひよこ将棋チャレンジは終わったので、次は「ひよこカルロ将棋」の開発に取り掛かります。ご期待ください!!


■ ひよこ将棋を知らない人向け説明用テンプレ

・ひよこ将棋は駒得だけの評価関数でどこまで強くなるのかというチャレンジです。
・ひよこ将棋には駒得以外の評価関数は一切組み込まれていません。
・ひよこ将棋は定跡を一切持っておりません。
・某氏からパチってきた拝借した、「世界最速の指し手生成ルーチン」を使用しております。

ひよこカルロ将棋とは?

モンテカルロ法とひよこ将棋(駒得だけの評価関数の将棋)とを芸術的に融合させた、まったく新しいタイプの将棋ソフトです。

次はこの実行ファイルを公開して、そしてまた毎日バージョンアップをしていきます。


ちなみにひよこカルロ将棋は、mcts(モンテカルロ型木探索)は使っていません。あくまでモンテカルロ法です。

探索ルート(探索開始局面)でモンテカルロ法でplayoutまで試行し、その結果、勝率のよさげな手を優先して読んでいくというそういう手法です。

さっそくfloodgateに「ひよこカルロ将棋」v.0.01を投入しました。
hiyoko_carlo_v0.01という名前です。

ローカル環境で対戦させたところ、ひよこ将棋v0.14よりは強いのでおそらくR1700以上の点数がつくのではないかと思います。

ひよこカルロ将棋v.0.01を公開しました。

ひよこカルロ将棋v.0.01の実行ファイルを公開しました。


■ ひよこカルロ将棋とは?

「ひよこカルロ将棋」とは、モンテカルロ法とひよこ将棋(駒得だけの評価関数の将棋)とを芸術的に融合させた、まったく新しいタイプの将棋ソフトです。


例によってこのブログの上のところからダウンロードできます。

まだ序盤がおかしいので(ひよこ将棋よりはマシですが)、いろいろバグってるのだと思います。v.0.01なのでそのへんはご容赦のほどを。

ひよこカルロ将棋v.0.02を公開しました。

何かおかしいと思ったら、ひよこカルロ将棋v0.01は豪快にバグっておりました。すみません..。修正してv.0.02をアップしました。

それでもなかなか囲ってくれないのですが、たまに囲います。それもまた変な囲いなのですが。いかにも調整がうまく行ってないという感じなのですが端から歩を順番に突かなくなっただけマシだと思っておきます。

R50ぐらいはひよこ将棋v0.14からあがっていると思うので明日のfloodgateの結果が楽しみです。


って書いた瞬間にれさぴょんにボコられました。駄目だこりゃ…。明日じっくり調整します。