public void SaveAndLoadGenome() { var metaNeatGenome = new MetaNeatGenome <double>(3, 2, true, new ReLU()); var genomeBuilder = NeatGenomeBuilderFactory <double> .Create(metaNeatGenome); // Simple acyclic graph. var connGenes = new ConnectionGenes <double>(6); connGenes[0] = (0, 3, 0.123); connGenes[1] = (1, 3, 1.234); connGenes[2] = (2, 3, -0.5835); connGenes[3] = (2, 4, 5.123456789); connGenes[4] = (2, 5, 2.5); connGenes[5] = (5, 4, 5.4); // Wrap in a genome. NeatGenome <double> genome = genomeBuilder.Create(0, 0, connGenes); // Create a memory stream to save the genome into. using (MemoryStream ms = new(1024)) { // Save the genome. NeatGenomeSaver <double> .Save(genome, ms); // Load the genome. ms.Position = 0; NeatGenomeLoader <double> loader = NeatGenomeLoaderFactory.CreateLoaderDouble(metaNeatGenome); NeatGenome <double> genomeLoaded = loader.Load(ms); // Compare the original genome with the loaded genome. IOTestUtils.CompareGenomes(genome, genomeLoaded); } }
public void SaveGenome_FrenchLocale() { // Store the current/default culture info. Thread currentThread = Thread.CurrentThread; CultureInfo defaultCulture = currentThread.CurrentCulture; // Change the default culture to French (which uses e.g. a comma as a decimal separator). CultureInfo frenchCulture = new("fr-FR"); Thread.CurrentThread.CurrentCulture = frenchCulture; try { // Manually build a genome. var metaNeatGenome = new MetaNeatGenome <double>(3, 2, true, new ReLU()); NeatGenome <double> genomeBuilt = CreateGenome1(metaNeatGenome); // Save the genome into a MemoryStream. using MemoryStream ms = new(); NeatGenomeSaver <double> .Save(genomeBuilt, ms); // Load the saved genome. ms.Position = 0; NeatGenomeLoader <double> loader = NeatGenomeLoaderFactory.CreateLoaderDouble(metaNeatGenome); NeatGenome <double> genomeLoaded = loader.Load(ms); // Compare the original genome with the loaded one. IOTestUtils.CompareGenomes(genomeLoaded, genomeBuilt); } finally { // Restore the current thread's default culture; otherwise we may break other unit tests that use this thread. Thread.CurrentThread.CurrentCulture = defaultCulture; } }
public void LoadGenome() { var metaNeatGenome = new MetaNeatGenome <double>(3, 2, true, new ReLU()); // Load test genome. NeatGenomeLoader <double> loader = NeatGenomeLoaderFactory.CreateLoaderDouble(metaNeatGenome); NeatGenome <double> genomeLoaded = loader.Load("TestData/example1.genome"); // Manually build an equivalent genome. NeatGenome <double> genomeBuilt = CreateGenome1(metaNeatGenome); // Compare the two genomes. IOTestUtils.CompareGenomes(genomeLoaded, genomeBuilt); }
/// <summary> /// Load a population from a folder containing one or more genome files (with a .genome file extension). /// </summary> /// <param name="path">Path to the folder to load genomes from.</param> /// <returns>A list of the loaded genomes.</returns> public List <NeatGenome <T> > LoadFromFolder(string path) { if (!Directory.Exists(path)) { throw new IOException($"Directory does not exist [{path}]"); } // Determine the set of genome files to load. DirectoryInfo dirInfo = new(path); FileInfo[] fileInfoArr = dirInfo.GetFiles("*.genome"); // Alloc genome list with an appropriate capacity. List <NeatGenome <T> > genomeList = new(fileInfoArr.Length); // Loop the genome files, loading each in turn. foreach (FileInfo fileInfo in fileInfoArr) { NeatGenome <T> genome = _genomeLoader.Load(fileInfo.FullName); genomeList.Add(genome); } return(genomeList); }
public void SaveGenome() { // Manually build a genome. var metaNeatGenome = new MetaNeatGenome <double>(3, 2, true, new ReLU()); NeatGenome <double> genomeBuilt = CreateGenome1(metaNeatGenome); // Save the genome into a MemoryStream. using MemoryStream ms = new(); NeatGenomeSaver <double> .Save(genomeBuilt, ms); // Load the saved genome. ms.Position = 0; NeatGenomeLoader <double> loader = NeatGenomeLoaderFactory.CreateLoaderDouble(metaNeatGenome); NeatGenome <double> genomeLoaded = loader.Load(ms); // Compare the two genomes. IOTestUtils.CompareGenomes(genomeLoaded, genomeBuilt); }
private static void VerifyNeuralNetResponseInner(bool enableHardwareAcceleration) { var activationFnFactory = new DefaultActivationFunctionFactory <double>(enableHardwareAcceleration); var metaNeatGenome = new MetaNeatGenome <double>(4, 1, true, activationFnFactory.GetActivationFunction("LeakyReLU")); // Load test genome. NeatGenomeLoader <double> loader = NeatGenomeLoaderFactory.CreateLoaderDouble(metaNeatGenome); NeatGenome <double> genome = loader.Load("TestData/binary-three-multiplexer.genome"); // Decode genome to a neural net. var genomeDecoder = NeatGenomeDecoderFactory.CreateGenomeDecoderAcyclic(); IBlackBox <double> blackBox = genomeDecoder.Decode(genome); // Evaluate the neural net. var evaluator = new BinaryThreeMultiplexerEvaluator(); // Confirm the expected fitness (to a limited amount of precision to allow for small variations of floating point // results that can occur as a result of platform/environmental variations). FitnessInfo fitnessInfo = evaluator.Evaluate(blackBox); Assert.Equal(107.50554956432657, fitnessInfo.PrimaryFitness, 6); }