public void SimpleFitnessWriteAndRead()
        {
            var rand = new MersenneTwisterFast(0);
            var f    = new SimpleFitness();

            f.SetFitness(null, float.MaxValue, true);

            // Set up some random Trials just to check that they get transmitted
            const int n = 10;

            f.Trials = new List <double>(n);
            for (var i = 0; i < n; i++)
            {
                f.Trials.Add(rand.NextDouble());
            }

            using (var ms = new MemoryStream())
            {
                var writer = new BinaryWriter(ms);
                f.WriteFitness(null, writer); // Write
                ms.Position = 0;
                var reader = new BinaryReader(ms);
                var f2     = new SimpleFitness();
                f2.ReadFitness(null, reader); // Read

                // Compare
                Assert.AreEqual(f.Value, f2.Value);               // Value is same
                Assert.IsTrue(f2.IsIdeal);                        // Fitness is ideal
                Assert.AreEqual(f2.Trials.Count, f.Trials.Count); // Number of trials is the same
                for (var i = 0; i < f.Trials.Count; i++)
                {
                    Assert.AreEqual((double)f.Trials[i], (double)f2.Trials[i]); // Trial values are all the same
                }
            }
        }
Beispiel #2
0
        protected SimpleStrategyBase(SimpleFitness fitness)
        {
            if (fitness == null) throw new ArgumentNullException("fitness");

            CurrentPrediction = null;
            Fitness = fitness;
        }
Beispiel #3
0
        public void Evaluate(IEvolutionState state,
                             Individual ind,
                             int subpopulation,
                             int threadnum)
        {
            if (!ind.Evaluated) // don't bother reevaluating
            {
                // trees[0].Child is the root

                ArrayList output = GetSemanticOutput(((GPIndividual)ind).Trees[0]);

                double score = 0.0;
                for (int i = 0; i < output.Count; i++)
                {
                    SemanticNode n = (SemanticNode)output[i];
                    if (n.Value == 'X')
                    {
                        score += 1;
                    }
                }

                SimpleFitness f = (SimpleFitness)ind.Fitness;
                f.SetFitness(state, score, false);
                ind.Evaluated = true;
            }
        }
Beispiel #4
0
        public void Evaluate(IEvolutionState state,
                             Individual ind,
                             int subpopulation,
                             int threadnum)
        {
            if (!ind.Evaluated) // don't bother reevaluating
            {
                // trees[0].child is the root

                // Note ECJ GPNode counts the root as being depth
                // 1. Daida et al count it as depth 0 (p. 1669).
                actualDepth = ((GPIndividual)ind).Trees[0].Child.Depth - 1;

                actualTerminals = ((GPIndividual)ind).Trees[0].Child.NumNodes(GPNode.NODESEARCH_TERMINALS);

                double scoreDepth     = weightDepth * (1.0 - Math.Abs(targetDepth - actualDepth) / (double)targetDepth);
                double scoreTerminals = 0.0;
                if (targetDepth == actualDepth)
                {
                    scoreTerminals = weightTerminals *
                                     (1.0 - Math.Abs(targetTerminals - actualTerminals) / (double)targetTerminals);
                }

                double score = scoreTerminals + scoreDepth;

                SimpleFitness f = (SimpleFitness)ind.Fitness;
                f.SetFitness(state, (float)score, false);
                ind.Evaluated = true;
            }
        }
Beispiel #5
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
            }
        }
Beispiel #6
0
        public RandomStrategy(IRandomNumber randomNumber, SimpleFitness fitness)
            : base(fitness)
        {
            if (randomNumber == null) throw new ArgumentNullException("randomNumber");
            if (fitness == null) throw new ArgumentNullException("fitness");

            _randomNumber = randomNumber;
        }
Beispiel #7
0
        public void Fitness_Default_To_One()
        {
            var fitness = new SimpleFitness();

            var res = fitness.GetFitness();

            Assert.Equal(1, res);
        }
Beispiel #8
0
        public void Fitness_Zero_After_One_Wrong_Prediction()
        {
            var fitness = new SimpleFitness();

            fitness.LogOpponentMove(Moves.Rock, Moves.Paper);

            var res = fitness.GetFitness();

            Assert.Equal(0, res);
        }
Beispiel #9
0
        public void Fitness_Fifty_After_One_Wrong_And_One_Right_Prediction()
        {
            var fitness = new SimpleFitness();

            fitness.LogOpponentMove(Moves.Rock, Moves.Paper);
            fitness.LogOpponentMove(Moves.Scissors, Moves.Scissors);

            var res = fitness.GetFitness();

            Assert.Equal(.50, res);
        }
Beispiel #10
0
        public void Evaluate(IEvolutionState state,
                             Individual ind,
                             int subpopulation,
                             int threadnum)
        {
            if (_ca == null)
            {
                _ca = new CA(CA_WIDTH, NEIGHBORHOOD);
            }

            // we always reevaluate
            //if (!ind.evaluated)  // don't bother reevaluating
            {
                MajorityData input = (MajorityData)(this.Input);

                int sum = 0;

                // extract the rule
                ((GPIndividual)ind).Trees[0].Child.Eval(
                    state, threadnum, input, Stack, (GPIndividual)ind, this);

                int[] rule = _ca.GetRule();
                for (int i = 0; i < 64; i++)
                {
                    rule[i] = (int)(((input.Data0) >> i) & 0x1);
                }
                for (int i = 64; i < 128; i++)
                {
                    rule[i] = (int)(((input.Data1) >> (i - 64)) & 0x1);
                }
                _ca.SetRule(rule); // for good measure though it doesn't matter


                for (int i = 0; i < NUM_TRIALS; i++)
                {
                    // set up and run the CA
                    _ca.SetVals(_trials[i]);
                    _ca.Step(STEPS, true);

                    // extract the fitness
                    if (All(_ca.GetVals(), _majorities[i]))
                    {
                        sum++;
                    }
                }

                SimpleFitness f = (SimpleFitness)ind.Fitness;
                f.SetFitness(state, sum / (double)NUM_TRIALS, sum == NUM_TRIALS);
                ind.Evaluated = true;
            }
        }
Beispiel #11
0
 public void Evaluate(
     IEvolutionState state,
     Individual ind,
     int subpopulation,
     int threadnum)
 {
     if (!ind.Evaluated)
     {
         double        score = Fitness(((GPIndividual)ind).Trees[0].Child);
         SimpleFitness f     = (SimpleFitness)ind.Fitness;
         f.SetFitness(state, (float)score, score == 1.0);
         ind.Evaluated = true;
     }
 }
        public void ShortVectorIndividualWriteAndRead()
        {
            // 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 ShortVectorIndividual();
            var ind2 = new ShortVectorIndividual(); // We'll read back into this instance

            ind.Genome = new short[10];             // This is the set of genes
            for (var i = 0; i < 10; i++)
            {
                ind.genome[i] = (short)rand.NextInt(short.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
                }
            }
        }
Beispiel #13
0
        public void Evaluate(IEvolutionState state,
                             Individual ind,
                             int subpopulation,
                             int threadnum)
        {
            if (!ind.Evaluated) // don't bother reevaluating
            {
                // trees[0].child is the root
                _fitness = 0.0;
                NodeCal(((GPIndividual)ind).Trees[0].Child, state);

                SimpleFitness f = (SimpleFitness)ind.Fitness;
                f.SetFitness(state, _fitness, false);
                ind.Evaluated = true;
            }
        }
Beispiel #14
0
        public void Evaluate(IEvolutionState state,
                             Individual ind,
                             int subpopulation,
                             int threadnum)
        {
            if (_ca == null)
            {
                _ca = new CA(CA_WIDTH, NEIGHBORHOOD);
            }

            // we always reevaluate
            //if (!ind.evaluated)  // don't bother reevaluating
            {
                int sum = 0;

                bool[] genome = ((BitVectorIndividual)ind).genome;

                // extract the rule
                int[] rule = _ca.GetRule();
                for (int i = 0; i < 128; i++)
                {
                    rule[i] = (genome[i] ? 1 : 0);
                }
                _ca.SetRule(rule); // for good measure though it doesn't matter

                for (int i = 0; i < NUM_TRIALS; i++)
                {
                    // set up and run the CA
                    _ca.SetVals(_trials[i]);
                    _ca.Step(STEPS, true);

                    // extract the fitness
                    if (All(_ca.GetVals(), _majorities[i]))
                    {
                        sum++;
                    }
                }
                SimpleFitness f = (SimpleFitness)ind.Fitness;
                f.SetFitness(state, sum / (double)NUM_TRIALS, false);
                ind.Evaluated = true;
            }
        }
Beispiel #15
0
 protected RuleStrategyBase(int antecedentCount, SimpleFitness fitness)
     : base(fitness)
 {
     AntecedentCount = antecedentCount;
     Table = new RuleTable(antecedentCount);
 }
Beispiel #16
0
 public OpponentRulesStrategy(int opponentMovesToTrack, SimpleFitness fitness)
     : base(opponentMovesToTrack, fitness)
 {
 }
Beispiel #17
0
 public MyRulesStrategy(int myMovesToTrack, SimpleFitness fitness)
     : base(myMovesToTrack, fitness)
 {
 }