public Neat() { Neural = new NeuralParameters(); Mutation = new MutationParameters(); Speciation = new SpeciationParameters(); Reproduction = new ReproductionParameters(); Structure = new StructureParameters(); }
public XorModel(PopulationParameters populationParameters, MutationParameters mutationParameters, double[][] truthTable) { _populationParameters = populationParameters; _mutationParameters = mutationParameters; _truthTable = truthTable; _population = Enumerable.Range(0, _populationParameters.PopulationSize) .AsParallel() .Select(i => { var genome = new NeatGenome(NetworkParameters, _mutationParameters); genome.CreateInitialGenome(); return(new XorIndividual(genome)); }) .ToList(); }
static void XorTest() { Console.WriteLine("XOR challenge accepted!"); Console.WriteLine(); NetworkParameters networkParameters = new NetworkParameters(2, 1); PopulationParameters populationParameters = new PopulationParameters(20, 10000, 5, 10); MutationParameters mutationParameters = new MutationParameters(); double[][] XorTruthTable = { new double[] { 0.0f, 0.0f, 0.0f }, new double[] { 0.0f, 1.0f, 1.0f }, new double[] { 1.0f, 0.0f, 1.0f }, new double[] { 1.0f, 1.0f, 0.0f } }; XorModel xorModel = new XorModel(populationParameters, mutationParameters, XorTruthTable); var iteration = xorModel.Search(100, 0.00001f); Console.WriteLine(); Console.WriteLine($"BEST. Iteration = {iteration} Error = {xorModel.BestIndividual.Error}"); var net = xorModel.BestIndividual.Genome.Network; foreach (var xorData in XorTruthTable) { net.Inputs[0] = xorData[0]; net.Inputs[1] = xorData[1]; net.Activate(); Console.WriteLine($"[{xorData[0]} {xorData[1]}] = {net.Outputs[0]}"); } Console.WriteLine(); xorModel.BestIndividual.Genome.PrintGenomeStructure(); Console.WriteLine("Dump to File"); File.WriteAllText("xor_net_genome.json", xorModel.BestIndividual.Genome.DumpToJson()); Console.WriteLine(); }
static void MnistTest() { Console.WriteLine("Mnist challenge accepted!"); Console.WriteLine(); var trainSet = new TrainingSet(); PopulationParameters populationParameters = new PopulationParameters(5, 100, 1, 2); MutationParameters mutationParameters = new MutationParameters(); NetworkParameters networkParameters = new NetworkParameters(MnistDataset.ImageSize, MnistDataset.ClassCount); MnistModel mnistModel = new MnistModel(populationParameters, mutationParameters, networkParameters, trainSet); mnistModel.Search(2, 0.1, 100); Console.WriteLine(); Console.WriteLine("Best individual"); Console.WriteLine(mnistModel.BestIndividual); Console.WriteLine(); }
/// <summary> /// Mutates a feed forward network. Does not create a copy! /// </summary> public static void Mutate(this INetwork network, MutationParameters mutationParams) { //no structural mutations allowed for fully connected feed forward neural networks MutateBias(network, mutationParams.BiasChance, mutationParams.BiasDeviation); MutateWeights(network, mutationParams.WeightChance, mutationParams.WeightDeviation); }