2014年1月4日土曜日

メカ女子将棋ソースコードとインストール方法について(捕捉)

メカ女子将棋のソースコードをGitHubに公開したのですが、実際に将棋を指させるまでには幾つか準備が必要です。本日はドキュメント不足だったメカ女子将棋のリポジトリについて、さらには将棋が指せるようになるまでの準備について、ブログエントリに纏めさせて頂きます。

まず、アカウントkimrinのGitHubにJapaneseChessとWCSC23という二つのリポジトリがありますが、通常はWCSC23の方を使ってください。JapaneseChessの方はバグがあるのと、WCSC23よりも弱いこともあり、お勧めできません。。。

基本的にコンピュータ将棋エンジン(プログラム)を将棋所というソフトに登録して使うのですが、いまのところLinuxとMac+Linuxの環境でしか動作実績がありません。
まずはLinuxで動かしてみることをお勧めします。Windowsでも是非動かしたいので、その辺今後対応していきたいと思います。まずは64bit Ubuntuでの動作について説明したいと思います。

Linuxでの将棋所の動作のために、まずmonoというフレームワークをインストールします。これはwindowsの.NETフレームワークに相当するもので、将棋所のLinuxでの動作をサポートするものです。Ubuntuならapt-getなどで入れてください。

さて、将棋所はインストール出来たでしょうか。mono Shogidokoro.exeとターミナルに入れて起動してみてください。

ここからが本番です。将棋所にメカ女子将棋をエンジン登録して使うのですが、登録方法が2種類あります。一つはエンジンの一部をコメントアウトして登録し、実際の対戦ではそのコメントアウトを再び復活させて動かす方法が一つです。

二番目の方法はsocketというコマンドを使う方法です。この方法はクラウドサーバーを使うために新たに開発しました。今日はこの二番目、socketプログラムを使うやり方をご説明します。

まずLinuxマシンにJuliaをインストールします。最新のUbuntuならapt-getできますが、Juliaのリポジトリの更新スピードはかつてないほど早いので、1ヶ月でもう過去のものになります。今後のために、JuliaはGitHubから落とした最新コードでビルドすることをお勧めします。

基本的にgit cloneしてソースコードを落としてきて、直下でmakeします。
configureはありません。なおビルドに際してgfortranなどが必要になります。makeが中断したら何が必要か確認してapt-get、再びmakeの繰り返しで進んでください。なお一部最新CPUではMakefileの修正が必要になる場合があります。あとAVXインストラクションを持たないアーキテクチャではワーニングが出るようになります。


makeして直下にjuliaファイルができたら、$ ./julia してみてください。プロンプトが出ればJuliaのインストールは完了です。早速WCSC23リポジトリをcloneして動かしてみましょう。

WCSC23/Juliaディレクトリで、$ ./Main.jl してみます。何も出なければ多分動いています。エラーが出る場合は何らかの修正が必要です。

なおBonanzaさんのfv.binをWCSC23ディレクトリ直下に置きます。

ここで、ERROR: type: typeassert: expected Array{(Any...,),2}, got Array{(Int64,Int64),2}
が出る場合、BitBoard.jl:39
を、次のように修正してください。
修正前(BitBoard.jl:39)
]::Array{(Any...,),2}
修正後(BitBoard.jl:39)
]::Array{(Int64,Int64),2}
おそらくJulia0.2以降でこのエラーのでる可能性があります。

./Main.jl して10秒以上待っても何も出なくなったら、
次を実行してみてください。

cat inputgame | ./Main.jl

ずらずらと文字が出て、bestmove 9g9fのような表示がでれば
エンジン自体は動作しています。

次にエンジンの登録方法です。

Juliaディレクトリに、4091.sh と 4091.regist.sh という二のシェルスクリプトがあると思います。4091.sh を4091.sh.hozonとしてコピーし(名前は何でもいいです)、4091.regist.shを4091.shにコピーして、将棋所に登録します。

登録できたら万々歳です。

次にsocketというプログラムをインストールします。apt-getでインストールしてください。

登録できたら、4091.sh.hozonを4091.shに上書きします。まだこの時点ではエンジンは動きません。

このsocket(1)プログラムは標準入出力をsocketにつなぐソフトです。サーバー、クライアント両方の動作をすることが可能で、まず登録エンジン側にクライアントを、それとは別にサーバーを立てて、サーバーにMain.jlを接続して登録エンジンの入出力をMain.jlの入出力につなぎます。

具体的にはWCSC23/Julia ディレクトリで下記コマンドを実行します。

 $ socket -sqv -p ./Main.jl 4091

すると4091ポートをlistenし始めます。ここではサーバークライアント接続のために4091ポートを使うことにします。

その上で先ほど登録したエンジンを動かしてみてください。おそらく将棋が指せるようになると思います。

サーバーの接続は1戦ごとに切れます。まずサーバーを再び起動してから、将棋所でゲームを起動してみてください。

Macにsocketをインストールすれば、Macでも将棋所を使って対戦できます。また4091.shのlocalhostのところを書き換えれば、将棋所を動かしているマシンとは別のマシンでエンジンを動作させることができます。これがクラウドサーバー対応となります。


色々不備のある状態でソースコードを公開してしまったこと、反省しております。
申し訳ありませんでした。

引き続きこのブログエントリで質問して頂ければ、可能な限り質問にお答えして行きたいと思います。

以上です。

















3 件のコメント:

  1. あ、設定できましたありがとうございます。

    返信削除
  2. おお、よかったです。こちらこそありがとうございますー。

    返信削除
  3. ありがとうございました。自分なりに手順をまとめてみました。

    http://cointoss.hatenablog.com/entry/2014/01/07/091312

    返信削除