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の探索とは言われているが、評価関数の精度が高くないのに枝刈りしてもそりゃ強くならんよねというところで、探索がうまくいくように評価関数の精度をあげる必要があるように思われる。
■環境
全部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の探索とは言われているが、評価関数の精度が高くないのに枝刈りしてもそりゃ強くならんよねというところで、探索がうまくいくように評価関数の精度をあげる必要があるように思われる。
コメント 0