Exemplo n.º 1
0
        public int max_value(State state, int alfa, int beta)
        {
            if (cut(state) || state.gameIsOver())
            {
                return(eval(state));
            }

            int v = Int32.MinValue;
            int temp;
            LinkedList <int[]> moves = RuleMachine.possible_moves(state);

            foreach (var move in moves)
            {
                //MAX(v,min_value(result(s,a),alfa,beta))
                temp = min_value(State.result(state, move), alfa, beta);
                if (v < temp)
                {
                    v = temp;
                }

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

                //MAX(alfa,v)
                if (alfa < v)
                {
                    alfa = v;
                }
            }
            return(v);
        }
Exemplo n.º 2
0
        public int[] alpha_beta_search(State state)
        {
            int v    = Int32.MinValue;
            int alfa = Int32.MinValue;
            int beta = Int32.MaxValue;

            LinkedList <int[]> moves = RuleMachine.possible_moves(state);
            int i = 0, temp, moveIndex = 0;

            foreach (var move in moves)
            {
                //MAX(v,min_value(result(s,a),alfa,beta))
                temp = min_value(State.result(state, move), alfa, beta);
                if (v < temp)
                {
                    v         = temp;
                    moveIndex = i;
                }

                if (v >= beta)
                {
                    return(move);
                }

                //MAX(alfa,v)
                if (alfa < v)
                {
                    alfa = v;
                }

                i++;
            }

            LinkedList <int[]> .Enumerator e = moves.GetEnumerator();
            for (i = 0; i < moveIndex + 1; i++)
            {
                e.MoveNext();
            }
            return(e.Current);
        }
Exemplo n.º 3
0
        //função de avaliação sobre a quantidade de movimentos possiveis
        //retorna a qtd de movimentos possiveis
        public static int evalMobility(State state)
        {
            LinkedList <int[]> moves = RuleMachine.possible_moves(state);

            return(moves.Count);
        }