2014年1月29日水曜日

世界コンピュータ将棋選手権、参加費を納めていざ出陣!

先日郵便局にいってきまして、例の

第24回世界コンピュータ将棋選手権


の申し込みをして参りましたー。

メカジョさん(メカ女子将棋、@mechajyo)、ことしもGWに華麗に参戦の
予定です。皆様宜しくお願い致します。


ことしはかずさアークということで、まだ未知なる領域に興味津々なのですが、
今年も水面下で色々な動きが少しづつ始まっている模様ですね。

今年はNextGenMechajyoという新しいメカジョさんプログラム(Julia言語)を
投入できたらな〜と思っています。Stockfishさんを参考にして、chessプログラムを
まずは作って、そこから一気に将棋にもっていきたいな、と。


   Stockfish(chess,C++)  ->  
MechajyoChess(chess,Julia)  -> 
MechajyoShogi(Shogi,Julia)

考えていますが、そうはうまくいかないですよねー
(そうだそうだーw)

まぁあの、電王戦や去年の選手権に出したバージョンをちょこっと変えてだすだけかもしれず、いずれにしろ、生暖かいご支援を宜しくお願い致します。てへっ。

あ、あと英語でMechajyoさんの説明を書いた資料作ったら、Julialangな人達にRTや言及をされて、いい感じだったので英語ですが、恥ずかしいですが、リンク貼っときます。

http://www.slideshare.net/kimrinjp/mechajyo

以上現場からkimrinがお伝えしました。
ではねちゃお〜



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のところを書き換えれば、将棋所を動かしているマシンとは別のマシンでエンジンを動作させることができます。これがクラウドサーバー対応となります。


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

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

以上です。