예제 #1
0
 /// <summary>
 /// Configure the Genetic Algorithm.
 /// </summary>
 /// <param name="ga">The genetic algorithm.</param>
 public virtual void ConfigGATermination(IEVA ga)
 {
     GA = ga;
     ga.TerminationReached += (sender, args) =>
     {   /*/
          * using (var collection = new MagickImageCollection())
          * {
          *  var files = Directory.GetFiles(m_destFolder, "*.png");
          *
          *  foreach (var image in files)
          *  {
          *      collection.Add(image);
          *      collection[0].AnimationDelay = 100;
          *  }
          *
          *  var settings = new QuantizeSettings();
          *  settings.Colors = 256;
          *  collection.Quantize(settings);
          *
          *  collection.Optimize();
          *  collection.Write(Path.Combine(m_destFolder, "result.gif"));
          * }
          * /**/
         Saveinfo();
     };
 }
        /// <summary>
        /// Configuration GA.
        /// </summary>
        /// <param name="problemConfig">Problem represention</param>
        /// <returns>GA</returns>
        public static IEVA[] SetGA(IProblemConfig[] problemConfig, bool parlelization)
        {
            Console.WriteLine("Custom Genetic algorithm.");
            var termination = ParameterSetter.SetTermination(problemConfig[0]);
            var crossover   = ParameterSetter.SetXover(problemConfig[0]);
            var xoverProb   = ParameterSetter.SetFloat("Xover Probability", 0, 1);

            var mutation     = ParameterSetter.SetMutation(problemConfig[0]);
            var mutationProb = ParameterSetter.SetFloat("Mutation Probability", 0, 1);

            var selection = ParameterSetter.SetSelection(problemConfig[0]);
            var elitizmus = ParameterSetter.SetElite(problemConfig[0]);

            var executor = problemConfig[0].CreateExecutor();
            var popSize  = ParameterSetter.SetPositiveIntParameter("Pop size", 2);

            IEVA[] evas = new IEVA[problemConfig.Length];

            int i = 0;

            foreach (var config in problemConfig)
            {
                // creates population with curr. popSize
                var population = new Population(popSize, config.CreateIndividual, config.CreateEmptyIndividual);

                // new operators
                var fitness = config.CreateFitness();

                evas[i++] = new GeneticAlgorithm(population, fitness, selection, crossover, mutation, elitizmus, termination, executor, mutationProb, xoverProb);
            }

            return(evas);
        }
예제 #3
0
        /// <summary>
        /// Determines whether the specified genetic algorithm fulfilled the termination condition.
        /// </summary>
        /// <param name="eva">The genetic algorithm.</param>
        /// <returns>True if termination has been fulfilled, otherwise false.</returns>
        public bool IsFulfilled(IEVA eva)
        {
            if (eva.TimeEvolving < maxTime)
            {
                return(false);
            }

            return(true);
        }
        /// <summary>
        /// Determines whether the specified genetic algorithm fulfilled the termination condition.
        /// </summary>
        /// <param name="eva">The genetic algorithm.</param>
        /// <returns>True if termination has been fulfilled, otherwise false.</returns>
        public bool IsFulfilled(IEVA eva)
        {
            if (eva.CurrentGenerationsNumber < expectedMaxGeneration)
            {
                return(false);
            }

            return(true);
        }
        /// <summary>
        /// Console logger.
        /// </summary>
        /// <param name="eva">evolutionary alg.</param>
        /// <param name="consoleProblemConfig">Problem represention</param>
        /// <param name="logRate">logger rate</param>
        public void SetGenerationInfoLog(IEVA eva, IProblemConfig consoleProblemConfig, int logRate)
        {
            eva.CurrentGenerationInfo += delegate
            {
                var bestIndividual = eva.BestIndividual;
                Console.WriteLine("Generations: {0}", eva.CurrentGenerationsNumber);
                Console.WriteLine("Fitness: {0,10}", bestIndividual.Fitness);
                Console.WriteLine("Time: {0}", eva.TimeEvolving);

                var speed = eva.TimeEvolving.TotalSeconds / eva.CurrentGenerationsNumber;
                Console.WriteLine("Speed (gen/sec): {0:0.0000}", speed);

                var best = consoleProblemConfig.ShowBestIndividual(bestIndividual, logRate);

                var fit = eva.CurrentGenerationsNumber + ";" + (bestIndividual.Fitness);
                var elapsedTimeSpeed = eva.CurrentGenerationsNumber + ";" + speed;
                var allInfo          = eva.CurrentGenerationsNumber + ";" + (bestIndividual.Fitness) + ";" + eva.TimeEvolving + ";" + speed;
                consoleProblemConfig.SetGenerationInfo(fit, elapsedTimeSpeed, allInfo);
            };
        }
        /// <summary>
        /// Configuration ES.
        /// </summary>
        /// <param name="problemConfig">Problem represention</param>
        /// <returns>ES</returns>
        public static IEVA[] SetES(IProblemConfig[] problemConfig, bool parallelization)
        {
            Console.WriteLine("Evolutionary Strategy.");
            var evaName = ParameterSetter.SetEvaES();

            // CMAES - internal population size setter
            var popSize = 20;

            IEVA[] evas = new IEVA[problemConfig.Length];

            int i = 0;

            foreach (var config in problemConfig)
            {
                // creates population with curr. popSize
                var population = new Population(popSize, config.CreateIndividual, config.CreateEmptyIndividual);
                // new operators
                var fitness = config.CreateFitness();
                // Delegate.CreateDelegate(consoleProblemConfig.CreateIndividual);
                evas[i++] = Activator.CreateInstance(evaName, fitness, population) as IEVA;
            }

            return(evas);
        }
        /// <summary>
        /// Parallel EA.
        /// </summary>
        /// <param name="problemConfigName">Problem represention.</param>
        /// <param name="inputFileName">Input image</param>
        /// <param name="logRate">logger rate</param>
        public static void RunParallelImage(Type problemConfigName, string inputFileName, int logRate, bool parallelization)
        {
            var img = Image.FromFile(inputFileName) as Bitmap;

            var blockSize = ParameterSetter.SetPositiveIntParameter("Block size", 5);

            Bitmap[] targets = Split_Concate.SplitImg(img, blockSize);

            var consoleProblemConfigs = new IImageProblemConfig[targets.Length];
            var evas = new IEVA[targets.Length];


            var configuration = new Configuration[targets.Length];

            for (int i = 0; i < targets.Length; i++)
            {
                consoleProblemConfigs[i] = Activator.CreateInstance(problemConfigName) as IImageProblemConfig;
                consoleProblemConfigs[i].Initialize(i);

                consoleProblemConfigs[i].Initialize(targets[i], inputFileName);

                configuration[i] = new Configuration();
            }

            evas = Configuration.SetEVA(consoleProblemConfigs, parallelization);

            for (int i = 0; i < targets.Length; i++)
            {
                configuration[i].SetGenerationInfoLog(evas[i], consoleProblemConfigs[i], logRate);
                consoleProblemConfigs[i].ConfigGATermination(evas[i]);
            }

            IIndividual[] bestInds = new IIndividual[targets.Length];

            var stopwatch = Stopwatch.StartNew();

            /**/
            Parallel.For(0, evas.Length, index => {
                evas[index].Run();

                bestInds[index] = evas[index].BestIndividual;

                // configuration[index].Saveinfo(inputFileName, index);
            });

            /*/
             *
             * for (var index = 0; index < evas.Length; index++)
             * {
             *  evas[index].Run();
             *
             *  bestInds[index] = evas[index].BestIndividual;
             *
             * //  Configuration.Saveinfo(inputFileName,);
             *
             * }
             *
             *
             * /**/
            stopwatch.Stop();


            Console.WriteLine("Total time: " + stopwatch.Elapsed);
            var result = Split_Concate.ConcateImgs(bestInds, blockSize, img.Width, img.Height);

            var m_destFolder = Configuration.CreateDirectory(inputFileName, "result_final");

            var fileName = m_destFolder + "/" + "final" + ".png";

            result.Save(fileName);
        }