/// <summary> /// Konstruktor /// </summary> /// <param name='size'>Größe der Population</param> /// <param name='genomeSize'>Größe des einzelnen Genomes</param> public Population(int size, int genomeSize, double minAllelValue, double maxAllelValue, Helper.Enums.Encryption encryption) { _encryption = encryption; // Erzeuge Listen mit fester Kapazität curGeneration = new List<Genome>(size); oldGeneration = new List<Genome>(size); totalSize = size; Genome tmp; for(int i = 0; i < size; i++) { if (_encryption == Helper.Enums.Encryption.None) throw new NotImplementedException(); //todo Genome mit Integerwerten // else if (_encryption == Helper.Enums.Encryption.Binary) // { // throw new NotImplementedException(); //todo // } // else if (_encryption == Helper.Enums.Encryption.Real) else { tmp = new GenomeReal(genomeSize, minAllelValue, maxAllelValue); // um Duplikate bei der Erzeugung der Population zu vermeiden while(curGeneration.Contains(tmp)) { //Console.WriteLine(String.Format("Duplikat: {0}\r\ni = {1}", tmp.AsString(),i)); tmp = new GenomeReal(genomeSize, minAllelValue, maxAllelValue); } curGeneration.Add(tmp); } } }
/// <summary> /// Konstruktor /// </summary> /// <param name='problem'>Anzuwendendes Problem</param> public Evolution(Problem problem) { countGene = problem.countGene; maxGenerations = problem.maxGenerations; countIndividuals = problem.countIndividuals; countChilds = problem.countChilds; recombinationProbability = problem.recombinationProbability; InvertOnMutate = problem.InvertOnMutate; minAllelValue = problem.minAllelValue; maxAllelValue = problem.maxAllelValue; SelPropType = problem.SelPropType; SelType = problem.SelType; Encryption = problem.Encryption; TournamentMemberCount = problem.TournamentMemberCount; sb = problem.Output; bestFitness = double.MaxValue; averageFitness = double.MaxValue; bestFitnessGeneration = 0; bestSolutions = new List<double>(); bestSolutionsGeneration = new List<int>(); bestList = new List<Genome>(maxGenerations-1); CalcFitness = problem.CalcFitnessDefault; switch (Encryption) { case Helper.Enums.Encryption.None : { Recombine = problem.RecombineDefault; Mutate = problem.MutateDefault; break; } case Helper.Enums.Encryption.Binary : { Recombine = problem.RecombineBinary; Mutate = problem.MutateBinary; break; } case Helper.Enums.Encryption.Real : { Recombine = problem.RecombineReal; Mutate = problem.MutateReal; break; } } }