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 FloatVectorIndividualWriteAndRead() { // First we'll set up a Fitness for the Individual var rand = new MersenneTwisterFast(0); var f = new SimpleFitness(); f.SetFitness(null, float.MaxValue, true); 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 FloatVectorIndividual(); var ind2 = new FloatVectorIndividual(); // We'll read back into this instance ind.Genome = new float[10]; // This is the set of genes for (var i = 0; i < 10; i++) { ind.genome[i] = ((float)rand.NextDouble()) * float.MaxValue; // some random genes } 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 for (var i = 0; i < 10; i++) { Assert.AreEqual(ind.genome[i], ind2.genome[i]); // check each gene } } }