public void GPNodeWriteAndRead() { var state = new SimpleEvolutionState(); var initializer = new GPInitializer(); state.Initializer = initializer; // Ensure that our initializer is accessible var treeConstraints = new GPTreeConstraints(); initializer.TreeConstraints = new List <GPTreeConstraints>(); initializer.TreeConstraints.Add(treeConstraints); // Ensure that our constraints are accessible var nodeConstraints = new GPNodeConstraints(); var rootType = new GPAtomicType("MyRootType"); treeConstraints.TreeType = rootType; var root = new MyRootNode(); var tree = new GPTree { Child = root }; root.Parent = tree; root.ArgPosition = 0; // This is the root, so there is only one position (0) }
public void CopyIndividualsForwardAndBack() { var state = new SimpleEvolutionState(); var job = new Job(); var ind = new FloatVectorIndividual { Fitness = new SimpleFitness() }; var genome = new float[1] { 1.1f }; ind.Genome = genome; job.Inds = new Individual[] { ind }; job.CopyIndividualsForward(); var newFit = new SimpleFitness { Trials = new List <double>(10) }; for (var i = 0; i < 10; i++) { newFit.Trials.Add(i * 100.0); } newFit.SetFitness(state, float.MaxValue, true); job.NewInds[0].Fitness = newFit; job.CopyIndividualsBack(state); Assert.IsTrue(job.Inds[0].Fitness.Value == newFit.Value); // Fitness has been updated for (var i = 0; i < job.Inds[0].Fitness.Trials.Count; i++) { Assert.AreEqual(job.Inds[0].Fitness.Trials[i], i * 100.0); // Trials have been merged into original instance } }
public void GPIndividualWriteAndRead() { // First we'll set up a Fitness for the Individual var rand = new MersenneTwisterFast(0); // Initialize some required context var state = new SimpleEvolutionState(); var initializer = new GPInitializer(); state.Initializer = initializer; // Required for GPTree.WriteTree(...) var constraints = new GPTreeConstraints { Name = "TestTreeConstraints" }; //initializer.TreeConstraints var tree = new GPTree(); var f = new KozaFitness(); f.SetStandardizedFitness(null, float.MaxValue); const int n = 10; f.Trials = new List <double>(n); for (var i = 0; i < n; i++) { f.Trials.Add(rand.NextDouble()); } // Now we can create and initialize the Individual var ind = new GPIndividual(); var ind2 = new GPIndividual(); // We'll read back into this instance ind.Trees = new GPTree[1]; // This is the set of genes ind.Trees[0] = new GPTree(); ind.Fitness = f; ind.Evaluated = true; using (var ms = new MemoryStream()) { var writer = new BinaryWriter(ms); ind.WriteIndividual(null, writer); ms.Position = 0; var reader = new BinaryReader(ms); ind2.Fitness = new SimpleFitness(); ind2.ReadIndividual(null, reader); Assert.IsTrue(ind.Fitness.EquivalentTo(ind2.Fitness)); Assert.IsTrue(ind2.Fitness.IsIdeal); Assert.IsTrue(ind.Equals(ind2)); // Genetically equivalent Assert.AreEqual(ind.Trees.Length, ind2.Trees.Length); } }