オセロのアルゴリズム比較 Part6
おはようございます!にわこまです。
今回はpythonでつくった8×8のオセロでアルゴリズムの比較を行いました。
Part5で1番強かった評価値とその他で比較を行いました。
何かご指摘があればご連絡ください!
スポンサードサーチ
アルゴリズム比較 Part6
今回は、Part5で1番強いアルゴリズムだった「evaluation1」の評価値とその他のアルゴリズムで比較を行いました。
その他のアルゴリズムとは
・ランダム
・「ひっくり返す石を多くする」
・「ひっくり返す石を少なくする」
・「自分が打った手に対して相手の打つ手を多くなする」
・「自分が打った手に対して相手の打つ手を少なくする」
の5つです。
どのアルゴリズムも、圧倒的に勝率が高いわけではないため、今回の比較で勝率が高いアルゴリズムを見極めていきたいと思います。
アルゴリズムと手順
アルゴリズムについて説明します。
評価値は、打つマスと石をひっくり返すマスの合計得点が1番大きいマスを選択します。
なお、合計得点が同点の場合は、その中からランダムに選出するように設定しました。
「ランダム」は、盤面から石を打つことが可能なマスからランダムに選ぶように設定しました。
「ひっくり返す石を多くする」は、盤面から1番多く石をひっくり返せるマスを選びます。
ひっくり返す石の数が同数の場合はその中からランダムで選出するように設定しました。
「ひっくり返す石を少なくする」は、盤面から1番少なく石をひっくり返せるマスを選びます。
ひっくり返す石の数が同数の場合はその中からランダムで選出するように設定しました。
「自分が打った手に対して相手の打つ手を多くなする」は、自分が打った手に対して盤面を更新し、相手が打つことが出来るマスを多くなる手を選出するように設定しました。
また、相手が打つことが出来るマスの数が同数の場合は、その中からランダムで選出するように設定しました。
「自分が打った手に対して相手の打つ手を少なくする」は、自分が打った手に対して盤面を更新し、相手が打つことが出来るマスを少なくする手を選出するように設定しました。
また、相手が打つことが出来るマスの数が同数の場合は、その中からランダムで選出するように設定しました。
対局の組み合わせは以下の通りです。また、先手後手を入れ替えて対局を行いました。
・「evaluation1(評価値)」VS「ランダム」
・「evaluation1(評価値)」VS「ひっくり返す石を多くする」
・「evaluation1(評価値)」VS「ひっくり返す石を少なくする」
・「evaluation1(評価値)」VS「自分が打った手に対して相手の打つ手を多くなする」
・「evaluation1(評価値)」VS「自分が打った手に対して相手の打つ手を少なくする」
同じ組み合わせで対局を100回行いました。その際以下の数を記録しました。
・「先手が勝った回数」
・「後手が勝った回数」
・「引き分けになった回数」
・「両者passにより対局が終了した回数」
4つの数からどのアルゴリズムが強いか?弱いか?比較を行いました。
スポンサードサーチ
比較結果
・先手「evaluation1」VS後手「ランダム」
先手が勝った回数:79回
後手が勝った回数:17回
両者passにより対局が終了した回数:2回
引き分けの回数:4回
・先手「ランダム」VS後手「evaluation1」
先手が勝った回数:14回
後手が勝った回数:84回
両者passにより対局が終了した回数:1回
引き分けの回数:2回
・先手「evaluation1」VS後手「ひっくり返す石を多くする」
先手が勝った回数:77回
後手が勝った回数:21回
両者passにより対局が終了した回数:2回
引き分けの回数:2回
・先手「ひっくり返す石を多くする」VS後手「evaluation1」
先手が勝った回数:13回
後手が勝った回数:81回
両者passにより対局が終了した回数:2回
引き分けの回数:6回
・先手「evaluation1」VS後手「ひっくり返す石を少なくする」
先手が勝った回数:69回
後手が勝った回数:24回
両者passにより対局が終了した回数:2回
引き分けの回数:7回
・先手「ひっくり返す石を少なくする」VS後手「evaluation1」
先手が勝った回数:25回
後手が勝った回数:72回
両者passにより対局が終了した回数:3回
引き分けの回数:3回
・先手「evaluation1」VS後手「自分が打った手に対して相手の打つ手を多くなする」
先手が勝った回数:82回
後手が勝った回数:14回
両者passにより対局が終了した回数:7回
引き分けの回数:4回
・先手「自分が打った手に対して相手の打つ手を多くなする」VS後手「evaluation1」
先手が勝った回数:17回
後手が勝った回数:80回
両者passにより対局が終了した回数:5回
引き分けの回数:3回
・先手「evaluation1」VS後手「自分が打った手に対して相手の打つ手を少なくする」
先手が勝った回数:75回
後手が勝った回数:18回
両者passにより対局が終了した回数:0回
引き分けの回数:7回
・先手「自分が打った手に対して相手の打つ手を少なくする」VS後手「evaluation1」
先手が勝った回数:11回
後手が勝った回数:88回
両者passにより対局が終了した回数:0回
引き分けの回数:1回
表にまとめたものを以下に示します。また、「evaluation1」が勝った回数から記入します。さらに、カッコ内に両者passにより対局が終了した回数を記入します。
A:「ランダム」
B:「ひっくり返す石を多くする」
C:「ひっくり返す石を少なくする」
D:「自分が打った手に対して相手の打つ手を多くなする」
E:「自分が打った手に対して相手の打つ手を少なくする」
A | B | C | D | E | |
evaluation1(先手) | 79-17(2) | 77-21(2) | 69-24(2) | 82-14(7) | 75-18(0) |
evaluation1(後手) | 84-14(1) | 81-13(2) | 72-25(3) | 80-17(5) | 88-11(0) |
「evaluation1」は、先手後手に関わらず勝った回数が多かったです。
「両者passにより対局が終了した回数」と「引き分けの回数」は、少なかったため実行時間が長かったです。
「ひっくり返す石を少なくする」が1番「evaluation1」から勝ち数を取っていました。
結果「evaluation1」は
強い
考察
「evaluation1」は、その他のアルゴリズムよりかなり強いことが分かりました。
評価値は、そのマスの強さみたいなものを数値化しているため、その他のアルゴリズムより強いと考えられます。
ゆえに、評価値とその他のアルゴリズムを組み合わせると、より強いアルゴリズムができるのではないかと考えられます。
また、90回以上は勝つことが出来ていないため、評価値自体にも改善のよりがあるのではないかと考えられます。
スポンサードサーチ
まとめ
今回は、pythonでつくった8×8のオセロで「evaluation1(評価値)」とその他のアルゴリズムを比較してみました。
「evaluation1(評価値)」は、その他のアルゴリズムと比べると圧倒的に強いことが分かりました。
しかし、100%勝つことが出来るアルゴリズムでもないことが分かりました。
ゆえに、「evaluation1(評価値)」にも改善の余地があることが分かりました。
最後までお読みいただきありがとうございます。
スポンサードサーチ