private static IWeightMutationStrategy <double> CreateCardinalUniformResetStrategy( int selectCount, double weightScale, IRandomSourceBuilder rngBuilder) { var selectStrategy = new CardinalSubsetSelectionStrategy(selectCount, rngBuilder.Create()); return(ResetWeightMutationStrategy <double> .CreateUniformResetStrategy(selectStrategy, weightScale, rngBuilder.Create())); }
private static IWeightMutationStrategy <double> CreateCardinalGaussianDeltaStrategy( int selectCount, double stdDev, IRandomSourceBuilder rngBuilder) { var selectStrategy = new CardinalSubsetSelectionStrategy(selectCount, rngBuilder.Create()); return(DeltaWeightMutationStrategy.CreateGaussianDeltaStrategy(selectStrategy, stdDev, rngBuilder.Create())); }
/// <summary> /// Create the default connection weight scheme. /// </summary> /// <remarks> /// The scheme currently in use is taken from SharpNEAT version 2.x, i.e. this is the long standing default scheme /// in sharpneat. There has been little to no exploration of what schemes are good and whether this scheme in particular /// is good, as such this is a candidate for future research and improvements. /// /// At time of writing it was thought wise to adopt the scheme from SharpNEAT 2.x because the code base is being /// rewritten/refactored and it is therefore useful to keep schemes such as this as close to the previous version as /// possible to assist in debugging and testing of the new code base by comparing performance/results, etc. with the 2.x /// code base. /// </remarks> /// <param name="weightScale"></param> /// <returns>A new instance of <see cref="WeightMutationScheme"/>.</returns> public static WeightMutationScheme <double> CreateDefaultScheme( double weightScale, IRandomSourceBuilder rngBuilder) { var probabilityArr = new double[6]; var strategyArr = new IWeightMutationStrategy <double> [6]; IRandomSource rng = rngBuilder.Create(); // Gaussian delta with sigma=0.01 (most values between +-0.02) // Mutate 1, 2 and 3 connections respectively. probabilityArr[0] = 0.5985; probabilityArr[1] = 0.2985; probabilityArr[2] = 0.0985; strategyArr[0] = CreateCardinalGaussianDeltaStrategy(1, 0.1, rngBuilder); strategyArr[1] = CreateCardinalGaussianDeltaStrategy(2, 0.1, rngBuilder); strategyArr[2] = CreateCardinalGaussianDeltaStrategy(3, 0.1, rngBuilder); // Reset mutations. 1, 2 and 3 connections respectively. probabilityArr[3] = 0.015; probabilityArr[4] = 0.015; probabilityArr[5] = 0.015; strategyArr[3] = CreateCardinalUniformResetStrategy(1, weightScale, rngBuilder); strategyArr[4] = CreateCardinalUniformResetStrategy(2, weightScale, rngBuilder); strategyArr[5] = CreateCardinalUniformResetStrategy(3, weightScale, rngBuilder); return(new WeightMutationScheme <double>(probabilityArr, strategyArr, rngBuilder.Create())); }
public NeatReproductionSexual( MetaNeatGenome <T> metaNeatGenome, INeatGenomeBuilder <T> genomeBuilder, Int32Sequence genomeIdSeq, Int32Sequence innovationIdSeq, Int32Sequence generationSeq, AddedNodeBuffer addedNodeBuffer, NeatReproductionSexualSettings settings, IRandomSourceBuilder rngBuilder) { _settings = settings; _rng = rngBuilder.Create(); _strategy = new UniformCrossoverReproductionStrategy <T>( metaNeatGenome, genomeBuilder, genomeIdSeq, generationSeq, rngBuilder.Create()); }
public NeatReproductionAsexual( MetaNeatGenome <T> metaNeatGenome, INeatGenomeBuilder <T> genomeBuilder, Int32Sequence genomeIdSeq, Int32Sequence innovationIdSeq, Int32Sequence generationSeq, AddedNodeBuffer addedNodeBuffer, NeatReproductionAsexualSettings settings, WeightMutationScheme <T> weightMutationScheme, IRandomSourceBuilder rngBuilder) { _settings = settings; _rngBuilder = rngBuilder; _rng = rngBuilder.Create(); // Instantiate reproduction strategies. _mutateWeightsStrategy = new MutateWeightsStrategy <T>(metaNeatGenome, genomeBuilder, genomeIdSeq, generationSeq, weightMutationScheme); _deleteConnectionStrategy = new DeleteConnectionStrategy <T>(metaNeatGenome, genomeBuilder, genomeIdSeq, generationSeq, rngBuilder.Create()); // Add connection mutation; select acyclic/cyclic strategy as appropriate. if (metaNeatGenome.IsAcyclic) { _addConnectionStrategy = new AddAcyclicConnectionStrategy <T>( metaNeatGenome, genomeBuilder, genomeIdSeq, innovationIdSeq, generationSeq, rngBuilder.Create()); } else { _addConnectionStrategy = new AddCyclicConnectionStrategy <T>( metaNeatGenome, genomeBuilder, genomeIdSeq, innovationIdSeq, generationSeq, rngBuilder.Create()); } _addNodeStrategy = new AddNodeStrategy <T>(metaNeatGenome, genomeBuilder, genomeIdSeq, innovationIdSeq, generationSeq, addedNodeBuffer, rngBuilder.Create()); }
static RandomDefaults() { DefaultRandomSeedSource = new DefaultRandomSeedSource(); DefaultRandomSourceBuilder = new Xoshiro256StarStarRandomBuilder(DefaultRandomSeedSource); }