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

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

今回はpythonでつくった8×8のオセロを使って、「なぜ評価値(evalution1)は強いのか?」を調べるためにいろんな比較を行いました。

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

 

 

スポンサードサーチ


アルゴリズム比較 Part7

今回は、Part5とPart6で強かった「evaluation1(評価値)」がなぜ強いのかを調べました。

どのアルゴリズムが強くても理由が分からなければ意味がないと思ったため、調べて比較しました。

 

evaluation1は以下のような評価値です。

120-20205520-20120
-20-40-5-5-5-5-40-20
20-5153315-520
5-53333-55
5-53333-55
20-5153315-520
-20-40-5-5-5-5-40-20
120-20205520-20120

 

evaluation2は以下のような評価値です。

30-120-1-10-1230
-12-15-3-3-3-3-15-12
0-30-1-10-30
-1-3-1-1-1-1-3-1
-1-3-1-1-1-1-3-1
0-30-1-10-30
-12-15-3-3-3-3-15-12
30-120-1-10-1230

 

evaluation3は以下のような評価値です。

45-114-1-14-1145
-11-16-1-3-3-1-16-11
4-12-1-12-14
-1-3-100-1-3-1
-1-3-100-1-3-1
4-12-1-12-14
-11-16-1-3-3-1-16-11
45-114-1-14-1145

 

評価値は数字であるため、数字を1番強い評価値に似せれば強くなるのではないかと思いました。

ゆえに、今回は評価値の数字を変化させてどのような変化が起こるのか調べてみました。

 

今回は4つの方法で評価値を変化させて比較を行いました。

・角を120にして、変化した分だけ、マス全体に掛けたり、割ったりする

・角を120にして、変化した分だけ、マス全体に足し合わせる

・角を30にして、変化した分だけ、マス全体に掛けたり、割ったりする

・角を30にして、変化した分だけ、マス全体に足したり、引いたりする

 

角を120にしたものは、evaluation1に評価値を近づけることで強くなるのかを調べました。

角を30にしたものは、evaluation2に評価値を近づけることで弱くなるのかを調べました。

 

 

アルゴリズムと手順

対局の組み合わせは以下の通りです。

・「evaluation1」VS「evaluation2」

・「evaluation1」VS「evaluation3」

・「evaluation2」VS「evaluation3」

 

1つの組み合わせで、先手後手を入れ替えて、100回対局を行いました。以下の回数を記録して比較を行いました。

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

 

角を120にして、変化した分だけ、マス全体に掛けたり、割ったりする

これは、evaluation1の評価値に近づけるための方法です。評価値が増えた割合だけマス全体も増やしました。

evaluation2には、マス全体に「×4」を行いました。

evaluation3には、マス全体に「×(8/3)」を行いました。

 

角を120にして、変化した分だけ、マス全体に足し合わせる

これは、evaluation1の評価値に近づけるための方法です。評価値が増えた分だけマス全体も増やしました。

evaluation2には、マス全体に「+90」を行いました。

evaluation3には、マス全体に「+75」を行いました。

 

角を30にして、変化した分だけ、マス全体に掛けたり、割ったりする

これは、evaluation2の評価値に近づけるための方法です。評価値が減った割合だけマス全体も減らしました。

evaluation1には、マス全体に「÷4」を行いました。

evaluation3には、マス全体に「×(2/3)」を行いました。

 

角を30にして、変化した分だけ、マス全体に足したり、引いたりする

これは、evaluation2の評価値に近づけるための方法です。評価値が減った分だけマス全体も減らしました。

evaluation1には、マス全体に「-90」を行いました。

evaluation3には、マス全体に「-15」を行いました。

 

 

スポンサードサーチ


結果

4つの方法で変化させた対局結果をそれぞれ表にして示します。先手が勝った回数を左側に書きます。また、カッコ内には両者passにより対局が終了した回数を書きます。

その際、評価値の名前を省略して記入します。

evaluation1 → evalu1
evaluation2 → evalu2
evaluation3 → evalu3

 

角を120にして、変化した分だけ、マス全体に掛けたり、割ったりする

evalu1(後手)evalu2(後手)evalu3(後手)
evalu1(先手)×70-29(8)57-39(4)
evalu2(先手)32-64(5)×36-63(3)
evalu3(先手)33-64(6)60-38(3)×

evaluation1が強くて、evaluation2が弱いことが変化させる前と変わりませんでした。

しかし、evalution1の勝った回数が変化させる前より若干減少していました。

 

角を120にして、変化した分だけ、マス全体に足し合わせる

evalu1(後手)evalu2(後手)evalu3(後手)
evalu1(先手)×87-9(1)90-8(2)
evalu2(先手)7-92(0)×55-43(0)
evalu3(先手)17-82(8)60-31(2)×

evaluation1が強くて、evaluation2が弱いことが変化させる前と変わりませんでした。

圧倒的にevaluation1が強いことが分かりました。

 

角を30にして、変化した分だけ、マス全体に掛けたり、割ったりする

evalu1(後手)evalu2(後手)evalu3(後手)
evalu1(先手)×73-25(12)55-44(4)
evalu2(先手)34-60(6)×29-69(3)
evalu3(先手)43-54(5)66-33(6)×

evaluation1が強くて、evaluation2が弱いことが変化させる前と変わりませんでした。

しかし、evaluation1の勝った回数が変化させる前より若干減少していました。

 

角を30にして、変化した分だけ、マス全体に足したり、引いたりする

evalu1(後手)evalu2(後手)evalu3(後手)
evalu1(先手)×20-77(0)48-48(0)
evalu2(先手)72-23(1)×74-21(2)
evalu3(先手)55-42(1)26-69(2)×

 

evaluation1がかなり弱くなっていることが分かりました。

逆に、evaluation2が強くなっていることが分かりました。

 

 

考察

4つの方法の内3つでは、evaluation1が強くて、evaluation2が弱いことが変わりませんでした。

ゆえに、単純に数値を増やしたり減らしたりしても、強くならないと考えられます。

しかし、「角を30にして、変化した分だけ、マス全体に足したり、引いたりする」方法では、evaluation1が弱くて、evaluation2が強くなりました。

これは、evaluation1の評価値に負の数が多くなり、重要なマスが正しく評価されなかったのではないかと考えられます。

 

以上の結果から、1つのマスの評価値は、そのマスがどれだけ重要であるかだけでなく、そのマスと相対的に他のマスがどれくらい重要であるかも関係していると考えられます。

ゆえに、全て正の整数だけや全て負の整数だけでは強い評価値は作れないと考えられます。

 

 

スポンサードサーチ


まとめ

今回は、pythonでつくった8×8のオセロでアルゴリズムの比較を行いました。

どのアルゴリズムが強いか分かっても、どうして強いのか分からなければアルゴリズムを強くできないと思ったため比較してみました。

 

評価値は、そのマスの重要度だけでなく、盤面のマス1つ1つが関係しあって数値が設定されていることが分かりました。

ゆえに、評価値全てが正の整数であったり、全てが負の整数であったりしては、強くならないことが分かりました。

 

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


スポンサードサーチ