今回の大会(第5回 将棋電王トーナメント)でのやねうら王は、定跡をdepth 34で掘った。
でも今回やねうら王に搭載の定跡はdepth34で探索して作成させた。「チャリで来た」ならぬ、「depth34で掘ってきた」である。18手目ぐらいで組み合わせ爆発したので、そのへんまでしかないけども。
— やねうら王 (@yaneuraou) November 10, 2017
定跡は最初depth30で1週間かけて6台(480HT)で作成した。目視チェックすると序盤でもの凄い悪手が含まれていた。2年前の電王トーナメントでやねうら王が指してプロ棋士の勝又先生からダメ出しを食らった指し手だ。2年前の出来事が目の前に蘇り、ひどい頭痛と吐き気がした。定跡の作り直しを決意した。
— やねうら王 (@yaneuraou) November 10, 2017
近年の将棋ソフトの探索、昔に比べると枝刈りが激しくなっているので、depth30でも昔のソフトほど局面を読んではいないが、だとしても、私(将棋クエスト四段)が見てもわかるレベルの明らかな悪手が多分に含まれているとは驚きで、近年の将棋ソフトは序盤強くなったとは言え、浅い読みだと駄目だ。
— やねうら王 (@yaneuraou) November 10, 2017
この手法について簡単に書いておく。
やねうら王のGitHubにあるdocs/解説.txtを参照して欲しいが、やねうら王にはsfen形式で与えた局面について思考するコマンドがある。”makebook think“コマンドである。
あと、初期局面から定跡ツリーを辿り、そこが自分の手番であればbestmoveを辿り、相手の手番であれば、MultiPVの上位10手(ただし、bestmoveの評価値との差があまり大きいものは枝刈り。また、評価値が一定値を下回った場合も枝刈り)を辿っていき、そのツリーをsfen形式で出力する隠しコマンドがある。”test bookcheck”コマンドだったと思う。あとで整理しようと思って、テスト用のコマンドとして実装したまま、整理するのも面倒なのでそのまま隠しコマンド化してしまったものである。
まあ、ソースコードの分量で言うと30行程度だったと思うので、それを参考に好きなように書いてもらえれば良いのだが。
こうやって定跡を生成した。depth 34で思考するとき、1node(1局面)あたり、1スレッド思考で1時間程度。今回、30000nodeほど掘った。計算時間にして(1スレッド換算で言うと)3万時間である。
ところが、depth 34でもまだ怪しげな指し手は多分に含まれていたし、プロ棋戦などで出現する形が頻出してしまったがために、本大会では、ply = 18(初期局面から18手)程度では、相手のほうが長い定跡を手入力しているというような状況が起きて、ずいぶんと損をした。
ただ、良かった点としては、手入力は一切しないと決めていたので、1日目で負けた棋譜のsfenを”makebook think”コマンドで思考させておけば、1日目と同じ負け方は自動的に回避できるというお手軽さであった。
次回の大会ではfloodgateで頻出するような形については、同様にして”makebook think”コマンドで思考させておきたいところであるが、計算資源が結構必要なのですべてに対して行なうのは難しい。depth 34で定跡を掘るのも簡単ではないな…。
今回これで、アリがちなプロ級の棋風になったということですが、人間でもこれくらいは詠んでるということなのでしょうかね。
大体経験的に34ターンくらい読んで戦ってるのでしょうか?
人間の思考力=15万円?
プロの定跡は、読みというより、play out(終局までの対局)を長い時間をかけて繰り返すことで、そこに到達したという結果のように思いますけど。
test bookcheck new.sfen
と入れると、new.sfenが0KBになりました。
何でですか?
source/extra/test_cmd.cpp
の1100行付近に説明があって、その説明でわかる人だけ使ってという感じですかね…。