2007年11月04日

最近知ったのですが、将棋の思考エンジンとそれ以外のソフトとの通信プロトコルとしてUSI(Universal Shogi Interface)というのがあるんだそうです。これはUCIというチェスのプロトコルを元にしていて、現在はまだ草案の段階だとのこと。囲碁ソフトの、GMPやGTPに相当するものですね。で、今回紹介する「将棋所」というソフトは、そのUSIに対応したGUIのフロントエンドです。非常に良くできてます。すごいです。

将棋所
http://www.geocities.jp/shogidokoro/

将棋所は普通の棋譜再生ソフトとしても使えますので、一般の人にも十分利用価値がありますが(駒や盤もとても美しい!)、先ほどのUSIに対応していたり、連続自動対戦ができるなど、将棋ソフトを開発している人にとって便利な機能がたくさんあります。

ということで早速、かなり無理やりにですが、自分の将棋プログラムもUSIに対応させてみました。と言ってもまだごく一部のコマンドしか話せませんが、一応「将棋所」を通して対局だけはできるようになりました。実は、今まで一度も自分のプログラムと自分自身が対戦したことがなかったのですが、このソフトのおかげでそれが可能に! 結果は自分の圧勝。プログラム弱すぎです。でもちょっと感動しました。「将棋所」にもともと入っているLesserkaiという思考エンジンとも対戦させてみましたが、これとはいい勝負です。どっちも弱いというよりおかしい・・・(笑)

話もどって最初のUSIですが、歩をP(PAWN)と表すのってどうでしょうか? PAWNは歩ではないし、歩はPAWNではないと思うのですが・・・ こういうふうにしておけば過去の遺産を引き継げる、ってこともあまりないような気がします。後、形勢をcp(centipawn)という単位で表すのにも少し違和感があります。チェスは駒得が絶対なのかもしれませんが(よくは知りません)、将棋はけっしてそうではありませんので・・・ 思考エンジンを作っている人たちも、内部で使っている数字をどう変換したものか困ってしまうと思います。しかし一番の問題は、このようなプロトコルが今までなかったことですね。これは大きな進歩です。特に、私みたいに何でもかんでも自分で作れるわけではない人間には、かなりありがたいです。

2007年05月12日

将棋プログラムを改良してみました。とりあえず、前のバージョンとの対局を先後替えて2局どうぞ。





大幅に、とはいいがたいですが、明らかに良くなったとは思います。改良した点を順番に上げていくと、まず、幅優先探索なMinMaxを、深さ優先探索なαβにしました。大した量のコードではないのですが、うまくイメージできず(頭があまり良くないので(笑))、かなりがんばって書き直しました。動いているんだからちゃんと実装できたと思うのですが、まだちょっと不安・・・ でもこれで何倍速くなったか分からないぐらい速くなってます。

それから、現在の局面が序盤なのか、中盤なのか、終盤なのかを考慮するようにしました。今までは中盤ぐらいに最適化していたので、あまりにも序盤の駒損が酷すぎでした。これをとりあえず入れるのはそれほど難しくはないですし、そもそももっと早くやっておかなければいけなかったのですが、実際やってみるとチューニングがなかなか難しく、今の時点でこれを入れて強くなったかどうかは不明です。でも、もう少し強くしたいのならば、どうせいずれは絶対必要ですからね!

あとはちまちまと高速化、チューニング、バグ取りなどです。信じられないようなバグが二三見つかってびっくりしました。よくあれで動いていたものです・・・ それからデバッグに関連してちょっと話がそれますが、うちのMinGWな環境では、コアダンプしなくてかなり困ってます。

ulimit -c unlimited

とかはしてるんですが、なぜ? しかたなくLinuxで動かしてコア吐いてもらいました。gdbって便利ですね。いろいろ勉強になります。

あと、今度からウェブでの棋譜再生にKiFLAというソフトを使うようにします。「FB将棋 for FLASH」もいいんですが、このソフトはデザインやサイズのカスタマイズがかなりいろいろできてすばらしい! アニメーションもなんだか面白いし(笑)。しかもだいぶ軽いような気がします。

KiFLA
http://homepage3.nifty.com/amihot/

デザインは、こんな感じにしてみました。

◆◆◆デザインの設定◆◆◆
&color_koma=0xffffdd ◇駒の色
&color_back1=0xffffff ◇HTMLの背景色
&color_back2=0x5a4a44 ◇テーブルの色
&color_ban=0xf0d070 ◇将棋盤の色
&color_tesuu=0xffffdd ◇手数の数字の色
&color_tesuu_back=0x201410 ◇手数の背景色
&color_btn=0xf6e8ac ◇ボタンの色
&color_btn_w=0x221810 ◇ボタンの文字の色
&koma_syotai=1 ◇駒の書体 [0]=明朝 [1]=ゴシック

このソフトは囲碁用もあって、そちらも同じく良さそうです。

2007年05月03日

今日5月3日から、第17回世界コンピュータ将棋選手権が開かれています。今日はすでに終わってますが一次予選、明日5月4日は二次予選で、あさっての5月5日が決勝です。ネットでも観戦できるので興味のある人は見てみてください。

第17回世界コンピュータ将棋選手権 ライブ中継
http://live1.computer-shogi.org/wcsc17/

コンピュータ将棋選手権ネット中継
http://computer-shogi-live.cocolog-nifty.com/

今日は一次予選ということで、すこし怪しい対局もあったようですが(笑)、まあなにもBonanzaだけが将棋ソフトではないので、これはこれで楽しかったですね。明日からはぐっと高度な戦いになりそうな予感。Bonanza、YSS、TACOSなどは決勝から出てきます。

2007年04月25日

ここ最近、将棋ソフトを作っていた関係で、Kifu for Windowsという棋譜管理ソフトに非常にお世話になっていました。

Kifu for Windows
http://homepage2.nifty.com/kakinoki_y/KifuwInt.htm

この手のソフトとしては、結構有名だと思いますし、機能に不満は全くないのですが、贅沢を言えばちょっと見た目が頼りない感じです。あまりきれいじゃないというだけでなくて、デフォルトの盤のサイズも小さくて目が疲れるのがちょっと辛い。そこで何とか見た目を改善したいと、他のサイトで配布されている駒の画像の中から、使えそうなのをいろいろ探してみたのですが、残念ながらあまりぴんと来るのが見つかりませんでした。うーんどこかにありそうなものなんですが・・・

で、仕方がないので自分で作る方向で考え始めたんですが、こんなのを一から作るのは難しすぎるので、前々からすごく綺麗だなあと思って見せてもらっていた、こちらのサイトで公開されている画像を使わせてもらう事にしました。

将棋ソフト用画像リソース置き場
http://mucho.girly.jp/bona/

いろいろ試行錯誤しながら使ってみたのですが、画像がほんと綺麗なのでかなり見やすくなりました! 駒のサイズも個人的にはちょうどいいくらいの大きさだったのもラッキーでした(「駒のサイズ」が「盤のサイズ」も決めるので・・・)。ということで、ぜひぜひ他の人にも使ってみてほしいので、外部駒を作るときに使ったHTML(!)をここにおいておきます。

<div style="position:relative; width:344px; height:288px;
 background-color:#e0b060">
<img style="position:absolute; top:0px; left:0px" src="Sou.png">
<img style="position:absolute; top:0px; left:43px" src="Shi.png">
<img style="position:absolute; top:0px; left:86px" src="Skaku.png">
<img style="position:absolute; top:0px; left:129px" src="Skin.png">
<img style="position:absolute; top:0px; left:172px" src="Sgin.png">
<img style="position:absolute; top:0px; left:215px" src="Skei.png">
<img style="position:absolute; top:0px; left:258px" src="Skyo.png">
<img style="position:absolute; top:0px; left:301px" src="Sfu.png">
<img style="position:absolute; top:48px; left:0px" src="Sou.png">
<img style="position:absolute; top:48px; left:43px" src="Sryu.png">
<img style="position:absolute; top:48px; left:86px" src="Suma.png">
<img style="position:absolute; top:48px; left:172px" src="Sngin.png">
<img style="position:absolute; top:48px; left:215px" src="Snkei.png">
<img style="position:absolute; top:48px; left:258px" src="Snkyo.png">
<img style="position:absolute; top:48px; left:301px" src="Sto.png">
<div style="position:absolute; top:96px; left:0px;
 width:344px; height:48px; background-color:#000000"></div>
<!--
<img style="position:absolute; top:96px; left:0px" src="Sou.png">
<img style="position:absolute; top:96px; left:43px" src="Shi.png">
<img style="position:absolute; top:96px; left:86px" src="Skaku.png">
<img style="position:absolute; top:96px; left:129px" src="Skin.png">
<img style="position:absolute; top:96px; left:172px" src="Sgin.png">
<img style="position:absolute; top:96px; left:215px" src="Skei.png">
<img style="position:absolute; top:96px; left:258px" src="Skyo.png">
<img style="position:absolute; top:96px; left:301px" src="Sfu.png">
-->
<img style="position:absolute; top:144px; left:0px" src="Gou.png">
<img style="position:absolute; top:144px; left:43px" src="Ghi.png">
<img style="position:absolute; top:144px; left:86px" src="Gkaku.png">
<img style="position:absolute; top:144px; left:129px" src="Gkin.png">
<img style="position:absolute; top:144px; left:172px" src="Ggin.png">
<img style="position:absolute; top:144px; left:215px" src="Gkei.png">
<img style="position:absolute; top:144px; left:258px" src="Gkyo.png">
<img style="position:absolute; top:144px; left:301px" src="Gfu.png">
<img style="position:absolute; top:192px; left:0px" src="Gou.png">
<img style="position:absolute; top:192px; left:43px" src="Gryu.png">
<img style="position:absolute; top:192px; left:86px" src="Guma.png">
<img style="position:absolute; top:192px; left:172px" src="Gngin.png">
<img style="position:absolute; top:192px; left:215px" src="Gnkei.png">
<img style="position:absolute; top:192px; left:258px" src="Gnkyo.png">
<img style="position:absolute; top:192px; left:301px" src="Gto.png">
<div style="position:absolute; top:240px; left:0px;
 width:344px; height:48px; background-color:#000000"></div>
<!--
<img style="position:absolute; top:240px; left:0px" src="Gou.png">
<img style="position:absolute; top:240px; left:43px" src="Ghi.png">
<img style="position:absolute; top:240px; left:86px" src="Gkaku.png">
<img style="position:absolute; top:240px; left:129px" src="Gkin.png">
<img style="position:absolute; top:240px; left:172px" src="Ggin.png">
<img style="position:absolute; top:240px; left:215px" src="Gkei.png">
<img style="position:absolute; top:240px; left:258px" src="Gkyo.png">
<img style="position:absolute; top:240px; left:301px" src="Gfu.png">
-->
</div>

これを使った簡単な作り方を説明すると、まず、ダウンロードしてきた先ほどのサイトの駒一式と同じフォルダに、HTMLファイルとして保存し、それをブラウザで開きます(ブラウザを選ぶのでちょっと注意。ちなみにFirefoxはOK、IE6はNGなのは確認してます。IE7はたぶんOKでしょう)。すると次のように表示されます(「錦旗 ノーマル」の場合)。

ちゃんと表示されたら、画面をキャプチャして、適当な画像編集ソフトで幅344px、高さ288pxにきれいに切り抜いて、後は8bitBMPで保存して出来上がりです。その画像をKifu for Windowsの設定で外部駒として指定します。

駒の背景の色を変えるには2行目の

 background-color:#e0b060">

を編集します。盤と駒台の色はKifu for Windowsの設定でこの色にあわせて下さい。

以上が簡単な外部駒の作り方です。ほんとは駒の形をきれいに切り抜いたりするべきなのですが(でないと無地の盤と駒台しか使えませんし、同じ駒を2つ以上持ち駒にしたときに、下になった駒がだいぶ消えてしまいます)、今回の画像は影がついていたりするので、ここらはちょっとややこしい・・・ なのであまり気にせず上の方法でいいのではないでしょうか?(でも私はやっぱり切り抜いてますが・・・) もしきっちり作ってみたい人は、先ほどのHTMLのコメントアウトしたところも使うと便利かもしれません。詳しくはKifu for Windowsに入っている「柿木駒.bmp」を参考に。

ちょっと手間はかかりますが、Kifu for Windowsを愛用されている人は、自分の好みの駒と盤の色でぜひ作ってみてください。すばらしい画像を提供してくれた作者の方、ほんとありがとう!

2007年04月12日

この前作った将棋プログラムを改良してみました。やり始めるとついついはまってしまって、結構時間を使ってしまいました。ということで、前のバージョンとの対局を先後を替えて2局どうぞ!





自分では、かなり「怪しさ」が減っていると思うのですがどうでしょうか? まあ前のバージョンは、取った小駒をほとんど使わなかったり(仕様)、歩で相手の駒を取ろうとしなかったり(バグ!)、むちゃくちゃだったので、それと比べるのもなんなのですが・・・ でもコードはかなりきれいになったと思います。

作っていく中でいろいろとプログラミングの勉強もでき、プロファイラなんてものも初めて知りました! MinGWで作っているのですが、gprof便利すぎです。一時は300局面/秒弱しか手が読めなかった時があったのですが、これを使って遅い箇所を直していって、今は、かなりばらつきありますが、20000局面/秒ぐらいまで持ってきました。うーん、巨大な配列をループ回して初期化してはいけないのですね(笑)。memset使えと。そんなの最適化してくれるものかと思っておりました・・・

あと便利だったのは、WinMergeです。私は、2つのファイルを比較するだけなので、同じようなソフトなら何でもいいといえば何でもいいのですが、きれいで見やすくてすごくいいと思います。

WinMerge 日本語版
http://www.geocities.co.jp/SiliconValley-SanJose/8165/winmerge.html

基本的なところはある程度できたので、あとはパラメータをちゃんと調整するとだいぶ強くなりそうです。これはなんとか自動化したいですねえ。あと探索の仕方が、ごく単純なMinMaxなので、これを改良すれば確実に速度は速くなりそうです。それより先は、一から書き直さないと難しいかもしれません。

2007年03月22日

テレビや新聞などでも取り上げられて、ものすごい注目を浴びた今回のこの「大和証券杯特別対局」、個人的にもとても面白かったです。って言っても、リアルタイムで見てたわけではないので、そこがちょっと残念・・・ まあこれからも同じような企画が続くと思うので、それは次回のお楽しみです。

しかし、Bonanza強いですねえ。24のレートが2800ってホントでしょうか?だったら私は絶対に勝たしてもらえません(泣)・・・ 対局の解説は竜王自身のブログが詳しいです。

渡辺明ブログ 大和証券杯特別対局ボナンザ戦。その2(当日編)
http://blog.goo.ne.jp/kishi-akira/e/44150b5b5d9e8d6d04a84292a13ce277
渡辺明ブログ ボナンザ戦補足など。
http://blog.goo.ne.jp/kishi-akira/e/1977e7817f440550ab9dc476697998f8

私が見た新聞の写真では、噂の「小さな赤い扇風機」がマシンの上に乗ってました(笑)。

2007年02月24日

時間があったので、将棋の思考エンジンを作ってみました。C言語でざっと1500行ほどの簡単なものですが、根本的にプログラミングの知識がないので疲れた・・・ 作り始める前は、強いのを作るのはものすごく難しくても、駒得だけを考えるような弱いのはすぐにできるかな、なんて思っていたのですが、はっきり言ってルール守らせるだけでもたいへんでした。ということでせっかく作ったので、この思考エンジン同士の対局をどうぞ!プログラムは名づけて「peaceful」、バージョンは「0.1」としました(次のバージョンはないような気がしますが・・・)。



うーんなんとも微笑ましいですね(笑)。こんな棋譜を吐くのに2、3分掛かるっていうのが泣けてきます・・・

このプログラムはかなりおばかさんですが、今回使わせてもらった上の「FB将棋 for FLASH」は見やすくていい感じです。Flashっていうのも、個人的には好きです。棋譜をウェブ上で公開したい人は、ぜひ使って見てください。

FB将棋 for FLASH
http://www.win-shogi.net/HowToUseFBShogiForFLASH.htm

2006年01月21日

Linuxで動く将棋ソフトにGNU shogiっていうのがあります。かなり以前、遊んだことがあるようなないような記憶が定かではないですが、久しぶりにちょっと気になったので試してみました。

GNU shogi
http://www.cs.caltech.edu/~mvanier/hacking/gnushogi/gnushogi.html

今使っているSUSE Linux OSS 10.0では、gnushogi-1.3.2/gnushogi/Makefileの中の

LCURSES =   -lcurses -ltermcap

という部分を

LCURSES =   -lcurses

と書き換えるとビルドできました。動かしてみると、UI(xshogi)が汚い!弱い!ほんと弱い!って感じで使えません。もうすでにかなり長い間、開発もストップしたままのようです。GNU Goはあれだけ強いので、同じくGNUの名を冠したこの将棋ソフトにも本当はがんばってもらいたいのですが・・・

ということで、このままではぜんぜん面白くないので、遊び方を変えてみます。何をするかというと、もっと強くなるように改良(笑)。その成果が下のふたつのファイルです。あまりよく分からずいじってるので、おかしなことをしている箇所があるかもしれませんが、とりあえず強くなります。

eval.c
genmove.c

差し替えてビルドしたGNU shogiは、ノーマルのものと対戦させると勝率8割はいきます。でも、diffかけてもらえばわかると思いますが、たいした違いはない・・・ それでもこれだけ強くなるのはもともとが酷すぎるからですね。三手詰めが見えなかったり、一手詰めを五手詰めにしたり、詰みを見つけるところをきれいに書き直すだけでもかなり強く(そして速く)なりそうですが、誰かやってみませんか?みんなでよってたかって鍛えれば、ある程度の強さまではすぐに行けそうな気がしますが・・・

最後にLinuxで動く他の将棋ソフトへのリンク。

Daemonshogi
http://daemonshogi.sourceforge.jp/index.ja.html
これもかなり弱いですが、UIがきれい!このUIでGNU shogiが動けばいいな。

GPSshogi
http://gps.tanaka.ecc.u-tokyo.ac.jp/gpsshogi/
これはかなり強いらしいです。でも、まだ試してません、ってこれで遊べばいいのか!

2005年09月18日

ぼけーっとネットしていたら、ものすごい記事見つけて目が覚めました。

将棋対戦プログラム、平手でプロ棋士追い詰める - NIKKEI NET
http://www.nikkei.co.jp/news/main/20050918AT1G1800J18092005.html

この橋本崇載五段って若手のばりばりですよ。コンピュータにとっては、この人に勝てるようになることと名人に勝てるようになることに大きな違いはないかと思います。棋譜を見てないのでどんな将棋だったのかわかりませんが、押されっぱなしで負けを覚悟した。途中で頭が真っ白になったっていうぐらいなのでよっぽど危なかったのでは?この前のBonanzaもびっくりしたけど、コンピュータ将棋ってほんとに強くなってるんですね。2010年までには、プロに勝てるような気がします。これからはこういう場所に出たがるプロはなかなかいないでしょうね(笑)。

とりあえず橋本先生お疲れさまでした。

2005年07月30日

以前から囲碁のフリーソフト、GNU Goの話題はエントリーにしてきましたが、今回は最近知ったBonanzaという将棋の思考エンジンを紹介します。これフリーのソフトなんですが、Pen4 2GHz、一手18秒で将棋倶楽部24のレートが2400というめちゃくちゃな強さです。

Bonanza
http://www.geocities.jp/bonanza_shogi/

すでに30局ほど対局しましたが、ほとんどいいところがない完敗が続きます。序盤、中盤、終盤、すべてにおいてBonanzaのほうが上のようで凄まじい・・・ ソフト相手ということでどうもこちらのモチベーションが上がらないってことも大きいのですが、一級@将棋倶楽部24な私では、真剣に対局しても10局やって1発入れるのがやっとでしょう。一度だけ、いくらなんでもそれはないだろうという攻めを受け切って勝ちましたが、それまでさんざんぼこぼこにされ続けていたので、ここぞとばかり全駒にしておきました(笑)。でもなんか余計に悔しい・・・

「激指」という将棋ソフトが、アマ全国大会でベスト16に進出したなど、最近の将棋ソフトは強くなってるというのは知っていましたが、このBonanzaには久しぶりに衝撃を受けました。作者の方は将棋倶楽部24のレートが500ぐらいらしいのですが、にも関わらず(失礼)このソフトがこんなに強いのに、ある意味可能性を感じます。考え方が根本的に違うのではないでしょうか?このBonanzaにあらためて将棋というゲームのすごさを教えられた気がします。

2005年04月03日

以前のエントリーの続きです。結果から言うとまだうまくいかないんですが、これ以上がんばる気が起きないので、あの後分かったことだけ書いて、ひとまず終わりにします。正直疲れた・・・

まずエラーが出るのは、Multigoでプレーしたときだけでした。例えば、PANDA-glGoではエラーが出ません。それからGNU Goの3.7系すべてでエラーが出ると思っていたら、3.7.1はエラーが出ないことも判明。前回は終局時にエラーが出るとあいまいなことを書きましたが、これは正確に言うと、「こちらがパスした後GNU Goがパスするとエラーが出る」です。

次に試したことをつらつらと書いていくと、まずMinGWのサイトからいろいろと新しいのをダウンロード&インストール。まったくだめ。怪しいそうなところということで、

./configure --disable-experimental-break-in --disable-experimental-connections --disable-socket-support

を試す(最初の二つは「experimental」の文字が。最後のは./configureで警告が出るから)。まったくだめ。MultigoはgmpでGNU Goと話をしているはずなので(調べ方が分からない&はっきりとしたソースが見つからないけど)、gmp.h、gmp.c、play_gmp.cあたりが怪しいかと、3.7.1と3.7.2のソースを見比べる(読めないけど)。まったく同じ。他も見比べる。まったく分からん・・・

3.7.3が出たときはこれで直っているかなと思ったんですけどね。とりあえずPANDA-glGoで遊んでおきます。詳しいこと分かる方がおられましたら、ぜひ教えてください。

2005年02月11日

少し時間があったので、以前から試してみたかったGNU GoのWindows用バイナリのビルドに挑戦してみました。バージョン3.6がリリースされてからある程度の時間が過ぎたのに、3.7系のバイナリがまだ見当たらないので、自分でやってみようって思ったのですが、MinGWを使って出来上がった3.7.2の実行ファイルは、MultiGoで(他は試していない)プレーすると終局時に必ず落ちるという悲しい結果に・・・(対局は終わってるので遊べると言えば遊べるんですけどね) makeが通らないとかそういうトラブルであれば、エラーメッセージなどを見ながら何とかがんばれるんですが、こんな中途半端な不具合は、私のスキルではちょっとなんともしがたいです。

いろんなことを試したあげく、試しに3.6をビルドしてみると、こっちは問題の無い実行ファイルが出来上がるし、自分が悪いのかどうかも分からない状態。もう少し調べてまたエントリーにします。自分の環境に最適化したGNU Goが作ってみたいんだけど・・・

2004年11月24日

囲碁のゲーム、というか思考エンジンのGNU Goの最新安定版3.6が一週間ほど前にでてました。どうも自分はこのソフトにライバル心があるので(笑)、さっそくチェックしてみました。

以前GNU Goの3.4と3.6-pre2を対戦させたので、今回は3.6-pre2と3.6とで比較してみました。数局対戦させてみたんですが、うーんさすがにこの二つじゃあんまり変わらないか?ただもしかすると少し速くなってるかもしれないです。

とりあえず、どなたかWindows用のバイナリを・・・

[追記]
Windows用のバイナリはこちらで手に入ります。