動画内の準備ファイルは必要に応じて配布しています。
古いコンテンツだと用意されていない可能性があります。
用意されていないもので、演習に必要であればお問い合わせください。
2021年12月29日【ID:254】
【趣味】コンピュータ対戦可能なオセロゲーム
・computer
下記のような内容を記述します。
こちらは、コンピュータが自動で駒を配置する機能になります。
※人工知能は実装していないため、弱い設定です。
「配置できる座標の獲得」と記述してある場所では、空白のマスの中で「自分の駒が配置できる場所」を全て取得しています。
その中から、ランダムで配置するという仕組みです。
こちらのゲームでは、コンピュータは必ず「●」になるように実装しています。
なので、「○」の場合は、考慮しなくていいのですが、一応、違う色でも駒を配置できるように記述しています。
・発展:コンピュータを強くする
コンピュータを強くする方法は大きく分けて2つあります。
1つ目は、条件を細かくする。
2つ目は、人工知能により学習させる。
です。
1つ目に関して例を挙げますと、
ランダムで駒の場所を選ぶという仕組みに重みを付けます。
例えば、「配置できる駒の場所」を全て取得すると同時に「裏返せる駒の数」を取得します。
そして、駒の場所を選ぶ際、完全ランダムではなく、裏返せる駒の数が多い方が選ばれやすいようにするという方法です。
他にも、「角が取れる場合は、必ず角を取る」などの条件をvs_computer()に加えることで強くすることが可能です。
2つ目に関して例を挙げますと、
ニューラルネットワークの考えを利用します。
簡単に説明すると、駒を配置できる場所の1手1手を順番に図で表すと下記のようになります。
このようにネットワークを描きます。
この最下層が、勝敗となるわけです。
全てのパターンを記憶させるには膨大の時間がかかりそうです。
なので、部分的に評価付けします。
例えば、最初にaを選んで、次に相手がbを選んで…という戦いになった場合、白20黒44で勝ったとします。
そしたら、最初にaを選ぶと白20黒40で勝つ確率があるといえます。
他の選択だったら、白0黒64で勝っていたかもしれません。
というように、勝ち負けにも沢山あるので、それぞれの勝ち負けに点数付けをします。
例えば、黒の数を点数とした場合、40点よりも64点の方がいい結果だと言えます。
これが評価付けです。
ちなみに、下から2階層目時点での点数付けは、最下層の平均点でもいいかもです。
これを最上層まで行います。
評価付けのために、何試合も自分で行うのは現実的ではないので、 vs_computer() の機能を上手く活用して、コンピュータ自身で戦わせて、点数付けもやらせます。
ただ、全通り戦わせるのは現実的でないため、実行したことのない場所は25点(30点で引き分けなので、負け寄りにしておく)とでも評価しておくといいです。
その実行データをどっかに保存しておきます。
後は、勝負する際に、点数が最高点の分岐を毎回選ばせるだけで、確実に勝てるというイメージになります。
実際に、最高点を選ばせると、コンピュータが強すぎてつまらないので、数回に1回はランダムで設定するといいです。
※その際に、新しい分岐にたどり着いたら、再評価してあげるといいと思います。
長くなりましたが、これらが、コンピュータを強くする方法になります。
2つ目に関しては、Excelでの実装は、なかなかのハードルかと思いますので、参考までにお願いします。
※ こちらのコンテンツには準備ファイルはありません。
【標準モジュール】cal
※メンバーページと連携すると、開発したプログラムの内容が表示されます。
【標準モジュール】computer
※メンバーページと連携すると、開発したプログラムの内容が表示されます。
【シートモジュール】Sheet1(オセロ)
※メンバーページと連携すると、開発したプログラムの内容が表示されます。
【ブックモジュール】ThisWorkbook
※メンバーページと連携すると、開発したプログラムの内容が表示されます。