/// <summary> /// Initialization of basic values of the user interface. /// </summary> public GaUx() { InitializeComponent(); controllers = ThreadSafeServiceUX.selectType <IController>(); comboBoxControllers.Items.AddRange(controllers.Keys.ToArray()); }
/// <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); }