GPSfishをCygwinでビルドする方法(2014/06/04版)

Cygwin 環境でGPSfishをビルドする方法について説明します。
GPS将棋のサイト の方が情報が新しいので先にそちらの説明を参考にして下さい。
なお、ソースコードからビルドせず実行プログラムのみインストールするときは 1-6を飛ばして7に進んで下さい。

1. 環境

  1. Cygwin : 1.7.30 (64bit)
  2. gcc : 4.8.3
  3. GPSfish : 0.2.1+r2901

2. ソースコードのダウンロード

上記のGPS将棋のサイトからosl,gpsshogi,gpsfishのソースコードをダウンロードし、 それぞれosl,gpsshogi,gpsfish_devフォルダに解凍します。

3. 準備作業

Cygwinのsetup.exeを起動し以下の開発環境をインストールします。

  1. Devel : gcc, make
  2. Libs : libboost-devel
  3. Archive : libbz2-devel

4. oslのコンパイル

ソースコードを以下のように修正します。

(1) osl/core/osl/oslConfig.ccの503行目をコメントアウトします。
(std::to_string()関数がないため、動作には影響ありません)

Cygwinウィンドウを起動し以下のコマンドを実行します。

> cd osl
> ln -s ../gpsshogi/data .
> cd core/osl
> make
osl/core/oslにlibosl_core.aファイルができれば正常終了です。所要時間は数分です。

5. gpsfishのコンパイル・リンク

ソースコードを以下のように修正します。

(1) gpsfish_dev/src/ucioption.cppの127行目
ハッシュメモリを2048MB以上とると動かないので1024MBを上限にします。

memory = std::min((size_t)1024, std::max(memory, value/1024/4));
(2) gpsfish_dev/src/ucioption.cppの152行目
残り時間が少ないときも最低1.5秒考えるようにします。
o["Minimum Thinking Time"] = UCIOption(1500, 0, 50000);
(3) gpsfish_dev/src/misc.cppの215行目以降
コンパイルエラーを消すために常に0を返すように変えます。
int input_available() {
  return 0;
}
(4) gpsfish_dev/src/search.cppの69行目
リンクエラーを消すためにGPSFISH_DFPNをOFFにします。dfpnが使用できなくなります。
//# define GPSFISH_DFPN
(参考)
dfpnを有効にするにはosl/std/oslでもmakeを行う必要があります。 いくつかコンパイルエラーが出ますが上の方法と同様に消すことができます。

以下のコマンドによりboostのライブラリのシンボリックリンクを張ります。
(環境によっては既に行われていることがあります。その場合は不要です。)

> cd /usr/lib
> ln -s libboost_date_time-mt.dll.a libboost_date_time.a
> ln -s libboost_filesystem-mt.dll.a libboost_filesystem.a
> ln -s libboost_iostreams-mt.dll.a libboost_iostreams.a
> ln -s libboost_program_options-mt.dll.a libboost_program_options.a
> ln -s libboost_serialization-mt.dll.a libboost_serialization.a
> ln -s libboost_system-mt.dll.a libboost_system.a

以下のコマンドを実行します。

> cd gpsfish_dev/data
> make
> cd ../src
> make
gpsfish_dev/srcにgpsfish.exeができれば正常終了です。所要時間は1分以内です。
gpsfishの簡単な動作確認は以下のように行います。
> cd gpsfish_dev/src
> ./gpsfish.exe
その後以下のコマンドを実行し適当なメッセージが出れば正常です。(()内はgpsfishの出力)
usi
(...)
(usiok)
isready
(readyok)
usinewgame
position startpos moves 9i9h
go byoyomi 3000
(...)
quit

6. gpsfishのインストール

gpsfishをGUIから使用するには以下の設定が必要です。
適当なフォルダ(例えばgpsfish)を作成し、その中に以下のファイルをコピーして下さい。

gpsfish.exe                            上で作ったgpsfish.exeをコピーする
cygboost_date_time-mt-1_53.dll         以下11個のdllファイルをcygwin/binフォルダからコピーする
cygboost_filesystem-mt-1_53.dll        (ファイル名の数字はバージョン番号であり変わる場合があります)
cygboost_iostreams-mt-1_53.dll
cygboost_program_options-mt-1_53.dll
cygboost_serialization-mt-1_53.dll
cygboost_system-mt-1_53.dll
cygbz2-1.dll
cyggcc_s-seh-1.dll
cygstdc++-6.dll
cygwin1.dll
cygz.dll
data/                                  dataフォルダを作成する
     eval.bin                          以下3個のファイルをgpsshogi/dataフォルダからコピーする
     joseki.dat
     progress.txt
環境変数 "GPSFISH_HOME" をgpsfish.exeがあるフォルダに設定して下さい。

7. 実行プログラムのインストール

(ソースコードからビルドするときは本節は飛ばして下さい)

実行プログラムのみをインストールする方法は以下の通りです。

動作環境

動作環境は以下の通りです。

ダウンロード

実行プログラム一式を ダウンロード して適当なフォルダに解凍して下さい。
gpsfishフォルダのファイル構成は以下のようになります。
gpsfish.exe
cygboost_date_time-mt-1_53.dll
... (全部で11個のdllファイル)
cygz.dll
data/
     eval.bin
     joseki.dat
     progress.txt

環境変数の設定

環境変数 "GPSFISH_HOME" をgpsfish.exeがあるフォルダに設定して下さい。
例えばマイドキュメントのshogi/gpsfishにインストールしたときは、
[コントロールパネル]→[システム]→[システムの詳細設定]→[環境変数]→[ユーザーの環境変数・新規] で[変数名]に"GPSFISH_HOME"、[変数値]に"C:\Users\myname\Documents\shogi\gpsfish" と入力します。("myname"はアカウント名)

ソースコード

修正したソースコードは以下にあります。
osl.tar.gz, gpsshogi.tar.gz, gpsfish.tar.gz

8. USI将棋での設定法

[ツール]→[エンジン管理]メニューの[追加]をクリックしgpsfish.exeを選択し、 下の[エンジン応答]を確認して下さい。

対局開始ウィンドウの設定は以下の通りです。

  1. 持ち時間:持ち時間を使用するときは秒読みを0にして下さい。
  2. 秒読み:秒読みを使用するときは持ち時間を0にして下さい。
すなわち、持ち時間と秒読みのどちらか一方が有効です。(この仕様は将来変わる可能性があります)

[設定]ウィンドウでの注意事項は以下の通りです。

  1. Threads : 実コア数を指定して下さい。HyperThreadingは効果ありません。
  2. Hash : 思考時間が短いときは512、長いときは1024と指定して下さい。(単位:MB)
  3. Ponder : 現在の仕様では予測読みは設定に関係なく無効です。


USI将棋のエンジン設定例

9. プチ将棋での設定法

[ツール]→[エンジン管理]メニューの設定方法は以下の通りです。

  1. エンジン名:gpsfish (何でも構いません)
  2. 実行プログラム:gpsfish.exeを選択して下さい。
  3. プロトコル:"USI"を選択して下さい。
対局開始ウィンドウでの設定法は以下の通りです。
  1. 引数:不要
  2. 持ち時間:持ち時間を使用するときは秒読みを0にして下さい。
  3. 秒読み:秒読みを使用するときは持ち時間を0にして下さい。
  4. 予測読み:現在の仕様では設定に関係なく無効です。
  5. スレッド数:実コア数を指定して下さい。HyperThreadingは効果ありません。
  6. ハッシュ:思考時間が短いときは512、長いときは1024と指定して下さい。(単位:MB)
  7. 投了値:無効
  8. 定跡最長:無効
すなわち、持ち時間と秒読みのどちらか一方が有効です。(この仕様は将来変わる可能性があります)

10. 将棋所での設定法

[対局]→[エンジン管理]メニューの[追加]をクリックし、gpsfish.exeを選択して下さい。

[対局]ウィンドウの対応状況は以下のようになります。

  1. 相手の手番中に先読み:現在の仕様では設定に関係なく無効です。
  2. ハッシュメモリ:ここの値を使用せず、[エンジン設定]の値を使用します。
  3. 持ち時間:持ち時間を使用するときは秒読みを0にして下さい。
  4. 秒読み:秒読みを使用するときは持ち時間を0にして下さい。
すなわち、持ち時間と秒読みのどちらか一方が有効です。(この仕様は将来変わる可能性があります)

[エンジン設定]ウィンドウの対応状況は以下のようになります。

  1. Threads:実コア数を指定して下さい。HyperThreadingは効果ありません。
  2. Hash:思考時間が短いときは512、長いときは1024と指定して下さい。(単位:MB)
  3. Ponder:現在の仕様では設定に関係なく無効です。
  4. OwnBook:OFFにすると初手から定跡を使用しません。
gpsfishは上記以外にたくさんのオプションを持っていますが、 将棋所はオプション名にスペースを含むものは無視します。


将棋所のエンジン設定例

トップページへ