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)); }
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; }
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); }
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); } } }