Пример #1
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
            }
        }
Пример #2
0
        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
                }
            }
        }