オセロのアルゴリズム比較 Part5
おはようございます!にわこまです。
今回はpythonでつくった8×8のオセロでアルゴリズムの比較を行いました。
比較するアルゴリズムは、評価値です。
何かご指摘があればご連絡ください!
スポンサードサーチ
アルゴリズム比較 Part5
今回は、3パターンの評価値を使って比較を行いました。
評価値とは、1つ1つのマスをどれだけ強いか評価した数値のことです。
評価値を計算する方法までは、作成することが出来なかったためネットで探して見つけた3つのパターンを比較してみました。
8×8のパターンしか見つからなかったため、4×4のパターンでは比較を行えませんでした。
また、評価値には動的評価値と静的評価値がありますが、今回は静的評価値で比較をしました。
動的評価値とは、変わりゆく盤面によってマスの評価値が変わることです。
静的評価値とは、盤面が変化しても決めた評価値が変わらないことです。
以下に3つの評価値のパターンを示します。
・evaluation1
120 | -20 | 20 | 5 | 5 | 20 | -20 | 120 |
-20 | -40 | -5 | -5 | -5 | -5 | -40 | -20 |
20 | -5 | 15 | 3 | 3 | 15 | -5 | 20 |
5 | -5 | 3 | 3 | 3 | 3 | -5 | 5 |
5 | -5 | 3 | 3 | 3 | 3 | -5 | 5 |
20 | -5 | 15 | 3 | 3 | 15 | -5 | 20 |
-20 | -40 | -5 | -5 | -5 | -5 | -40 | -20 |
120 | -20 | 20 | 5 | 5 | 20 | -20 | 120 |
・evaluation2
30 | -12 | 0 | -1 | -1 | 0 | -12 | 30 |
-12 | -15 | -3 | -3 | -3 | -3 | -15 | -12 |
0 | -3 | 0 | -1 | -1 | 0 | -3 | 0 |
-1 | -3 | -1 | -1 | -1 | -1 | -3 | -1 |
-1 | -3 | -1 | -1 | -1 | -1 | -3 | -1 |
0 | -3 | 0 | -1 | -1 | 0 | -3 | 0 |
-12 | -15 | -3 | -3 | -3 | -3 | -15 | -12 |
30 | -12 | 0 | -1 | -1 | 0 | -12 | 30 |
・evaluation3
45 | -11 | 4 | -1 | -1 | 4 | -11 | 45 |
-11 | -16 | -1 | -3 | -3 | -1 | -16 | -11 |
4 | -1 | 2 | -1 | -1 | 2 | -1 | 4 |
-1 | -3 | -1 | 0 | 0 | -1 | -3 | -1 |
-1 | -3 | -1 | 0 | 0 | -1 | -3 | -1 |
4 | -1 | 2 | -1 | -1 | 2 | -1 | 4 |
-11 | -16 | -1 | -3 | -3 | -1 | -16 | -11 |
45 | -11 | 4 | -1 | -1 | 4 | -11 | 45 |
アルゴリズムと手順
今回は、静的評価値であるためを選択するときは、自分が打つ手とひっくり返すマスの評価値を足し合わせます。
足し合わせた値が1番大きいものを選択します。 同点の場合はその中からランダムに選択します。
対局の組み合わせを紹介します。(1つの組み合わせで先手後手を入れ替えて比較を行いました。)
・「evaluation1」VS「evaluation2」
・「evaluation1」VS「evaluation3」
・「evaluation2」VS「evaluation3」
また、対局を100回行いました。100回の対局で以下の要素を記録しました。
・「先手が勝った回数」
・「後手が勝った回数」
・「両者passにより対局が終了した回数」
・「引き分けになった回数」
スポンサードサーチ
比較結果
・先手「evaluation1」VS後手「evaluation2」
先手が勝った回数:77回
後手が勝った回数:19回
両者passにより対局が終了した回数:11回
引き分けの回数:4回
・先手「evaluation2」VS後手「evaluation1」
先手が勝った回数:35回
後手が勝った回数:64回
両者passにより対局が終了した回数:4回
引き分けの回数:1回
・先手「evaluation1」VS後手「evaluation3」
先手が勝った回数:55回
後手が勝った回数:45回
両者passにより対局が終了した回数:3回
引き分けの回数:0回
・先手「evaluation3」VS後手「evaluation1」
先手が勝った回数:43回
後手が勝った回数:56回
両者passにより対局が終了した回数:2回
引き分けの回数:1回
・先手「evaluation2」VS後手「evaluation3」
先手が勝った回数:30回
後手が勝った回数:65回
両者passにより対局が終了した回数:3回
引き分けの回数:5回
・先手「evaluation3」VS後手「evaluation2」
先手が勝った回数:68回
後手が勝った回数:30回
両者passにより対局が終了した回数:3回
引き分けの回数:2回
表にまとめたものを以下に示します。また、先手が勝った回数を右側に記入します。さらに両社passにより対局が終了した回数をカッコ内に記入します。
evaluation1(後手) | evaluation2(後手) | evaluation3(後手) | |
evaluation1(先手) | × | 77-19(11) | 55-45(3) |
evaluation2(先手) | 35-64(4) | × | 30-65(3) |
evaluation3(先手) | 43-56(2) | 68-30(3) | × |
比較的に「両者passにより対局が終了した回数」が少なかったです。
引き分けの回数も少なかったため、3つの評価値のパターンには明確に差があったと考えられます。
以上より、1番強い評価値は
evaluation1
でした。
考察
8×8のオセロにおいて、先手後手の有利差はありません。
ゆえに、
勝ち数が多い方が強いアルゴリズム
勝ち数が少ない方が弱いアルゴリズムになります。
1番強かった「evaluation1」は、他の評価値よりも重要な角やその周りの値の差が1番大きかったです。
逆に1番弱かった「evaluation2」は、差が1番小さかったです。
重要なマスとその周りのマスの差を大きくすることが強い評価値を作るために必要であると考えられます。
スポンサードサーチ
まとめ
今回は、pythonでつくった8×8オセロで評価値の比較を行いました。
3つのパターンで1番強かった評価値は以下のものです。
120 | -20 | 20 | 5 | 5 | 20 | -20 | 120 |
-20 | -40 | -5 | -5 | -5 | -5 | -40 | -20 |
20 | -5 | 15 | 3 | 3 | 15 | -5 | 20 |
5 | -5 | 3 | 3 | 3 | 3 | -5 | 5 |
5 | -5 | 3 | 3 | 3 | 3 | -5 | 5 |
20 | -5 | 15 | 3 | 3 | 15 | -5 | 20 |
-20 | -40 | -5 | -5 | -5 | -5 | -40 | -20 |
120 | -20 | 20 | 5 | 5 | 20 | -20 | 120 |
次回以降は、評価値やPart4などで扱ったアルゴリズムと比較していきたいと思います。
また、評価値の値を参考にしてPart4のアルゴリズムを実行していきます。
最後までお読みいただきありがとうございます。
スポンサードサーチ