/// <summary> /// Read json into a target instance of <see cref="NeatReproductionSexualSettings"/>. /// Settings that are present are read and set on the target settings object; all other settings /// remain unchanged on the target object. /// </summary> /// <param name="target">The target settings object to store the read values on.</param> /// <param name="jelem">The json element to read from.</param> public static void Read( NeatReproductionSexualSettings target, JsonElement jelem) { ReadDoubleOptional(jelem, "secondaryParentGeneProbability", x => target.SecondaryParentGeneProbability = x); target.Validate(); }
/// <summary> /// Construct a new instance. /// </summary> /// <param name="eaSettings">NEAT evolution algorithm settings.</param> /// <param name="evaluator">An evaluator of lists of genomes.</param> /// <param name="speciationStrategy">Speciation strategy.</param> /// <param name="population">An initial population of genomes.</param> /// <param name="complexityRegulationStrategy">Complexity regulation strategy.</param> /// <param name="reproductionAsexualSettings">Asexual reproduction settings.</param> /// <param name="reproductionSexualSettings">Sexual reproduction settings.</param> /// <param name="weightMutationScheme">Connection weight mutation scheme.</param> /// <param name="rng">Random source.</param> public NeatEvolutionAlgorithm( NeatEvolutionAlgorithmSettings eaSettings, IGenomeListEvaluator <NeatGenome <T> > evaluator, ISpeciationStrategy <NeatGenome <T>, T> speciationStrategy, NeatPopulation <T> population, IComplexityRegulationStrategy complexityRegulationStrategy, NeatReproductionAsexualSettings reproductionAsexualSettings, NeatReproductionSexualSettings reproductionSexualSettings, WeightMutationScheme <T> weightMutationScheme, IRandomSource rng) { _eaSettingsCurrent = eaSettings ?? throw new ArgumentNullException(nameof(eaSettings)); _eaSettingsComplexifying = eaSettings; _eaSettingsSimplifying = eaSettings.CreateSimplifyingSettings(); _evaluator = evaluator ?? throw new ArgumentNullException(nameof(evaluator)); _speciationStrategy = speciationStrategy ?? throw new ArgumentNullException(nameof(speciationStrategy)); _pop = population ?? throw new ArgumentNullException(nameof(population)); _complexityRegulationStrategy = complexityRegulationStrategy ?? throw new ArgumentNullException(nameof(complexityRegulationStrategy)); if (reproductionAsexualSettings == null) { throw new ArgumentNullException(nameof(reproductionAsexualSettings)); } if (reproductionSexualSettings == null) { throw new ArgumentNullException(nameof(reproductionSexualSettings)); } _rng = rng; _genomeComparerDescending = new GenomeComparerDescending(evaluator.FitnessComparer); if (eaSettings.SpeciesCount > population.PopulationSize) { throw new ArgumentException("Species count is higher then the population size."); } _generationSeq = new Int32Sequence(); _reproductionAsexual = new NeatReproductionAsexual <T>( _pop.MetaNeatGenome, _pop.GenomeBuilder, _pop.GenomeIdSeq, population.InnovationIdSeq, _generationSeq, _pop.AddedNodeBuffer, reproductionAsexualSettings, weightMutationScheme); _reproductionSexual = new NeatReproductionSexual <T>( _pop.MetaNeatGenome, _pop.GenomeBuilder, _pop.GenomeIdSeq, _generationSeq, reproductionSexualSettings); _offspringBuilder = new OffspringBuilder <T>( _reproductionAsexual, _reproductionSexual, eaSettings.InterspeciesMatingProportion, evaluator.FitnessComparer); }
/// <summary> /// Construct a new instance. /// </summary> /// <param name="metaNeatGenome">NeatGenome metadata.</param> /// <param name="genomeBuilder">NeatGenome builder.</param> /// <param name="genomeIdSeq">Genome ID sequence; for obtaining new genome IDs.</param> /// <param name="generationSeq">Generation sequence; for obtaining the current generation number.</param> /// <param name="settings">Sexual reproduction settings.</param> public NeatReproductionSexual( MetaNeatGenome <T> metaNeatGenome, INeatGenomeBuilder <T> genomeBuilder, Int32Sequence genomeIdSeq, Int32Sequence generationSeq, NeatReproductionSexualSettings settings) { _strategy = new UniformCrossoverReproductionStrategy <T>( metaNeatGenome.IsAcyclic, settings.SecondaryParentGeneProbability, genomeBuilder, genomeIdSeq, generationSeq); }
/// <summary> /// Construct a new instance. /// </summary> /// <param name="eaSettings">NEAT evolution algorithm settings.</param> /// <param name="evaluator">An evaluator of lists of genomes.</param> /// <param name="speciationStrategy">Speciation strategy.</param> /// <param name="population">An initial population of genomes.</param> /// <param name="reproductionAsexualSettings">Asexual reproduction settings.</param> /// <param name="reproductionSexualSettings">Sexual reproduction settings.</param> /// <param name="weightMutationScheme">Connection weight mutation scheme.</param> public NeatEvolutionAlgorithm( NeatEvolutionAlgorithmSettings eaSettings, IGenomeListEvaluator <NeatGenome <T> > evaluator, ISpeciationStrategy <NeatGenome <T>, T> speciationStrategy, NeatPopulation <T> population, NeatReproductionAsexualSettings reproductionAsexualSettings, NeatReproductionSexualSettings reproductionSexualSettings, WeightMutationScheme <T> weightMutationScheme) : this(eaSettings, evaluator, speciationStrategy, population, reproductionAsexualSettings, reproductionSexualSettings, weightMutationScheme, RandomDefaults.CreateRandomSource()) { }
public void Read() { JsonDocument jdoc = JsonDocument.Parse( @"{ ""secondaryParentGeneProbability"":0.11 }"); // Init a default settings object. var settings = new NeatReproductionSexualSettings(); // Read json properties into the settings object. NeatReproductionSexualSettingsJsonReader.Read(settings, jdoc.RootElement); // Assert the expected values. Assert.AreEqual(0.11, settings.SecondaryParentGeneProbability); }
public void Read() { JObject jobj = JObject.Parse( @"{ 'secondaryParentGeneProbability':0.11 }"); // Init a default settings object. var settings = new NeatReproductionSexualSettings(); // Read json properties into the settings object. NeatReproductionSexualSettingsJsonReader.Read(settings, jobj); // Assert the expected values. Assert.AreEqual(0.11, settings.SecondaryParentGeneProbability); }
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); }