Python(オセロ10_オセロのロジック)
■少し強いロジックを考えてみる。
以前の記事(Powershell(オセロ013_ロジック_6:ロジックの組み合わせ)など)でいくつかオセロのロジックを考えたけど、当時はChat GPTなど使っていなかった。今回、Chat GPTを使いつつ改めてロジックを検討した。
当時のランダムのロジックに対する結果は下のもの。5000回ゲームをした結果だけど、これは先攻、後攻を変更していない。
| ロジック | 勝率(±2%くらい) |
| 1: 四隅優先 | 78% |
| 2: 一区画優先 | 54% |
| 3: 最多数 | 65% |
| 4: 途中(5回)まで最少数 | 51% |
| 5: 3手先の勝ち筋 | 68% |
| 6: ロジックの組み合わせ(上記1、3、5) | 85% |
上の結果から、一番簡単で効果が高そうな1の四隅優先は使いたい。
他にめぼしいものが無いので新しく検討する。盤上のそれぞれの場所に優先度のスコアをつける手法があるとのことなので、これをベースにして、ゲームの始めと終わり付近だけ、裏返せる最少数、最多数を選ぶロジックを組み合わせたものを使う(下の表で盤上スコア)。
スコアは下の通り、四隅を最も優先して置きたいので、四隅を一番高い100としている。その周りは、四隅を取られるリスクがあるので、-20, -50といった形で優先度を下げる。もし四隅を取ったら、このあたりの優先度を更新して逆に高くする。

最後に、Chat GPTで生成させた強いコードを使う(盤上のスコア、可動性、フロンティア、2手先読みを組み合わせて評価したもの。下の表で複数組み合わせ)。
互いに対戦させた結果が下。とりあえず500回ずつ対戦。こちらは先攻、後攻を交互に実施。
| 勝率(%)、右が相手 | ランダム | 四隅優先 | 盤上スコア | 複数組み合わせ |
| 四隅優先 | 78.6 % | --- | --- | --- |
| 盤上スコア | 91.4 % | 83.8 % | --- | --- |
| 複数組み合わせ | 86.4 % | 79.0 % | 68.8 % | --- |
四隅優先のランダムに対する結果は前回と同じ78%の勝率。盤上スコアはランダムに対して9割越えで一番成績が良さそうだけど、複数組み合わせと対戦させると後者の方が強かった。
結果として、ランダム < 四隅優先 < 盤上スコア < 複数組み合わせ といった順で強いと言えそう。
ランダムと生成AIの対戦は行っているので、他3つに対して見ていきたい。
深層学習などを使えばもっと強いロジックはできるだろうけど、生成AIの対戦相手の強さを見るぐらいなら上3つで十分かと思う。

