オセロのアルゴリズム比較 Part4
おはようございます!にわこまです。
今回はpythonでつくった8×8のオセロでアルゴリズムの比較を行いました。
Part3で新しく追加した「ランダム」を8×8のオセロでも比較してみました。
何かご指摘があればご連絡ください!
スポンサードサーチ
アルゴリズム比較 Part4
Part3から引き続きPart4でも「ランダム」の比較を行いました。
4×4のオセロでは、「ランダム」は弱いアルゴリズムでした。
8×8のオセロでも同じような結果になるのか比較してみました。
比較したアルゴリズムを紹介します。
・ランダム
・「ひっくり返す石を多くする」
・「ひっくり返す石を少なくする」
・「自分が打った手に対して相手の打つ手を多くなする」
・「自分が打った手に対して相手の打つ手を少なくする」
5つのアルゴリズムを使って比較しました。
アルゴリズムと手順
アルゴリズムについて説明します。
盤面から打つことが可能なマスを選出して、その中からランダムに選ぶアルゴリズムです。
その他のアルゴリズムについてはPart1に説明してあります。
また、それらのアルゴリズムの注意点を以下に示します。
注意
・ひっくり返す石の数や打つことのできる手の数が同数の場合は、配列上1番若いものを選びます。
・よって、同じ組み合わせのアルゴリズムを何回対局させても結果が変わりません。
例:「ひっくり返す石を多くする」VS「ひっくり返す石を少なくする」の対局を行っても、最終盤面や棋譜は全く変わりません。
対局の組み合わせは以下の通りです。また、先手後手を入れ替えてアルゴリズムの比較を行いました。
・「ランダム」VS「ひっくり返す石を多くする」
・「ランダム」VS「ひっくり返す石を少なくする」
・「ランダム」VS「自分が打った手に対して相手の打つ手を多くなする」
・「ランダム」VS「自分が打った手に対して相手の打つ手を少なくする」
今回はPart1やPart2とは違い、最終盤面が異なるため対局を100回行いました。 100回対局で
・「先手が勝った回数」
・「後手が勝った回数」
・「引き分けになった回数」
・「両者passにより対局が終了した回数」
をそれぞれ数えました。 これら4つの結果から比較を行いました。
スポンサードサーチ
比較結果
・先手「ランダム」VS後手「ひっくり返す石を多くする」
先手が勝った回数:56回
後手が勝った回数:42回
両者passで対局が終了した回数:1回
引き分けの回数:2回
・先手「ひっくり返す石を多くする」VS後手「ランダム」
先手が勝った回数:41回
後手が勝った回数:55回
両者passで対局が終了した回数:1回
引き分けの回数:4回
・先手「ランダム」VS後手「ひっくり返す石を少なくする」
先手が勝った回数:39回
後手が勝った回数:54回
両者passで対局が終了した回数:2回
引き分けの回数:7回
・先手「ひっくり返す石を少なくする」VS後手「ランダム」
先手が勝った回数:43回
後手が勝った回数:52回
両者passで対局が終了した回数:0回
引き分けの回数:5回
・先手「ランダム」VS後手「自分が打った手に対して相手の打つ手を多くなする」
先手が勝った回数:56回
後手が勝った回数:44回
両者passで対局が終了した回数:5回
引き分けの回数:0回
・先手「自分が打った手に対して相手の打つ手を多くなする」VS後手「ランダム」
先手が勝った回数:47回
後手が勝った回数:52回
両者passで対局が終了した回数:3回
引き分けの回数:1回
・先手「ランダム」VS後手「自分が打った手に対して相手の打つ手を少なくする」
先手が勝った回数:47回
後手が勝った回数:50回
両者passで対局が終了した回数:4回
引き分けの回数:3回
・先手「自分が打った手に対して相手の打つ手を少なくする」VS後手「ランダム」
先手が勝った回数:50回
後手が勝った回数:49回
両者passで対局が終了した回数:3回
引き分けの回数:1回
表にまとめたものを以下に示します。なお、ランダムが勝った回数から記入し、カッコには両者passで対局が終了した回数を記入します。
また、ランダム以外の4つのアルゴリズムを以下の記号で表します。
A. 「ひっくり返す石を多くする」
B. 「ひっくり返す石を少なくする」
C. 「自分が打った手に対して相手の打つ手を多くなする」
D. 「自分が打った手に対して相手の打つ手を少なくする」
A | B | C | D | |
ランダム(先手) | 56-42(1) | 39-54(2) | 56-44(5) | 47-50(4) |
ランダム(後手) | 55-41(1) | 52-43(0) | 52-47(3) | 49-50(3) |
8×8のオセロにおいて、先手後手の有利差はありません。よって、単純に勝ち数が多い方が強いアルゴリズムとなります。
ランダムは、ほとんどの対局で勝ち越しています。
唯一、「自分が打った手に対して相手の打つ手を少なくする」との対局では、「ランダム」は勝ち越すことが出来ませんでした。
また、「ひっくり返す石を少なくする」との対局では、「ランダム」が先手の場合に大差で負け越しています。
以上より「ランダム」は、
強くも弱くもない。
考察
8×8のオセロにおいて、先手後手の有利差はありません。
ゆえに、
勝ち数が多い方が強いアルゴリズム
勝ち数が少ない方が弱いアルゴリズムになります。
今回は、大差でランダムアルゴリズムが勝ち越している組み合わせはありませんでした。
よって、対局する回数を1000回、1万回などと増やしていけば、ほとんど同じ勝ち数になるか、または勝ち数の差が開くと考えられます。
さらに、ランダムアルゴリズム以外のアルゴリズムは手を選択するときに、盤面の評価値を 考慮して選択できるようにする必要があると考えられます。
Part3では、「ランダム」は強かったですが、今回のPart4では異なる結果となりました。
スポンサードサーチ
まとめ
今回は、pythonでつくった8×8のオセロで「ランダムアルゴリズム」とその他4つのアルゴリズムについて比較してみました。
結果から、8×8のオセロでは「ランダムアルゴリズム」は、強くも弱くもないことが分かりました。
以上のことから、もっとアルゴリズムを考えて作成しなければいけないことが、わかりました。
最後までお読みいただきありがとうございます。
スポンサードサーチ