LoginSignup
1
1

More than 5 years have passed since last update.

コンピュータ将棋対局サーバー設置マニュアルを書こう<本番編>

Last updated at Posted at 2017-03-25

関連記事 : 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
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1