はじめに
将棋AI「技巧(ぎこう)」を自分の手で訓練して、自分なりに強くしてみる――
そんな「遊び」をはじめました。この記事はその開発日記の第1回です。
ガチの解説記事というより、「素人が将棋AIをいじって楽しんでる記録」くらいの温度感で書いていきます。間違いやガバもそのまま残すスタイルです。pythonしか触ったことないので超基本的なC++のお作法を理解していないことがあります。お許しください。
なお、この日記は Claude(Claude Code)と一緒に 作っています。
前回は、その Claude Code から Qiita に下書きを投げる仕組み(Qiita MCP / skill)を整備した話を書きました。よければこちらもどうぞ。
今回はその仕組みを使って、実際に開発日記を投稿していきます。
そもそも技巧ってなに?
技巧は、2016年の世界コンピュータ将棋選手権で準優勝、2017年では3位に入賞したトップレベルの将棋ソフトです。しかも オープンソースで無料。誰でも使えて、ソースコードまで公開されています。すごい。
特徴としては、人間っぽい評価項目――
- 駒の損得
- 駒の効率
- 玉の堅さ
- 手番
――を考慮して「隙のない形勢判断」をするところ、だそうです。
技巧そのものは「USIエンジン」と呼ばれる対局エンジンで、単体ではただの頭脳です。人間が指して遊ぶには「将棋所」や「ShogiGUI」といった画面(GUI)に登録して使います。エンジンが脳みそ、GUIが体+盤面、みたいなイメージですね。
そして今回やりたいのは、この技巧を自分でビルドして、ゆくゆくは自分で訓練(学習)して強くすること。完成品のzipを落としてくるのではなく、ソースからいじれる状態を作ります。
やったこと(今回のゴール)
- 技巧のソースコードをクローン
- C++のビルド環境(g++ / make)を用意
- ビルドして、エンジンが起動するところまで確認
- 実際に1手指させてみる
- UI(ShogiGUI)をダウンロード
技巧のクローン
まずは Ubuntu 上でソースコードを取得します。
git clone https://github.com/hoguro-uelab/Gikou.git
これはあくまでソースコードで、アプリ本体(実行ファイル)ではありません。
このままでは遊べないので、あとで .exe 的な実行ファイルにビルドしてやる必要があります。(完成品の技巧は GitHub から .zip で落とせるので、追加学習だけしたいならそっちが楽。でも今回はソースからやりたい。)
中身を確認:
passiomonster:~/Gikou$ ls
Copying.txt Makefile README.md gikou_ja.txt src
cloneは成功してそう。
開発ツールの確認(g++ / make)
ここで詰まりかけました。C++をコンパイルするには g++ とか make が要るらしい。正直 g++ が何かもよく分かってないのですが、Pythonにはなかった
「make」「ビルド」みたいなコンパイル工程がC++には必要、ということだけ理解。
とりあえず入ってるか確認すると、見事に両方なかった:
passiomonster:~/Gikou$ g++ --version
make --version
Command 'g++' not found, but can be installed with:
sudo apt install g++
Command 'make' not found, but can be installed with:
sudo apt install make # version 4.3-4.1build1, or
sudo apt install make-guile # version 4.3-4.1build1
C++開発に必要な一式をまとめて入れてくれる build-essential をインストール:
sudo apt update
sudo apt install build-essential git
もう一度確認すると、ちゃんと入ってました:
passiomonster:~/Gikou$ g++ --version
make --version
g++ (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0
...
GNU Make 4.3
...
ビルドしてみる
README に従い、Linux なので make release でコンパイルします。
cd Gikou
make release
無事 bin というフォルダに実行ファイルが生成されました。bin は Linux などでもよくある「バイナリ(実行ファイル)を置くディレクトリ」らしいです。
passiomonster:~/Gikou$ ls -lh bin
total 3.1M
-rwxr-xr-x 1 passiomonster passiomonster 3.1M Jun 7 17:10 gikou
ちなみに、あとで学習用に release という実行ファイルも作りました(拡張子ないんだ…)。
ざっくり gikou がエンジン本体、release が学習・訓練用の実行ファイル という認識。
passiomonster:~/Gikou$ ls -l bin
total 4092
-rwxr-xr-x 1 passiomonster passiomonster 3218240 Jun 7 17:10 gikou
-rwxr-xr-x 1 passiomonster passiomonster 967752 Jun 8 21:36 release
ここまでで何ができるのか
./bin/gikou を起動して isready と打ち、readyok が返ってくればエンジンは起動できています。ただ、起動時のメッセージを見ると、いくつかのファイルがまだ存在しないと言われます(定跡・進行度・評価関数など)。
passiomonster:~/Gikou$ ./bin/gikou
info string Failed to open progress.bin.
info string Failed to open params.bin.
info string Failed to open probability.bin.
つまり今の状態はこんな感じ:
Gikou
├─ プログラム本体 ✓
├─ USI通信 ✓
├─ 定跡(book.bin) ✗
└─ 評価関数(params.bin) ✗
脳みそ(本体)はできたけど、知識(評価関数)と定跡がまだ空っぽ。
ここを埋める=学習させるのが、これからの本番です。
実際に指させてみる
知識ゼロでも一応指してはくれるのか、最初の局面で確認。
深さ1で探索させると bestmove 1g1f(1六歩)が返ってきました。
頓珍漢ではあるけど、ちゃんと答えは返ってくる。
position startpos
go depth 1
info depth 1 ...
bestmove 1g1f
深さ3にしても bestmove は変わらず。探索の仕組み自体は動いてるけど、
評価関数が無い=賢くないので、同じ手しか出てこないっぽいです。
go depth 3
info depth 1 ... score cp 0 ... pv 1g1f
info depth 2 ... score cp 0 ... pv 1g1f 1c1d
info depth 3 ... score cp 0 ... pv 1g1f 1c1d 1f1e
bestmove 1g1f ponder 1c1d
score cp 0(評価値ゼロ)がずっと並んでるあたり、まさに「まだ何も分かってない」状態だなと。逆に言うと、ここから学習で score が動き出したら成長の証ですね。
UI(ShogiGUI)をダウンロード
人間が盤面で遊ぶには GUI が要るので、定番の ShogiGUI をダウンロードしました。
ただし今回は入手しただけ。技巧をエンジン登録して対局…は、評価関数を入れてちゃんと強くしてから本格的にやる予定なので、次回以降のお楽しみにします。
次にやること
README を grep してみたら、評価ファイルは自分で学習して作るらしいと判明:
passiomonster:~/Gikou$ grep -n "learn" README.md
140:./release --learn-progress
149:./release --learn
159:./release --learn-probability
184:./release --learn-with-rootstrap # RootStrapによる強化学習
195:./release --learn-with-regression # RootStrapとロジスティック回帰を...
完成品の評価関数zipを落としてくる手もありますが、せっかくなので
自分で訓練して育てる方向で進めます。次回は、
- 学習に使う棋譜データ(kifu.txt)の準備
-
--learn-progress→--learnの学習パイプライン
あたりを触っていく予定です。技巧が score cp 0 から卒業できるか、乞うご期待。