トップ «前の日記(2007-02-20 (Tue)) 最新 次の日記(2007-02-27 (Tue))» 編集

uDiary

海野秀之(うんのひでゆき)の外部記憶

Twitter (twilog) / RSS / アンテナ / ぶくま

2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|08|
2010|01|02|03|05|06|07|10|11|
2011|03|08|
2012|02|04|07|08|10|
2013|01|02|03|05|06|08|11|12|
2014|01|02|05|06|07|08|09|12|
2015|01|02|03|04|

2007-02-23 (Fri)

[将棋] スペース優先最適化案と Bitboard

いつ思いついたのかというメモにしかならない気がしますが。 (昨日思いついて興奮したんだけど、きっと誰でも気づくな。)

Bitboard については、「チェス盤はちょうど 8x8 で 64-bit になってよさそうだけど」 程度にしか思っていなかったのですが、ちょっと気が向いて Crafty の作者が 書いている文書を読みはじめた。

そこで、はっと!

これとは別に、だいぶむかしに、容量優先最適化したら将棋盤表現はどうなるかなぁ *1 と 考えたことがある。 まだ情報量的にコンパクトではないけど 40-byte (しまった、こんだけでは成れない。もっと増える) かなぁと思ったんだけど、 いかにも動かしにくそうだった。 で、棋譜 DB 向けならまだしも、ゲーム木探索向けではないだろうなぁ くらいに思ってそのままにしてあった。

が、がが!!

これは、もっともナイーブに、メモリ無駄遣い的に実装した bitboard を、 ひょっと圧縮したような形になっているのではないかな。 (常に 1-bit だけ on になるような 81-bit bitmap の情報量は 81-bit もない!)

ひょっと圧縮したので、ひょっと元に戻るぞ。

わりかしコンパクトなので、局面同士の比較コストも小さめである。 あー、ハッシュは Zobrist hashing だとばかり思い込んでいたけど、ちょっと違うものに なるなぁ。

盤表現は 40-byte (←計算しなおさないと。このままでは 34-bit 不足してる筈。 エンコードは考え直し。), ワークは bitboard と attack table の併用でとりあえず決めておこう。

しかし、Hyatt の文章は発見的に書かれていて、 エッセー調で、とても面白い。まだ読みはじめたばっかりだけど、全部訳しながら読もう。

訳すのはコストが掛かるのだけど、何度も読み返すときのコストが激減するのと、 条件が整ったら(著者にお伺い?)訳したものを web に置けるかなぁ。

関係ないけど、transposition table を訳すなら「移行判定表」がいいと思った (ちょっと前までは「別手順表」だと思っていた)。 まあ、「転置表」/「置換表」が誤訳であることは間違いない。 *2

*1 メモリアクセスコストの高い今日ですから、試しに容量優先最適化を考えてみる価値は常にあると思います。

*2 さらに関係ないけど、Control transfer は「×制御転送」ではなく「○制御転移」だと信じている。

本日のツッコミ(全4件) [ツッコミを入れる]
# うんの (2007-02-23 (Fri) 18:44)

おろ。bitboard でない attack table なんて要らない気がするぞ。<br>垂直データの可算器(←ちょっと意味不明)を構成すればいいのね。<br><br>並列処理効率をあげるためには<br> u32 bb[3];<br>と<br> struct {<br> u64 a;<br> u32 b;<br> }<br>の union がいいかも。<br><br>あ、独り言です。

# うんの (2007-02-23 (Fri) 18:46)

ま、試作は Ruby で Array の attack table だけど。

# うんの (2007-02-23 (Fri) 18:58)

さらにメモ:<br>「ハッカーのたのしみ」 5-1 にはワード中の 1 ビットの数え上げというのがある。

# うんの (2007-02-23 (Fri) 19:14)

ビットの足しあげは、<br>・たくさん 1 があるケース<br>・1 が少ないケース<br>・1 がある方がめずらしいケース<br>で最適なコードが異なるので、試作版で統計と取っておくのが大切。<br><br>垂直データ Array だと、垂直方向のビット位置によって傾向が全然ちがうはず。


2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|08|
2010|01|02|03|05|06|07|10|11|
2011|03|08|
2012|02|04|07|08|10|
2013|01|02|03|05|06|08|11|12|
2014|01|02|05|06|07|08|09|12|
2015|01|02|03|04|
Categories 3imp | Card | Cutter | Dalvik | Euler | Football | GAE/J | Hand | Haskell | Re:View | Ruby | Scheme | TQD | Tiger | TigerBook読 | UikiTeXi | Verilog | Violin | Web | parconc | tDiary | お勉強 | エントロピー | ツン読 | | 将棋 | 政治について | | 模写してみよう | 確率論 | 設定など | 雑文 | 音声