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