コード例 #1
0
        /// <summary>
        /// Initialization of basic values of the user interface.
        /// </summary>
        public GaUx()
        {
            InitializeComponent();

            controllers = ThreadSafeServiceUX.selectType <IController>();
            comboBoxControllers.Items.AddRange(controllers.Keys.ToArray());
        }
コード例 #2
0
        /// <summary>
        /// Genetic algorithm config.
        /// </summary>
        /// <returns>If threu = successful configuration.</returns>
        private bool configGa()
        {
            // opperators names
            string target,
                   xoverName,
                   elitizmusName,
                   mutationName,
                   selectionName,
                   terminationName;

            // operator parameters
            float percentageElit, mutationPorb, xoverProb, scale;
            int   popSize, paramTerm;

            // problems contoller
            IControllerImage sampleController;

            // try sets operators and parameters
            try
            {
                // curr operators names
                xoverName       = comboBoxXover.SelectedItem.ToString();
                elitizmusName   = comboBoxElitizmus.SelectedItem.ToString();
                mutationName    = comboBoxMutation.SelectedItem.ToString();
                selectionName   = comboBoxSelection.SelectedItem.ToString();
                terminationName = comboBoxTermination.SelectedItem.ToString();


                mutationPorb = (float)numericUpDownMutation.Value / 100;
                xoverProb    = (float)numericUpDownXover.Value / 100;

                // Ga population size
                popSize = (int)numericUpDownPopSize.Value;

                paramTerm      = (int)numericUpDownTermination.Value;
                percentageElit = (float)numericUpDownElitizmus.Value / 100;

                scale = (float)numericUpDownScale.Value;

                var controllerName = controllers[comboBoxControllers.SelectedItem.ToString()];

                sampleController = Activator.CreateInstance(controllerName) as IControllerImage;

                target = imgTargetFileName.Replace("\\", "/");
                sampleController.Initialize();
                sampleController.InitializeScale(scale);
                sampleController.Initialize(target);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(false);
            }

            // Creates operators
            var fitness   = sampleController.CreateFitness();
            var executor  = sampleController.CreateExecutor();
            var crossover = sampleController.CreateCrossover(xoverName);
            var mutation  = sampleController.CreateMutation(mutationName);
            var selection = sampleController.CreateSelection(selectionName);

            var elitizmus   = sampleController.CreateElitizmus(elitizmusName, percentageElit);
            var termination = sampleController.CreateTermination(terminationName, paramTerm);

            // creates population with curr. popSize
            var population = new Population(popSize, sampleController.CreateIndividual);

            // new genetic algorithm
            ga = new GA(population, fitness, selection, crossover, mutation, elitizmus, termination, executor, mutationPorb, xoverProb);

            // information transfer between ga/trhead and US
            ga.CurrentGenerationInfo += delegate
            {
                var bestIndividual = ga.BestIndividual;

                ThreadSafeServiceUX.SetControlPropertyThreadSafe(labelTime, "Text", "Time: " + ga.TimeEvolving);
                ThreadSafeServiceUX.SetControlPropertyThreadSafe(labelFitness, "Text", "Fitness: " + bestIndividual.Fitness);
                ThreadSafeServiceUX.SetControlPropertyThreadSafe(labelGeneration, "Text", "Generations: " + ga.CurrentGenerationsNumber);

                var speed = ga.TimeEvolving.TotalSeconds / ga.CurrentGenerationsNumber;
                ThreadSafeServiceUX.SetControlPropertyThreadSafe(labelSpeed, "Text", "Speed(gen/sec): " + speed.ToString("0.0000"));

                var best = sampleController.ShowBestIndividual(bestIndividual);

                if (best != null)
                {
                    ThreadSafeServiceUX.SetControlPropertyThreadSafe(pictureBoxBestInd, "Image", Bitmap.FromFile(best.ToString()));
                }
            };

            // configuration termination
            sampleController.ConfigGATermination(ga);

            return(true);
        }