« プログラミング講座(30) Small Basicのコード系 | トップページ | 低炭素社会 »

2010/09/05

プログラミング講座(31) モンテカルロ法

いろいろあって難航していましたが、モンテカルロ法のロジックを組み込んだ囲碁プログラムをアップロードしました。プログラムIDはTLW572です。

棋譜ファイルの入出力が必要な場合は、Ctrl+Fキーで"following"を探しコメント行を元に戻してください。

[対局]ボタンを押すと、コンピューター(黒:乱数)対コンピューター(白:モンテカルロ法)の対局をご覧になれます。

Igo08

【図25 コンピューター対決の結果】

今回、難航している理由の一つ目は、モンテカルロ法の処理が遅いことにあります。モンテカルロ法は乱数を用いる手法で、円周率の計算などにも使われる方法ですが、囲碁の場合はデタラメに対局を終局まで進めて(プレイアウトといいます)、どこに打ったら一番勝率がよいかを調べ次の手を決めます。6路盤では最初は36回以上対局して次の手を決めるので見ていてもなかなか進みません。今回は4路盤にすることで一局の時間を短くするようにしました。

Igo08command

【図26 デバッグ情報の画面】

グラフィックの画面だけだとプログラムが動いているか不安になるので、テキスト画面にデバッグ情報として現在どの交点に対してプレイアウトしているか表示し、一局にかかった時間も表示するようにしました。以前、単語帳プログラムで作ったサブルーチンを流用しています。

次に難航したのが、プログラムのサイズが大きくなり過ぎたことです。プログラムは2000行を超えていたのですが、大きすぎてアップロード([発行])できなくなりました。

Photo

【図27 発行エラーのメッセージ】

コメントを大幅に削除するなど、2000行以内に収めたところ、アップロードできました。サイズの境目は正確には分かりませんが、2000行近辺が目安になると思います。ただ、発行できなくても動作はします。別の方法で公開するなどの回避策はあります。

6路盤でもモンテカルロ法を動かすには、性能改善をしたほうが良さそうですが、着手禁止の判定や囲われた石を取るなど、一手ごとに結構いろいろ処理が必要なので、ここを直せば、というところは見つかっていません。

性能改善はどこまで可能なのでしょうか?

(つづく)

|

« プログラミング講座(30) Small Basicのコード系 | トップページ | 低炭素社会 »

Small Basic」カテゴリの記事

コメント

コメントを書く



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




トラックバック


この記事へのトラックバック一覧です: プログラミング講座(31) モンテカルロ法:

« プログラミング講座(30) Small Basicのコード系 | トップページ | 低炭素社会 »