SSブログ

【将棋】プロ編入試験 第2局 今泉健司アマ vs 星野良生 四段 [将棋]

そもそもプロ編入試験の条件が「アマチュア枠のあるプロ公式戦で10勝以上かつ勝率6割5分以上」。
更にそもそもプロと勝負するためには、アマの大会で優勝か準優勝しないといけない。
こんな条件クリアできるやつがいるのかと思ったら出てきてしまったのが今泉アマ。

まあ、とにかくすごい。
http://imaizumi41phoenix.seesaa.net/


1局目はプロ先手。
今泉アマの得意戦法である中飛車左穴熊を選択。
お前の手でお前の得意戦法を破ってみろというプロらしい選択だったと思う。

穴熊でありながらうかつについた歩が攻めを呼び込み中盤は悪くしたが、ねじり合いに持ち込んだ結果プロが先に受け損なった。しかもそれを的確に咎めた結果勝利。

今泉アマの著書に友人のコメントが書いてあり、「序盤は適当、終盤で何とかする」タイプらしいが、中盤瀬川五段がひと目の悪そうな筋でこけたが、終盤明らかに悪くする筋に自分から入らなかった。Blogによれば毎日浦野八段の詰将棋を1000問問いて終盤力を落とさないようにしているらしい。製作者の浦野八段も対局前にざーーーっとみて将棋脳にして対局をするためによく出てくるような形の詰将棋を作ったと言っていた。作者冥利に尽きるのではないか。


3手詰ハンドブック

3手詰ハンドブック

  • 作者: 浦野 真彦
  • 出版社/メーカー: 浅川書房
  • 発売日: 2011/09
  • メディア: 単行本



今日やってた2局目は待望の先手。
中飛車に対して相手も中飛車でカウンターが若干決まる。しかも端を詰められていて同じ戦型なら負けと思われたところだが、得意戦法というか自分の土俵で戦っている強みだろうか。中飛車同士のねじり合いをうまく制してしまった。

ただ、プロ相手にそこから勝ちきるのが難しいのが将棋の怖いところ。気がつけば中央に駒が固まっていて素人目には逆転したかのように思われたが、ひたすら丁寧な差し回しでじっくりと詰み筋に入っていった。

この落ち着きぶりは自分の土俵であることと、第一局勝ったことがあるのだろう。それでも勝ちが見えてきた終盤はなんども駒台に手を乗せては読みなおすというのを繰り返していて、一発勝負の編入試験らしい緊張感が見て取れた。

しかし、Twitterみても、「強い」という感想が多いし、ニコ生もそうだった。プロを貶めたいガキンチョは「プロ弱い」みたいなコメントをしていたが、プロ相手に終盤間違えないアマって何者よって話。プロが弱いのではなく今泉健司が強いのであると強く言いたい。

1,2局は関西だったが、今度は関東での対局になる。
空気が変わってまた緊張感が出てくるだろうが、ぜひ頑張って欲しい。


最強アマ直伝! 勝てる将棋、勝てる戦法 (マイナビ将棋BOOKS)

最強アマ直伝! 勝てる将棋、勝てる戦法 (マイナビ将棋BOOKS)

  • 作者: 今泉 健司
  • 出版社/メーカー: マイナビ
  • 発売日: 2014/04/23
  • メディア: 単行本(ソフトカバー)




電王戦タッグマッチ 2014 Aブロック [将棋]

決勝前までは正直はやらかしたと思った

・切れ負けの展開の早い将棋は視聴には向かない
 視聴者がついていけない

・ニコ動でサブウィンドウを切り替えるとメインの転送が止まる
 これは糞仕様。

・脳波とか見れても・・・
 これは上記の糞仕様と密接に絡む
 今回4つ、上から、盤面、脳波先手、脳波後手とあるが、これらを全部1ウィンドウ、別窓にして表示できるぐらいじゃないと視聴者はまったく嬉しくない。

 思うに裏方でやってる人は全部一度に見る環境にあるから気にしてもいないんだろう。この糞仕様のWコンボは本当に最悪だった。

また、棋譜という面でもイマイチだった

・ひふみんまったくやねうら王を使用せず
 ある意味想定内w
 これは脳波が出ていたのもあるんだが、これだと本当に何やってるかわからない。
 やねうら王の主張を一切無視して指したというのは、決勝ラウンドと同じシステム(後述)なら面白かったと思う。

・屋敷Ponanzaで無理攻めを決行
 エキシビジョンだから慎重さが無かったといえばそれまでだが、コンピュータがいけるという魅惑的な攻めの誘惑を断ち切れなかったようだ。
 コンピュータのほうが強いと言われているが、通常のノーマル電王戦では平均一手4分で指すのでダメそうな場合に暴発しないことが期待されるが、一手の検討時間が1分未満だと、さすがにプロの感覚のほうがよい場合も多い。駒がぶつかり合うまで、攻めるタイミングまではプロが手綱を握っておいたほうが良いと思われる。

・高橋YSSの咬み合わない横歩
 高橋九段といえば横歩だが、豊島七段に負けたYSSとの組み合わせは最悪だったと思う。YSSだけでなく大抵のコンピュータ将棋は横歩後手は勝てない感じがするが。YSSはかなり異質な読み筋だと思っているので人間が使いこなすのは難しそうというのが印象。

・中村六段の使い方
 ここぞというところでかなり調べている時間が長かったが、多分一手一分以上は調べないと良い手が出てこないのを理解していたのではないだろうか。あと習甦がちょっと読みが遅いというのがあるが、感覚がプロ棋士に似ているようでかなり使いやすそうな印象をうけた

・森下ツツカナ
 電王戦で森下九段のような差し回しで相性が良いのか、行くか行かないかの判断がかなり良かった。

というのがあって、読ませるなら時間をかけてじっくりという中村六段の使い方は正しかったと思う。

ただ、決勝になったときに

・切れ負けから30秒将棋に変わった
 これは元々のルールだったが、棋譜の質はあがったように思える
 これでも視聴者がついていくのは難しい。

・脳波がコンピュータの読み筋に変わった
 正直驚いたが、これでやっとプロが選んだかどうかがわかるようになった。
 ただ、脳波測定器をつけて対戦した理由が無くなった。
 また、この仕様変更のためにかなり待ち時間が長かったが、藤井三浦の群馬コンビの漫才が面白かった。むしろこの部分が最高だった。

・暴発を抑制するタイプの二人が決勝だった
 中盤の難解なところでねじり合うところは興味深かった

途中までは良かったが最後にトラブルが出る

・森下九段がツツカナの読み筋を見誤る
 詰みを発見すると一手+評価値(0)という表示をしていたのもあってか、読み筋を見誤り、そこから相入玉模様のラウンド2が始まった。また、超手数のせいか演出かはわからないが、途中で両コンピュータともに落ちたので結局最後は人間同士でやってそれが結局盛り上がったというオチだった。

正直前半はつまらなかったが、その理由は間違いなくニコ動の放置してる糞仕様だと思うので、ああいう演出をしたいのであれば基板をしっかりしてほしいと思う。今回のとは全然関係ないがゲーム広告が最新発言を1行分隠すバグもいい加減直して欲しい。

しかし、とにかく漫才が面白かった。

・三浦九段が先手千日手を選ぶのはせこい
 「私が長考するのもあるんですけど」といいつつ、積年の恨みをぶっちゃける
 なお、先手千日手を選ぶ三浦九段に対し、男佐藤康光、先手番で一手損にし、しかも勝つ
 なお三浦九段に言わせると、そんな簡単な話ではない模様

・三浦九段は藤井九段にだけ右四間をやってくる
 本人曰く好きな戦法だからといっていたが、久保九段にもやっていたようなので対振り飛車用の戦法のようだ

他にもいろいろあった気がするが、とにかく面白かった。


ルポ 電王戦―人間 vs. コンピュータの真実 (NHK出版新書 436)

ルポ 電王戦―人間 vs. コンピュータの真実 (NHK出版新書 436)

  • 作者: 松本 博文
  • 出版社/メーカー: NHK出版
  • 発売日: 2014/06/06
  • メディア: 新書



Stockfish 2.2への道 未完 [将棋]

最近、まったくStockfishをいじっていなかったのだが、理由は慎重にやってたのに弱くなったて、心が折れたから。

今を遡ること一ヶ月前、2chのコンピュータ将棋板より

>>468
> 将棋ソフトの思考方法を少し変えては変更前のソフトと1000回対局させ、53%以上の勝率を上げれば「強くなった」と判断する。

n局やって検出できる最小の勝率を(50+x)%とすると
有意水準5%   x≒98/√n
有意水準1%    x≒128.8/√n
有意水準0.5%  x≒140/√n

簡単にx≒100/√n とすると
 25局  70%
100局  60%
400局  55%
900局  53.3%
1600局 52.5%


100局だと6割、60-40だと明らかに強くなったと言える模様

というので100局ためしにやってみたところ40-60
ちょっと前まで五分だと思ってたのに何かおかしい。
気を取り直して少し前まで戻しても40-60。
あげく、今までデグレだと思っていた箇所を無効化しても40ー60。
何をやっても40-60になっていて心が折れた。

かなり慎重にやってきた「つもり」だったが甘かった。
そもそも100戦がかなりきつい。
仮に専用マシンがあっても時間がかかるのでちょっと変更しては暫く待つ必要があるので本当に欲しいのはマシンパワー。

ただ、2.2の途中で終了処理の改善が入っていて、これが入っていると2.1が落ちないのではないかと疑っている。具体的には反復深化のときに最善手(PV)が入れ替わるときに無効なポインタ参照をしてしまっているのが原因(と思っている)。

そもそもが、NPS=強さでもないところがまた難しい。
例えば2chに書かれていたベンチマークだが

オリジナルgpsfishone(2.1ベース)
gpsfish_2.1.exe bench 1024 4 20 default time
===============================
Total time (ms) : 311350
Nodes searched : 238387391
Nodes/second : 765657

gpsfish 5ベース
gpsfish_5.exe bench 1024 4 20 default time
===========================
Total time (ms) : 320032
Nodes searched : 267113402
Nodes/second : 834645

時間が毎回揺らいでるのは仕様としてもNPSだけみると5のほうが多い。
にも関わらず弱いのは、いわゆるLMRのチューニングが変わっているからだと思われる。
今回それを探り出そうと思って、2度目のマージを行っていたのだが知らぬ間に弱くなっていた。

ということで、結論としては、単に強さを求めるのであれば2.1ベースにしておいたほうが無難。
5などをベースにするときはパラメータをチューニングする覚悟が必要。

と思っている。
また気力が出たらなにかやろうと思う。

あと、ソースコードの方はプッシュはしたが、gpsfish_5のタグも打ってなかったので、うっておいた。
https://github.com/woodyring/Stockfish

あと、タグにバイナリを登録した。core2あたりで動くようにビルドしたつもりだが動くかは不明
https://github.com/woodyring/Stockfish/releases/tag/gpsfish_5

動くかはわからないが、動いたら弱さを体感して欲しい(笑)

情報処理 2014年8月号 [将棋]


情報処理 2014年08月号

情報処理 2014年08月号

  • 作者:
  • 出版社/メーカー: 情報処理学会
  • 発売日: 2014/07/15
  • メディア: 雑誌



ミニ特集「第3回将棋電脳戦を振り返って」と題して、習甦の竹内さんが書かれているということで購入してみた。

興味深い記述が1つあった。「6スレッドなのでそれぞれのスレッドが読んだところ、○○が4つ、○○が2つ返してきた」というようなことが書いてあった。Bonanzaなどは、ある候補手の確かさを確かめるためにその候補手より深いレベルでは並列処理すると思うが、一番上の部分で分けるというのはないはず。(表示の問題だけで内部的にはちがうかもしれないが)
習甦はRootでSplitするようなことをしているのかもしれない(知ったか)。
2008年頃に探索を模索していたYSS掲示板ではRootで分けることはあまり意味がなかったというような書き込みと関係あるかも。

それ以外は、ほとんど想定の範囲内だったが、Twitterでも流れていたヒストリーヒューリスティックによる影響でいい方向に読み手が進んでいたというような記述があった。自分が散々GPSFishと戯れていた時は、あんまり強くかけ過ぎると読み抜けが出て逆転されやすい気がしていたが、それは3秒対局の話。一手4分程度ではうまく働いたのだろう。

リベンジマッチもそうだが、時間が伸びると人間が読み抜けがなくなるという楽観視も多いが、コンピュータもある程度以上は選択探索しているので、時間が伸びれば読み抜けも減る。人間が読んでも無駄だと思っている時に読むので無駄だなと思われる読みがある反面、読み抜けは確実に減る。
そのため、時間を短くした練習対局で癖を見つけても、時間が変われば中盤の怪しい局面で指し手が変わり、(バグがなければ)素直にレーティングが上昇するのがコンピュータ。一方で、時間が伸びてもレーティングが伸びるとは限らないのが人間で、リベンジマッチは人間の体力的な限界が先に来てしまったと思う。

習甦の評価関数は重いので短時間ではあまり勝率が上がらないというようなことを度々耳にするが、一方で評価関数が重いなりの正確さはあるわけで、リベンジマッチに習甦を選んだというのは長時間に向いている習甦をわざわざ強くなるレギュレーションで戦ったので負けて当然であるような気もする。

ルポ 電王戦 読了 [将棋]


ルポ 電王戦 人間 vs. コンピュータの真実 (NHK出版新書)

ルポ 電王戦 人間 vs. コンピュータの真実 (NHK出版新書)

  • 出版社/メーカー: NHK出版
  • 発売日: 2014/06/10
  • メディア: Kindle版



知らぬ間にKindle版が出ていたので、昨日から読んでて、さっき読み終わった。
あまり将棋の内容はでてこないのでドキュメンタリーっぽく読める。
要所要所でのいろんな登場人物の一言が時代や背景を象徴してて面白い。

あと意外だったのはPVではヒールっぽかった橋本八段がかなりシビアな意見をもっていることだった。いや、PVでもシビアな意見を言っているのだが、あまり踏み込んだことはPVでは出てこなかっただけで、自分が思っていることにかなり近い。トップ3である渡辺二冠もあれだけストレートに発言しているとは思わなかった。

現実的に考えると関係者は「電王戦を始めるのが遅かった」と思っているし、全くその通りだと思うし、タイトルホルダーが出るとなれば、対局料が億単位になるであろうというのもわかる。そのために第4回はタイトルホルダー以外のトップ棋士に戦ってもらい、それでだめならタイトルホルダーという渡辺二冠の主張は大変理にかなっていると思うが、はたして実現されるのだろうか。

コンピュータ将棋選手権の最高の2枚は本に載せても良かったと思う。

http://computer-shogi-live.cocolog-nifty.com/blog/2014/05/24-4206.html


第2回電王戦以降、いろいろリアルタイムに見てきた自分からすると、山本さんあたりの裏話ぐらいが目新しく、
電王戦界隈の話はさらっとしてて、目新しさはなかったが、コンピュータvs人間みたいな視点で時系列にそってまとめたという点では、何も知らない人がよめるようにはなってる気がする。自分は知ってて読んでるので、あまり自信がない。


こっちも面白いらしいのでKindle版が出たら買う


将棋電王戦棋士激闘録〈第3回〉

将棋電王戦棋士激闘録〈第3回〉

  • 作者: 池田 将之
  • 出版社/メーカー: ピーエスクリエイティブ
  • 発売日: 2014/06
  • メディア: 単行本


Stockfish 2.2 アップデートメモ その3 [将棋]

その2でも書いたのだが、最近妙に弱いし、クラッシュしまくる。

NPSは落ちていないので、piece_onみたいな変更ではない。
しかし、すごく弱い。これは間違いなく変な仕様変更が入っていると思ったが何かはわからなかった。

マージコミットはgit bisectが効かないので、セルフbisectを行ったのだが
明らかに重要なコミットを見逃していた。完璧な脳内スルー。

commit 6bc16f3ff162a46e5c06f8857865472757e46bf0
Author: Marco Costalba 
Date:   Sun Sep 18 19:50:42 2011 +0100

    Update killers after a TT hit

    Almost no increase but seems the logic thing to do.

    After 16707 games 2771 - 2595 - 11341 ELO +3 (+- 3.2)

    Signed-off-by: Marco Costalba 

diff --git a/src/search.cpp b/src/search.cpp
index 4408475..0e3ba85 100644
--- a/src/search.cpp
+++ b/src/search.cpp
@@ -780,8 +780,18 @@ namespace {
                                     : can_return_tt(tte, depth, beta, ss->ply)))
     {
         TT.refresh(tte);
-        ss->bestMove = ttMove; // Can be MOVE_NONE
-        return value_from_tt(tte->value(), ss->ply);
+        ss->bestMove = move = ttMove; // Can be MOVE_NONE
+        value = value_from_tt(tte->value(), ss->ply);
+
+        if (   value >= beta
+            && move
+            && !pos.move_is_capture_or_promotion(move)
+            && move != ss->killers[0])
+        {
+            ss->killers[1] = ss->killers[0];
+            ss->killers[0] = move;
+        }
+        return value;
     }

     // Step 5. Evaluate the position statically and update parent's gain statistics



探索においては誰がどう見ても重要なコミットなのになぜこれが原因だとすぐわからなかったのか。
我ながら寝ぼけてるとしかいいようがない。

他にもクラッシュの原因っぽいのも見つけたし、焦るとろくなことがないなぁ~

Stockfish 2.2 アップデートメモ その2 [将棋]

Blenderの人がいってたが、ちょっと強くなった場合は3000試合ぐらいやらないと優位性がわからないとかどうとか。ちゃんとした計算方法があるんだろうが、今みたいに同型でちょっと強くなったor弱くなった程度の場合、なんらかのきっかけで偏ることがある・・・

というわけで見事に偏った

・2.1 34-1-27 2.2途中

きっかけは、Aspiration Searchの単純化コミット

commit 852d45a60004bc5a0a39a94e5a340af00dc317c1
Author: Marco Costalba 
Date:   Wed Dec 14 06:18:33 2011 +0100

    Further simplify aspiration code

    Actually after last patch it happens that delta
    starts always with the fixed value of 16.

    So further remove useless code.

    No functional change.

    Signed-off-by: Marco Costalba 


このコミットは、ウィンドウサイズを狭める幅を16-24の間でやっていたものを16固定でやってしまう。
見るからに対戦で影響がでそうで、ちょっと対局させてみたら逆転負けっぽいのが見えてしまい、これは16より24のほうがよいのではないかと、24に設定して一晩放置した。

結果は失念したが、56-43ぐらいだった気がする。

これはあかんやつや!とはすぐには思わなかったが念には念を入れて、上記のコミット(ともう一つ)を未適用のもので対戦させたところ、一番上の結果。

これはどう考えるべきだろうか

・ここに来るまでですでに弱くなっていた
・単なる偏りなので気にすることはない
・対局方法に問題がある

ちなみに、開始時では1-0-6ぐらいだったので、魔物がいるとしか思えないぐらいの逆転ぶり。
読む速度が明らかに遅くなってるわけではないので、ひとまず気にしないことにする

<追記>

commit b5f6c2241b3ad688fb85ea8203a9254aff842f07
Author: Marco Costalba 
Date:   Sun Dec 25 09:04:28 2011 +0100

    Restore std::cout instead of printf()

    I am not able to reproduce the speed regression anymore,
    and also we were using cout even before speed regression
    so probably the reason is not there.

    No functional change.

    Signed-off-by: Marco Costalba 


このコミットと対戦させたところ、55-8-37 と大幅な負け越し
やはりここに来るまでに弱くなっていたと考えるのがよさそうなのだが、いつも開始直後ぐらいだと、5-1とかで明らかに圧勝ムードだったりする。目を離すと5-5にもどってたりもするのだが・・・

gpsfish 2.2化アップデートメモ [将棋]

最近のアップデートでは特に悪くなるところはなかったが、判断に迷う部分は多少あった


■どこまでやったか

・2.1までのコミット数  1820
・下記までのコミット数 2054
・2.2までのコミット数  2120

commit 9c7d72739cffe523f0ea8c84875160c17ae6ab82
Author: Marco Costalba 
Date:   Sat Nov 19 14:37:26 2011 +0100

    Fix regression with printing of debug info

    Output of debug info each second was disabled
    due to recent patches.

    No functional change.

    Signed-off-by: Marco Costalba 


■現状

Core i7 4770 4thread で2.1のオリジナルと3秒対戦

・-2500で投了する
・200手超えたら引き分け
・スタックサイズを16MB

結果

・2.1 46-6-48 2.2の途中

ぱっと見の変化が見受けられなかったコミットがいくつかあり、それによって通常の探索スピードが落ち、静止探索のスピードがあがった。単に配分の問題なので、力戦になれば勝てるし、定跡できまるような戦型なら負ける。gpsに入っている定跡Bookの出来がよいようにも思う。

■有望そうにみえたコミット

・history配列の削除
 is_drawでしか使っていないhistory配列を削除
 これによって、パフォーマンスが微増したように見えるが、棋力には影響なし

■未適用のもの
・update_gainsの削除
 チェスではあまり効果が無いと思われて削除された模様。
 通常の探索中と静止探索の二種類ある。
 Stockfishでは静止探索中のものが先に削除され、次に通常の探索中のものもまとめて削除された。
 確かにはずしてもぱっと見大丈夫なのだが、静止探索のものをはずすと、大逆転負けの割合が多くなる(気がする)
 読む手を比較的限定させる上に、将棋の静止探索では特に有用だと思われるのだが、駒が減っていくチェスだと効果があまりわかりにくいのかもしれない。
 結局、途中で形を変えて復活してたと思うので、これは削除せず残した

■先週までの未適用部分
・piece_on
 square -> piece -> 値 ではなく square -> 値にしないと遅い
 oslの場合、squareにいろいろ情報が入っているので、わざわざpieceを取り出して、そのpieceでsquareに問い合わせて値を計算するのはコストが高い模様。
 Bitboardベースのボナンザを仮に組み込んだとしたらそのままでいい気はする。

・LMRの開始を一段階遅らせる
 不思議と遅くなった。
 将棋の場合局面数が激増するためかもしれない。

Stockfishがいつ弱くなったか [将棋]

マージも5までやってしまい、いよいよやることが無くなったので、2.1 -> 2.3の間のどこで弱くなったかを調査した

今までのまとめ

・2.1 -> 2.3 で安定性を犠牲に遅くなったので弱くなった
・2.3 -> 3 はあまり変わらず
・3 -> 4 は少し良くなった
・4-> dd はあまり変わらず
・dd -> 5 はあまり変わらず

という印象。あくまでも印象。
この時はマージをすることが目的であったので、あまり強さとかは気にしていなかった。

そこで今あらためて調査してみたところ、概ね上の用な感じで、そうすると2.1->2.3の間にかなり悪くしている要因が多いのではないか。
実際、2.1 -> 2.3と書いたが、実際は 2.1 -> 2.2 -> 2.3 となっていて、2年分ぐらいのコミットがあるので、この間に、Stockfishとしては問題ないがOSL(GPS将棋)には都合の悪い変更が多かったのではないかと思い立った。

まず強さを図る方法が難しいのだが、3秒対戦にした。こうした理由は

・時間の使い方による棋力の影響をうけない
 要所で長く読むほうがいいのは間違いないので、時間管理も重要な要素(cf.やねうら王)
・純粋に探索部分としての強さが見たい
・Core i7 4770 4Threadである程度の安定した出力が出るのは最低3秒。
 本当は15秒でやりたいが、時間がない。自分の感触的に読み筋が変わるのは
 3秒 -> 15秒 -> 4分
 という感じ。

昨日の駒場での解説に「速さは裏切らない」的なことを言ってたらしいが、同型ソフトにおいての速さの違いはそのまま強さに直結する。この条件なら速い=強いというように数さえこなせばそれなりの結果がでるだろう。

・激指による読みの深さと勝率
 深さが13-12で0.76であるようで、3秒対戦の場合に明らかに遅くなると9-1とか平気で起こりうる。

この条件で、マージ後に10~20戦するという気の長い作業を行ったところ、思いの外早く、そして意外な原因が見つかったので書いておく。

・Increase LMR limit by one ply

 LMRの判定を1段階増やすものだが、これがあるとなぜか10%ぐらいNPSが落ちる。こんな変更でNPSが落ちるとはと衝撃を受けた。

しかし、こっちはまだよい。次の方がかなりアレ。

・Rename type_of_piece() and color_of_piece()

 これは完全に盲点だった、piece_onはSquare -> Piece変換を行う関数で、盤面から何かしらの価値を取得するときは「Move -> Square -> Piece -> Index -> 価値」というように変換が行われる。
 この時に、このコミットの前までは、それぞれの価値ごとにバラバラだったのを、Square -> Pieceの部分をpiece_onに統一するように変更が入った。
 一見するとソースコード的には統一感が生まれて悪く無いと思ったが、設計が違うOSLの場合、Squareから直接Indexを取得するための関数が用意されていて、それを使わないと劇的の速度が遅くなる。

 このような現象が起きる理由はやはり評価関数部分の設計思想の違いだと思う。Stockfishはビットボード的な評価関数なのでpiece_onのオーバーヘッドもないし、元々そういう作りだったのをコード上綺麗にしただけだが、OSLの場合は、複雑なクラスになっていて、それ専用の呼び出し方をしないとあっという間にパフォーマンスが悪くなってしまう。CPUアーキテクチャでいうCISC/RISCの違いみたいなもんだろうか。


と、遅くなる要因は見つけたものの、2.3が生まれるまでは先の話すぎていつのことになるやら。手間がかかりすぎるのでモチベーションが落ちてできないかもしれない。

あと、2.1->2.2の間のコードは思い出したように落ちる。スタックサイズ、MAX_MOVESも倍ぐらいにしてあるが、たまに何かのきっかけで落ちるので、10戦すらできていないときがあるのもモチベーションが落ちる要因の一つ。

ここで、ビットボードベースのbonanzaの評価関数ならstockfishと相性が良いのでは?と思ったものの、思いの外めんどくさくてやれなかった。が、Seleneの人はあっというまにBonafish作って放流しててそれなりの強さを得られていたようだが・・・。


激指の勝率は以下の本から引用


人間に勝つコンピュータ将棋の作り方

人間に勝つコンピュータ将棋の作り方

  • 作者: 瀧澤 武信
  • 出版社/メーカー: 技術評論社
  • 発売日: 2012/09/29
  • メディア: 単行本(ソフトカバー)



Stockfishの強さをどう評価するか [将棋]

なのはの人に聞かれたのだが、「2.1が一番強いでしょうが、何が問題かはよくわからん」というのが正直なところだが、何が弱さの原因で何がわからんのかはまとめておこうと思う。

■環境

 全部64ビット 4スレッド

■エンジン

・Blunder WSCS2013   
・Bonanza 6.0 64bit sse4 付属のやつ
・gpsfish オリジナル(2.1ベース、0.2.1)
・gpsfish 2.3.1
・gpsfish 3
・gpsfish 4
・gpsfish dd

・gpsfishの評価関数は今年の大会参加のものと同等と思われる2901だが、自分が試した限りではあまり変わってないようだった。
 なのでもしfish単体だと本線は厳しいかなと思ってたり。
 それを上回る本線用の何かがあれば別だが。

■持ち時間1秒対局をやった場合

Bonanza 6.0 >> 2.1 > 2.3 > 3 = 4 >> dd
> Blunder

・現状Bonanzaが一番強い(笑)
 これは間違いなく速度が影響している。
 NPS表示自体はあてにならないと思うが、持ち時間1秒同士だと、全幅探索の深さが、bonanza 16,gpsfish 14ぐらいということがしばしばあり、完全に読み負けするため。速さは正義。

・Blunderは残念ながら最弱
 単純に速度の差。
 配布版そのまま使用した場合なので、もしかすると条件が変わるかもしれない

・gpsfish同士の場合、dd以外では速いほうが勝つ
 当たり前といえばあたりまえ。ただ、2.1が一番速い。これは安定性を犠牲にしている速さなので、クラッシュして落ちる場合がある。
 速さでいうと 2.1 > 2.3 > 3 = 4 = dd ぐらいだと思うので強さも概ねこんな感じ。
 ただしdd版だけは圧倒的に弱い。ddに入っている3箇所の枝刈りは詰みを逃す。
 NPS表記だけ見ると4やddが一番多いが、多分無駄読みかカウント方法が正しくなっただけだと思う。
 なのでbenchコマンドの結果はあてにならない
 時間あたりの探索深さを見たほうが良いというのが最終的な結論。
 同型で速さ(1イテレーションぐらい)が違うと160勝40敗ぐらいになる。

 2.1より強くなったと思ってたのは、2.1が配布版で最適化されていないバージョンだったから。
 ビルド環境まで揃えると2.1が一番強い。

・gpsfish oneビルド
 配布されている32bitバージョンはO3最適化いれたgpsfishoneビルドに大幅に負け越す。
 これは速度差が大きい
 また0.2.1はバグと引き換えに最適化もよく働いている
 3以降ではvolatileが主要変数にはいっているためか最適化の影響が少ない(ため弱い)

・強さ
 速ければいいのは間違いないが、選択探索の嗅覚も結構違うと思う。
 0.2.1はこのバランスが非常に良いため、同型でやると不利な状況から詰みを見つけて逆転勝ちする。
 もしくは悪手を回避する。

 ddバージョンではこの嗅覚を阻害する枝刈りコミットが3個も入っているため圧倒的に弱い(20-0ぐらい)
 その3個のコミットを排除すると、ちょっと遅くなった2.1みたいになって少し弱い。(16-4ぐらい?)

■時間を伸ばすとどうなるか
 ひと目の悪手が無くなるため、速度はあまり関係なくなる。
 指数的に1手深く読むための時間が増えるため。ちょっと速いぐらいでは影響がでない。
 1秒対戦だと圧勝だったのが15秒対戦ぐらいだとちょっと有利かなぐらいに変わる。(12-8ぐらい)

 ただし、浅い探索時に「よい」と思っている悪手を破棄するかどうかは、枝刈りに依存するためddバージョンだけは持ち時間を深くしても弱い

 また、この点についてもBonanzaは優秀に見えるが、速度に由来するのかどうかは不明。

■その他

・時間制御
 大会で戦う場合は時間制御も重要な要素だと思うが、読み筋の出力を見ている限りではあまり賢くない。FailLowだから伸ばすというようなことがない。
 ツツカナぐらい思い切って読みを入れる必要はあるように思える。
 またバージョンごとの差も感じないが、思い込みかもしれない
 要調査

・枝刈りの条件
 Stockfishとはゲームが違うので当然枝刈りの条件が違う。
 gpsfishでは実装されていない条件もあり、その影響がどの程度でているのか不明
 さらによく理解しないでマージしまくったのでバグが入っててもおかしくない。
 また評価関数の精度が枝刈りにも影響するので、今のOSL評価関数の精度だと微妙な感じ


■結論

結局のところStockfishの探索とは言われているが、評価関数の精度が高くないのに枝刈りしてもそりゃ強くならんよねというところで、探索がうまくいくように評価関数の精度をあげる必要があるように思われる。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。