private void Minimax(ActionTreeVertex vertex) { foreach (var actionTreeVertex in vertex.Branches) { var min = actionTreeVertex.Value.Branches.Min(g => g.Value.Score); actionTreeVertex.Value.Score = min; } }
private void ExpandTree(ActionTreeVertex vertex, int level) { if (level > 0) { ExpandVertex(vertex); foreach (var actionTreeVertex in vertex.Branches) { ExpandTree(actionTreeVertex.Value, level - 1); } } }
private void ExpandVertex(ActionTreeVertex vertex) { var actions = AllActions(vertex.Game.Board, vertex.Game.Turn); foreach (var action in actions) { var game = vertex.Game.Clone(); game.Play(action.PositionToMove, action.Move); var innerVertex = new ActionTreeVertex(game); innerVertex.Score = Evaluation.Evaluate(game.Board, Color); vertex.Branches[action] = innerVertex; } }
private void Minimax(ActionTreeVertex vertex, bool isMax, int level) { if (level > 0) { foreach (var actionTreeVertex in vertex.Branches) { Minimax(actionTreeVertex.Value, !isMax, level - 1); } if (vertex.Branches.Count > 0) { if (isMax) { vertex.Score = vertex.Branches.Max(g => g.Value.Score); } else { vertex.Score = vertex.Branches.Min(g => g.Value.Score); } } } }
public ActionTree(Game game) { Root = new ActionTreeVertex(game); }