Module: RubyShogi::Eval
- Defined in:
- lib/ruby_shogi/eval.rb
Constant Summary collapse
- MATERIAL_SCORE =
{ 1 => 1, 2 => 4.2, 3 => 4.3, 4 => 6.3, 5 => 4.5, 6 => 6.4, 7 => 6.4, 8 => 6.7, 9 => 6.9, 10 => 8.9, 11 => 11.5, 12 => 10.4, 13 => 13, 14 => 0 }
- MATERIAL_HAND_SCORE =
{ 1 => 1.15, 3 => 4.8, 5 => 5.1, 7 => 7.2, 9 => 7.8, 10 => 11.10, 12 => 10.4, 13 => 12.7 }
- CENTRAL_BONUS =
[1,2,3,4,5,4,3,2,1].freeze
- CENTRAL_SCORE =
{ 1 => 0, 2 => 2, 3 => 1, 4 => 2, 5 => 1, 6 => 2, 7 => 2, 8 => 2, 9 => 2, 10 => 2, 11 => 2, 12 => 2, 13 => 2, 14 => 0 }
- EVAL_PST_MG =
[]
Class Method Summary collapse
- .eval(board) ⇒ Object
- .init ⇒ Object
- .material(board) ⇒ Object
- .material2(board) ⇒ Object
- .material3(board) ⇒ Object
Class Method Details
.eval(board) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 |
# 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 ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 |
# 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) ⇒ Object
108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# 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) ⇒ Object
86 87 88 89 90 91 92 |
# 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) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 106 |
# 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 |