詰ますや詰まさざるや
今年の大会でのBonanza Felizに関して「詰めルーチンがないのがまずいのでは」という話がいろいろ取り沙汰されていまして、某雑誌の記事にも載ったくらい。そこんとこ検証したらどうよ、ということでちょっと手を出してみました。うちも現状八割方ボナなので他人事じゃないし。
ボナに詰めルーチンを載せてみて強くなるか試す…というのはちょっと難しそうなので、現状既に詰めルーチンのあるGPSから抜いたらどうだろ、という方針で考えてみました。先日酔狂にもGPSビルドしてたのはこういう訳です。
ビルドは先日一応できたので、次はじゃあ詰みを抜こう、なんですが、ソースを見ようとしましたがどこをどう見ればよいのかさっぱりわかりません。はは、困った困った(棒読み)
なのでソースを理解しようとか分不相応なことはあっさり諦め、gprofをとってみます。gprofの出力から詰めルーチンを探そう、と画策。
gprofの出力は、知ってる人は知ってるでしょうが、関数の返り値や引数の型がわかるように出ます。普通は "void foo(int, char*)" とかいう感じになるんですが、GPSだとこうなる:
__gnu_cxx::hashtable<std::
pair<osl::hash::HashKey const, osl::search::SimpleHashRecord>, osl::hash::HashKe
y, osl::stl::hash<osl::hash::HashKey>, std::_Select1st<std::pair<osl::hash::Hash
Key const, osl::search::SimpleHashRecord> >, std::equal_to<osl::hash::HashKey>,
osl::stl::pool_allocator<osl::search::SimpleHashRecord> >::find_or_insert(std::p
air<osl::hash::HashKey const, osl::search::SimpleHashRecord> const&)
…自分どんな関数やねん一体。怒るでしかし。
怒りを抑えつつ上位から見ていって、関数名からして詰みらしいものを見つける、という方針に。ざっと見たところ
bool osl::checkmate::DualDfpn::
isWinningState<(osl::Player)-1>(int, osl::state::NumEffectState const&, osl::has
h::HashKey const&, osl::PathEncoding const&, osl::Move&, osl::Move)
というのが実行時間で1割以上使っていて、まあ一見詰みっぽそうですよねいかにも。というのでたぶんここだろうと見当をつけます。更にちょこっとだけ眺めて「trueが返れば詰みで勝ち確定なんだろう」とこれまたいいかげんに見当をつけ野性の勘で見切ります。で、この isWinningState() の頭でいきなり return false を入れます。はい改造終了。
ほんとにこんなんで動くんかね〜と思いつつ、元の版と詰み抑止(?)版で1秒自己対戦。GAMENAME任せの時間設定にすると time up の山となるので、やはりCsaClient.pmで($timeleft, $byoyomi)を(0,1)にフォースします。
…するとあら不思議、詰み抑止(?)版が 59-41 で勝ち越してしまいました。
いちおう微妙に片側5%は越えてますが、まああまり信頼できるレベルではないでしょう。ですが少なくとも、「詰みがあった方が明らかに強い」という結論にはならないような。
その後ちらちらソース見てたら #ifndef DONT_USE_CHECKMATE というのがあるのに気づき、いちおうこれも試すことに。-DDONT_USE_CHECKMATE を入れてコンパイルしますが、またエラーでこけます。
search/alphaBeta2.cc
search/quiescenceSearch2.cc
の2つ。どうやら単なるwarning (variable not used) のようなので、この2つのコンパイルは lib/Makefile で -Werror を外して(また無理やり)通します。
でこれで -DDONT... ありとなしとで1秒自己対戦で、-Dあり(=詰みなし?)が 51-38。
…とまあ、自分があれこれ試したことを書いてみましたが、はっきり言って何かとんでもなく間違ったことやってるような気がしなくもないです。誰か追試してくれたらレポート大歓迎。
« GPSをソースからビルドしてみた(無謀にも) | トップページ | Win7でスリープしない件 »
GPSは1手1秒だと、詰将棋の設定時間が長すぎるようでまともに動かないようです。
公開されているusi用のexeで一度YSSと1秒で対戦させていたら、7割とか勝ち越して変だな?とチェックしたら、終盤で勝っている局面でいきなり投了、とかがありました。どうやら最初にrootで詰みを読むノードの設定が多すぎて、1秒だと通常探索に行く前に時間切れで投げてしまうようです。
1手3秒ぐらいにすると5割くらいになって変な投了も少なくなくなりました。
どこを設定すれば詰探索が変わるかは・・・分かりません。GPSのソースは難しいです・・・。
投稿: 山下 | 2010年8月22日 (日) 09時52分
情報ありがとうございます。そういうのがあるんですか。だとすると1手5秒くらいにした方がいいかもですね。対局数はかせげなくなりますが。
いやーGPSはムズいっす…
投稿: A級 | 2010年8月22日 (日) 21時53分
なるほど、GPS相手に一手一秒まで粘れば自滅するんですね!
って、弱点をそのままにしておかないだろうし、そもそもそこまで粘れない…
投稿: かず@なのは | 2010年8月23日 (月) 22時24分
1手5秒でちょこっとですが試してみました。7-7でした。
> 一手一秒まで粘れば
それはさすがに開発チームが気づくはずでは…してみると何か発現条件があるんでしょうかね。
投稿: A級 | 2010年8月24日 (火) 14時51分
こんにちは。
「詰めルーチンがないのがまずいのでは」というのは、当方も違和感を感じています。
Bonanzaはバージョンが上がるにしたがって、思考ルーチンが重くなっています。指し手の精度は向上し中盤では有利に働くと思うのですが、終盤では指し手の精度よりも、精度が一定以上あれば、相手より2手深く読めるかどうかの方が重要ではないかと思います。
激指8、無双、GPS、Bonannza,BonaSSE 等を比較して、そのように感じています。
(恒)
投稿: (恒) | 2010年9月 9日 (木) 18時44分
(恒)さん、こんにちは。
私がやったのはひじょ~~~におおざっぱな実験ですので、あくまで参考ということで、決定的な証拠ではないです。詰めルーチン使用の是非はもっと追試必要ですね。
終盤は精度粗いが速い評価を使う、というのは…これはやればできるかな?効果あるかも。「終盤」の判定が難かな。
投稿: A級 | 2010年9月10日 (金) 08時57分
レス、ありがとうございます。
終盤かどうかの判断は厳密には非常に難しいと思いますが、とりあえず ”敵の駒が、自玉の上2升、横3枡以内にきた時”というのはどうでしょう。
”異なる思考ルーチン同士の対戦で、120-130手程度で終わる持ち時間から始め、一方の思考時間をすこしづつ増やすと、ある所で急激に勝率が変化する所がある”という仮説を持っています。
その時点での探索深さを比較してみようと思っていますが、時間がかかりますね。。。
###
BonaSSE V512 は、すばらしいです。Original
Bonanza Feliz は、当方の環境で GPS将棋に少し負け越しますが、BonaSSE V512 は、大幅に勝ち越します。また、”将棋ソフト”のページから落とした物よりも少し高速でした。
また、ハッシュの使用量が少なく(GPSは大量に使う)CPUの使用率が100% なのもGoodです。激指8や、GPSは、CPUの使用率が100%にならないです。メモリアクセスが律速しているのでしょうか。)
(当方の環境は、PenomIIx6 3.95GHz HL=2.6GHz WinXp 32Bit で、BonaSSE512は、930-1130kNPS程度でています。)
(恒)
投稿: (恒) | 2010年9月11日 (土) 01時49分
bonasse使っていただき、こちらもうれしいです。
GPSのメモリ使用量は半端じゃないみたいですね。その点はボナンザは使いやすいと思います。
将棋ソフトのページのは、全く同じソースのはずなんですが…コンパイルオプションとか、64bit vs 32bitとか、その辺のせいかもしれません。
投稿: A級 | 2010年9月11日 (土) 22時55分
将棋所を使って、BonaSSE と GPS を連続対局させていて気が付いたのですが、GPS将棋は対局開始時、対局中、対局終了時とも一切ハッシュのクリアをしないようです。従って、連続対局を行っていると、ハッシュの使用量がどんどん増えていき、100%を超える時もありました。
GPS将棋の思考速度が通常の半分くらいになる時があるのを確認しているのですが、影響がないのか気になります。
連続対局での後半ほど、検索に時間がかかる様になると思うのですが、勝率に影響が出ないか気になります。
(恒)
投稿: (恒) | 2010年9月16日 (木) 03時43分
将棋ソフトのページのソフトは、A級様作でよろしいのでしょうか。自作のソフト集との事で、BonaSSEが置かれているので、そう判断しました。
u2b 経由で、将棋所でBonaSSE等を使用しているのですが、持ち時間+秒読みの設定(TimeA,TimeB)を設定した場合に、持ち時間が切れた場合でも、最大持ち時間+秒読み 分Bonannza系の思考エンジンは時間を使おうとするようです。たとえば、1分+15秒の設定で、持ち時間が切れても一手最大75秒考えようとするようです。 MyBonaではこの問題は発生しませんでした。 u2b->Bonannza でのパラメータ受け渡しの部分を確認していただけると幸いです。
作者さまが異なる場合や、場所が不適切な場合、この投稿を削除してくださるようお願いします。
(恒)
投稿: (恒) | 2010年9月22日 (水) 01時52分
将棋ソフトのページは私ではないです。いろいろ経緯があってbonasseがそこのページに置かれています。このブログの今年5月のバックナンバーをお読みいただければその辺の事情がわかると思います。
思考エンジン部であるbonasseは私の作ですが、フロントエンドのマイボナ、将棋所、u2b等は私の作ではないので、申し訳ありませんがちょっと私ではわかりません。bonanza/bonasse自体は持ち時間を正しく扱うはずですが、将棋所では時間制御がおかしいとかいう話を某掲示板で見た気もします(曖昧な記憶ですみませんが)。
投稿: A級 | 2010年9月22日 (水) 09時11分
たいへん、失礼いたしました。
前のコメントは削除してください。
プチ将棋では、連続対局時のGPS将棋のhash の問題や、本件も解決されているようなので、そちらを使う事を検討中です。ただいま、安定性を確認中しています。
投稿: (恒) | 2010年9月25日 (土) 20時20分
いえいえ、ご質問等は遠慮なくどうぞ。私には答えられないこともありますが、わかる範囲で回答させていただきます。
他にも同様の疑問を持つ方もいらっしゃるかと思うので、このコメントのやりとりは残しておくと役立つと思います。
投稿: A級 | 2010年9月26日 (日) 11時38分