注意事項
KPPTからKKPT型評価関数へではKKPTという用語はKKPT+KPPと定義されていますが本稿ではKKPTのみの評価関数を指すものとします。
概要
将棋の終盤において、既存のKPPT型の評価関数より軽量な評価関数であるKKPT型の評価関数を用いて深く読んだ方が強い可能性があると考えて実験してみたがKPPTが優れているとの結論を得た。
本実験の動機
ゲームAIの探索において評価関数による評価はよく行われているが囲碁の死活、将棋の詰不詰など結局深く探索しないと結論が出せないケースはよくある。
将棋の終盤において評価関数の良さよりも読みの深さの方が重要な可能性があると考えた
#実験概要
KPPT型評価関数と表現力は弱いが高速なKKPT型評価関数を搭載したソフトを対戦させる。できる限りオープンソースで手に入るものを利用し、必要に応じて改変した。
KKPT型探索エンジンの作成
やねうら王1のKKPT+KPP型評価関数のコードを流用してKKPTのみ計算するように書き換えた
KKPT評価関数の作成
上記で作ったエンジンのlearnコマンドと110億局面教師データ2を用いて評価関数ファイルを作成した
対戦概要
KPPT | KKPT | |
---|---|---|
探索エンジン | やねうら王 | やねうら王を改変 |
評価関数 | elmo_sdt53 | 110億局面で学習したKKPT型評価関数 |
対戦条件 | |
---|---|
対戦数 | 100 |
対戦開始局面 | floodgate2017互角局面集(100手目、評価値±100以内)4 |
思考時間 | 秒読み1秒(btime=1000) |
CPU | Ryzen 7 1700 |
スレッド | 1スレッド |
(やねうら王のソースコード内のengine_invoker1.pyを利用して対戦した。各種パラメータはこちらのソースコード参照。) |
結果
97勝3敗でKPPT型評価関数の勝利であった。
##感想
本当はもうちょっと条件を変えてやってみるつもりだったがあまりの差にやる気を失った。
「攻め駒への利き」「挟撃形」「攻め駒と受け駒の関係」などをより正確に評価できるKPPの利点がKKPTの深さの利点をはるかに上回るのだろう。
###ちょっと気になってる点
やねうら王の探索パラメータ(改変せずにそのまま使用)がKKPTにマッチしていない可能性
(でもこの差が埋まることはないだろう....)
-
https://github.com/yaneurao/YaneuraOu commit 4ed0bbbc94153747f8dd3df52edfb92e392b97c7 ↩