関連記事 : http://qiita.com/muzudho1/items/a60074642bd452d4f089
基本情報
システム名 | 英字表記 |
---|---|
指し手1秒 | sasite1s |
手順
% sudo su -
このあと、パスワードを入力すること。
以後、ルート・ユーザーで作業していると想定する
手順
# do-release-upgrade
手順
# sudo apt-get install language-pack-ja
ここで日本語化する。下記の説明で 英語で書かれているものも、画面には日本語で表示されることがある。
次のコマンドは失敗すると思うが、失敗しても次へ進むこと。
# sudo update-locale LANG=ja_JP.UTF-8
手順
# cd /root
# git clone https://★ユーザ名@bitbucket.org/★チーム/sasite1s_run.git
このあと、パスワードを入れること。
(チームメンバーなら、これで git からダウンロードできるらしい)
手順
# cd /usr/games/sasite1s/ukamuse_sdt4_sasite1s/bin
# chmod 775 apery
チェック
# ls -l
apery のパーミッションが「-rwxrwxr-x」になっていること。
手順
# mv Sasite1s_Run/usr/games/sasite1s /usr/games/sasite1s
# mv Sasite1s_Run/var/www/html/sasite1s /var/www/html/sasite1s
# rm -rf Sasite1s_Run/
手順
# apt-get install apache2
# sudo apt-get install php-curl
# sudo apt-get install curl
# sudo apt install php7.0-bcmath
# apt install unzip
# sudo service apache2 restart
# curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
# apt-get -y install php php-cgi libapache2-mod-php php-common php-pear php-mbstring
# apt-get -y install expect
# sudo apt-get update
# sudo apt-get install libev-dev
sudo apt-get update
sudo apt-get install rabbitmq-server
gpg --keyserver pgpkeys.mit.edu --recv-key 7638D0442B90D010
gpg -a --export 7638D0442B90D010 | sudo apt-key add -
wget -O- https://packages.erlang-solutions.com/debian/erlang_solutions.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install init-system-helpers socat esl-erlang
wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install rabbitmq-server
sudo apt-get install git
# git config --global user.name "★User Name"
# git config --global user.email "★hoge@hoge.com"
# git config --global core.quotepath false
ダブルクォーテーションの内側に、ユーザー名、メールアドレスを入れること。
手順
# sudo apt install g++
チェック
# g++ --version
バージョン 5.4.0-6 以上が入っていること。
手順
# cd /root
# git clone git://github.com/CopernicaMarketingSoftware/AMQP-CPP.git
# cd AMQP-CPP
# make
# make install
手順
# sudo apt-get install git autoconf libtool automake build-essential mono-devel gettext cmake
チェック
mono --version
バージョンが 4.2.1 以上ならOK。
手順
# cd /etc/php/7.0/cli
# ls
conf.d php.ini
php.ini があることを確認する。
# cp php.ini php.ini.original
# ls
conf.d php.ini php.ini.original
php.ini ファイルがあり、php.ini.original が増えていることを確認する。
手順
これから、php.ini ファイルの編集を開始する。
# nano php.ini
使いやすいテキスト・エディタを使うこと。
;;;;;;;;;;;;;;;;;
; Miscellaneous ;
;;;;;;;;;;;;;;;;;
と書いてある区画を探す。
expose_php = On
を
expose_php = Off
に変更。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Error handling and logging ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
と書いてある区画を探す。
;error_log = php_errors.log
を
error_log = /var/log/php_errors.log
に変更。
;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;
と書いてある区画を探す。
;mbstring.language = Japanese
は、頭のセミコロンを外し、
mbstring.language = Japanese
に変更する。
;mbstring.http_input =
は、
mbstring.http_input = auto
に変更する。
;mbstring.detect_order = auto
は、頭のセミコロンを外し、
mbstring.detect_order = auto
に変更する。
php.ini を保存して閉じる。
ここまでで php.ini ファイルの編集を終了した。
# sudo service apache2 restart
手順
# cd /var/www/html/sasite1s
これから composer.json ファイルを作成し、編集する。
# nano composer.json
使いやすいテキスト・エディタを使うこと。
composer.json ファイルに次のように記述する。
{
"require": {
"php-amqplib/php-amqplib": "2.6.*"
}
}
composer.json を保存して閉じる。
ここまでで composer.json ファイルの編集を終了した。
# composer install
手順
# rabbitmq-server
チェック
例えば、次のように表示される。
RabbitMQ 3.5.7. Copyright (C) 2007-2015 Pivotal Software, Inc.
## ## Licensed under the MPL. See http://www.rabbitmq.com/
## ##
########## Logs: /var/log/rabbitmq/rabbit@tk2-229-24163.log
###### ## /var/log/rabbitmq/rabbit@tk2-229-24163-sasl.log
##########
Starting broker... completed with 0 plugins.
手順続き
続いて、
[Ctrl] + [Z] キーで
でスリープ状態にし、RabbitMQ から抜ける。
続いて次のように打鍵。 1 は RabbitMQ のジョブ番号を入れること。
bg 1
これで RabbitMQ をバックグラウンドで走らせておく。
手順
# cd /var/www/html/sasite1s
# php tamesi38a1.php
チェック
# rabbitmqctl list_exchanges
Listing exchanges ...
direct
amq.direct direct
amq.fanout fanout
amq.headers headers
amq.match headers
amq.rabbitmq.log topic
amq.rabbitmq.trace topic
amq.topic topic
myexchange direct
「myexchange direct」が含まれていればOK。
手順
# cd /usr/games/sasite1s/ukamuse_sdt4_sasite1s/bin
# ./apery --enqueue From_UkamuseSdt4_Sasite1s durable --dequeue To_UkamuseSdt4_Sasite1s durable autodelete > ./apery.out.log 2> ./apery.err.log < /dev/null &
チェック
# ps aux | grep apery
root 1616 0.2 37.6 1613548 382140 pts/0 Sl 3月25 0:13 ./apery --enqueue From_UkamuseSdt4_Sasite1s durable --dequeue To_UkamuseSdt4_Sasite1s durable autodelete
root 3303 0.0 0.1 14264 1060 pts/0 S+ 00:02 0:00 grep --color=auto apery
また、端末からログアウトしていなければ
# jobs
で確認し、
./apery が1つだけ Running (実行中)になっていることを確認する。
端末からログアウトしたあとは、jobs では見えない。
手順
# cd /usr/games/sasite1s
# mcs /r:RabbitMQ.Client.dll -define:UBUNTU tamesi34_cs.cs
# ./tamesi34_cs.exe
以下、文字化けしていたが説明を続ける。
???????????????????????????????(^~^)
Name : ?????????
"" + [Enter] : ?????????
ex.) BrokenBox
Delete ? >
Delete ? と聞かれたら 何も打ち込まず [Enter]キーを押す。
??????????????????????????(^~^)
ex.) SunnyBox
Enqueue ? > To_UkamuseSdt4_Sasite1s
Enqueue ? と聞かれたら 「To_UkamuseSdt4_Sasite1s」と打ち込んで [Enter]キーを押す。
????????????????????????????????(^~^)
(1) durable : RabbitMQ????????????
(2) autodelete : ????????1??????????????
(4) passive : ?????????????????????????????
(8) exclusive : ??????????????????????
ex.) 3
Enqueue ? > 3
もう一度 Enqueue ? と聞かれたら 「3」と打ち込んで [Enter]キーを押す。
?????????????????????????(^~^)
ex.) RainyBox
Dequeue ? > From_UkamuseSdt4_Sasite1s
Dequeue ? と聞かれたら 「From_UkamuseSdt4_Sasite1s」と打ち込んで [Enter]キーを押す。
???????????????????????????????(^~^)
(1) durable : RabbitMQ????????????
(2) autodelete : ????????1??????????????
(4) passive : ?????????????????????????????
(8) exclusive : ??????????????????????
ex.) 1
Dequeue ? > 1
もう一度 Dequeue ? と聞かれたら 「1」と打ち込んで [Enter]キーを押す。
21:34:03 610 34_cs ___(C) start begin
21:34:03 616 34_cs ___(C) consumer.create begin
21:34:03 616 34_cs ___(C) consumer.create end
21:34:03 617 34_cs ___(C) channel.open begin
21:34:03 617 34_cs ___(C) connection.open begin
21:34:03 766 34_cs ___(C) connection.open end
21:34:03 771 34_cs ___(C) channel.open end
21:34:03 773 34_cs <-------- [interrupt!] Registered(^q^)
21:34:03 773 34_cs ___(C) start end
21:34:03 773 34_cs (P)___ waitRegistered begin
21:34:03 773 34_cs (P)___ waitRegistered end
???????[Ctrl]+[C]????????(^~^)
?????????????????????[Enter]????????(^?^)
ex.) hello, world
Enqueue? >
「<-------- [interrupt!] Registered(^q^)」といった割込みがどこかに入っていることを確認する。
Enqueue? と聞かれたら 「usi」と打ち込んで [Enter]キーを押す。
usi
次はレスポンス。
21:34:07 906 34_cs (P)___ enqueue begin [usi]
21:34:07 906 34_cs (P)___ channel.open begin
21:34:07 906 34_cs (P)___ connection.open begin
21:34:07 915 34_cs (P)___ connection.open end
21:34:07 917 34_cs (P)___ channel.open end
21:34:07 922 34_cs (P)___ enqueue end
21:34:07 922 34_cs (P)___ connection.close begin
21:34:07 923 34_cs (P)___ channel.close begin
21:34:07 927 34_cs (P)___ channel.close end
21:34:07 931 34_cs (P)___ connection.close end
Enqueue? > 21:34:07 945 34_cs <-------- [interrupt!] Dequeue(^q^) id name ukamuse_SDT4
id author Hiraoka Takuya
option name Best_Book_Move type check default false
option name Book_File type string default book/20150503/book.bin
option name Byoyomi_Margin type spin default 500 min 0 max 2147483647
option name Clear_Hash type button
option name Draw_Ply type spin default 256 min 1 max 2147483647
option name Engine_Name type string default ukamuse_SDT4
option name Max_Book_Ply type spin default 32767 min 0 max 32767
option name Max_Random_Score_Diff type spin default 0 min 0 max 32600
option name Max_Random_Score_Diff_Ply type spin default 32767 min 0 max 32767
option name Min_Book_Ply type spin default 32767 min 0 max 32767
option name Min_Book_Score type spin default -180 min -32601 max 32601
option name Minimum_Thinking_Time type spin default 20 min 0 max 2147483647
option name Move_Overhead type spin default 30 min 0 max 5000
option name MultiPV type spin default 1 min 1 max 594
option name OwnBook type check default true
option name Slow_Mover type spin default 89 min 1 max 1000
option name Slow_Mover_10 type spin default 10 min 1 max 1000
option name Slow_Mover_16 type spin default 20 min 1 max 1000
option name Slow_Mover_20 type spin default 40 min 1 max 1000
option name Threads type spin default 2 min 1 max 256
option name Time_Margin type spin default 4500 min 0 max 2147483647
option name USI_Hash type spin default 256 min 1 max 1048576
option name USI_Ponder type check default true
usiok
ここまで流れてくる。
途中で Enqueue? と聞かれたタイミングで「id name ukamuse_SDT4」~「usiok」まで書かれた長文が割り込んでくることを確認する。
このタイミングで setoption を送ることで、思考時間の設定などができる。
説明は この記事の下に付録として付けた。
次の文字列を打ちこみ、[Enter]キーを押す。
isready
時間がかかるので、10秒~20秒ぐらい待っていること。
21:34:55 055 34_cs (P)___ enqueue begin [isready]
21:34:55 056 34_cs (P)___ channel.open begin
21:34:55 056 34_cs (P)___ connection.open begin
21:34:55 062 34_cs (P)___ connection.open end
21:34:55 063 34_cs (P)___ channel.open end
21:34:55 064 34_cs (P)___ enqueue end
21:34:55 064 34_cs (P)___ connection.close begin
21:34:55 064 34_cs (P)___ channel.close begin
21:34:55 065 34_cs (P)___ channel.close end
21:34:55 065 34_cs (P)___ connection.close end
Enqueue? > 21:35:05 046 34_cs <-------- [interrupt!] Dequeue(^q^) readyok
「readyok」が割り込んできたらOK。
次の文字列を打ちこみ、[Enter]キーを押す。
usinewgame
21:36:07 541 34_cs (P)___ enqueue begin [usinewgame]
21:36:07 557 34_cs (P)___ channel.open begin
21:36:07 563 34_cs (P)___ connection.open begin
21:36:07 859 34_cs (P)___ connection.open end
21:36:07 864 34_cs (P)___ channel.open end
21:36:07 865 34_cs (P)___ enqueue end
21:36:07 865 34_cs (P)___ connection.close begin
21:36:07 865 34_cs (P)___ channel.close begin
21:36:07 882 34_cs (P)___ channel.close end
21:36:07 892 34_cs (P)___ connection.close end
Enqueue? >
Enqueue? と聞かれたら 次の文字列を打ち込んで [Enter]キーを押す。
position sfen lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b - 1 moves
21:36:42 006 34_cs (P)___ enqueue begin [position sfen lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b - 1 moves]
21:36:42 006 34_cs (P)___ channel.open begin
21:36:42 006 34_cs (P)___ connection.open begin
21:36:42 061 34_cs (P)___ connection.open end
21:36:42 070 34_cs (P)___ channel.open end
21:36:42 070 34_cs (P)___ enqueue end
21:36:42 071 34_cs (P)___ connection.close begin
21:36:42 071 34_cs (P)___ channel.close begin
21:36:42 072 34_cs (P)___ channel.close end
21:36:42 073 34_cs (P)___ connection.close end
Enqueue? >
Enqueue? と聞かれたら 次の文字列を打ち込んで [Enter]キーを押す。
go
21:36:45 053 34_cs (P)___ enqueue begin [go]
21:36:45 054 34_cs (P)___ channel.open begin
21:36:45 054 34_cs (P)___ connection.open begin
21:36:45 081 34_cs (P)___ connection.open end
21:36:45 084 34_cs (P)___ channel.open end
21:36:45 084 34_cs (P)___ enqueue end
21:36:45 084 34_cs (P)___ connection.close begin
21:36:45 084 34_cs (P)___ channel.close begin
21:36:45 085 34_cs (P)___ channel.close end
21:36:45 087 34_cs (P)___ connection.close end
Enqueue? > 21:36:45 679 34_cs <-------- [interrupt!] Dequeue(^q^) bestmove 2g2f
割り込んでくる文字列は 異なることがあるが、 bestmove が含まれていればOK。
手順
ブラウザで、次のURLにアクセスすること。
http://★サイトアドレス/sasite1s/ukamuse_sdt4.php?sfen%20lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL%20b%20-%201%20moves
初回の2、3回は ページの表示までに時間がかかることがある。
1秒~10秒ほど待って、bestmove を含む文字列が返ってくればOK。
以上。
付録: setoption について
将棋エンジンから usiok が返ってきたあと、isready をこちらから送るまでに、
次の任意の setoption を、1つずつ連続して送ることができる。
Aperyに対し一方的に送り付ける段階なので、受け取ったかどうか確認できるような 応答は返ってこない。
ハッシュ・サイズ。一度探索した局面を覚えておくなどして、局面が合流したときの探索を省くなど有利にする。1台のPCでコンピュータ将棋だけを行う場合、PCのメモリサイズの2分の1 を設定しておくと良い。
setoption name USI_Hash value 256
setoption name Clear_Hash value ★?
Apery の定跡ファイルを置くディレクトリ。
setoption name Book_File value book/20150503/book.bin
setoption name Best_Book_Move value false
setoption name OwnBook value true
setoption name Min_Book_Ply value ★?
setoption name Max_Book_Ply value ★?
setoption name Min_Book_Score value -180
相手の手番のときに考えるなら true。 Sasite1sでは false にしておいた方がいいのでは。
setoption name USI_Ponder value true
持ち時間に対し、思考を早めに切り上げる時間をミリ秒で指定する。通信遅延による切れ負けに対策したいときに使う。
setoption name Time_Margin value 500
setoption name Byoyomi_Margin value 500
setoption name Time_Margin value 4500 ※なんで同じ項目が2個あるんだ?
次善手も探索したいときは 2 にする。三次善手を調べたいときは 3 にする。
最善手を探す時間を ワリカン して次善手、三次善手を探すので、数字を大きくすると 最善手を読む時間が減る。プロ棋士の研究を外すよう 指し手をばらけさせたい時などに使う。指し手をばらけさせるだけが目的なら、思考時間をランダムにした方が弱体化するコストが少ない。
setoption name MultiPV value 1
setoption name Max_Random_Score_Diff value 0
setoption name Max_Random_Score_Diff_Ply value ★?
setoption name Slow_Mover_10 value 10 ※持ち時間15分, 秒読み10秒では10, 持ち時間2時間では3にした。(sdt4)
setoption name Slow_Mover_16 value 20 ※持ち時間15分, 秒読み10秒では50, 持ち時間2時間では20にした。(sdt4)
setoption name Slow_Mover_20 value 40 ※持ち時間15分, 秒読み10秒では50, 持ち時間2時間では40にした。(sdt4)
setoption name Slow_Mover value 89
何手目で引き分けとするかの数字。この手数に近づくと、時間切れしないように思考の時間管理を短くするようになる。256手を超えることを想定する場合、この数字を想定する数字に設定すること。
setoption name Draw_Ply value 256
指すのに 数ミリ秒かかるから、それも考慮して思考の時間管理を短くしよう、というもの。
setoption name Move_Overhead value 30
最小限使う 思考時間 と思われる。初期設定では 20ミリ秒。
setoption name Minimum_Thinking_Time value 20
setoption name Threads value ★CPUコア数を自動設定
付録: トラブルシューティング
// よく分からないときは再起動してやりなおすのが一番
# 浮かむ瀬を落とす
# ps aux | grep apery
root 437 0.7 62.7 1628028 638636 ? Sl Mar23 33:52 ./apery --enqueue From_UkamuseSdt4_Sasite1s durable --dequeue To_UkamuseSdt4_Sasite1s durable autodelete
root 1809 0.0 0.0 12936 984 pts/1 S+ 06:45 0:00 grep --color=auto apery
# kill 437
# アパッチ再起動
# sudo service apache2 restart
# 浮かむ瀬起動
# cd /usr/games/sasite1s/ukamuse_sdt4_sasite1s/bin
# ./apery --enqueue From_UkamuseSdt4_Sasite1s durable --dequeue To_UkamuseSdt4_Sasite1s durable autodelete > ./apery.out.log 2> ./apery.err.log < /dev/null &
# 対局開始設定
# /usr/games/sasite1s/tamesi34_cs.exe
・Delete は空文字列でEnter
・Enqueue は To_UkamuseSdt4_Sasite1s と 3。
・Dequeue は From_UkamuseSdt4_Sasite1s と 1。
・usi
・isready
10秒~20秒まち、readyok を待つ。
・usinewgame
・position sfen lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b - 1 moves
・go
これで bestmove が返ってきたらOK。
tamesi34_cs.exe は [Ctrl] + [C] で強制終了すること。
ブラウザでサイトにアクセス
http://★サイトアドレス/sasite1s/ukamuse_sdt4.php?sfen%20lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL%20b%20-%201%20moves