private static void InitialiseSpecies(NeatPopulation <double> neatPop) { // Create a speciation strategy instance. var distanceMetric = new ManhattanDistanceMetric(1.0, 0.0, 10.0); var speciationStrategy = new SharpNeat.Neat.Speciation.GeneticKMeans.Parallelized.GeneticKMeansSpeciationStrategy <double>(distanceMetric, 5, 4); // Apply the speciation strategy. var genomeComparerDescending = new GenomeComparerDescending(PrimaryFitnessInfoComparer.Singleton); IRandomSource rng = RandomDefaults.CreateRandomSource(0); neatPop.InitialiseSpecies(speciationStrategy, 3, genomeComparerDescending, rng); }
public NeatEvolutionAlgorithm <double> CreateNeatEvolutionAlgorithm() { // Create a genome evaluator. var genomeListEvaluator = CreateGenomeListEvaluator(out int inputCount, out int outputCount); // Create an initial population. _metaNeatGenome = CreateMetaNeatGenome(inputCount, outputCount); _eaSettings = new NeatEvolutionAlgorithmSettings(); _eaSettings.SpeciesCount = 40; _neatPop = CreatePopulation(_metaNeatGenome, 600); // Create a speciation strategy instance. var distanceMetric = new ManhattanDistanceMetric(1.0, 0.0, 10.0); var speciationStrategy = new SharpNeat.Neat.Speciation.GeneticKMeans.Parallelized.GeneticKMeansSpeciationStrategy <double>(distanceMetric, 5); // Create an asexual reproduction settings object (default settings). var reproductionAsexualSettings = new NeatReproductionAsexualSettings(); // Create a sexual reproduction settings object (default settings). var reproductionSexualSettings = new NeatReproductionSexualSettings(); // Create a connection weight mutation scheme. var weightMutationScheme = WeightMutationSchemeFactory.CreateDefaultScheme(_metaNeatGenome.ConnectionWeightScale); // Pull all of the parts together into an evolution algorithm instance. var ea = new NeatEvolutionAlgorithm <double>( _eaSettings, genomeListEvaluator, speciationStrategy, _neatPop, reproductionAsexualSettings, reproductionSexualSettings, weightMutationScheme); return(ea); }