Beispiel #1
0
        /// <summary>
        /// Main method from where the execution starts
        /// Accepts the input from user
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            int input;

            Console.Write("Enter the size of board: ");
            while (true)
            {
                if (Int32.TryParse(Console.ReadLine(), out input))
                {
                    break;
                }
                else
                {
                    Console.WriteLine("Enter a valid number: ");
                }
            }

            NQueensProblem nqueens;
            bool           flag = true;

            //initialize the object until a solution is found for CSP
            do
            {
                nqueens = new NQueensProblem(input);
                nqueens.InitializeBoard();
                if (flag)
                {
                    Console.WriteLine("Initial State");
                    nqueens.PrintState();
                    Console.WriteLine("======HILL CLIMBING======");
                    //Call the HillClimbing method
                    NQueensProblem result = HillClimbingProblem.HillClimbing(nqueens);
                    result.PrintState();
                    Console.WriteLine("Number of Random Initializations are {0}", numberOfInits);
                    Console.WriteLine("Number of State changes are {0}", numberOfSteps);
                    flag          = false;
                    numberOfInits = 0;
                    Console.WriteLine("\n=========CSP===========");
                }
                numberOfInits++;
                numberOfSteps = 0;
                nqueens       = CSP.MinConlicts(nqueens, 100);
            } while (nqueens == null);

            nqueens.PrintState();
            Console.WriteLine("Number of Random Initializations are {0}", numberOfInits);
            Console.WriteLine("Number of State changes are {0}", numberOfSteps);
            Console.Read();
        }
Beispiel #2
0
        /// <summary>
        /// Takes the initialState as the parameter
        /// generates its successors and select the best successor based on heuristic
        /// </summary>
        /// <param name="initialState"></param>
        /// <returns></returns>
        public static NQueensProblem HillClimbing(NQueensProblem initialState)
        {
            NQueensProblem current = initialState;

            while (true)
            {
                if (Program.numberOfSteps < 100)
                {
                    //Generate the successors
                    List <NQueensProblem> successors    = current.Successors();
                    List <NQueensProblem> bestSuccessor = new List <NQueensProblem>();
                    bestSuccessor.Add(successors[0]);
                    //Select the best successor
                    foreach (NQueensProblem successor in successors)
                    {
                        if (successor.Conflicts == bestSuccessor[0].Conflicts)
                        {
                            bestSuccessor.Add(successor);
                        }
                        else if (successor.Conflicts < bestSuccessor[0].Conflicts)
                        {
                            bestSuccessor.Clear();
                            bestSuccessor.Add(successor);
                        }
                    }

                    Program.numberOfSteps++;
                    Random random             = new Random();
                    int    chooseOneSuccessor = random.Next(bestSuccessor.Count);
                    //if current better than best successor return current
                    if (bestSuccessor[chooseOneSuccessor].Conflicts > current.Conflicts)
                    {
                        return(current);
                    }
                    //else set current to best successor
                    current = bestSuccessor[chooseOneSuccessor];
                }
                else
                {
                    //enters here if the Hill-Climbing is stuck due to local maximum or plateau or ridge
                    Program.numberOfInits++;
                    Program.numberOfSteps = 0;
                    initialState.InitializeBoard();
                    return(HillClimbing(initialState));
                }
            }
        }
Beispiel #3
0
        /// <summary>
        /// Main method from where the execution starts
        /// Accepts the input from user 
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            int input;
            Console.Write("Enter the size of board: ");
            while(true)
            {
                if (Int32.TryParse(Console.ReadLine(), out input)) break;
                else Console.WriteLine("Enter a valid number: ");
            }

            NQueensProblem nqueens ;
            bool flag = true;

            //initialize the object until a solution is found for CSP
            do
            {
                nqueens = new NQueensProblem(input);
                nqueens.InitializeBoard();
                if(flag)
                {
                    Console.WriteLine("Initial State");
                    nqueens.PrintState();
                    Console.WriteLine("======HILL CLIMBING======");
                    //Call the HillClimbing method
                    NQueensProblem result = HillClimbingProblem.HillClimbing(nqueens);
                    result.PrintState();
                    Console.WriteLine("Number of Random Initializations are {0}", numberOfInits);
                    Console.WriteLine("Number of State changes are {0}", numberOfSteps);
                    flag = false;
                    numberOfInits = 0;
                    Console.WriteLine("\n=========CSP===========");
                }
                numberOfInits++;
                numberOfSteps = 0;
                nqueens = CSP.MinConlicts(nqueens, 100);
            } while (nqueens == null);

            nqueens.PrintState();
            Console.WriteLine("Number of Random Initializations are {0}", numberOfInits);
            Console.WriteLine("Number of State changes are {0}", numberOfSteps);
            Console.Read();
        }
Beispiel #4
0
        /// <summary>
        /// Takes the initialState as the parameter
        /// generates its successors and select the best successor based on heuristic
        /// </summary>
        /// <param name="initialState"></param>
        /// <returns></returns>
        public static NQueensProblem HillClimbing(NQueensProblem initialState)
        {
            NQueensProblem current = initialState ;
            while(true)
            {
                if (Program.numberOfSteps < 100)
                {
                    //Generate the successors
                    List<NQueensProblem> successors = current.Successors();
                    List<NQueensProblem> bestSuccessor= new List<NQueensProblem>() ;
                    bestSuccessor.Add(successors[0]);
                    //Select the best successor
                    foreach (NQueensProblem successor in successors)
                    {
                        if (successor.Conflicts == bestSuccessor[0].Conflicts)
                            bestSuccessor.Add(successor);
                        else if (successor.Conflicts < bestSuccessor[0].Conflicts)
                        {
                            bestSuccessor.Clear();
                            bestSuccessor.Add ( successor);
                        }
                    }

                    Program.numberOfSteps++;
                    Random random = new Random();
                    int chooseOneSuccessor = random.Next (bestSuccessor .Count );
                    //if current better than best successor return current
                    if (bestSuccessor[chooseOneSuccessor].Conflicts > current.Conflicts) return current;
                    //else set current to best successor
                    current = bestSuccessor[chooseOneSuccessor];
                }
                else
                {
                    //enters here if the Hill-Climbing is stuck due to local maximum or plateau or ridge
                    Program.numberOfInits++;
                    Program.numberOfSteps = 0;
                    initialState.InitializeBoard();
                    return HillClimbing(initialState);
                }
            }
        }