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

            int           v = Int32.MinValue;
            int           temp;
            List <Jogada> jogadas = MaquinaDeRegras.PossiveisMovimentos(estado);

            foreach (var jogada in jogadas)
            {
                //MAX(v,min_value(result(s,a),alfa,beta))
                temp = min_value(Estado.result(estado, jogada), 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 Jogada alpha_beta_search(Estado estado)
        {
            int v    = Int32.MinValue;
            int alfa = Int32.MinValue;
            int beta = Int32.MaxValue;

            List <Jogada> jogadas = MaquinaDeRegras.PossiveisMovimentos(estado);
            int           i = 0, temp, jogadaIndex = 0;

            foreach (var jogada in jogadas)
            {
                //MAX(v,min_value(result(s,a),alfa,beta))
                temp = min_value(Estado.result(estado, jogada), alfa, beta);
                if (v < temp)
                {
                    v           = temp;
                    jogadaIndex = i;
                }

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

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

                i++;
            }

            List <Jogada> .Enumerator e = jogadas.GetEnumerator();
            for (i = 0; i < jogadaIndex + 1; i++)
            {
                e.MoveNext();
            }
            return(e.Current);
        }
Exemplo n.º 3
0
        //fun��o de avaliacao sobre a quantidade de movimentos possiveis
        //retorna a qtd de movimentos possiveis
        public static int evalMobility(Estado estado)
        {
            List <Jogada> jogadas = MaquinaDeRegras.PossiveisMovimentos(estado);

            return(jogadas.Count);
        }