« プログラミング講座(115) t分布による母平均の推定 | トップページ | プログラミング講座(117) 評価関数の可能性 »

2013/03/08

プログラミング講座(116) 局面数

先日、9路盤の囲碁のゲーム木の枝の数として 81! を紹介しました。81! をWindows付属の電卓(関数電卓のモード)で計算すると、

5.7971260207473679858797342315781e+120

という大きな数字になります。これはどの順番で置くかを考慮した組み合わせ数です。順番はどうであれ石の並びのみに注目すると(アゲハマの数は無視します)、交点の状態が3つ(石がない、黒石がある、白石がある)なので、9路盤では 381 (3の81乗)になります。381 をさきほどの電卓で計算すると、

4.4342648824303776994824963061915e+38

になります。だいぶ小さな数字(?)になりました。アゲハマの数が考慮されていない一方で、この局面の中には実際には石が取られないままになっている(起こりえない)局面も含まれていますし、点対称、線対称の(本質的に同じ)局面も含まれています。

ちなみに googol = 10100 = 1e+100 (グーゴル)という Google 社の社名の由来になった数がありますが、観測可能な宇宙の中にある基本粒子の数が 1085 だそうなので、とにかく大きな数字です。81! は googol より大きいですが、381 なら googol ほどではなくなります。

このような組み合わせのある局面から神の手と呼ばれる対局をどう選ぶのか、ということをプログラミングしようとしているわけです。何日かかけてプレイアウトを行いましたが、母集団である 81! や 381 に比べると標本の数として 8175 局というのは、本当に塵のような数なのかもしれません。

なお、19路盤の局面数 3361 は、

1.7408965065903192790718823807056e+172

です。

また、Small Basic でべき乗を(オーバーフローしないように)計算するプログラムを作成しました。プログラムID CPQ608-1 で発行しました。このプログラムで計算すると 381、 3361 は以下のようになります。

3^81=443,426,488,243,037,769,948,249,630,619,149,892,803

3^361=17,408,965,065,903,192,790,718,823,807,056,436,794,
660,272,495,026,354,119,482,811,870,680,105,167,618,464,
984,116,279,288,988,714,938,612,096,988,816,320,780,613,
754,987,181,355,093,129,514,803,369,660,572,893,075,468,
180,597,603

|

« プログラミング講座(115) t分布による母平均の推定 | トップページ | プログラミング講座(117) 評価関数の可能性 »

囲碁」カテゴリの記事

Small Basic」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: プログラミング講座(116) 局面数:

« プログラミング講座(115) t分布による母平均の推定 | トップページ | プログラミング講座(117) 評価関数の可能性 »