Skip to content

elmo: Aperyをforkした評価関数生成用のコードです。

License

Notifications You must be signed in to change notification settings

mk-takizawa/elmo_for_learn

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

将棋ソフトelmo(評価関数生成用コード)

elmoは2017年の世界コンピュータ将棋選手権で優勝した将棋ソフトです。 本コードはelmoの評価関数を生成する開発者向けプログラムとなります。 対局用のプログラムはやねうら王を推奨していますが、旧Apery形式(2017年3月迄のApery)の評価関数を利用するプログラムであれば どのプログラムでも利用出来ます。2017年5月時点で以下プログラムで利用出来ることを確認しています。 (利用できることを保証するものではありません)

開発者の皆様へ

評価関数生成時はメモリを非常に必要とします。1スレッドで7GB, その後1スレッド増える度に2GB必要とします。 つまり、4コアで4スレッド利用する場合、15GBを必要とします。ご注意ください。

elmoの技術的特徴については、簡易なものですが以下をご参照ください。

バグ等を発見されましたら、twitterへご報告いただけますと幸いです。

コンパイルの方法

以下のようにコマンドを実行してください。

cd elmo/src
make -j 8 sse
mv elmo ../bin/

上記8はコンパイル時のスレッド数(幾つでも良いです)、sseはSSE4.2でのコンパイルを示します。 AVX2対応のCPUをご利用の場合は、sseをbmi2に置き換えてコンパイルしてください。

学習の方法

Step 0. 事前準備

  1. 評価関数生成に使うコンピュータの準備
  • CPU: SSE 4.2 対応のCPU(Core iシリーズ以降のアーキテクチャ)
  • メモリ: 16GB以上の空きメモリ(32GB以上のメモリを推奨)
  • OS: Ubuntu Linux 14.04以上(Ubuntu Mate 16.04で主に開発しています)。
  • コンパイラ等: g++ 4.8以上, make
  1. 初期評価関数の取得
  • elmo: https://t.co/NJQ95elVma にアクセスし、elmo.shogi.zipをダウンロードします。
  • 上記ファイルを解凍し、evalフォルダ配下の3ファイルをelmo/bin/20161007/に保存します。
  • 以下の通りファイル名を変更します。
    • KK_synthesized.bin → kks.kk.bin
    • KKP_synthesized.bin → kkps.kkp.bin
    • KPP_synthesized.bin → kpps.kpp.bin
  1. 初期局面集ファイルの取得

Step 1. 教師局面の生成

以下のコマンドを実行し、教師局面を生成します。

./elmo make_teacher roots.hcp <出力ファイル名> <実行スレッド数> <生成する局面数>

出力ファイル名は任意のものをご指定ください。 実行スレッド数は論理CPUコア数と同程度を目安に設定してください。 生成する局面数も任意ですが、100万程度(1000000)で実行してみてください。

最終的に50億局面程度必要となりますが、下記Step 2.でファイルサイズ分のメモリが必要となります。私(瀧澤)は1千万局面毎に生成し、メモリが許容出来るサイズ程度に結合(catコマンド)してStep 2.を適用しています。シャッフル後にそれらファイルを結合しています。

Step 2. 教師局面のシャッフル

Step 1.で生成した教師局面ファイル名を説明の為に以下、output.teacherとして記載します。

cd ../utils/shuffle_hcpe/
make
cd ../../bin/
../utils/shuffle_hcpe/shuffle_hcpe output.teacher <シャッフル後のファイル名>

Step 3. 評価関数の生成

Step 2.で生成した教師局面ファイル名を説明の為に以下、output.shuffleとして記載します。 以下のコマンドを実行し、評価関数の生成を行います。

./elmo use_teacher output.shuffle <実行スレッド数>

注意:実行スレッド数は搭載メモリ量およびCPUコア数を考慮し、決定してください。 必要なメモリ量の目安はページ上部の「開発者の皆様へ」の欄をご確認ください。 メモリが不足した場合、OSの動作が不安定となりますのでご注意ください。

謝辞

本Readmeは技巧を参考に同様のアウトラインで作成させて頂きました。 分り易く秀逸な文章と思います。この場を借りて感謝申し上げます。

本学習コードの大部分はAperyのコードをそのまま利用させて頂いています。 Apery無しにelmoの評価関数を作製することは非常に困難でした。心から感謝しております。

最後に、2017年の選手権での対局は評価関数と定跡部分を除き、やねうら王をそのまま利用していました。 elmoの優勝にやねうら王の貢献は欠かせないものでした。大会当日までご尽力頂き、頭が下がる思いです。

最後に

最近のコンピュータ将棋界は、開発者同士でワイワイやっています。

ご興味を持たれましたら是非大会への参加をご検討ください。開発者は全員歓迎すると思います。 大会出場には思考部分への独自性が必要となりますが、elmoもライブラリとして利用可能とする予定ですので、 私がApery/やねうら王を利用したように、ご利用頂ければ大変嬉しく思います。

「elmo」開発者 瀧澤 誠

About

elmo: Aperyをforkした評価関数生成用のコードです。

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Languages

  • C++ 97.4%
  • Ruby 1.7%
  • Makefile 0.9%