Javaアプレット(31) 囲碁局面の数理モデル

これまで作った行列やベクトルを使って、囲碁の局面を表すクラスPosを作成しました。GraphGo04 として公開します。
まだ、バグ(プログラムの誤り)があることが分かっているのですが、ブログで紹介しながらデバッグ(バグ取り)していきたいと思います。
今回、情報処理学会ゲーム情報学研究会の論文「囲碁の数理モデルとその応用」にあるBWモデル(B-W graph model)の考え方にしたがってクラスPosを作りました。ただし、一部を修正しています。
Posは「局面」の訳語をいろいろ探った結果、positionが妥当ではないかということで、クラス名がPositionだと長いのでPosとしました。以前のプログラムではクラスPosは盤上の点の座標を表していましたが、今後、盤上の点についてはpointという訳語を使おうと思います。
BWモデルは局面を以下の行列F、ベクトルbwで表す数理モデルです。
F – 連接点を表す行列
b – 黒石∨空点を表すベクトル
w – 白石∨空点を表すベクトル
まず、簡単なbwについて説明します。例えば2路盤の盤面の場合、交点は4つあるので、4次ベクトルを使います。盤に何も置かれていないときはb = (1, 1, 1, 1)、w = (1, 1, 1, 1)です。盤面の左上、右上、左下、右下がそれぞれベクトルの1番目、2番目、3番目、4番目の要素に対応します。盤面すべてが空点なのでベクトルの要素はすべて1になります。右上に黒を打つと、b = (1, 1, 1, 1)、w = (0, 1, 1, 1)に変化します。bは黒石と空点の論理和なので、黒石を置いても変化しません。逆にwは黒石が置かれるとそこは白石でも空点でもないので0になります。
さて、連接点について説明します。その前に隣接点と連について説明します。
碁盤をグラフ(行列)で表せばどんな形の盤も扱えることを以前述べましたが、隣接点は碁盤の交点のどの点とどの点が隣り合っているかを示すので、盤の形を規定することを意味します。3路盤の場合は交点が9つあるので、9行9列の行列で隣接点を表します。たとえば1行目と1列目は碁盤の左上の点を表します。碁盤上の点iとjを行列のi行目とj列目とするとき、BWモデルでは、iとjが等しいかiとjが隣り合った点であるとき隣接点の行列F0の要素ijが1になるよう定義しています。
とは縦横に接する同じ色の石の集合です。点i, jに関してiと同じ連に含まれる点がjの隣接点である場合は、jはiの連接点であると定義されます。これを行列で表したのがFです。余談ですが、「連」という用語はコンピュータ囲碁の用語で、日本棋院の『日本囲碁規約』では単にこれを「石」と表現しています。また、『囲碁の数理』ではこれを「一連の白(黒)石」と表現しています。
隣接点の行列F0は行と列に対して対称であるのに対し、Fは局面とともに変化し必ずしも対称にはなりません。下図の局面において、点2は点6の連接点ですが、点6は点2の連接点ではありません。
図:白と黒の連
【図44 白と黒の連】
これら(F, b, w)を求めるために補助的に以下の行列とベクトルを使います。
F0 – 隣接点を表す行列
h – アタリの石の集合を表すベクトル
a – 着手によって追加される連を表すベクトル
d – 着手によってリセットされる連を表すベクトル
l – 空点を表すベクトル
A – 着手によって追加される連接点を表す行列
D – 着手によってリセットされる連接点を表す行列
(つづく)

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。