Releases: tttak/Gikou
Gikou_AperyEvalMixKKPT_20161106
【Gikou_AperyEvalMixKKPT_20161106】
将棋ソフト「技巧」の非公式版です。
・技巧の評価関数バイナリに加えてAperyの評価関数バイナリを読込み、両ソフトでの評価値を計算したうえで
任意の割合で混ぜ合わせて最終的な評価値を算出するようにした、実験的なプログラム。
・Aperyの評価値について、試験的にKPPのみ手番の評価をなくしたバージョン。
KKとKKPは手番評価あり。KPPTではなくKKPT。
・Aperyの評価関数バイナリ(KK_synthesized.bin、KKP_synthesized.bin、KPP_synthesized.bin)を読み込むが、
KPPでは「駒の位置」の部分のみ使用し、「手番」の部分は使用しない。
・技巧の評価値はオリジナルのまま。手番の評価を含む。
Gikou_NozomiSDT4EvalMix_20161018
【Gikou_NozomiSDT4EvalMix】
第4回将棋電王トーナメント時のnozomiの評価関数バイナリ(kpp_kkp_kkpt.bin)に対応
Gikou_AperyEvalMixNoTurn_Stockfish7_20161008
【Gikou_AperyEvalMixNoTurn_Stockfish7_20161008】
将棋ソフト「技巧」の非公式版です。
・技巧の評価関数バイナリに加えてAperyの評価関数バイナリを読込み、両ソフトでの評価値を計算したうえで
任意の割合で混ぜ合わせて最終的な評価値を算出するようにした、実験的なプログラム。
・ただし、Aperyの評価値については、手番の評価は使用しない。KPPTではなくKPP。
・Stockfish7の探索部を取り込み中。
Gikou_Stockfish7_20161004
【Gikou_Stockfish7_20161004】
将棋ソフト「技巧」の非公式版です。
・実験的に、技巧にStockfish7の探索部を取り込み中。
・少しだけ強くなったような気がするので、一旦リリース。
Gikou_JobanAperyEval_20160922b
【Gikou_JobanAperyEval】
将棋ソフト「技巧」の非公式版です。
・序盤はAperyの評価関数を使い、中盤~終盤は技巧の評価関数を使うようにした、実験的なプログラムです。
・探索部はオリジナルの技巧のままです。
・別途、Aperyの評価関数バイナリ(KK_synthesized.bin、KKP_synthesized.bin、KPP_synthesized.bin)が必要になります。
オリジナルの技巧の評価関数バイナリ等も必要です。
・どの段階で評価関数をAperyから技巧へ切り替えるかについて、将棋所の「エンジン設定」画面等から「進行度」で指定することができます。(下記参照)
・評価関数を切り替えた際に、置換表のクリア等は行っていません。
そのため、「Evaluate()では技巧の評価値を算出するが、探索では置換表に残っているAperyの評価値も使われる」といったことも起こると思います。
これによる棋力への影響は不明です。
・別のプログラム「Gikou_AperyEvalMix」では、Evaluate()が呼ばれるたびに両ソフトの評価値を算出したうえで
それらを混ぜ合わせて最終的な評価値を算出していますのでnpsが大きく低下しますが、
当プログラムではEvaluate()ではどちらか一方の評価値を算出するだけですので、「Gikou_AperyEvalMix」よりは高速です。
・Aperyの評価値の算出について、差分計算は実装しましたが、高速化の余地は多々残っていると思います。
・USI拡張コマンドとして、「evalコマンド」を実装しました。(下記参照)
・mizarさんの「USI ["go nodes ", "go depth "], Option ["LimitDepth"] の実装」をマージしました。
・当プログラムの作成にあたり、Apery及びやねうら王のソースコードを参考にさせて頂きました。
■USI options
将棋所の「エンジン設定」画面などで設定する項目として
以下の2種類のオプションを追加しました。
・Z01_AperyEvalFolder Apery評価関数バイナリのフォルダ :(例)./Apery_20160307
・Z02_ChangeEvalProgress 評価関数切替(Apery→技巧)の進行度(%) :-1%~100%の範囲で設定します。(例)40
【評価関数切替(Apery→技巧)の進行度(%)の設定例】
(例1)33
進行度0%~33%(≒序盤)はAperyの評価関数が使用され、進行度33%~100%(≒中盤~終盤)は技巧の評価関数が使用されます。
(例2)66
進行度0%~66%(≒序盤~中盤)はAperyの評価関数が使用され、進行度66%~100%(≒終盤)は技巧の評価関数が使用されます。
(例3)100
常にAperyの評価関数が使用されます。
(例4)0
常に技巧の評価関数が使用されます。
(例5)-1
「-1」は特殊な設定値で、使用される評価関数(技巧・Apery)が1手ごとに切り替えられます。
※「進行度」自体は技巧の仕組みで算出されます。
■USI拡張コマンド「eval」
事前に任意の局面を設定したうえで「eval」コマンドを実行すると、
当ソフトで算出した評価値、技巧とAperyの評価値とその内訳などを標準出力へ出力します。
なお、評価値として「手番側から見た評価値」を出力しています。
【実行例】
setoption name Z01_AperyEvalFolder value ./Apery_20160307
isready
position sfen l6nl/5+P1gk/2np1S3/p1p4Pp/3P2Sp1/1PPb2P1P/P5GS1/R8/LN4bKL w RGgsn5p 1
eval
---------- Eval
Eval = -53 ←算出した評価値
-----
Gikou = -53.27 ←技巧の評価値
Apery = -307.99 ←Aperyの評価値
-----
SideToMove = White(Gote) ←手番
Progress = 88.87% ←進行度
ChangeEval = 40.00% ←評価関数切替(Apery→技巧)の進行度
EvalKind = Gikou ←使用された評価関数(Apery/技巧)
---------- Gikou
Sum = -53.27 ←技巧の評価値(再掲)
-----
KP = -1055.88 ←技巧のKP(King-Piece)(おそらく駒割りもこれに含まれる)
PP = +82.48 ←技巧のPP(Piece-Piece)
Controls = -122.32 ←技巧の「利き(各マスの利き)」に関する評価値
KingSafety = +618.37 ←技巧の「玉の安全度」に関する評価値
Sliders = +424.08 ←技巧の「飛び駒(飛車・角・香車の利き)」に関する評価値
---------- Apery
Sum = -307.99 ←Aperyの評価値(再掲)
-----
Material = -800.00 ←Aperyの駒割り
KK = +30.87 ←AperyのKK (King-King)
KKP = +61.77 ←AperyのKKP(King-King-Piece)
KPP = +399.38 ←AperyのKPP(King-Piece-Piece)
----------
Gikou_AperyEvalMixNoTurn_20160913
■Gikou_AperyEvalMixNoTurn_20160913
「Gikou_AperyEvalMix_20160905」からの変更点
・Aperyの評価値については、試験的に手番の評価をなくしたバージョン。KPPTではなくKPP。
・Aperyの評価関数バイナリ(KK_synthesized.bin、KKP_synthesized.bin、KPP_synthesized.bin)を読み込むが、
「駒の位置」の部分のみ使用し、「手番」の部分は使用しない。
・評価関数の精度は下がるが、npsは向上する。
・技巧の評価値はオリジナルのまま。手番の評価を含む。
Gikou_AperyEvalMix_20160905
■Gikou_AperyEvalMix_20160905
「Gikou_AperyEvalMix_20160803」からの変更点
・評価関数ファイルを読込むタイミングを変更しました。
* 変更前:isreadyの度に毎回読み込む。
* 変更後:初回のisreadyのときのみ読み込む。
・評価関数パラメータについて、PsqIndexを変換(技巧⇔Apery)するタイミングを変更しました。
* 変更前:Evaluate()の中で毎回変換する。
* 変更後:評価関数ファイルの読み込み時に(一度だけ)変換する。
→ Evaluate()が少しだけ速くなりましたが、メモリ使用量が増えましたのでご注意ください。
例えば、AperyのKPPのパラメータは3次元配列[81][1548][1548]ですが、
今回の変更で3次元配列[81][2110][2110]として保持することになったため、メモリ使用量が増えました。
(技巧の評価関数では「と~成銀」を「金」と区別しているため、PsqIndexの数がAperyより多くなっています。)
Gikou_NozomiEvalMix_20160821
【Gikou_NozomiEvalMix】
将棋ソフト「技巧」の非公式版です。
・技巧の評価関数バイナリに加えてnozomiの評価関数バイナリを読込み、両ソフトでの評価値を計算したうえで
任意の割合で混ぜ合わせて最終的な評価値を算出するようにした、実験的なプログラムです。
・別途、nozomiの評価関数バイナリ(new_fv.bin)が必要になります。
オリジナルの技巧の評価関数バイナリ等も必要です。
・npsが大きく低下するため、オリジナルの技巧に比べると棋力は下がります。
・ただ、当ソフト同士を自己対戦させてみると、「nozomiの評価値を混ぜる割合を0%(技巧の評価値が100%)」としたものより、
適度にnozomiの評価値を混ぜ合わせた方が強くなる場合もあるようです。
・評価値の差分計算は実装しましたが、高速化の余地は多々残っていると思います。
・USI拡張コマンドとして、「evalコマンド」を実装しました。(下記参照)
・mizarさんの「USI ["go nodes ", "go depth "], Option ["LimitDepth"] の実装」をマージしました。
・当プログラムの作成にあたり、Apery、やねうら王、nozomiのソースコードを参考にさせて頂きました。
■USI options
将棋所の「エンジン設定」画面などで設定する項目として
以下の4種類のオプションを追加しました。
・Z11_NozomiEvalJoban nozomiの評価値の割合(序盤、%) :0%~100%の範囲で設定します。(例)50
・Z12_NozomiEvalChuban nozomiの評価値の割合(中盤、%) :0%~100%の範囲で設定します。(例)50
・Z13_NozomiEvalShuban nozomiの評価値の割合(終盤、%) :0%~100%の範囲で設定します。(例)50
・Z14_NozomiEvalFolder nozomi評価関数バイナリのフォルダ:(例)./NozomiEval
【nozomiの評価値の割合の設定例】
(例1)序盤0%、中盤0%、終盤0%
算出される評価値は、技巧の評価値と一致します。
(例2)序盤100%、中盤100%、終盤100%
算出される評価値は、nozomiの評価値と一致します。
(例3)序盤50%、中盤50%、終盤50%
算出される評価値は、技巧の評価値とnozomiの評価値の平均値と一致します。
(例4)序盤100%、中盤50%、終盤0%
序盤の評価値はnozomiに近く、徐々に技巧の割合が増えていき、終盤の評価値は技巧の評価値と近くなります。
(例5)序盤30%、中盤50%、終盤20%
序盤から中盤にかけてnozomiの割合が30%から50%へと増えていき、
中盤から終盤にかけてnozomiの割合が50%から20%へと減っていきます。
※当ソフトでは、「進行度」に応じて評価値を混ぜる割合を内分しています。
そもそもオリジナルの技巧で、序盤、中盤、終盤の評価値を持っており、進行度に応じて内分する仕組みが実装されています。
当ソフトではその仕組みを流用させて頂いています。
■USI拡張コマンド「eval」
事前に任意の局面を設定したうえで「eval」コマンドを実行すると、
当ソフトで算出した評価値、技巧とnozomiの評価値とその内訳などを標準出力へ出力します。
なお、評価値として「手番側から見た評価値」を出力しています。
【実行例】
setoption name Z14_NozomiEvalFolder value ./NozomiEval
isready
position sfen l6nl/5+P1gk/2np1S3/p1p4Pp/3P2Sp1/1PPb2P1P/P5GS1/R8/LN4bKL w RGgsn5p 1
eval
---------- Eval
Eval = -449 ←算出した評価値(技巧とnozomiを混ぜ合わせ済み)
-----
Gikou = -53.27 ←技巧の評価値
Nozomi = -846.37 ←nozomiの評価値
-----
SideToMove = White(Gote) ←手番
Progress(%) = 88.87% ←進行度
Gikou(%) = 50.00% ←技巧の評価値を混ぜる割合
Nozomi(%) = 50.00% ←nozomiの評価値を混ぜる割合
---------- Gikou
Sum = -53.27 ←技巧の評価値(再掲)
-----
KP = -1055.88 ←技巧のKP(King-Piece)(おそらく駒割りもこれに含まれる)
PP = +82.48 ←技巧のPP(Piece-Piece)
Controls = -122.32 ←技巧の「利き(各マスの利き)」に関する評価値
KingSafety = +618.37 ←技巧の「玉の安全度」に関する評価値
Sliders = +424.08 ←技巧の「飛び駒(飛車・角・香車の利き)」に関する評価値
---------- Nozomi
Sum = -846.37 ←nozomiの評価値(再掲)
-----
Material = -760.47 ←nozomiの駒割り
KKP = -0.00 ←nozomiのKKP(King-King-Piece)
KPP = -178.92 ←nozomiのKPP(King-Piece-Piece)
Turn = +93.02 ←nozomiの手番
----------
Gikou_YaneuraOuClassicEvalMix_20160809
【Gikou_YaneuraOuClassicEvalMix】
将棋ソフト「技巧」の非公式版です。
・技巧の評価関数バイナリに加えてやねうら王classicの評価関数バイナリを読込み、両ソフトでの評価値を計算したうえで
任意の割合で混ぜ合わせて最終的な評価値を算出するようにした、実験的なプログラムです。
・別途、やねうら王classicの評価関数バイナリ(kkp32ap.bin、kpp16ap.bin)が必要になります。
オリジナルの技巧の評価関数バイナリ等も必要です。
・当ソフトで使用するのは、やねうら王2016 Midの評価関数バイナリ(KK_synthesized.bin、KKP_synthesized.bin、KPP_synthesized.bin)ではなく
やねうら王classicの評価関数バイナリであることにご注意ください。
やねうら王2016 Midの評価関数バイナリはApery(WCSC26)の評価関数バイナリと同じ形式ですので、
そちらを使用する場合は当ソフト【Gikou_YaneuraOuClassicEvalMix】ではなく【Gikou_AperyEvalMix】の方をご使用ください。
・npsが大きく低下するため、オリジナルの技巧に比べると棋力は下がります。
・ただ、当ソフト同士を自己対戦させてみると、「やねうら王classicの評価値を混ぜる割合を0%(技巧の評価値が100%)」としたものより、
適度にやねうら王classicの評価値を混ぜ合わせた方が強くなる場合もあるようです。
・評価値の差分計算は実装しましたが、高速化の余地は多々残っていると思います。
・USI拡張コマンドとして、「evalコマンド」を実装しました。(下記参照)
・mizarさんの「USI ["go nodes ", "go depth "], Option ["LimitDepth"] の実装」をマージしました。
・当プログラムの作成にあたり、Apery及びやねうら王のソースコードを参考にさせて頂きました。
■USI options
将棋所の「エンジン設定」画面などで設定する項目として
以下の4種類のオプションを追加しました。
・Z11_YaneuraOuClassicEvalJoban やねうら王classicの評価値の割合(序盤、%) :0%~100%の範囲で設定します。(例)50
・Z12_YaneuraOuClassicEvalChuban やねうら王classicの評価値の割合(中盤、%) :0%~100%の範囲で設定します。(例)50
・Z13_YaneuraOuClassicEvalShuban やねうら王classicの評価値の割合(終盤、%) :0%~100%の範囲で設定します。(例)50
・Z14_YaneuraOuClassicEvalFolder やねうら王classic評価関数バイナリのフォルダ:(例)./YaneuraOuClassicEval
【やねうら王classicの評価値の割合の設定例】
(例1)序盤0%、中盤0%、終盤0%
算出される評価値は、技巧の評価値と一致します。
(例2)序盤100%、中盤100%、終盤100%
算出される評価値は、やねうら王classicの評価値と一致します。
(例3)序盤50%、中盤50%、終盤50%
算出される評価値は、技巧の評価値とやねうら王classicの評価値の平均値と一致します。
(例4)序盤100%、中盤50%、終盤0%
序盤の評価値はやねうら王classicに近く、徐々に技巧の割合が増えていき、終盤の評価値は技巧の評価値と近くなります。
(例5)序盤30%、中盤50%、終盤20%
序盤から中盤にかけてやねうら王classicの割合が30%から50%へと増えていき、
中盤から終盤にかけてやねうら王classicの割合が50%から20%へと減っていきます。
※当ソフトでは、「進行度」に応じて評価値を混ぜる割合を内分しています。
そもそもオリジナルの技巧で、序盤、中盤、終盤の評価値を持っており、進行度に応じて内分する仕組みが実装されています。
当ソフトではその仕組みを流用させて頂いています。
■USI拡張コマンド「eval」
事前に任意の局面を設定したうえで「eval」コマンドを実行すると、
当ソフトで算出した評価値、技巧とやねうら王classicの評価値とその内訳などを標準出力へ出力します。
なお、評価値として「手番側から見た評価値」を出力しています。
【実行例】
setoption name Z14_YaneuraOuClassicEvalFolder value ./YaneuraOuClassicEval
isready
position sfen l6nl/5+P1gk/2np1S3/p1p4Pp/3P2Sp1/1PPb2P1P/P5GS1/R8/LN4bKL w RGgsn5p 1
eval
---------- Eval
Eval = -438 ←算出した評価値(技巧とやねうら王classicを混ぜ合わせ済み)
-----
Gikou = -53.27 ←技巧の評価値
YaneuraOu = -823.04 ←やねうら王classicの評価値
-----
SideToMove = White(Gote) ←手番
Progress(%) = 88.87% ←進行度
Gikou(%) = 50.00% ←技巧の評価値を混ぜる割合
YaneuraOu(%)= 50.00% ←やねうら王classicの評価値を混ぜる割合
---------- Gikou
Sum = -53.27 ←技巧の評価値(再掲)
-----
KP = -1055.88 ←技巧のKP(King-Piece)(おそらく駒割りもこれに含まれる)
PP = +82.48 ←技巧のPP(Piece-Piece)
Controls = -122.32 ←技巧の「利き(各マスの利き)」に関する評価値
KingSafety = +618.37 ←技巧の「玉の安全度」に関する評価値
Sliders = +424.08 ←技巧の「飛び駒(飛車・角・香車の利き)」に関する評価値
---------- YaneuraOuClassic
Sum = -823.04 ←やねうら王classicの評価値(再掲)
-----
Material = -734.88 ←やねうら王classicの駒割り
KK = +3.27 ←やねうら王classicのKK (King-King)
KKP = +38.30 ←やねうら王classicのKKP(King-King-Piece)
KPP = -129.76 ←やねうら王classicのKPP(King-Piece-Piece)
----------
Gikou_AperyEvalMix_20160803
【Gikou_AperyEvalMix】
将棋ソフト「技巧」の非公式版です。
・技巧の評価関数バイナリに加えてAperyの評価関数バイナリを読込み、両ソフトでの評価値を計算したうえで
任意の割合で混ぜ合わせて最終的な評価値を算出するようにした、実験的なプログラムです。
・別途、Aperyの評価関数バイナリ(KK_synthesized.bin、KKP_synthesized.bin、KPP_synthesized.bin)が必要になります。
オリジナルの技巧の評価関数バイナリ等も必要です。
・npsが大きく低下するため、オリジナルの技巧に比べると棋力は下がります。
・ただ、当ソフト同士を自己対戦させてみると、「Aperyの評価値を混ぜる割合を0%(技巧の評価値が100%)」としたものより、
適度にAperyの評価値を混ぜ合わせた方が強くなる場合もあるようです。
・評価値の差分計算は実装しましたが、高速化の余地は多々残っていると思います。
・USI拡張コマンドとして、「evalコマンド」を実装しました。(下記参照)
・mizarさんの「USI ["go nodes ", "go depth "], Option ["LimitDepth"] の実装」をマージしました。
・当プログラムの作成にあたり、Apery及びやねうら王のソースコードを参考にさせて頂きました。
■USI options
将棋所の「エンジン設定」画面などで設定する項目として
以下の4種類のオプションを追加しました。
・Z01_AperyEvalJoban Aperyの評価値の割合(序盤、%) :0%~100%の範囲で設定します。(例)50
・Z02_AperyEvalChuban Aperyの評価値の割合(中盤、%) :0%~100%の範囲で設定します。(例)50
・Z03_AperyEvalShuban Aperyの評価値の割合(終盤、%) :0%~100%の範囲で設定します。(例)50
・Z04_AperyEvalFolder Apery評価関数バイナリのフォルダ:(例)./Apery_20160307
【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%へと減っていきます。
※当ソフトでは、「進行度」に応じて評価値を混ぜる割合を内分しています。
そもそもオリジナルの技巧で、序盤、中盤、終盤の評価値を持っており、進行度に応じて内分する仕組みが実装されています。
当ソフトではその仕組みを流用させて頂いています。
■USI拡張コマンド「eval」
事前に任意の局面を設定したうえで「eval」コマンドを実行すると、
当ソフトで算出した評価値、技巧とAperyの評価値とその内訳などを標準出力へ出力します。
なお、評価値として「手番側から見た評価値」を出力しています。
【実行例】
setoption name Z04_AperyEvalFolder value ./Apery_20160307
isready
position sfen l6nl/5+P1gk/2np1S3/p1p4Pp/3P2Sp1/1PPb2P1P/P5GS1/R8/LN4bKL w RGgsn5p 1
eval
---------- Eval
Eval = -180 ←算出した評価値(技巧とAperyを混ぜ合わせ済み)
-----
Gikou = -53.27 ←技巧の評価値
Apery = -307.99 ←Aperyの評価値
-----
SideToMove = White(Gote) ←手番
Progress(%) = 88.87% ←進行度
Gikou(%) = 50.00% ←技巧の評価値を混ぜる割合
Apery(%) = 50.00% ←Aperyの評価値を混ぜる割合
---------- Gikou
Sum = -53.27 ←技巧の評価値(再掲)
-----
KP = -1055.88 ←技巧のKP(King-Piece)(おそらく駒割りもこれに含まれる)
PP = +82.48 ←技巧のPP(Piece-Piece)
Controls = -122.32 ←技巧の「利き(各マスの利き)」に関する評価値
KingSafety = +618.37 ←技巧の「玉の安全度」に関する評価値
Sliders = +424.08 ←技巧の「飛び駒(飛車・角・香車の利き)」に関する評価値
---------- Apery
Sum = -307.99 ←Aperyの評価値(再掲)
-----
Material = -800.00 ←Aperyの駒割り
KK = +30.87 ←AperyのKK (King-King)
KKP = +61.77 ←AperyのKKP(King-King-Piece)
KPP = +399.38 ←AperyのKPP(King-Piece-Piece)
----------