【オセロ】超簡単制作、CPUアルゴリズム(AI)を公開!
こんにちは。えいたです。
オセロについて、CPUに勝利できましたか?
CPU:石はランダムではなく、ルールに従って配置
よって、初心者のビギナーズラックは防止しています。
勝利の法則:四隅に石を配置できれば、有利に進む可能性が大きい
CPUはプレイヤーが、四隅に石を置ける箇所に配置しない。そこしか置けない場合に対して、仕方なく配置します。オセロ初心者と同様の思考?
しかし、オセロのロジックは奥が深く・・・四隅を奪われても、勝利可能!
その判断方法は、評価値に基づいて行います。
Minimaxアルゴリズム
大学生の時に購入した参考書。仕事のプログラムより、内容が複雑です。
完全情報(運に左右されない)ゲームについて、Minimaxアルゴリズムを使用します。
想定される最大の損害が最小になるように決断を行う戦略のこと。将棋、チェス、オセロなどといった完全情報ゲームをコンピュータに思考させるためのアルゴリズムとしても用いられるが、元々はフォン・ノイマンが中心となって数学的に理論化されたゲーム理論において、打ち手を決定する際に適用されるルールの一つ。
局面の有利度を適切に評価することができれば、自分の打てる手のうち、最も評価の高い局面を出現させるような手を選択すればよいことになる。
考え方の基本:自分にとっての最善手とは、相手にとっての最悪手
- 相手の手番:自分に最も不利な手を選択(仮定)
- 自分の出番:自分に最も良い手を選択
デメリット:先読み数が増えれば、処理時間が爆発的に増加
よって、探索を一定のレベルで打ち切る必要があります。
最も評価の高い局面
それが分かれば、僕はオセロのプロです。
Bonanza(将棋プログラム):数々の対局を読み込ませて、パターン解析
確実に言えることは、四隅は他の箇所より評価が高い。
アルゴリズム公開
ガッカリしないで下さいね・・・
Minimaxアルゴリズムは使用せず、評価値は四隅とその周りのみ。
青:四隅(最も評価が良い)、赤:四隅の周り(最も評価が悪い)、白:その他
- 石の配置優先度は「青 → 白 → 赤」
- 優先度が同じ・配置箇所が複数存在する場合は、相手の石を最も多く挟める箇所に配置
- ②が複数存在する場合、ランダムで決定
以上、僕のオリジナル「小学生オセロアルゴリズム」でした。
さいごに
言い訳ですが、オセロの制作時間は1日です。
AIに熱中した場合、ゲームが一生完成しない気がする・・・。
もちろん、CPUのロジックはクラスに分離しています。その部分を書き換えれば、CPUを強化する仕組みです。書き換える機会、あるのかな?
アルゴリズムを考えることは、プログラムの記述と別物
時間短縮のため、超簡単アルゴリズムで妥協しました。