/Gikou

将棋ソフト「技巧」

Primary LanguageC++GNU General Public License v3.0GPL-3.0

将棋ソフト「技巧」

「技巧」は、2016年の世界コンピュータ将棋選手権で準優勝し、2017年の世界選手権では3位に入賞したトップレベルの将棋ソフトです。 人間的な評価項目(1.駒の損得、2.駒の効率、3.玉の堅さ、4.手番)を考慮した隙のない形勢判断などを特徴としています。

オープンソース・ソフトですので、どなたでも無料でお使いいただけます。 「将棋所」や「ShogiGUI」などのソフトに登録してご利用ください。

技巧に関する最新情報は、Twitter(@gikou_shogi)でお知らせしていく予定です。

技巧のダウンロード

最新版の「技巧2」(Windows版)は、以下のリンクから入手できます。 皆様の将棋のご検討などにお役立ていただけますと幸いです。

技巧2の動作環境は、以下のとおりです。 (新しい技術を使っている関係で、古いパソコンでは動作しない場合もございます。)

  • OS: 64ビット対応OS(Windows 7/8/10、Max OS X、Ubuntu Linux 14.04など)
  • CPU: SSE 4.2 対応のCPU(例: インテル Core-i シリーズ、AMD Ryzen シリーズ等)
  • メモリ: 1GB以上の空きメモリ
  • ディスク: 512MB以上の空きがあるHDD・SSD(SSDのほうが快適です)

使い方

  1. 将棋所 または ShogiGUI をあらかじめインストールしておきます
  2. 技巧のzipファイルを任意の場所に解凍します(ファイルはすべて同じフォルダに配置してください)
  3. 将棋所 または ShogiGUI を起動します
  4. 将棋所 または ShogiGUI に技巧の実行ファイル(gikou.exe)を登録します
  5. 必要に応じて、技巧のオプションを設定してみてください(定跡などの設定ができます)

設定の方法など、詳しい使い方については、将棋所 や ShogiGUI のホームページをご覧ください。

「技巧2」の特徴

初回公開版と比べると、「技巧2」には、主に以下の3つの特徴があります。

  1. 棋力の向上 - 実験によると、技巧の前回バージョンに対して8割程度の勝率です。
  2. 定跡選択機能 - 約8種類の戦型の中から、定跡を選べるようになりました。
  3. 読みの深さの調節機能 - 読みの深さを調節することで、強さのレベルを調整できるようになりました。

「技巧2」の新機能

新機能1: 定跡(戦型)選択機能

この機能は、技巧が使用する定跡をお好みで設定できる機能です。

対応している戦型

技巧2が現在対応している戦型は、次の全10種類です。

  • 「全戦型」は、どの戦型も指しこなすオールラウンダーの定跡です。
  • 居飛車は、「矢倉」「相掛かり」「横歩取り」「角換わり」の4種類から選べます。
  • 振り飛車は、「四間飛車」「中飛車」「三間飛車」「向飛車」の4種類から選べます。
  • 「その他の戦型」には、相振り飛車、陽動振飛車など色々な定跡が入っています。

「将棋所」での設定例:技巧に「矢倉」の定跡を指させる方法

  1. 画面上部メニューの「対局(G)」の中から、「エンジン管理」をクリックします。
  2. 「エンジン一覧」から「Gikou 2」を選び、「エンジン設定」をクリックします。
  3. エンジン設定画面が開いたら、「定跡ファイル(戦型選択用)」オプションの右側にある、「ファイル選択」をクリックします。
  4. ファイル選択画面が開いたら、「戦型別定跡ファイル」というフォルダに入っている「01_矢倉.bin」を選び、「開く」をクリックします。
  5. エンジン設定画面に戻ったら、「OK」をクリックして、設定を保存します。
  6. これで準備OKです! 設定後は、技巧2が対局するときに、なるべく「矢倉」の定跡を選ぶようになります。

新機能2: 読みの深さ(強さのレベル)調節機能

この機能は、技巧の読みの深さを調節することで、技巧の強さを調整できる機能です。

各レベルごとの強さの目安

各レベルごとの、技巧2の強さの目安は、おおむね次のようなイメージです(参考)。

  • レベル1(読みの深さ1手): 将棋倶楽部24の8級相当 (R 800程度)
  • レベル2(読みの深さ2手): 将棋倶楽部24の5級相当 (R 1100程度)
  • レベル3(読みの深さ3手): 将棋倶楽部24の2級相当 (R 1400程度)
  • レベル4(読みの深さ4手): 将棋倶楽部24の初段相当 (R 1600程度)
  • レベル5(読みの深さ5手): 将棋倶楽部24の2段相当 (R 1800程度)
  • 以降、読みの深さを増やすごとに、更に強さのレベルが上がります。
  • 技巧を最強の設定で使う場合は、レベルを「100」に設定してお使いください。
  • なお、技巧側の持ち時間が短いと、レベル(読みの深さ)を上げても、技巧の強さは上がらないことがあります。

「将棋所」での設定例:技巧の「読みの深さ(強さのレベル)」を「1」に変更する方法

  1. 画面上部メニューの「対局(G)」の中から、「エンジン管理」をクリックします。
  2. 「エンジン一覧」から「Gikou 2」を選び、「エンジン設定」をクリックします。
  3. エンジン設定画面が開いたら、「読みの深さ(強さのレベル調節用)」の右の数字を、「1」に変更します。
  4. エンジン設定画面右下の「OK」をクリックして、設定を保存します。
  5. これで準備OKです! 設定後は、レベル1の技巧と対局できます。

開発者の皆様へ

現在のところ、技巧の推奨開発環境は、以下のとおりです。

  • OS: Ubuntu Linux 14.04以上, Mac OS X 10.9.5以上
  • コンパイラ等: g++ 4.8以上, make

技巧は、C++11で書かれており、コーディング規約等は概ね以下のページを参考にしています。

技巧の技術的特徴については、以下のスライド及び論文をご参照ください。

バグ、不具合、コメントの誤字脱字等を発見をされましたら、ご報告いただけますと幸いです。

コンパイルの方法

技巧をソースコードからコンパイルする場合は、以下のようにコマンドを実行してください。

Windowsの場合

cd Gikou
make gikou

Mac / Linuxの場合

cd Gikou
make release

学習等の方法

Step 0. 事前準備

  1. 学習に使うコンピュータの準備
  • CPU: SSE 4.2 対応のCPU(性能が高いほど学習時間が短くて済みます)
  • メモリ: 16GB以上の空きメモリ(32GB以上のメモリを推奨)
  1. 棋譜データベースファイルの準備
  • 棋譜データベースファイルを準備して、技巧の実行ファイルと同じフォルダに配置してください。
  • 読み込みに対応している棋譜DBの文字エンコーディングは、UTF-8です。
  • 棋譜DBのファイル名は、"kifu.txt"としてください。

Step 1. 進行度の学習

以下のコマンドを入力すると、進行度(序盤〜終盤を0〜1の値で表したもの)の学習が行われます。 進行度の学習時には探索が行われないため、評価関数の学習等と比較すると短時間で学習できると思います。

./release --learn-progress

Step 2. 評価関数の学習

以下のコマンドを入力すると、評価関数の学習が行われます。 現在の実装では、Core i7-3930K(6コアCPU)を用いた場合、学習に要する時間は1日弱程度です。

./release --learn

注意:評価関数の学習は、Step 1.を終えてから行ってください。

Step 3. 指し手の実現確率の学習

以下のコマンドを入力すると、指し手の実現確率の学習が行われます。

./release --learn-probability

注意:指し手の実現確率の学習は、Step 1.とStep 2.を終えてから行ってください。

Step 4. 定跡データベースの作成

以下のコマンドを入力すると、定跡データベースの作成が行われます。 現在の実装では、棋譜DBに戦型が記録されている場合、戦型ごとに定跡ファイルが作成されます。

./release --create-book

注意:定跡データベースの作成は、Step 1.からStep 3.までを終えてから行ってください。

Step 5. 強化学習の実施

RootStrapによる強化学習を行う場合は、以下のコマンドを実行してください。 強化学習後のパラメータを使って再度強化学習を行うというプロセスを何度か繰り返すことで、 段階的に棋力が向上することが実験的に分かっています。 強化学習を繰り返すには、以下のa.とb.のコマンドを繰り返し実行してみてください。

./release --generate-positions   # 教師局面の生成
./release --learn-with-rootstrap # RootStrapによる強化学習

RootStrapと、対局の勝敗からのロジスティック回帰を組み合わせた強化学習の2つを併せて行うには、 以下のコマンドを実行してください。 なお、RootStrap単体で学習するよりも、ロジスティック回帰を組み合わせた方が、 若干棋力が向上することが実験的に確かめられています。

./release --generate-positions    # 教師局面の生成
./release --generate-games        # 教師用の自己対戦棋譜を生成
./release --learn-with-regression # RootStrapとロジスティック回帰を組み合わせた強化学習

注意:強化学習は、少なくともStep 1.からStep 3.までを終えてから行ってください。

謝辞

「技巧2」のデフォルトの定跡には、「まふ定跡 ver11」が採用されています。 技巧用の強力な定跡を作成してくださった、まふ氏に感謝申し上げます。 (定跡データの著作権はまふ氏にありますが、まふ氏がGPLライセンスで公開してくださったので、技巧本体に同梱させていただきました。)

また、技巧の開発には、大会会場でアイデアを下さった方々や、GitHubでプルリクエストをしてくださった方々など、 様々な方々のアイデアが生かされています。誠にありがとうございます。

結び

技巧の開発にあたっては、様々な文献やソースコードを参照いたしました。 主要なものについては、ソースコードのコメントやアピール文書等に参考文献として記載させていただいております。 こうした先人の偉大な研究がなければ、技巧を開発することは全く不可能でした。 この場をお借りして、心より御礼申し上げます。

GitHub上での技巧のダウンロード数は、公開約1年で30000回を超えました。 大変多くの将棋ファンの方々に技巧を使っていただけたことが、開発を続ける大きな動機になりました。 技巧をご愛用くださり、誠にありがとうございます。

「技巧」開発者 出村洋介