Releases: tttak/Gikou
技巧2-m-NNUE
技巧2にyunyun0419さんのやねうら王のmブランチの探索部の一部を適用し、
さらにNNUE評価関数(HalfKP、HalfKPE9)を組み込みました。
- 技巧2-m_20200518とNNUE評価関数を組み込んだ技巧2(HalfKP、HalfKPE9)のソースコードをマージして作成しました。
- 通常の技巧2と同様、技巧の評価関数ファイル等(params.bin、probability.bin、progress.bin)を実行ファイル(Gikou2-m-NNUE_HalfKP.exeまたはGikou2-m-NNUE_HalfKPE9.exe)と同じフォルダに配置してください。
- 将棋所等のエンジン設定画面の「EvalDir」でNNUE評価関数ファイル(nn.bin)のフォルダを指定してください。
- 探索部にやねうら王のmブランチを適用しましたが、技巧の「指し手の実現確率に基づくオーダリングとLMR」は残してあります。
- 技巧の評価関数ファイル(params.bin)については、駒割りの部分のみ使用しています。
- 結果的に技巧の「進行度(序盤~終盤を0~1の値で表したもの)」は評価関数でも探索部でも使わなくなりましたが、進行度の算出部分の処理は残っているので(しかもNNUE化したときに差分計算から全計算に置き換えたものが残っているので)、探索速度を少し損しているかもしれません。
- 2020/5/20追記:よく見ると実現確率の計算の内部で進行度を使っていました。
- ただし、実現確率の計算の内部での進行度の算出は上記の全計算とは別なので、上記全計算が本来は不要であることに変わりはありません。
- せっかく進行度を算出しているので、futility_marginの算出には残しておいてもよかったのですが、今回はmブランチの方にあわせています。
- 2020/5/20追記:よく見ると実現確率の計算の内部で進行度を使っていました。
技巧2-m_20200518
yunyun0419さんのやねうら王のmブランチの探索部の一部を技巧2に適用してみました。
通常の技巧2と同様、評価関数ファイル等(params.bin、probability.bin、progress.bin)を実行ファイル(Gikou2-m_20200518.exe)と同じフォルダに配置してください。
- 探索部にmブランチを適用しましたが、技巧の「指し手の実現確率に基づくオーダリングとLMR」は残してあります。
NNUE評価関数を組み込んだ技巧2(HalfKP、HalfKPE9)
NNUE評価関数を組み込んだ技巧2の実行ファイルです。
将棋所等のエンジン設定画面の「EvalDir」でNNUE評価関数ファイル(nn.bin)のフォルダを指定してください。
技巧2の評価関数ファイル等(params.bin、probability.bin、progress.bin)は実行ファイル(Gikou2_NNUE_HalfKP.exeまたはGikou2_NNUE_HalfKPE9.exe)と同じフォルダに配置してください。(通常の技巧2と同様です)
- 特徴量の内容はやねうら王と同様です。
- 評価関数ファイル(nn.bin)についてもやねうら王と同じファイルを使用できます。
- 以前のバージョンの実行ファイルはSSE版でしたが、今回はAVX2版です。
- NNUE評価関数の実行部分は組み込みましたが、学習部は組み込んでいません。
特徴量の種類
- HalfKP
- HalfKPE9
NNUE評価関数を組み込んだ技巧2
やねうら王のNNUE評価関数を技巧2に組み込んでみました。
将棋所等のエンジン設定画面の「EvalDir」でNNUE評価関数ファイル(nn.bin)のフォルダを指定してください。
技巧2の評価関数ファイル等(params.bin、probability.bin、progress.bin)は実行ファイル(Gikou2_NNUE_SSE.exe)と同じフォルダに配置してください。(通常の技巧2と同様です)
※AVX2を有効にするとなぜかabendしてしまうため、実行ファイルはSSE版です。
※NNUE評価関数の実行部分は組み込みましたが、学習部は組み込んでいません。
やねうら王の教師局面で学習した技巧2の評価関数(params.bin)_20171214
params.zip(params.bin)
やねうら王depth10の教師局面を使用して学習した技巧2の評価関数(params.bin)です。
- 技巧2の「RootStrapとロジスティック回帰を組み合わせた強化学習」で、teacher_positions.binとteacher_games.binの代わりにやねうら王depth10の教師局面(をテキストファイルに変換したもの)を使用しました。
- 技巧2の学習部は教師局面ファイルを最初に全件読み込み、イテレーションごとに局面をランダムに選ぶ方式ですが、やねうら王の教師局面ファイルは巨大なので、読み込みながら学習する方式に書き換えました。
- RootStrapの部分はelmo方式(勝敗項+勝率項)に書き換えました(ロジスティック回帰の部分で既に勝敗が考慮されているような気もしますが...)。ただし、lambdaは0.33等の固定値ではなく、局面の進行度に応じて変化させるようにしました(例:lambda = 0.7 - 0.5 * progress)。
- 技巧の従来の学習で使う棋譜(kifu_db.txt)としては、floodgateの棋譜等を使用しました。(この部分もやねうら王教師局面に置き換えて試してみましたが、うまくいきませんでした)
kifu_db.txtの作成にはfg2gdb(を多少修正したもの)を使用させて頂きました。
対局結果
対局条件:4スレッド、1手5秒、定跡off、ResignValue 3000
- vs 技巧2
130局、91勝37敗2引き分け(勝率71%、R+154) - vs やねうら王V4.79 + elmo_WCSC27
150局、76勝72敗2引き分け(勝率51%、R+9) - vs やねうら王V4.79 + aperypaq
123局、27勝94敗2引き分け(勝率23%、R-212)
※対局数が少ないので、勝率とレート差はあくまで目安です。
params_furibisha.zip(params_furibisha.bin)
上記params.zip(params.bin)に追加学習して、振り飛車を多く指すようにした評価関数です。
- zipファイルを解凍した後、ファイル名をparams.binへ変更してご使用ください。
- 定跡を使わなくても飛車を振ることが多くなりましたが、たまに居飛車を指すこともあるようです。
- 飛車を振った後の指し回しが振り飛車らしいか、等については分かりません。
- 具体的には、RootStrap(をelmo方式化した)学習の際、教師局面の評価値を以下のように操作しました。(ただし、進行度が40%以下の場合に限る)
- 先手の飛車が2八にいる局面は減点(正確には、先手番の場合は減点、後手番の場合は加点。以下同様。)
- 先手の飛車が5八~8八にいる局面は加点
- 先手の歩が2七にいる局面は加点
- 後手の飛車が8二にいる局面は加点
- 後手の飛車が5二~2二にいる局面は減点
- 後手の歩が8三にいる局面は減点
- 【参考】『the end of genesis T.N.K.evolution turbo type D』の『NNUE評価関数』の振り飛車評価関数
https://github.com/tttak/tnk-/releases/tag/furibisha_eval_20180506
Gikou2_AperyEvalMix_20170516
技巧2の評価関数バイナリに加えてApery形式の評価関数バイナリを読込み、両ソフトでの評価値を計算したうえで
任意の割合で混ぜ合わせて最終的な評価値を算出するようにした、実験的なプログラムです。
・技巧の評価関数バイナリ等に加えて、Apery形式の評価関数バイナリ(KK_synthesized.bin、KKP_synthesized.bin、KPP_synthesized.bin)が必要になります。
・npsが大きく低下するため、おそらく棋力はあまり高くないと思います。
・USI拡張コマンドとして、「evalコマンド」を実装しました。(詳細は「about_Gikou2_AperyEvalMix.txt」参照)
※Aperyの評価関数バイナリはWCSC27で形式が変更されましたが、当プログラムで使用できるのは第4回将棋電王トーナメント時のApery(浮かむ瀬)の評価関数バイナリの形式です。
2017年5月時点ではelmo、やねうら王、読み太、蒼天幻想ナイツ・オブ・タヌキ、Qhapaq等の評価関数バイナリが使用できます。
■USI options
将棋所の「エンジン設定」画面などで設定する項目として
以下の4種類のオプションを追加しました。
・Z01_AperyEvalJoban Aperyの評価値の割合(序盤、%) :0%~100%の範囲で設定します。(例)50
・Z02_AperyEvalChuban Aperyの評価値の割合(中盤、%) :0%~100%の範囲で設定します。(例)50
・Z03_AperyEvalShuban Aperyの評価値の割合(終盤、%) :0%~100%の範囲で設定します。(例)50
・Z04_AperyEvalFolder Apery評価関数バイナリのフォルダ:(例)./elmo_eval
【Aperyの評価値の割合の設定例】
(例1)序盤0%、中盤0%、終盤0%
算出される評価値は、技巧の評価値と一致します。
(例2)序盤100%、中盤100%、終盤100%
算出される評価値は、Aperyの評価値と一致します。
(例3)序盤50%、中盤50%、終盤50%
算出される評価値は、技巧の評価値とAperyの評価値の平均値と一致します。
(例4)序盤100%、中盤50%、終盤0%
序盤の評価値はAperyに近く、徐々に技巧の割合が増えていき、終盤の評価値は技巧の評価値と近くなります。
(例5)序盤30%、中盤50%、終盤20%
序盤から中盤にかけてAperyの割合が30%から50%へと増えていき、
中盤から終盤にかけてAperyの割合が50%から20%へと減っていきます。
※当プログラムでは、「進行度」に応じて評価値を混ぜる割合を内分しています。
そもそもオリジナルの技巧で、序盤、中盤、終盤の評価値を持っており、進行度に応じて内分する仕組みが実装されています。
当プログラムではその仕組みを流用させて頂いています。
【技巧2】GougiShogiの「詰探索エンジンとの合議(読み筋の局面も詰探索)」のサンプルプログラム
Gikou2_MateInfo_20170514 【技巧2】SimpleGougiShogiの「詰探索エンジンとの合議(読み筋の局面も詰探索)」のサンプルプログラム
Gikou2_MoveProbabilityOnly_Depth0_20170508
【技巧2】指し手の実現確率のみで指し手を返す(探索深さ0)
技巧(非公式版) 各ブランチのexeファイル等の詰め合わせ(2016/12/4時点)
AperyEvalMixNoTurn_Stockfish7_20161204 定跡を用いる最大手数を50手から120手に変更(まふ定跡対応)
Gikou_Kai_20161116
【Gikou_Kai_20161116】
将棋ソフト「技巧」の非公式版です。
・Stockfish7の探索部を取り込み中
・MovePickerで進行度を使用