85DATA OTHELLO PAGE ホームへ
MYCARオセロプログラムの作り方掲示板BLOGプロフィール

OthelloPage HOMEオセロプログラムの作り方 

※「Othello、オセロ」は株式会社メガハウスの登録商標です。

4.辺と確定石の評価

盤を評価すると前章で書きました。
盤の評価として、他に考えられる要素が「辺」です。
辺の全パターンを計算してみると
石の色 (なし、黒、白) 3パターンが8マスありますので、3の8乗=6561パターンとなります。
その6561パターン全ての評価(得点の)テーブルを準備します。

上図の赤枠で囲まれた4辺(上辺、下辺、右辺、左辺)の評価をする訳です。

一例ですが、1辺のパターンが

このパターン(「ブロック」と言う) ならば、黒 +1点

 

このパターン(「山」と言う) ならば、黒 +2点

 

このパターン(「ウィング」と言う) 黒 -1点

 

 このパターンでは次の手で白が両隅を取れますから、
白にとっては高得点、黒にとっては大減点

確定石(将来裏返されない石)が3つあるから、
確定石 3×10= +30点


※上記の得点はあくまでも一例です。

辺における「良形と悪形」については、さきとぴよのオセロ講座C 「良形悪形編」をご覧いただければ良く理解できると思います。

上記では、5パターンを例にしましたが、
同様に、6561パターンの(黒と白の)得点をあらかじめ計算させておき、辺の得点テーブルを作成します。

この得点テーブルは、次手が白か黒かで評価が変わってきます。

例えば、次の辺を例に取ってみます。


この辺の形は、次手が白だった場合は隅も取れ、次の様になりますね。
確定石が6個になり白にとって、とても良い手です。


しかし、次手が黒だった場合は、



黒の山という形になり、白にとってはあまり良い手ではありません。

つまり、次手が何色かによって辺の評価を変えてあげる必要があります。
これらも踏まえて得点をあらかじめ計算させる必要があります。

確定石(将来裏返されない石の数)も計算させておき,同様に辺の得点テーブルに加えます。

辺の得点+確定石の得点を計算します。
※確定石は、あくまでも辺による確定石です。正確な確定石の計算を実装しようとすると計算速度のコストがかかってしまうので、私のソフトは省略してしまっています。

コードとしては、下記の様になります。(Basic的コードです)  ※変数名にセンスが無いのはご愛嬌と言うことで・・・

/*
Ban(1,1)〜Ban(8,8) 盤を2次元配列で表現
Hyouka_hen(0,0)〜Hyouka_hen(6560,1) に辺の評価得点 (事前に登録しておく)
    次手が何色かで評価が異なる為に、2次元配列にしてある。
    変数 iro は 次手が何色かを示す。
Kakutei_hen(0)〜Kakutei_hen(6560) に確定石数 (事前に登録しておく)
石の表現を空き=0 , 黒=1 , 白=2 の様な3進数として計算
*/

Hen1=Ban(1,1)+Ban(1,2)*3+Ban(1,3)*9+Ban(1,4)*27+Ban(1,5)*81+Ban(1,6)*243+Ban(1,7)*729+Ban(1,8)*2187 '※1
Hen2=Ban(8,1)+Ban(8,2)*3+Ban(8,3)*9+Ban(8,4)*27+Ban(8,5)*81+Ban(8,6)*243+Ban(8,7)*729+Ban(8,8)*2187 '※1
Hen3=Ban(1,1)+Ban(2,1)*3+Ban(3,1)*9+Ban(4,1)*27+Ban(5,1)*81+Ban(6,1)*243+Ban(7,1)*729+Ban(8,1)*2187 '※1
Hen4=Ban(1,8)+Ban(2,8)*3+Ban(3,8)*9+Ban(4,8)*27+Ban(5,8)*81+Ban(6,8)*243+Ban(7,8)*729+Ban(8,8)*2187 '※1

Hyouka1=Hyouka_hen(Hen1,iro)
Hyouka2=Hyouka_hen(Hen2,iro)
Hyouka3=Hyouka_hen(Hen3,iro)
Hyouka4=Hyouka_hen(Hen4,iro)

Kakutei1=Kakutei_hen(Hen1)
Kakutei2=Kakutei_hen(Hen2)
Kakutei3=Kakutei_hen(Hen3)
Kakutei4=Kakutei_hen(Hen4)

 
'※1
上記は、次の様に置き換える事が可能です。(HEN2〜3も同様です)

(((((((BAN(1,8)*3+BAN(1,7))*3+BAN(1,6))*3+BAN(1,5))*3+BAN(1,4))*3+BAN(1,3))*3+BAN(1,2))*3+BAN(1,1))
計算結果は同じですが、こちらの方がわずかに処理速度が速いもようです
リバーシプログラムは処理速度が非常に重要である為、少しでも速い処理を採用した方が良いでしょう。
(プログラムは見づらくなりますが・・・)

斜めの評価 (ホワイトラインとブラックライン)
 ※ホワイトラインとブラックラインについては「さきとぴよのオセロ講座の”基礎用語編”」に書かれています

辺の評価と同様に、斜めの評価も行うのも良いでしょう。


計算方法は辺と同様ですが、評価点は辺の得点テーブルとは異なります。

評価得点の計算

コンピュータの得点−人間の得点 = 評価とします。
(前章の盤の評価も加えて計算します)

この評価が一番高い箇所に石を置く(打つ)ようにします。

評価得点の計算として、下記の様にしてみました。

評価得点=石の位置(前章を参照)×係数1
       +辺の得点                  ×係数2
       +斜めの得点              ×係数3
       +確定石の数              ×係数4

係数1〜4は、ゲームの進行状況(序盤、中盤、終盤)などで、変化させています。
この係数は、どの評価に重みを置くのかを変化させるためです。
(例えば、隅は序盤や中盤には重要な要因ですが、終盤は価値が下がりますよね。
 極端に言えば最後の1手に隅を取っても意味ないと言う事です)

※強いプログラムでは、この係数の計算を回帰分析をさせているようです。
私のプログラムは、それを手でチューニングしてみましたが強さの向上としては限界があるみたいです。

これを1手先読みと言うみたいですね。

このレベルで、普通の人と良い勝負にはなるのではないでしょうか?
しかし、オセロプログラムとしては、まだまだ、弱いです。

   B-NEXT.GIF - 453BYTES