2024年11月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

tweet

  • tweets

« 2008年2月 | トップページ | 2008年4月 »

2008年3月

将ぎの実けんレポート

ぼくの春休みの宿だいでは、FPGAの将ぎのエンジンのこう成をいろいろ変えて、ノードの数がどう変わるかを調べました。

次の10通りのこう成をくらべました。

(ア) き本アルファベータ
(イ) (ア)+ 反ぷく深化
(ウ) (イ)+ FUTILITY PRUNING(もどき)
(エ) (ウ)+ EXTENDED FUTILITY PRUNING(もどき)
(オ) (エ)+ 深さ=1では打つ手を指さない
(カ) (オ)+ NULLMOVE PRUNING、さい帰なし、R3D=7(※)
(キ) (カ)で NULLMOVE PRUNING のさい帰をありにした
(ク) (キ)で R3D=6 にした
(ケ) (キ)で R3D=5 にした
(コ) (ク)+ PVS

    (※)R3Dは、R=3とする深さのことです

これらの10通りをえらんだ理ゆうですが、まずさい初はき本アルファベータからはじめて、それからほ木先生のプリントに「こうするといいよ」と書かれていたことを一つずつつい加していきました。「もどき」とあるのは、FPGAでは先生のやっている通りに作るのがむずかしかったので、ハードでもできるように少しさぼっちゃいました。てへ。ごめんなさい。

(オ)の「打つ手を指さない」は、静止探さくでStandPatを使っているので、深さ=1で当たりの手を打っても、次に相手にパスされるとむだになるなぁ、と思ってこうしました。ちなみにぼくは今もやっぱり、StandPatはとっても気もちわるいなぁと思っています。だけどStandPatにしないとまた別の問だいが出てくるので、今はこうしています。このへんの事じょうについては、また夏休みの宿だいにでも考えてみたいと思います。

(キ)~(ケ)ですが、ほ木先生のプリント(2006年8月 じょうほうしょ理)を読むとさい帰かどうかよくわかりませんでした。R3Dは7みたいです。小宮先生のプリントではさい帰でないコードになっていました。Fabian先生のFruitのかい説では「つねにR=3でさい帰」となっていました。どうするのがいいのかわからなかったので、いろいろ変えてやってみました。

15~25分切れ負けだと、だいたい1手10~15秒くらいで指さないといけないと思います。島先生の「読みのぎ法」の25問をとかせて、適ぎ深さを変えながら1問あたりの平きんノード数をみてみました。えらんだ手が少しずつ変わっているので、単じゅんにくらべるのはもしかしたらあまりよくないのかもしれません。だけどとりあえずノード数だけならべてみます。

1問あたりの平きんノード数の表

     深さ6     7      8

ア       23042520
イ       12112786     90207415
ウ                    75797284
エ                    68488777
オ                    38210226
カ                    35529881
キ                    16160660     80446932
ク                                 74772127
ケ                                 74589707
コ                                 66844067

FPGAは6.25Mnps (※)で動いているので、たとえば62500000ノードだと10秒になります。
※"nodes per second"というのがふ通の言い方のようなので、合わせました

[まとめ]

ほ木先生の言うとおりにしていったら、はじめは深さ6しか読めなかったのに、深さ8まで読めるようになりました。このおかげでKShogi初きゅうやyowai_gpsに勝てるようになったので、とってもうれしかったです。やっぱりほ木先生はすごいなぁ、と思いました。

    おわり

ついしん とーとつですがアルジャーノンに花たばをあげてください。

やったぁyowai_gpsに勝ったー

うれしくてついはしゃいで書いてしまいました。まだ1回先手で勝っただけですけど。id:ellecia2 です。floodgateでなくyowai_gps-1500-0の方。

これで1次予選通れますよねぇ小宮さん(と振られても困ると思うが)

floodgateもやりたいけど、自動対戦がなー。今のところつきっきりでないとできないので。レーティング出すほど数こなすのは無理そうです。まあまたいつかトライしようっと。

1面クリア

ちょっと勘違いしてました。どっかでれさぴょんは「通信はない」と書いてあったような気がしたんですが、ソース見るとどうもやってるっぽいし、第一うさ親さん本人が「v1.0ならある」と言ってるし。で、FPGAとの通信ルーチンをれさぴょんに組み込んでみました。30手まではれさぴょんが、それ以降はFPGAが指す、というふうにしてKShogi初級に再挑戦。先後2回ずつやり、両方1勝1敗でした。初勝利。回数少ないですが、まあKShogi初級と互角、くらいまでは来たかと思います。これで大会だとどのくらいまで行くんでしょうね。1次予選通過…はもうちょい強くしないとだめかな。金沢98入門とは勝ったり負けたりくらいが1次予選通過するかしないか、くらいだったのですが、KShogi初級の強さがよくわからないのでなんとも言えないです。あと1か月半なので大したことはできないですが、まあ限られた時間でできる範囲で努力してみましょう。

というわけで、れさぴょん使わせていただきます。ありがとうございます>うさ親さま。v3まったくそのまま(30手めまでは)です。定跡はうさぴょんpublic.binそのままです。 #超手抜きでやってます^^;

あと、イーサネット化は大会向けは諦めたのですが、Alteraサポートとのやりとりがいまだに続いているため、まあ将来のこともあるのでぼちぼち進めてます。Alteraからはついに「3C120Nボードでは、バグのため10/100Mbitモードは動かない」宣言が出てしまいました。をいをい。ただそのかわりというか、Gbitモードについては「サンプルデザインないとこっちは設計できねーよ」と文句言ったところ、時間はかかりましたがほんとにサンプルデザイン出してきました。おぉ。これはなかなかすばらしいです。で今、このサンプルデザインをまずはそのまま動かそうとして、またちょっと問題があるのでサポートに聞いてるところ。この会社しかし、サポートがいいんだか悪いんだかよくわかりません^^;まあ評価キットということを考慮すると、このくらいなら合格点と言うべきなんでしょうね。イーサ以外はバグもなく動いてるし。これから3C120Nボード買ってイーサ動かそうとしてる方は上記の点お気をつけください。次は1回はXilinxで作って、サポート良し悪しをベンチマークしてみたいところ。

*UNTER^2 状態に

ハードのデバッグの日々をしばらく過ごしてました。まだまだあるんだろうけど、少しずつよくなっては来てると思うんですが。

regressionである程度まともになってきたかな、というところで、再度Kshogi初級に挑戦。しかし、FPGAに手が渡る前の駒組みで既に不利になってる、という状況多し。最初の20-30手くらいまでソフトで、それ以降FPGAでやるようにしているのですが、その段階でもう大駒に成りこまれてたりしてる。2005年の大会に出たバージョンはそんなひどくなかったはずなんですが、その後2007年春くらいまでいろいろ修正してたせいか。私は普段の修正は主にregressionが対象で、中終盤がメインになってまして、初期局面から対局するのは大会直前のみでした。2年近く修正してた間に、序盤のバランスが崩れたかも。

ちなみに、開き直って初手からFPGAでやらせる、も試してみました。実はソフト使うよりこれがいちばんいいとこまで行った^^; ただ、やはり序盤に「大駒を活用させる」「王を囲う」といった基本的なことをまったくしてくれないので、戦いに入ってからどうしても速度で負ける。むこうがきっちり囲ってて、こっちは居玉で金銀もほとんど動いてない、ですから。

で、今度はDeep Purpleのデバッグをする羽目になりました。しかし、もうだいぶ離れてたのでコードの読み直しから始まるし、第一モチベーションがいまいち湧きません。ハード設計に注力してきたので、今更ソフトを強くするのにあまりがんばる気にもなれない。でも、将棋として強くするにはやはり避けて通れないんでしょうね。

         え"~、両方やんのー!?

というのが正直なところです。ちょっとめげてます。
まあでもしょうがないんでやるんですが。

このブログは今まで大体週刊で書いてきましたが、今後少しペース落とすことになりそうです。FPGAをやってる間は、まあ他でどこもやってないのでそれなりに皆さん興味持っていただけたかと思うのですが、ソフトのデバッグの話書いてもたぶんあまり面白くないと思うので。(実際、私自身面白くないし^^;)FPGA面で進展あったらまた書こうと思っております。

しかし、れさぴょんとか序盤だけそのまま借りて使った方が早いかな?とかちらっと思うのですが、だめ?でもまたCSA理事会さんあたりから怒られるんですかね。

こちらバグ捜査一課

進行度の見直しはまだやってませんがとりあえず初手からX手め以降はFPGA、という形で逃げてます。ほんとはあまりよろしくないのだが、まずはパッチで。プロトコルまわりも修正して、いちおう自動対戦は動くように。

でKShogi初級と対戦させてみましたが、先後とも負けますね。時々明らかな悪手をさすので、どっかにまだバグがあるっぽい。なのでデバッグの日々に戻りました。

まあやっと戻れたというか。結局12月から3か月強、環境立ち上げに費やしました。もう大会まで2か月ないよヲイ。ま仕方ないですな。残り時間でできるとこまでせいぜいがんばりましょう。強さを除けばまあ対戦するだけならいちおう完成なので、かなり気は楽に。一時は参加すら危ぶまれてましたから。あとはボードにコーヒーこぼしておしゃか、とかいうのだけ気をつけないと。なんせむき出しですから。あと定番の静電気とか。

さてデバッグの方ですが、これがかなり手こずってます。今度の容疑者はなかなか吐きませんよ警部。まあわかったものもいくつかありまして、例をあげると:

・読み技23図で▲6四馬△2七歩成でよしと思ってた件。小駒の成りが全く評価に入ってませんでした--; 大駒は入れてたんですが。
 まあこれも一応趣旨はあって。終盤でと金量産しないようにするにはどうするか、と考えてて、成り自体を評価するのでなく、成ったことによって増える利きを評価しよう、と。それなら敵玉から遠いと金は評価値が上がらんだろう、と。でもこれ、終盤はそこそこよくても、序中盤はやっぱり成り自体を評価しないとだめだな、というのはそういえば前にもソフトで同じこと考えて同じ間違いしたんでした。ぜんぜん学習できてません。
 でこれ入れて:成り駒自体に価値を持たせ、重みが進行度で下がるように、としたら、めちゃくちゃな手を指すようになって今調べだしたところ。評価値は14bitで持ってるのですが、スケーリング間違ってオーバフローしたかも。

・進歩本②第8問

gote motigoma
-

#banmen
ye.....ey
..h..io..
.f..giaff
fHgffff..
Y.f....FF
...FF.I..
E....FF..
...AG.GO.
.....I.EY

# sente motigoma
f3

# teban
s

 いつもの見づらいフォーマットですみません。私にはこっちが見やすいんです。
 正解は▲7三歩。△同飛に▲8五桂以下飛頭に歩を連打します。でAリーグの指し手は…正解の▲7三歩。いやちょっと待て。お前そんなに深く読んでないだろうわかるはずねーじゃん。警察をなめるんじゃねぇぞコラ。で見てみると、案の定▲7三歩△同飛の後▲8六飛となってました。まだその先調べてませんがおそらく△7二飛の横利きが自玉へ行ってるのが歩の値より大きいと思ってるんでしょう。評価値のチューニング不足と思われ。はたまた何かの水平線かも。採点スクリプトは正解と返すんですが、う呑みにすると「今、痛い目に会いにいきます」になります。
 ちなみにDeep Purpleでは、この第8問を(正しく読んで)正解できたことは未だかつてありません。だいたい▲8六飛くらいなら「んー まOK」にしてた。全幅8手+静止だと行くのかな。やってみたいところ。理論上行きそうな気はしますが。

いずれも、まアホなといえばアホなバグですが、ソフト開発の初期にはたぶん皆さん似たようなことやられたんじゃないかと思います。ある程度やってるとだんだんバグが取れてくるんですが。でも何しろこっちは一から作り直し、が6度めですから。12月初めの時点では、エンジンのコーディングが終わって多少SIMLしてやっと最初の一例が動いた、というレベルでした。ここで「プレスリリース」するのはまあ業界では基本でしょう。そこからエンジンの方は今までほとんど進んでないので、これから血と汗と涙のバグ取りフェーズです。♪思い込んだら試練の道を~ 経験からすると、このフェーズが大体2、3か月くらいでしょうか。あれ大会終わってるな。ハードだともうちょいかかるかな。

プロの開発だと何たら曲線が飽和してきて…とかやるとこでしょうが、私は当然そんなことはしてません。そもそもバグの記録つけてないし。D.P.作りだした最初のころは習慣でつけてたのですが、後で1度も見直さないことがわかりやめました。ソースの中に、1か月後には意味不明になるであろうコメントを残していくだけ。

話がそれましたが、デバッグに手こずってて、という話を書こうとしてたんですが、紙面が尽きたのでまた今度。

今週の一曲:
♪ Here comes your 6th nervous breakdown ...(テケテテケテテケテテケテ…)
# ちょっと違う。でも19回やった奴はさすがにいないだろう

初スパーリング

先々週「ボードの設計ミスでは?」と書いた件、その後Alteraさんからレスあり。RGMIIの最新仕様(v2.0, 2002年)では HSTL 1.5V となっているが、その前の仕様(v1.3)では2.5Vになっているそう。いまいち疑問はありますがまあ設計ミスとは言えない、という点は判明しました。しかしI/Oを2.5Vに変えてもまだいろいろ不具合があり、動かず。MACコアの中身は暗号化されていて見えないため、Alteraさんから情報を出してもらうしかないのですが、サポートに問い合わせてもなかなか的を得た答えが返ってきません。「こうしてください」と言われてそのとおりにしたらエラーになる、とか。時間ばかりかかるので、やむなくイーサの作業はいったん中断としました。サンプルデザインなりを示されないと、効率悪すぎ。

で、hostfs + パイプもだめ、USBもだめ、イーサもだめ、…となってしまい、これは本格的にまずいかも、と思ったのですが。人間追い詰められると知恵が働くもので。hostfs + 「パイプ」はだめでしたが、普通のファイルの読み書きはできてたので、これを使えないか?と画策。1手ごとに別ファイル(p001, p002, ...)に書き、読む側はファイルがopenできるまでリトライしつづける、というプロトコルでコード作ってみました。かなり無理やり感のある実装ですが、今のところ一応動いてるようで。

これで自動対戦できるかというと、まださにあらず。FPGAの思考エンジンは定跡とか駒組みとかがまったくないので、中終盤はいいのですが序盤はおそらくとてもまともに指せない。なので序盤はソフト(Deep Purple)で指し、進行度なりを見て、あるところからFPGAを呼び出す、という手続きが必要です。まあDeep Purpleの序盤も手抜きでやってるので、FPGAよりはましと言ってもかなりひどいんですが。で、半年以上離れていたDeep Purpleのコードを読み返して、上記の修正を入れて。また、Deep Purpleはいちおうネットワーク対応してあったつもりでしたが、一応最新のCSAやfloodgateのプロトコルをチェックして微調整を入れて。

でいよいよ自動対戦初トライ。私は99年に大会に初出場したときに金沢将棋98を買って、以降大会直前はそれを相手に調整していました。前回05年の大会の後引っ越したため、まずCDROMどこにしまったかわからず。(大会直前以外使ってない。)で半日つぶして、家中の箱やら引き出しやらをひっくり返して。すると思いもかけず懐かしい物が出てきたりして、「ああ、あんなこともあったねぇ…」などと感慨に浸ってたり。いや何やってんですかあんたは。そうこうしてようやくCDROMを見つけだし、Vistaにインストールすると…動かねぇし。まあ「Win95用」とか書いてありますしねぇ…98, Me, XP, Vistaと4代OS変わってますんで、動かなくても責められんか…

しょうがないので、やむなく別の相手探し。今度はフリーのソフトにしましょう、ということでいくつか検討しましたが、強さよりも使いやすさ、通信対応、メンテ具合、等、「製品としての完成度」という面からKShogiがよさそうかな、と思い試してみました。実際使ってみて、シリアルもTCP/IPもサポートしてるし、強いし速いし、使いやすいし。全く言うことなしです。(ここ、開発者目線でなくユーザ目線。)PONTAさんありがとうございます。しかし、こんな良いものただで配ってて生活大丈夫なんでしょうか。他にもっと凄い売り物ソフトがあるのかな。全く敬服です。

というわけでようやく初スパーリング。対局サーバは CSAサイトにあった高田さん作のを使って。まずは先手 Deep Purple & A級リーグ指し手1号、後手KShogi初級。…75手でKShogi勝ち。必敗の局面で挙動がおかしくなって変な文字列を返して反則負け。あと、Deep PurpleからAリーグに切り替わったのが61手めから。いやそれ遅いって。Aリーグはほとんど敗戦処理しかやってませんでした。進行度が一定以上になったら、というコードにしてたのですが、ここ調整しないと。まあ、十数手指したので、プロトコルの確認はできました。あと、負けそうになると王手ラッシュをやる、ということはわかった^^;

次こっちが後手でやってみたら、対局サーバからの指し手エコーを相手の手と勘違いして、すぐ終了してしまいました。ふぉっふォッフォッ、まだまだ未熟よのぉ、おぬしは。これ、もしかしてお約束?いちおう自動対戦できるメドはついたものの、まともに指すようになるにはまだかなり道は遠そうです。

進行度の件は少し考えるに、駒組みがほぼ終わってそろそろ仕掛けるか、というあたりでFPGAに渡すようにしたいのですが、今の進行度の定義では駒を取ったり侵入したりしないとほとんど進まないため見直し必要そう。まったく予想外の課題ばかり増えていきます。

« 2008年2月 | トップページ | 2008年4月 »