Example #1
0
        public int[,] Mutation(Initializer initializer)
        {
            Random rand         = new Random();
            double mutationRate = (GetMutationRate() * 100);

            int[,] world = initializer.GetPopulation();
            int population = initializer.GetPopulationSize();
            int length     = initializer.GetGenomeLength();

            for (int i = 0; i < population; i++)
            {
                for (int j = 0; j < length; j++)
                {
                    if (rand.Next(0, 101) <= mutationRate)
                    {
                        if (world[i, j] == 0)
                        {
                            world[i, j] = 1;
                        }
                        else
                        {
                            world[i, j] = 0;
                        }
                    }
                }
            }

            return(world);
        }
Example #2
0
        public static int[,] RouletteWheel(Initializer initializer, int totalPoints)
        {
            Random rand           = new Random();
            var    populationSize = initializer.GetPopulationSize();
            var    sampleLength   = initializer.GetGenomeLength();

            int[,] currentPopulation = initializer.GetPopulation();
            int[,] chosenPopulation  = new int [populationSize, sampleLength + 1];
            var target      = 0;
            var found       = false;
            var index       = 0;
            var indexPoints = 0;

            //Until Chosen Population is complete
            for (var i = 0; i < populationSize; i++)
            {
                //Total Points is Roulette Wheel
                target = rand.Next(totalPoints);

                index       = 0;
                indexPoints = 0;
                found       = false;
                //Console.WriteLine("Target is " + target);
                Thread.Sleep(38);

                while (index < populationSize && found == false)
                {
                    indexPoints = indexPoints + currentPopulation[index, sampleLength];

                    if (target <= indexPoints)
                    {
                        //Sample selected for evolution

                        for (int j = 0; j < sampleLength; j++)
                        {
                            chosenPopulation[i, j] = currentPopulation[index, j];
                        }

                        found = true;
                    }
                    else
                    {
                        index++;
                    }
                }
            }
            return(chosenPopulation);
        }
Example #3
0
        //Every Pair is a Parent
        public int[,] UniformCrossover(Initializer initializer)
        {
            var length     = initializer.GetGenomeLength();
            var population = initializer.GetPopulationSize();

            int [,] world = initializer.GetPopulation();

            for (var i = 0; i < (population - 1); i = i + 2)
            {
                for (var j = 0; j < length; j++)
                {
                    Thread.Sleep(15);
                    if (rand.Next(2) == 1)
                    {
                        _temp           = world[i, j];
                        world[i, j]     = world[i + 1, j];
                        world[i + 1, j] = _temp;
                    }
                }
            }

            return(world);
        }
Example #4
0
        public int[,] SinglePointCrossover(Initializer initializer)
        {
            var length     = initializer.GetGenomeLength();
            var population = initializer.GetPopulationSize();

            int [,] world = initializer.GetPopulation();
            var point = 0;

            //Every Pair is a Parent
            for (var i = 0; i < (population - 1); i = i + 2)
            {
                Thread.Sleep(15);
                point = rand.Next(length);

                for (var j = 0; j < point; j++)
                {
                    _temp           = world[i, j];
                    world[i, j]     = world[i + 1, j];
                    world[i + 1, j] = _temp;
                }
            }

            return(world);
        }
Example #5
0
        public static void Main(string[] args)
        {
            var optionsNo = 0;

            Console.WriteLine("*****START*******");
            Console.WriteLine();

            Initializer initializer = new Initializer();
            Fitness     fitness     = new Fitness();
            Selector    selector    = new Selector();
            Crossover   crossover   = new Crossover();

            StartUp();

            while (optionsNo != 9)
            {
                switch (DisplayMenu())
                {
                case 1:
                    Console.WriteLine("GENERATION 1");
                    initializer.DisplayPopulation(initializer.GetPopulation(), fitness);
                    break;

                case 2:
                    FullCycle();
                    break;

                case 3:
                    fitness.SetFitnessMethod();
                    initializer.DisplayPopulation(initializer.GetPopulation(), fitness);
                    Wait();
                    break;

                case 8:
                    initializer.CreatePopulation();
                    initializer.DisplayPopulation(initializer.GetPopulation(), fitness);
                    Wait();
                    break;

                case 9:
                    Console.WriteLine("This Program is over. Bye!");
                    break;

                default:
                    Console.WriteLine("Try Again!");
                    break;
                }
            }

            void StartUp()
            {
                initializer.CreatePopulation();
                fitness.SetFitnessMethod();
                initializer.DisplayPopulation(initializer.GetPopulation(), fitness);
                Wait();
            }

            int DisplayMenu()
            {
                Console.WriteLine();
                Console.WriteLine("OPTIONS: ");
                Console.WriteLine("------------------");
                Console.WriteLine("1- Display Population");
                Console.WriteLine("2- Full Cycle");
                Console.WriteLine("3- Change Fitness Function");
                Console.WriteLine("8- Re-Initiation");
                Console.WriteLine("9- Exit");
                Console.WriteLine();
                optionsNo = initializer.CheckIntegerInput("Please Select an Option:");
                return(optionsNo);
            }

            void Wait()
            {
                Console.WriteLine();
                Console.WriteLine("Next...");
                Console.ReadLine();
            }

            void FullCycle()
            {
                //Set Up Generation Cycle and Parameters
                var isPhaseSkip = false;
                var isFound     = false;
                var inputNo     = 0;

                initializer.ResetStats();
                selector.SetNoOfCycles();
                selector.SetSelectionType();
                crossover.SetCrossoverMethod();
                selector.SetMutationRate();


                while (isFound == false)
                {
                    Console.WriteLine("Would you like to skip the individual steps on each generations (Selection, Mutation, etc) and just the final results of each generation ? ");
                    Console.WriteLine("1 - Yes");
                    Console.WriteLine("2 - No");
                    inputNo = initializer.CheckIntegerInput();

                    if (inputNo == 1 || inputNo == 0)
                    {
                        isFound = true;

                        if (inputNo == 1)
                        {
                            isPhaseSkip = true;
                        }
                    }
                    else
                    {
                        Console.WriteLine("Please choose a enter option");
                    }
                }

                //For Each Cycle
                for (int i = 0; i < selector.GetNotOfCycles(); i++)
                {
                    Console.WriteLine("GENERATION " + (i + 1));

                    //Selection Phase
                    if (selector.GetSelectionType() == 2)
                    {
                        Selector.OrderSamples(initializer.GetPopulation(), initializer.GetGenomeLength(), initializer.GetPopulationSize());
                        initializer.SetSelectionCandidates(Selector.RankSelection(initializer));
                    }
                    //Roulette Wheel Selection
                    else
                    {
                        initializer.SetSelectionCandidates(Selector.RouletteWheel(initializer, fitness.GetTotalPoints()));
                    }

                    if (isPhaseSkip == false)
                    {
                        //Display Selected Candidates
                        Console.WriteLine("After Selection...");
                        initializer.DisplayPopulation(initializer.GetPopulation(), fitness, selector.GetSelectionName(), crossover.GetCrossoverName(), selector.GetMutationRate());
                        Wait();
                    }



                    //Reproduction Phase
                    if (crossover.GetCrossoverMethod() == 1)
                    {
                        //Single Point Crossover
                        initializer.SetSelectionCandidates(crossover.SinglePointCrossover(initializer));
                    }
                    else
                    {
                        //Uniform Crossover
                        initializer.SetSelectionCandidates(crossover.UniformCrossover(initializer));
                    }

                    if (isPhaseSkip == false)
                    {
                        Console.WriteLine("After Crossover");
                        initializer.DisplayPopulation(initializer.GetPopulation(), fitness, selector.GetSelectionName(), crossover.GetCrossoverName(), selector.GetMutationRate());
                        Wait();
                    }

                    initializer.SetSelectionCandidates(selector.Mutation(initializer));

                    if (isPhaseSkip == false)
                    {
                        //Mutation Phase
                        Console.WriteLine("After Mutation...");
                        initializer.DisplayPopulation(initializer.GetPopulation(), fitness, selector.GetSelectionName(), crossover.GetCrossoverName(), selector.GetMutationRate());
                        Wait();
                    }

                    if (isPhaseSkip)
                    {
                        initializer.DisplayPopulation(initializer.GetPopulation(), fitness, selector.GetSelectionName(), crossover.GetCrossoverName(), selector.GetMutationRate());
                        Wait();
                    }

                    //Q FOR QUIT
                }

                initializer.ResetStats();
            }
        }