Esempio n. 1
0
        public int alpha_beta(State aState, ref int alpha, ref int beta, int depth, int passed)
        {
            int alpha_img=alpha;
            int beta_img=beta;

            int best_value1 = -50000;
            int best_value2 = 50000;

            if (depth == 0)
            {
                aState.EstValue = (int)evaluation(aState);
                return aState.EstValue;
            }
            for (int i = 1; i < aState.AvailablePosition[0].Count + 1; i++)
            {
                aState.GenerateSingle(i);//if this child has been generated, the function won't generate it more
                int value = alpha_beta(aState.Child[i], ref alpha_img, ref beta_img, depth - 1, 0);

                if (aState.NextPlayer != Enemy)//get min
                {
                    if (value < best_value2)//update best_value2
                    {
                        best_value2 = value;
                    }
                    if (best_value2 < beta )//pruning
                    {
                        aState.EstValue = best_value2;
                        return best_value2;
                    }
                }
                else//get max
                {
                    if (value > best_value1)
                    {
                        best_value1 = value;
                    }
                    if (best_value1 > beta)//pruning
                    {
                        aState.EstValue = best_value1;
                        return best_value1;
                    }
                }
            }

            if (aState.AvailablePosition[0].Count == 0)//No step to move next;
            {
                aState.GenerateSingle(0);
                int value = alpha_beta(aState.Child[0], ref beta_img, ref alpha_img, depth - 1, 0);
                if (aState.NextPlayer != Enemy)
                {
                    best_value2 = value;
                    aState.EstValue = best_value2;
                }
                else
                {
                    best_value1 = value;
                    aState.EstValue=best_value1;
                }
            }

            //Not pruning, change alpha and beta;
            if (aState.NextPlayer != Enemy)//get min
            {
                beta = best_value2;
                aState.EstValue = beta;
                return beta;
            }
            else
            {
                beta = best_value1;
                aState.EstValue = beta;
                return beta;
            }
        }
Esempio n. 2
0
        public int alpha_beta(State aState, ref int alpha, ref int beta, int depth, int passed)
        {
            int alpha_img = alpha;
            int beta_img  = beta;

            int best_value1 = -50000;
            int best_value2 = 50000;

            if (depth == 0)
            {
                aState.EstValue = (int)evaluation(aState);
                return(aState.EstValue);
            }
            for (int i = 1; i < aState.AvailablePosition[0].Count + 1; i++)
            {
                aState.GenerateSingle(i);//if this child has been generated, the function won't generate it more
                int value = alpha_beta(aState.Child[i], ref alpha_img, ref beta_img, depth - 1, 0);

                if (aState.NextPlayer != Enemy) //get min
                {
                    if (value < best_value2)    //update best_value2
                    {
                        best_value2 = value;
                    }
                    if (best_value2 < beta) //pruning
                    {
                        aState.EstValue = best_value2;
                        return(best_value2);
                    }
                }
                else//get max
                {
                    if (value > best_value1)
                    {
                        best_value1 = value;
                    }
                    if (best_value1 > beta)//pruning
                    {
                        aState.EstValue = best_value1;
                        return(best_value1);
                    }
                }
            }

            if (aState.AvailablePosition[0].Count == 0)//No step to move next;
            {
                aState.GenerateSingle(0);
                int value = alpha_beta(aState.Child[0], ref beta_img, ref alpha_img, depth - 1, 0);
                if (aState.NextPlayer != Enemy)
                {
                    best_value2     = value;
                    aState.EstValue = best_value2;
                }
                else
                {
                    best_value1     = value;
                    aState.EstValue = best_value1;
                }
            }

            //Not pruning, change alpha and beta;
            if (aState.NextPlayer != Enemy)//get min
            {
                beta            = best_value2;
                aState.EstValue = beta;
                return(beta);
            }
            else
            {
                beta            = best_value1;
                aState.EstValue = beta;
                return(beta);
            }
        }