プログラミング講座(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
| 固定リンク
「囲碁」カテゴリの記事
- ディープラーニング(2017.01.07)
- 最近のコンピュータ囲碁(2016.03.05)
- JavaScript (38) 碁盤にもなる囲碁シミュレーター(2015.10.28)
- フリーソフト紹介:囲碁クエスト(2015.08.26)
- C++ (7) CgfGoBan のインストール(2015.01.17)
「Small Basic」カテゴリの記事
- プログラミング講座 (202) 1次元セルオートマトン(2020.09.20)
- プログラミング講座 (201) パラメーター(2020.09.14)
- プログラミング講座 (200) 3次ベジエ曲線(2020.09.14)
- プログラミング講座 (199) スーパー三角関数?(2020.09.02)
- プログラミング講座 (198) スーパー楕円(2020.09.01)
コメント