囲碁の盤面のデータ圧縮考案

囲碁のAIもちょいちょいと進めている。

囲碁の方が難しいとかAIは進んでいるとか適当な話が流れているがそうも思わない点も多い。

 

インフラとしてネット対戦サーバやクライアントなどの部分は将棋の方が整備されているように感じる。囲碁大会の方が初歩的トラブルがいまだにあるが将棋の方は自動で連続対局してもほぼ不具合がない。

 

棋譜データはいずれもファイルフォーマットが規定されているが,盤面情報のフォーマットが囲碁の方が無い。将棋はSFENがあるし,それをハフマン符号化し256bitに圧縮することが可能。

じゃ,囲碁はどうするかと考えたら空き,黒,白の3状態が任意の位置で可能性があるので9路で3^81の状態量,19路で3^361の状態量を保持しなくてはならない。

それぞれ9x9,19x19の配列で保持してもいいのだが圧縮可能かどうか考えてみた。

ちなみに9路2bit配列だと162bit,19路2bit配列だと722bitである。

 

log2 3^81 = 128.38・・ 

2^128 < 3^81 < 2^129

ということで9路盤の情報量が128bitで収まらない。

同様に19路は572bit以上必要となる。

 

扱いやすく適当な妥協点ということで

3^5 = 243 < 2^8

5マス分の情報を8bitで表記するものを考案してみる。

9路で136bit,19路で584bitとなった。

同様に 3^17 = 129140163 < 2^27 を考えて

17マスを27bitで表現すると9路が135bit,19路が594bitとなった。

後者は苦労したほど旨味がない。

 

5マスを8bit表記するものがそこそこ使えそう。

理論値が16byte(128bit)で収まらないものを17byteで収めたら十分だろう。

---

9路が81マス,19路が361マスなので両方あと1マス小さいと計算簡単なんですよね。

---

冒頭の2^128 < 3^81を計算している動画があった。

www.youtube.com