def evaluate_tree_alpha_beta(self, currentNode: Node, parentEvaluator: int = None) -> None: if currentNode.is_leaf: currentNode.evaluator_value = 1 if self.is_player_first == ( currentNode.depth % 2 == 1) else -1 else: child_evaluate_values = [] current_evaluation: int = None is_current_max = currentNode.depth % 2 == 0 for child in currentNode.children: self.evaluate_tree_alpha_beta(child, current_evaluation) if child.evaluator_value: if parentEvaluator: skipped: bool = ( child.evaluator_value >= parentEvaluator ) if is_current_max else ( parentEvaluator <= child.evaluator_value) if skipped: return if not current_evaluation or (is_current_max == child.evaluator_value > current_evaluation): current_evaluation = child.evaluator_value child_evaluate_values.append(child.evaluator_value) evaluate = max(child_evaluate_values) if is_current_max else min( child_evaluate_values) currentNode.evaluator_value = evaluate self.nodesVisited += 1
def evaluate_tree_min_max(self, currentNode: Node) -> None: if currentNode.is_leaf: currentNode.evaluator_value = 1 if self.is_player_first == ( currentNode.depth % 2 == 1) else -1 else: child_evaluate_values = [] for child in currentNode.children: self.evaluate_tree_min_max(child) child_evaluate_values.append(child.evaluator_value) evaluate = max(child_evaluate_values) if ( currentNode.depth % 2 == 0) else min(child_evaluate_values) currentNode.evaluator_value = evaluate self.nodesVisited += 1
def evaluateTreeMinMax(self, currentNode: Node): if currentNode.is_leaf: currentNode.evaluator_value = 1 if (currentNode.depth % 2 == 1) else -1 else: childEvaluateValues = [] for child in currentNode.children: self.evaluateTreeMinMax(child) childEvaluateValues.append(child.evaluator_value) evaluate = max(childEvaluateValues) if ( currentNode.depth % 2 == 0) else min(childEvaluateValues) currentNode.evaluator_value = evaluate self.nodesVisited += 1