根岸の部屋

備忘録がてらに将棋(主にソフトとか角交換四間飛車とか)について書き殴ってます。棋力は絶賛伸び悩み中\(^0^)/ Twitter→@39th_theory

【コンピュータ将棋】評価関数合成について

  今更ながら評価関数の合成に手を出してみようと思う。これを使ってブリードしたところ、elmoなどの既存のものを超える、いわば「強化版elmo」とでもいうべき評価関数ができたという報告が多数なされている。これらの強化版elmoだが、公式にどこかで配布されているわけではないので、ほしいのであれば自分で合成して入手する必要がある。(一応一部の評価関数はどこかのアップローダにあげられていることもあるが・・・)

 この合成では、任意の評価関数を任意の割合で混ぜ合わせることで新しい評価関数バイナリを吐き出させることができる。現在、巷には多くの種類の有力な評価関数があふれておりその組み合わせは多岐にわたる。そのうち何種類を材料とし、何を何パーセント組み合わせるか、と考えるとレシピは無数に想定される。現状どのレシピにどんな可能性が秘められているかは全くの未知数で、しかもその時点での”最強”の評価関数はしばしば入れ替わっている。評価関数ブリードという分野は理論が全く確立されていないのだ(そもそも何故ブリードすると強化されるかの理論的根拠すらよくわかっていない)。

 

 これらを踏まえて、将棋ソフトを用いて検討、研究などをしたい人たちが取るべき態度は3つである。ひとつはこの評価関数合成の流れに乗らず、既にあるもののみで黙々と勉強すること。はっきり言って、無駄にコンピュータソフトに時間を取られることもないのでよほどコアな人でない限りこちらのほうがいいと思うが。

 もうひとつは、誰かが強い評価関数をどっかにアップしてくれるのを待ってそれを入手すること。ただそれはアップロード者にとってもまあまあ手間だし、評価関数自体圧縮してもファイルサイズが数百MBとなるためストレージ的にも負担となりそう。どこかから有るかどうかもわからないアップローダのリンクを探して回るというのも非効率な気がする。あるいは、どこの誰がアップしたのかも分からないファイルが本当に信用できるのか、というところもある。

 3つ目は、どの素材をどんな割合で加えるかというレシピさえあれば、いつでも手元で合成ができるような環境を整えておくこと。レシピ自体はそこらへんにそこそこ出回っているので、これができるならば常にその時点で最強の評価関数を用いた研究ができそうだ。本稿ではこの環境作りの方法を自分なりに述べたい。

 

 本家やねうら氏の解説記事はこちら。

評価関数のキメラ化コマンド公開しました | やねうら王 公式サイト

 

 

 

※筆者はこの記事の内容の正しさを保証しません。評価関数合成は自己責任で行なってください。

 

 

1.材料の評価関数を手に入れる。

 elmo、Qhqpaqなど、既存の評価関数が素材として必要なので入手する。入手先のリンクは以下を参照。

 

negishiroom.hatenablog.com

 

 この中ではelmo、rezero8あたりは優秀な素材と思う。特にrezeroはほかのどんな評価関数と足しても高確率で強くなる傾向があり、さながら万能調味料のような存在となっているので要チェック。

 

2.最新版やねうら王を入手する。

 以下のURLから最新のやねうら王のエンジンをダウンロードする。このエンジンがないと合成ができない。

https://github.com/yaneurao/YaneuraOu/releases

 

3.PC上に合成につかう適当な場所(ディレクトリ)を見繕う。

 適当な場所にディレクトリ(フォルダ)を作りそのなかにさっきDLしたやねうら王の実行ファイル(YaneuraOu-2017-early.exeなど)をおく。ただしYaneuraOu-2017-early-tournament.exeは評価関数キメラ化コマンドが含まれていないため使えないのでそれ以外を用いる。

 おなじディレクトリ内に「EVAL_DIR1」と「EVAL_DIR2」、「eval」というフォルダを作成する。evalの中には

KK_synthesized.bin

KKP_synthesized.bin

KPP_synthesized.bin

という名前の空のファイルを作成して置いておく(これが無いとやねうら王の実行ファイルが動かない模様)。よくわからないという方は下のリンクからダウンロードしたアイテムをそこに置くとよい。

eval - Google ドライブ

 ここが、料理で言う台所のようなものに相当する。

 

4.材料を決め、ディレクトリに入れる。

 一度の合成では2種類だけ選んで、任意の割合で混ぜることができる。合成したい評価関数2種類を、それぞれEVAL_DIR1、EVAL_DIR2のディレクトリに入れる。評価関数バイナリは違う種類のものでもファイル名やファイルサイズがどれも同じで紛らわしいため、どちらに何を入れたかがこんがらがったりしないよう、よく覚えるかメモするかしておくとよい。

 

5.実行ファイルにコマンドを打ち込み、合成を実行する。

 実行ファイル(YaneuraOu-2017-early.exeなど)をクリックして開く。「Windows によって PC が保護されました」などと表示されることがあるが、実行する。黒い窓のようなものが出てくるので、以下のコマンドを打ち込みEnterキーを押す。

test evalmerge EVAL_DIR1 EVAL_DIR2 OUTPUT_DIR [パーセント]

 OUTPUT_DIRというディレクトリを作成し、さらにEVAL_DIR1にある評価関数を○%、EVAL_DIR2のを(100-○)%の割合で合成した評価関数を生成しそれをOUTPUT_DIRに置く、という動作がこれで行なわれる。上の構文をメモ帳かなにかにコピペし、[パーセント]を任意の数に書き換えてそれを黒い窓にさらにペーストするとよい。

 EVAL_DIR1、EVAL_DIR2、OUTPUT_DIRの名前が気に喰わないならば任意の名前に変えられる、はず。その場合はそれに応じて手順3で作成するディレクトリの名前も変えること。

 

 さて、これで評価関数合成の手順の解説はひとまず終わりである。こうして出来た評価関数をさらに合成の材料にすれば、3種類以上の素材を組み合わせた評価関数を作ることもできよう。この記事が参考になれば幸いである。