class TicTacToe::Negamax
Public Class Methods
new(parameters)
click to toggle source
# File lib/negamax.rb, line 3 def initialize(parameters) @child_node_generator = parameters[:child_node_generator] @terminal_node_criterion = parameters[:terminal_node_criterion] @evaluation_heuristic = parameters[:evaluation_heuristic] end
Public Instance Methods
apply(node)
click to toggle source
# File lib/negamax.rb, line 9 def apply(node) if terminal_node?(node) node else generate_child_nodes(node).max_by { |child| -score(child, -1) } end end
Private Instance Methods
evaluate(node, color)
click to toggle source
# File lib/negamax.rb, line 35 def evaluate(node, color) @evaluation_heuristic.call(node) * color end
generate_child_nodes(node)
click to toggle source
# File lib/negamax.rb, line 27 def generate_child_nodes(node) @child_node_generator.call(node) end
score(node, color)
click to toggle source
# File lib/negamax.rb, line 19 def score(node, color) if terminal_node?(node) evaluate(node, color) else generate_child_nodes(node).map { |child| -score(child, -color) }.max end end
terminal_node?(node)
click to toggle source
# File lib/negamax.rb, line 31 def terminal_node?(node) @terminal_node_criterion.call(node) end