コード例 #1
0
        protected EvolutionaryOptimization(
            int genomLength, 
            int populationSize,
            PointMutationPars mutationPars,
            IComparer<Genom> fitnessComparer)
        {
            Contract.Requires(genomLength > 0);
            Contract.Requires(populationSize > 1);
            Contract.Requires(fitnessComparer != null);

            GenomLength = genomLength;
            PopulationSize = populationSize;
            MutationPars = mutationPars;
            FitnessComparer = new SmartComparer<Genom>(new GenomBagComparer(fitnessComparer));
        }
コード例 #2
0
ファイル: GA.cs プロジェクト: nagyistoce/Neuroflow
        public GA(
            int genomLength, 
            int populationSize, 
            int crossoverPointNum, 
            PointMutationPars mutationPars,
            ISelectionAlgorithm selectionAlgorithm,
            IComparer<Genom> fitnessComparer) :
            base(genomLength, populationSize, mutationPars, fitnessComparer)
        {
            Contract.Requires(genomLength > 0);
            Contract.Requires(populationSize > 1);
            Contract.Requires(crossoverPointNum > 0);
            Contract.Requires(fitnessComparer != null);
            Contract.Requires(selectionAlgorithm != null);

            CrossoverPointNum = crossoverPointNum;
            this.selectionAlgorithm = selectionAlgorithm;
        }
コード例 #3
0
ファイル: CrossEntropy.cs プロジェクト: nagyistoce/Neuroflow
        public CrossEntropy(
            int genomLength, 
            int populationSize,
            double survivalPercent,
            PointMutationPars mutationPars,
            ISelectionAlgorithm selectionAlgorithm,
            IComparer<Genom> fitnessComparer) :
            base(genomLength, populationSize, mutationPars, fitnessComparer)
        {
            Contract.Requires(genomLength > 0);
            Contract.Requires(populationSize > 1);
            Contract.Requires(survivalPercent > 0.0 && survivalPercent < 100.0);
            Contract.Requires(fitnessComparer != null);
            Contract.Requires(selectionAlgorithm != null);

            SurvivalPercent = survivalPercent;
            this.selectionAlgorithm = selectionAlgorithm;
            survivalCount = (int)Math.Round((double)PopulationSize * (SurvivalPercent / 100.0), MidpointRounding.AwayFromZero);
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: nagyistoce/Neuroflow
        private static void RunGA()
        {
            const int validationSampleCount = 3;

            var recipes = new ColorRecipes(@"recipe.xml");
            int trainingSampleCount = recipes.Count - validationSampleCount;

            var shuffled = recipes;//.OrderBy(r => RandomGenerator.Random.Next()).ToList();

            var trainingComp = new ColorMixerGenomComparer(shuffled.Take(trainingSampleCount));
            var validationComp = new ColorMixerGenomComparer(shuffled.Skip(trainingSampleCount));
            var bestComp = new CombinedColorMixerGenomComprarer(trainingComp, validationComp);

            // Algo
            int valuesCount = new ColorMixingPars().ValuesCount + new ColorFilteringPars().ValuesCount;

            // Cross Entropy
            var selAlgo = new GaussianSelectionAlgorithm(.15);
            var mp = new PointMutationPars(PointMutationType.Uniform, 0.005, 0.09);
            var opt = new CrossEntropy(valuesCount, 200, 40, mp, selAlgo, trainingComp);

            //// GA
            //var selAlgo = new GaussianSelectionAlgorithm(.6);
            ////var selAlgo = new TournamentSelectionAlgorithm(10);
            //var mp = new PointMutationPars(PointMutationType.Gaussian, 0.005, 0.025);
            //var opt = new GA(valuesCount, 200, 10, mp, selAlgo, trainingComp);

            // Harmony
            //var wsAlgo = new GaussianSelectionAlgorithm(.1, SelectionDirection.FromBottom);
            //var mp = new PointMutationPars(PointMutationType.Gaussian, 0.02, 0.005);
            //var opt = new HarmonySearch(valuesCount, 200, 99.9, mp, wsAlgo, trainingComp);
            
            
            opt.Initialize();

            Genom best = null;

            // Run
            while (true)
            {
                opt.NextGeneration();

                var current = opt[0];

                bool bestChanged = false;
                if (best == null)
                {
                    best = current;
                    bestChanged = true;
                }
                else if (bestComp.Compare(current, best) < 0)
                {
                    best = current;
                    bestChanged = true;
                }

                //if (opt.GenerationNo % opt.PopulationSize == 0)
                {
                    Console.WriteLine("\n-- Generation {0} --", opt.GenerationNo);
                    Show("Current", current, trainingComp, validationComp);
                    Show("Best", best, trainingComp, validationComp, bestChanged);
                }
            }
        }