将棋評価値バーを使ってみたい方はコチラをご覧ください。
将棋評価値バーの開発目的
評価値バーは将棋 GUI と将棋エンジンの間に介在し,両者の間でやり取りされる USI ロトコルを盗み読んで評価値を勝率に換算して分かり易く表示するプログラムです。正しくは勝率バーと呼ぶべきかもしれません。近年では NHK 杯やアベマ TV などでも独自プログラムによる勝率バー表示が行われるようになりました。水匠開発者でもあるたややん氏がソースコード付きで公開しているものもあります。
たややん氏の公開した評価値バー (YouTube)
たややん氏のものは Pythonで作られており,フォントや色など自分の好みに合わせてカスタマイズすることも可能です。ただ Python プログラムの EXE 化が必要なので,Python を使ったことがない人がゼロから始めようとすると少し苦労するかもしれません。(自分にとって)最大の問題は AVX2 未対応の古い CPU では動かないということです。たややん氏の評価値バーは内部で cshogi というライブラリを使用しているのですが,この cshogi が標準では AVX2 未対応 の古い CPU には対応していないためです。当時,自分のメイン機が Ivy Bridge,サブ機が Sandy Bridge とともに AVX2 未対応世代だったこともあり,AVX2 未対応は致命的でした。なお cshogi も github で公開されているので AVX2 指定を外してビルドするだけで良いはずですが,これが何故かうまくいかない。一方,たややん氏の Python スクリプトを眺めてみると 200 行足らずの小さなプログラムなので,この程度ならフルスクラッチで書き直しても何とかなるんじゃね?と思ったのが苦労の始まりでした。
開発目的を整理すると以下のようになります。
- AVX2 未対応の古い CPU でも動くようにすること。
- Visual Studio などの開発環境を新たにインストールする必要なく,Windows 内蔵の C# コンパイラだけでビルドできること。
- 使用する将棋エンジンをコンパイル無しで切り替えられるようにすること。たややん氏の評価値バーはソースコード内に使用する将棋エンジン「水匠5」の実行パスが直に書き込まれており,これを変更するためにはソースコードを変更した後にコンパイル,いわゆる EXE 化が必要なため。
- 対局するプレイヤー名を表示できるようにしたい。これは同時に複数対局の評価値バーを表示すると,どの対局の評価値なのか区別つかなくなるためである。
- 評価値バーを常に最前面で表示できるようにしたい。これは自分のPC画面がちっさいからである。
一般的な将棋ソフトの構造と評価値バーの仕組み
一般的な将棋ソフトの構造は以下のようになっています。近年の将棋ソフトでは,人間が駒を動かしたりして操作する将棋GUIと指し手を考えてくれる将棋エンジンはプログラム自体が分離されています。両者の間でやり取りする情報はUSIプロトコルとして規格化され,標準入出力を用いて情報のやり取りを行うようにしています。
評価値バーはこの構造の間に介在します。まず将棋 GUI から評価値バーが呼び出されます。評価値バーは内部で将棋エンジンを起動します。将棋 GUI から局面情報が送られてくるので,そのまま将棋エンジンに引き渡します。一方,将棋エンジンから評価値や最善手などの情報が送られてくるので,これらもそのまま将棋 GUI に戻してやります。評価値バーは基本的な処理を全て将棋エンジンに丸投げしているだけで,相互にやり取りされる情報の中から必要な情報を盗み取って勝率バー表示を行います。
長くなり過ぎたので次回に続きます。