使い方
(準備中)
これは何? †
USIプロトコルに対応したプログラムを少し改変したクライアントをsshで複数起動して、手分けして探索を行うための枠組み。
参考:
準備 †
推奨環境: (vmware等でも可) †
- Ubuntu 10.04 以降
- Debian squeeze 以降
- それ以外の場合
- perl v5.10.1 以降 (usi.plを動かす機器1台のみ)
- ソースコードからビルドする場合はthreadを有効にする必要あり
- gpsusi をコンパイルできる環境(g++4.3以降推奨、boost 1.38以降推奨)
GPS将棋(gpsusi)の準備 †
- ツールのインストール
sudo apt-get install g++ libboost-xxx.dev (xxxは可能なパッケージで一番新しいもの) libcppunit-dev
- ダウンロード
- おまじない
(cd osl; ln -s ../gpsshogi/data)
- コンパイル (逐次版)
n=コアの数
(cd osl/lib/third_party/tcmalloc-0.93; make -j $n)
(cd osl/release; make -j $n)
(cd gpsshogi/bin; make -j $n gpsusi RELEASE=t)
- 実行
./gpsshogi/bin/gpsusi --benchmark
ステップ1: gpsusiを用いた分散探索 †
- cd gpsshogi/sample/perl-cluster
- config を編集 (config.sample あり)
- #がコメント
- 1行目が、定跡や合法手生成等の思考以外の機能のためのコマンド
- 2行目以降に思考を行うslaveの指定 (速さが異なる場合は速い順を想定)
たとえば、 /path/to/gpsusi を3行ほど書いておくと、2並列で探索します。
- 起動 ./usi.pl -c config:
usi.pl が(一部の機能のみに対応した)USIエンジンとしてふるまいます
usi
isready
position startpos
go infinite
stop
quit
等
- debug
- log 以下に、各slaveとのやりとりの記録がファイルに残されます。
- サーバのログはstderr に出ますが、一部は log/job_queue.txt に書かれます。(ファイル名は歴史的なもので内容はqueueとは関係ありません)
- io-0.txt が雑要用のスレーブの入出力。io-1.txt 移行が探索用スレーブの入出力。
ステップ2: 探索部分を自作プログラムに置き換える †
configの1行目をgpsusiにしたまま2行目以降を自作プログラムを指定すると、基本的に自作プログラムでの探索となる。ステップ1で動かした時のio-1.txtと同じ文法で応答できればOK.
対応が必要な入力:
- position USI通り
- stop がいつ来ても複数来ても対応する (bestmoveとgoの回数を比較して、goの方が多い場合だけ止まる)
- echo 文字列:
に対して、渡された文字列を標準出力に出力する (keep aliveやログの区切りのため)
探索中でも応える必要がある。応答が2.5秒遅れると通信が切れたとみなされて探索から切り離される。
他のinfo pv等の出力と途中で混ざらない用な仕組み(例えばロック)が必要
- ignore_moves 文字列:
文字列で渡された指手を無視して探索する。ignore_moves 7g7f 2g2f などのように指し手が複数の場合は空白で区切られて一行で表現される。
position の指定の後に最大一回与えられる。
新たなpositionを与えられたり一度goが行わればその後は無効。
- go byoyomi msec:
msecミリ秒だけ探索して、bestmoveを返す。bestmoveを返す前にinfo pvを出力する。また、合法手が一手だけでも、探索して評価値を出力する必要がある。
- go infinite:
stopが来るまで探索する。
- go mate msec:
msecミリ秒だけ詰みを探索し、checkmate を返す (現在のusi.plでは未使用)
対応しない場合は常に checkmate nomateを返せばよい。
期待される出力:
- info
- bestmove move
- moveは最善手。何を指しても詰みの時と、合法手がない時はresign
ステップ3: すべてを自作プログラムに置き換える †
configの1行目を置き換えると、gpsusiを完全に排除した分散探索となる。1行目の担当は、定跡、合法手生成、勝ち宣言など。ステップ1で動かした時のio-0.txtと同じ文法で応答できればOK.
使い方 †
問題を解く †
./usi.pl -f problems/001.usi
shogi-server でyowai_gpsと対戦 †
./csa2usi.pl --csa_host wdoor.c.u-tokyo.ac.jp --usi_engine "./usi.pl" --csa_id your_name --csa_pw yowai_gps-1500-0 --sec_limit=1500 --sec_limit_up=0
- 歩の値を1000にした場合は--pawn_value=1000等
- 読み筋をサーバに送らない --nosend_pv
その他 †
(後日記述追加予定)