将棋ウォーズで遊ぶ

将棋ウォーズで遊ぶ

将棋ウォーズの棋譜を解析する

Amebaでブログを始めよう!
えーと.

毎月の利用料金を払わないと利用できないウェブサービスがあって
一か月だけ契約して,そのあいだにクローラースクリプトを書いて
根こそぎダウンロードしようなんて言うあさましいことを考えていたのだけど,
いざスクリプトを書いてログインしようとすると,IDかパスワードが違うとか
何故かそんなことを言われて蹴られる.
パケットを解析すれば何が原因か分かるだろうとか思っても,SSLで暗号化されててさっぱり.

小一時間悩んで諦めかけたところで,FireFoxのScrapBook AddOnを発見.
リンクをたどってページを根こそぎとってきて保存してくれるアドオンだ.
ログイン情報もブラウザのものを使ってくれるので,やりたかったことができる.

さっそく使ってみると非常に快調.

でも,リンクをたどるページの選択のフィルタリングに正規表現は対応していないみたい.
ちょっと手を加えると対応させることが可能なようなのでやってみました.

この記事は,そのための(自分用の)メモです.

まずScrapBook AddOn. この記事を書いている時点ではversion 1.5.9 です.
https://addons.mozilla.org/ja/firefox/addon/scrapbook/

インストールするとアドオン本体は以下のフォルダに格納されている.
%UserProfile%\AppData\Roaming\Mozilla\Firefox\Profiles\[なんか文字列]\extensions

{53A03D43-5363-4669-8190-99061B2DEBA5}.xpi というのがScrapBook AddOnらしい.
xpiという拡張子がついているけど中身はただのzipファイルらしい.

アーカイバで解凍したら,
\chrome\locale\ja\scrapbook\capture.dtd を開いて次の1行を追加
<!ENTITY sb.save.filter.regexp "正規表現でフィルタ...">

同じフォルダの capture.properties にも次の1行を追加
FILTER_BY_REGEXP=入力した正規表現にマッチするURLのみに制限されます。

\chrome\content\scrapbook\cache.xul にも以下の1行を適切な場所に追加(前後を見ればだいたいどこに追加するかは分かるはず).
<menuitem type="radio" label="&sb.save.filter.regexp;"   oncommand="sbCaptureTask.applyFilter('R');" />

同じフォルダのcapture.js にも applyFilter とか書かれている辺りに以下を追加.
case "R" : 
var ret = { value : "" };
if ( !ScrapBookUtils.PROMPT.prompt(window, "[ScrapBook]", this.STRING.getString("FILTER_BY_REGEXP"), ret, null, {}) ) return;
if ( ret.value ) this.filter = function(i){ return gURLs[i].toLowerCase().search(ret.value) != -1; };
break;

書き換えたら再び元通りにzipで圧縮して,拡張子をxpiにしてからextensionフォルダに戻してやる.
これで正規表現でフィルタリングできるようになる.
あまり評判がよくないというのは承知の上で購入.
細かい設定を変えて遊べそうなのかどうなのかを調べてから決めようかと思っていたのですが,
回収・返品の話も出ているようで,もう入手が困難になるのではないかと思って決断しました.
こういう展開だと,来年とかに新しいバージョンが出るかも怪しいですしねぇ.

さて,CD-ROMを挿入すると msiファイルが一個あるだけという意外な構成.
エンジン以外は値段相当の価値がないとの評判なので,インストーラーを起動するのは最後の手段に取っておいて,
VirtualBOX上のWinXP環境にインストール.インストール自体は問題なく終了.

さて,気になるのはエンジンです.
engineフォルダには eng-server2x86.exe と Ponanza18x86.exe の二つのファイルがあります.
恐らく eng-server2x86.exe が GUI と Ponanza18x86.exe の中継をしているのでしょう.


eng-server2x86.exe のプロパティを見ると Exerb で作られていることが分かります.
ExerbっていうのはRubyスクリプトをexeファイルに変換するという有難いツールです.
exerbで変換したexeにはrubyのソースがそっくり埋め込まれているので,ちょっと一部を見てみましょう.

$engine = IO.popen("Ponanza18x86.exe", 'r+')
#Dir.chdir("C:\\proj\\PonaX\\tool\\PonanzaQuartette\\PonanzaQuartette\\bin\\Release")
#$engine =IO.popen("C:\\proj\\PonaX\\tool\\PonanzaQuartette\\PonanzaQuartette\\bin\\Release\\PonanzaQuartette.exe", 'r+');
#Dir.chdir("C:\\proj\\PonaX\\tool\\Shogidokoro\\bonanza_v6.0\\winbin")
#$engine = IO.popen("C:\\proj\\PonaX\\tool\\Shogidokoro\\bonanza_v6.0\\winbin\\u2b.exe", 'r+');

コメントアウトされてますけど,PonanzaQuartette とか Shogidokoro\\bonanza_v6.0 とかでテストした跡が見えますね.

あとソースコードは省略しますが,
eng-server2x86.exeは9999番ポート(決め打ち)を開いてHTTPサーバを立てて
GUIからPOSTで送られてきたメッセージをそのままPonanza18x86.exeの標準入力に送り,
Ponanza18x86.exeの標準出力はGETでアクセスすると取得できるようになっているようです.
珍しい処理の仕方だと思います.

さて,Ponanza18x86.exeを起動してみます.



残念.XPでは起動しないようです.

らちが明かないので,観念して実環境のWindows7でPonanza18x86.exeを起動することにして,コマンドラインから弄ってみます.

\resources\engine>Ponanza18x86.exe
usi
id name Ponanza18.0[x86]
id author issei yamamoto and aki.
usiok

本来ならここに設定可能なオプション項目が並ぶのですが,オプション設定が何もありません.

GUIで強さの設定ができるそうなので,設定項目があるはずだと信じていたのですが,
USI_Ponder(先読み設定)とUSI_Hash(ハッシュの大きさ)くらいしかバイナリを見ても見つかりません.

また,isreadyコマンドを打った時に下のように定跡ファイルの読み込みに一部失敗している感じがします.
なくてもいいファイルなのかもしれないですが.

isready
info string cannot open D:\vhd\ponax2\PonaX\resources\engine/../../resources/FORCE_BLACK_BOOK.txt
info string cannot open D:\vhd\ponax2\PonaX\resources\engine/../../resources/FORCE_WHITE_BOOK.txt
info string open D:\vhd\ponax2\PonaX\resources\engine/../../resources/BOOK
readyok

と,ここで初期不具合のバージョンアップしていなかったのを思い出して,公式からダウンロードしたパッチをあてました.
更新内容にPonanza18x86.exeが含まれています.パッチあてた後とあてる前とでファイルサイズが450kbyteから772kbyteに変わっています.
でも,何がどう変わったのかはわかりません.

さて,PonaXを起動してみると,メイン画面と同時になぜかコマンドプロンプトも立ち上がります.
コマンドプロンプトで起動しているのは eng-server2x86.exe ですね.少しかっこ悪いです.

対局中のやり取りが分かるようにeng-server2x86.exeを弄ってみましょう.
eng-server2x86.exe の Ruby のソースのコメントアウト部分を二か所ほど外してやるとよさそうです.
具体的にはバイナリの 0x00089F37 と 0x0008A0E7 のアドレスの場所を # から 半角スペースに上書きしてやればいいです.

その結果,強さ変更の秘密は,探索時のノード数と思考時間を調整しているだけということが分かりました.
前回の電王戦のときに,MultiPVがどうのと言っていたのでランダマイズで弱くしていることに淡い期待を抱いていたのですがそうではないようです.
しかも,R10からR1190までは,思考コマンドはgo nodes 500 byoyomi 30000であり,設定が変わらないので同じ強さであるということが分かります.
それ以降のレベルにおいてもレートが200上がるごとに設定が変わるので,R10毎に強さが変わるように見えて実はR200刻みです
これはかなり詐欺っぽい印象を受けます.いや,気づいてないだけで隠された設定がまだあるのでしょうか?

ちなみにPonaX R10 と PonaX R1190を対戦してみたら PonaX 10 が勝ちました.
やっぱり強さ変わってないんじゃないですかね.

結論

GUIが悪いのはもう敢えていう必要はないですが,Ponanzaの思考エンジンに
値段相応の価値があるかどうかという点について言うと,私はないと思います.
確かに,Ponanzaエンジンは強いですが,対局に使うならフリーソフトでも十分すぎるくらいに強いです.
しかし,自分の棋譜の検討に使うなら,候補手を複数表示する機能のないponanzaはそれほど魅力がありません.
最善手の変化が踏み込むには怖かったり棋風でなかったりしたときには,提示された手は参考にはなりません.
激指には最善手,次善手と表示してくれる機能がありますが,フリーのBonanzaやgpsfishにもMultiPVの機能
(複数の候補手をいいものから順に列挙する機能)があります(対応してないGUIが多いのであまり有効に使われていないと思いますが).
Ponanzaはプロ同士の観戦のお供にはなりそうですが,自身の棋譜の検討では有効とはいえず個人的にはあまり評価できません.
やはり値段相応の買い物ではないと思います.