# 将棋ソフト「技巧」 「技巧」は、2016年の世界コンピュータ将棋選手権で準優勝し、2017年の世界選手権では3位に入賞したトップレベルの将棋ソフトです。 人間的な評価項目(1.駒の損得、2.駒の効率、3.玉の堅さ、4.手番)を考慮した隙のない形勢判断などを特徴としています。 オープンソース・ソフトですので、どなたでも無料でお使いいただけます。 「将棋所」や「ShogiGUI」などのソフトに登録してご利用ください。 技巧に関する最新情報は、Twitter([@gikou_shogi](https://twitter.com/gikou_shogi))でお知らせしていく予定です。 ## 技巧のダウンロード 最新版の「技巧2」(Windows版)は、以下のリンクから入手できます。 皆様の将棋のご検討などにお役立ていただけますと幸いです。 - ダウンロード場所: https://github.com/gikou-official/Gikou/releases 技巧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のほうが快適です) ## 開発者の皆様へ 現在のところ、技巧の推奨開発環境は、以下のとおりです。 - OS: Ubuntu Linux 14.04以上, Mac OS X 10.9.5以上 - コンパイラ等: g++ 4.8以上, make 技巧は、C++11で書かれており、コーディング規約等は概ね以下のページを参考にしています。 - コーディング規約: [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html) - コメント表記: [Doxygen](http://www.doxygen.org/) 技巧の技術的特徴については、以下のスライド及び論文をご参照ください。 - [第3回将棋電王トーナメント PR文書](http://denou.jp/tournament2015/img/PR/Gikou.pdf) - [第26回世界コンピュータ将棋選手権 アピール文書](http://www2.computer-shogi.org/wcsc26/appeal/Gikou/gikou_appeal_wcsc26_ver3.pdf) - [第27回世界コンピュータ将棋選手権 アピール文書](http://www2.computer-shogi.org/wcsc27/appeal/Gikou/gikou_appeal_wcsc27.pdf) - 出村洋介: 将棋プログラム「技巧」の技術背景, コンピュータ将棋協会誌, Vol.28, pp.20-29, 2017. バグ、不具合、コメントの誤字脱字等を発見をされましたら、ご報告いただけますと幸いです。 ### コンパイルの方法 技巧をソースコードからコンパイルする場合は、以下のようにコマンドを実行してください。 #### Windowsの場合 ``` cd Gikou make gikou ``` #### Mac / Linuxの場合 ``` cd Gikou make release ``` ### 学習等の方法 #### Step 0. 事前準備 1. 学習に使うコンピュータの準備 - CPU: SSE 4.2 対応のCPU(性能が高いほど学習時間が短くて済みます) - メモリ: 16GB以上の空きメモリ(32GB以上のメモリを推奨) 2. 棋譜データベースファイルの準備 - 棋譜データベースファイルを準備して、技巧の実行ファイルと同じフォルダに配置してください。 - 読み込みに対応している棋譜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.までを終えてから行ってください。 ## 謝辞 技巧の開発にあたっては、様々な文献やソースコードを参照いたしました。 主要なものについては、ソースコードのコメントやアピール文書等に参考文献として記載させていただいております。 こうした先人の偉大な研究がなければ、技巧を開発することは全く不可能でした。 この場をお借りして、心より御礼申し上げます。 「技巧」開発者 出村洋介