/// <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);
        }
        /// <summary>
        /// Notmal EA
        /// </summary>
        /// <param name="problemConfigName">Problem represention.</param>
        /// <param name="inputFileName">Input image</param>
        /// <param name="logRate">logger rate</param>
        public static void RunImage(Type problemConfigName, string inputFileName, int logRate, bool parallelization)
        {
            // Scale img
            var paramterScale = ParameterSetter.SetFloat("Scale", 0.01f, 1);


            var consoleProblemConfig = Activator.CreateInstance(problemConfigName) as IImageProblemConfig;

            consoleProblemConfig.Initialize(0);

            consoleProblemConfig.InitializeScale(paramterScale);
            consoleProblemConfig.Initialize(inputFileName);

            var eva           = Configuration.SetEVA(new[] { consoleProblemConfig }, parallelization);
            var configuration = new Configuration();


            configuration.SetGenerationInfoLog(eva[0], consoleProblemConfig, logRate);
            consoleProblemConfig.ConfigGATermination(eva[0]);
            eva[0].Run();
        }