Ruby でリバーシ(オセロ)

昨日、Min-Max法で戦うプレイヤを作りましたが、評価関数を変えたらもっと強くなるんじゃないか?と思い、もう少しマシな評価関数にしてみました。
評価関数はココを参考にさせてもらいました。http://hitsujiai.blog48.fc2.com/blog-entry-26.html
昨日のMinMaxPlayerと対戦させてみたところ、先攻後攻入れ替えても圧勝です。

MinMaxPlayer ○black 24
MinMaxPlayer2●white 40 ←強い!

MinMaxPlayer2○black 46 ←やっぱり強い!
MinMaxPlayer ●white 18

# ReversiMinMax2.rb
require "Reversi"
require "ReversiAI"
require "ReversiMinMax"


# Min-Max法
# 評価関数は、自分のコマの数。
# depth は 3 or 4 手ぐらいが妥当です。
class MinMaxPlayer2 < MinMaxPlayer
    # 評価関数。
    # 参考 http://hitsujiai.blog48.fc2.com/blog-entry-26.html
    def eval(board)
        value = 0
        for y in 1..Reversi::SIZE
            for x in 1..Reversi::SIZE
                if board.get(x, y) == @color then
                    value += WEIGHT[y-1][x-1]
                else
                    value -= WEIGHT[y-1][x-1]
                end
            end
        end
        value
    end
    WEIGHT = [
        [120, -20,  20,   5,   5,  20, -20, 120],
        [-20, -40,  -5,  -5,  -5,  -5, -40, -20],
        [ 20,  -5,  15,   3,   3,  15,  -5,  20],
        [  5,  -5,   3,   3,   3,   3,  -5,   5],
        [  5,  -5,   3,   3,   3,   3,  -5,   5],
        [ 20,  -5,  15,   3,   3,  15,  -5,  20],
        [-20, -40,  -5,  -5,  -5,  -5, -40, -20],
        [120, -20,  20,   5,   5,  20, -20, 120]]
end


def test()
    player_b = MinMaxPlayer2.new(:black, 3)
    player_w = MinMaxPlayer.new(:white, 3)
    play(player_b, player_w)
end

では、いよいよ人間様(a-san)との対決です。
結果は人間様(a-san)が勝ちました。
確かに「隅へのシノギ」がうまくなってます。運が悪ければ負けていたかも。

play(ManPlayer.new(:black),MinMaxPlayer2.new(:white,3))
■■■■■■■■■■
■○○○○○○○○■
■○○●○●●○●■
■●●●●●●●○■
■●●○○○●●○■
■○○●○○○●○■
■○○○●○○●○■
■●●○●○○○○■
■○○○○○○○○■
■■■■■■■■■■
○black 42  ←a-san
●white 22
winner:black
=> :black