最近おバカな日記ばかり書いていたので、今日は真面目にプログラム面のお話を・・・
最近学校で(勝手に)オセロのプログラムを書き上げています。
オセロゲームを構築できるかどうかでプログラムの理解度が大きく変わってくるようなので・・・
過去にスクリプトで書いたものがありますが、アレは人vs人でプログラムとしては比較的簡単です。
本当に難しいのは人工知能を搭載した対CPU戦で、これがなかなか強敵です。
今はこのCPU対戦における思考ルーチンについて勉強しています。
オセロは人よりもCPUが強くなる、珍しいボードゲームでもあります。
携帯ゲーム機などでオセロでCPU対戦したことがある人は分かりやすいと思いますが、
強いプログラムは何十先の手を先読みし、その中で最善手を選択します。
「ここに置けばここに置こう」という手段を何個も用意しているわけですね。
序盤は置ける場所も少なく先読みも容易ですが、中盤以降になると10手など置ける手が多くなり、その分CPUによる計算もかなりのものとなります。
例えば10個置ける場所があり9手先読みさせるとすれば、10^9で約1,000,000,000の局面を計算する形になります。
まぁ流石にそんな計算を毎回毎回させるわけにもいかず、ここで幾つかの探索アルゴリズムを用います。
私はαβ探索というものを使っています。
簡単にいうと、「いらない物は捨てちゃえ」みたいな人間的な考えに近いものです。
図に表すと↓みたいな感じですが、多分何のこっちゃですね。
このαβ探索で割り振った評価値でソートしていき、上限・下限の評価関数を用いてαβの範囲を(以下略)
-
これは本格的なオセロのプログラムなので、Athenaで実装させるようなものはもっと簡単なCPU対戦ができます。
盤面上に優先度の数値を振っていき、その優先度が高い所に置くという何とも簡単な模擬人工知能です。
どこかにその優先度を振った盤面を書いたと思うのですが、どこにいったのやら・・・
見つかったら既存のオセロゲームを改造して対CPU戦が出来るようにしてみたいと思います。
全然プログラム興味ない人ごめんなさいorz
こより 2007年02月17日(土)14時11分 編集・削除
CPUの思考ルーチンって難しいのよね……。
以前、ぷよぷよもどきを作ろうとして大苦戦しました。
強引にランダム要素突っ込んで解決しちゃったけど……。
こういうところを考えると、コンパイル社って凄いもの作ってたんだよなぁ。