示例#1
0
 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;
     }
 }
示例#2
0
 private void ExpandTree(ActionTreeVertex vertex, int level)
 {
     if (level > 0)
     {
         ExpandVertex(vertex);
         foreach (var actionTreeVertex in vertex.Branches)
         {
             ExpandTree(actionTreeVertex.Value, level - 1);
         }
     }
 }
示例#3
0
        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;
            }
        }
示例#4
0
        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);
                    }
                }
            }
        }
示例#5
0
 public ActionTree(Game game)
 {
     Root = new ActionTreeVertex(game);
 }