Exemplo n.º 1
0
        private double MaxValue(TState state, double alpha, double beta)
        {
            if (problem.TerminalTest(state))
            {
                return(problem.Utility(state, searchPlayer));
            }

            var vector = double.NegativeInfinity;

            var actions = problem.Actions(state);

            foreach (var action in actions)
            {
                vector = Math.Max(vector, MinValue(problem.Result(state, action), alpha, beta));

                if (vector >= beta)
                {
                    return(vector);
                }

                alpha = Math.Max(alpha, vector);
            }

            return(vector);
        }
Exemplo n.º 2
0
        public TAction Search(TState state, IAdversarialSearchProblem <TState, TAction> problem)
        {
            this.problem = problem;

            searchPlayer = problem.Player(state);

            var a = default(TAction);

            var alpha = double.NegativeInfinity;

            var actions = problem.Actions(state);

            foreach (var action in actions)
            {
                var vector = MinValue(problem.Result(state, action));

                //var min = Minimax(Problem.Result(state, action));

                if (vector > alpha)
                {
                    alpha = vector;
                    a     = action;
                }
            }

            return(a);
        }