module RubyShogi::Eval

Constants

CENTRAL_BONUS
CENTRAL_SCORE
EVAL_PST_MG
MATERIAL_HAND_SCORE
MATERIAL_SCORE

en.wikipedia.org/wiki/Shogi_strategy#Relative_piece_value

Public Class Methods

eval(board) click to toggle source
# File lib/ruby_shogi/eval.rb, line 73
def Eval.eval(board)
        score = 0
        board.brd.each_with_index do |p, i|
                score += case p
                        when 1..14 then EVAL_PST_MG[p - 1][i]
                        when -14..-1 then EVAL_PST_MG[-p - 1][i]
                        else 
                                0
                        end
        end
        0.01 * score
end
init() click to toggle source
# File lib/ruby_shogi/eval.rb, line 60
def Eval.init
        return if EVAL_PST_MG.length > 0
        14.times do |i|
                arr = []
                81.times do |j|
                        score = 0.1 * (MATERIAL_SCORE[i + 1] + 2 * CENTRAL_SCORE[i + 1] * (CENTRAL_BONUS[j % 9 ] + CENTRAL_BONUS[j / 9]))
                        arr.push(score)
                end
                EVAL_PST_MG.push(arr)
        end
        EVAL_PST_MG.freeze
end
material(board) click to toggle source
# File lib/ruby_shogi/eval.rb, line 108
def Eval.material(board)
        score = 0
        board.brd.each do |p|
                score += case p
                        when 1..14 then MATERIAL_SCORE[p]
                        when -14..-1 then -MATERIAL_SCORE[-p]
                        else 
                                0
                        end
        end
        board.white_pocket.each { |p| score += MATERIAL_HAND_SCORE[p] }
        board.black_pocket.each { |p| score -= MATERIAL_HAND_SCORE[-p] }
        score
end
material2(board) click to toggle source
# File lib/ruby_shogi/eval.rb, line 86
def Eval.material2(board)
        #board.print_board
        #puts Eval.material2(board)
        #puts Eval.material3(board)
        #fail if Eval.material2(board) != Eval.material3(board)
        0
end
material3(board) click to toggle source
# File lib/ruby_shogi/eval.rb, line 94
def Eval.material3(board)
        score = board.brd.inject do |sum, p|
                sum += case p
                        when 1..14 then MATERIAL_SCORE[p]
                        when -14..-1 then -MATERIAL_SCORE[-p]
                        else 
                                0
                        end
        end
        board.white_pocket.each { |p| score += MATERIAL_HAND_SCORE[p] }
        board.black_pocket.each { |p| score -= MATERIAL_HAND_SCORE[-p] }
        score
end