オセロのアルゴリズム比較 Part3

おはようございます!にわこまです。

今回はpythonでつくった4×4のオセロでアルゴリズムの比較を行いました。新しいアルゴリズムを1つ加えて比較を行いました。

何かご指摘があればご連絡ください!

 

 

スポンサードサーチ


アルゴリズム比較 Part3

オセロのアルゴリズムの比較は、「Part1」「Part2」と比較してきました。

しかし、あるアルゴリズムを忘れていました。本来ならば最初に比較するべきアルゴリズムです。

 

そのアルゴリズムとは

「ランダム」

です。

 

何も考えず、ランダムに手を選択するアルゴリズムは、強いのか?

 

今回は4×4のオセロで比較を行いました。 比較したアルゴリズムを紹介します。

 

 

比較したアルゴリズムを紹介します。

・ランダム
・「ひっくり返す石を多くする」
・「ひっくり返す石を少なくする」
・「自分が打った手に対して相手の打つ手を多くなする」
・「自分が打った手に対して相手の打つ手を少なくする」

5つのアルゴリズムを使って比較しました。

 

 

アルゴリズムと手順

ランダムアルゴリズムについて説明します。

盤面から打つことが可能なマスを選出して、その中からランダムに選ぶアルゴリズムです。

その他4つのアルゴリズムについてはPart1に説明してあります。

また、それらのアルゴリズムの注意点を以下に示します。

注意
・ひっくり返す石の数や打つことのできる手の数が同数の場合は、配列上1番若いものを選びます。
・よって、同じ組み合わせのアルゴリズムを何回対局させても結果が変わりません。
例:「ひっくり返す石を多くする」VS「ひっくり返す石を少なくする」の対局を行っても、最終盤面や棋譜は全く変わりません。

 

対局の組み合わせは以下の通りです。また、先手後手を入れ替えてアルゴリズムの比較を行いました。

・「ランダム」VS「ひっくり返す石を多くする」

・「ランダム」VS「ひっくり返す石を少なくする」

・「ランダム」VS「自分が打った手に対して相手の打つ手を多くなする」

・「ランダム」VS「自分が打った手に対して相手の打つ手を少なくする」

 

今回はPart1やPart2とは違い、最終盤面が異なるため対局を100回行いました。

100回対局で

・「先手が勝った回数」
・「後手が勝った回数」
・「引き分けになった回数」
・「両者passにより対局が終了した回数」

をそれぞれ数えました。 これら4つの結果から比較を行いました。

 

 

スポンサードサーチ


比較結果

・先手「ランダム」VS後手「ひっくり返す石を多くする」

先手が勝った回数:28回
後手が勝った回数:64回
両者passで対局が終了した回数:59回
引き分けの回数:8回

・先手「ひっくり返す石を多くする」VS後手「ランダム」

先手が勝った回数:51回
後手が勝った回数:48回
両者passで対局が終了した回数:12回
引き分けの回数:0回

 

 

・先手「ランダム」VS後手「ひっくり返す石を少なくする」

先手が勝った回数:33回
後手が勝った回数:60回
両者passで対局が終了した回数:57回
引き分けの回数:7回

・先手「ひっくり返す石を少なくする」VS後手「ランダム」

先手が勝った回数:55回
後手が勝った回数:45回
両者passで対局が終了した回数:26回
引き分けの回数:0回

 

 

・先手「ランダム」VS後手「自分が打った手に対して相手の打つ手を多くなする」

先手が勝った回数:37回
後手が勝った回数:56回
両者passで対局が終了した回数:18回
引き分けの回数:7回

・先手「自分が打った手に対して相手の打つ手を多くなする」VS後手「ランダム」

先手が勝った回数:56回
後手が勝った回数:43回
両者passで対局が終了した回数:5回
引き分けの回数:1回

 

 

・先手「ランダム」VS後手「自分が打った手に対して相手の打つ手を少なくする」

先手が勝った回数:41回
後手が勝った回数:49回
両者passで対局が終了した回数:20回
引き分けの回数:10回

・先手「自分が打った手に対して相手の打つ手を少なくする」VS後手「ランダム」

先手が勝った回数:32回
後手が勝った回数:59回
両者passで対局が終了した回数:20回
引き分けの回数:9回

 

 

表にまとめたものを以下に示します。なお、ランダムが勝った回数から記入し、カッコには両者passで対局が終了した回数を記入します。

また、ランダム以外の4つのアルゴリズムを以下の記号で表します。

A. 「ひっくり返す石を多くする」
B. 「ひっくり返す石を少なくする」
C. 「自分が打った手に対して相手の打つ手を多くなする」
D. 「自分が打った手に対して相手の打つ手を少なくする」

ABCD
ランダム(先手)28-65(59)33-60(57)37-56(18)41-49(10)
ランダム(後手)48-52(12)45-55(26)43-56(5)59-32(20)

 

ランダムが先手で、勝ち越している組み合わせはありません。

ランダムが後手で、勝ち越している組み合わせは、先手「自分が打った手に対して相手の打つ手を少なくする」VS後手「ランダム」の組み合わせです。

 

両者passにより対局が終了した回数が1番多かったのは、先手「ランダム」VS後手「ひっくり返す石を多くする」の組み合わせで59回です。

逆に1番少なかったのは、先手「自分が打った手に対して相手の打つ手を多くなする」VS後手「ランダム」の組み合わせで5回です。

 

結果として、「ランダム」は

弱い。

 

 

考察

4×4のオセロにおいては、後手が圧倒的有利にも関わらず、後手で勝ち越している組み合わせは1つしかありません。

ゆえに、ランダムアルゴリズムは弱いということが分かりました。

 

ある程度規則性をもって、打つ手を考えなければいけないことが分かりました。

もしかしたら、対局の回数を100回ではなく、1000回、1万回と増やしていくことで結果が変わるかもしれません。

 

さらに、8×8のオセロではどのように結果が変わるでしょうか?

Part1とPart2から考えると、同じような結果になると考えられます。

 

 

スポンサードサーチ


まとめ

今回は、pythonでつくった4×4のオセロで「ランダムアルゴリズム」とその他4つのアルゴリズムについて比較してみました。

結果から、ランダムアルゴリズムは弱いということが分かりました。

また、両者passによって対局が終了する回数が多かったと思います。

 

以上のことから、ある程度規則性をもって手を打たなければいけないことが分かりました。

次回は8×8のオセロで比較してみたいと思います。

 

最後までお読みいただきありがとうございます。


スポンサードサーチ