評価関数ファイルの合成、学習元を解析するツールREsolveMUtationエンジンを公開します

todo もうちょっと可愛げのある文章に書き直す

 

WCSC26を制した評価関数elmoとやねうらお氏が人間の棋譜に一切頼らずに開発した評価関数リゼロ関数を1:1で合成した関数がelmoよりも強くなることを発端に、有志による評価関数の合成が密かなブームを迎えています。

また、学習用ツールの操作が簡易、コンパクト、高速化したことによる、有志による独自評価関数が可能になったことに伴い、各種関数を改造した野生の評価関数が最強の座を競っているようです。

 

しかし、そんなブームの到来は「あの関数なんだっけ」「この学習の効果ってどのぐらいよ」といった評価関数の迷子を多く生み出してしまっています。

そこで、せめて合成されたキメラ関数ぐらいは分解できたほうが良いだろうというわけで、やねうら王を改造し、評価関数の分解機能を実装しました。

 

ダウンロード(使い方もgithubのドキュメントをご参照ください):

Release 評価関数分解機 REsouve MUtationエンジン · qhapaq-49/qhapaq-bin · GitHub

 # 例にもれず、ドキュメントはクッソ不親切なのでわからないことはtwitterあたりでお尋ねいただけると幸いです。

 

動作原理:

 F = a_{0}f_{0} + a_{1}f_{1} + ... \delta (Fが分解したい評価関数f_{i}は既知の評価関数)といった形で未知の関数を既知の関数の線形和で近似した時、\deltaの絶対値が最小になるようにa_{i}を調整しています。連立方程式を解かせることでこれらを解析的に解くことが可能です(大学前期課程ぐらいの数学だと思います。興味がある人は導出してみてください...)

 

正しい使い方:

合成した評価関数の合成比率を忘れてしまった、学習によってどのぐらい元の評価関数から変化するのかを調べたいといった際に便利だと思います。

 

正しくない使い方:

評価関数のパクリを判別することができる気がしないでもないです。なお、単純に既存の強い評価関数を合成しただけなら、ほぼ確実に分解可能(diffの値が極めて小さくなります)ですが、本解析を抜けながら評価関数をパクることはそう難しくない(ある程度数学をやってれば想像がつく方法で行けます)ですし、独自関数が何らかの評価関数の線形和と似たものにならないことは保証できていません。

 

名前の由来:

言うまでもなく、リゼロのキャラクターであるレムから来ています。評価関数合成の立役者がリゼロ関数という愛称を持っているのと、レム嬢が残したとある名言

(ヒント)

f:id:qhapaq:20170716040551p:plain

に由来しています。

 

人の悪意の介在を証明するには人間の賢さは致命的に足りていないということは将棋ファンならよく理解していると思いますが......

 

エンジン提供者的にはうまく使ってもらいたいところです。