Wrapper struct for fitness values.
Exemple #1
0
        private void Evaluate_Caching(IList <TGenome> genomeList)
        {
            // Decode and evaluate each genome in turn.
            foreach (TGenome genome in genomeList)
            {
                TPhenome phenome = (TPhenome)genome.CachedPhenome;
                if (null == phenome)
                {   // Decode the phenome and store a ref against the genome.
                    phenome = _genomeDecoder.Decode(genome);
                    genome.CachedPhenome = phenome;
                }

                if (null == phenome)
                {   // Non-viable genome.
                    genome.EvaluationInfo.SetFitness(0.0);
                    genome.EvaluationInfo.AlternativeFitness = 0.0;
                }
                else
                {
                    FitnessInfo fitnessInfo = _phenomeEvaluator.Evaluate(phenome);
                    genome.EvaluationInfo.SetFitness(fitnessInfo._fitness);
                    genome.EvaluationInfo.AlternativeFitness = fitnessInfo._alternativeFitness;
                }
            }
        }
        private IEnumerator Evaluate_Caching(IList <TGenome> genomeList)
        {
            // Decode and evaluate each genome in turn.
            foreach (TGenome genome in genomeList)
            {
                TPhenome phenome = (TPhenome)genome.CachedPhenome;
                if (null == phenome)
                {   // Decode the phenome and store a ref against the genome.
                    phenome = _genomeDecoder.Decode(genome);
                    genome.CachedPhenome = phenome;
                }

                if (null == phenome)
                {   // Non-viable genome.
                    genome.EvaluationInfo.SetFitness(0.0);
                    genome.EvaluationInfo.AuxFitnessArr = null;
                }
                else
                {
                    _phenomeEvaluator.Evaluate(phenome);
                    FitnessInfo fitnessInfo = _phenomeEvaluator.GetLastFitness(phenome);
                    genome.EvaluationInfo.SetFitness(fitnessInfo._fitness);
                    genome.EvaluationInfo.AuxFitnessArr = fitnessInfo._auxFitnessArr;
                }
            }
            return(null);
        }
        /// <summary>
        /// Main genome evaluation loop with phenome caching (decode only if no cached phenome is present
        /// from a previous decode).
        /// </summary>
        private void Evaluate_Caching(IList <TGenome> genomeList)
        {
            _phenomeEvaluator.NewGeneration();
            Parallel.ForEach(genomeList, _parallelOptions, delegate(TGenome genome)
            {
                TPhenome phenome = (TPhenome)genome.CachedPhenome;
                if (null == phenome)
                {   // Decode the phenome and store a ref against the genome.
                    phenome = _genomeDecoder.Decode(genome);
                    genome.CachedPhenome = phenome;
                }

                if (null == phenome)
                {   // Non-viable genome.
                    genome.EvaluationInfo.SetFitness(0.0);
                    genome.EvaluationInfo.AuxFitnessArr = null;
                }
                else
                {
                    FitnessInfo fitnessInfo = _phenomeEvaluator.Evaluate(phenome);
                    if (SharedParams.SharedParams.USEFITNESSBANK)
                    {
                        genome.EvaluationInfo.SetFitness(genome.EvaluationInfo.Fitness * (1 - SharedParams.SharedParams.FITNESSBANKDECAYRATE) + fitnessInfo._fitness);
                    }
                    else
                    {
                        genome.EvaluationInfo.SetFitness(fitnessInfo._fitness);
                    }
                    genome.EvaluationInfo.AuxFitnessArr = fitnessInfo._auxFitnessArr;
                }
            });
        }
 private void EvaluateOne(TGenome genome, TPhenome phenome, string userName)
 {
     if (null == phenome)
     {   // Non-viable genome.
         genome.EvaluationInfo.SetFitness(0.0);
         genome.EvaluationInfo.AuxFitnessArr = null;
     }
     else
     {
         FitnessInfo fitnessInfo = _phenomeEvaluator.Evaluate(phenome, genome.CandidateName, userName);
         // We don't want to update fitness in this way in the website-based project.
         // See evolution algorithm.
         //genome.EvaluationInfo.SetFitness(fitnessInfo._fitness);
         //genome.EvaluationInfo.AuxFitnessArr = fitnessInfo._auxFitnessArr;
     }
 }
 /// <summary>
 /// Main genome evaluation loop with no phenome caching (decode on each loop).
 /// </summary>
 private void Evaluate_NonCaching(IList <TGenome> genomeList)
 {
     Parallel.ForEach(genomeList, _parallelOptions, delegate(TGenome genome)
     {
         TPhenome phenome = _genomeDecoder.Decode(genome);
         if (null == phenome)
         {   // Non-viable genome.
             genome.EvaluationInfo.SetFitness(0.0);
             genome.EvaluationInfo.AuxFitnessArr = null;
         }
         else
         {
             FitnessInfo fitnessInfo = _phenomeEvaluator.Evaluate(phenome);
             genome.EvaluationInfo.SetFitness(fitnessInfo._fitness);
             genome.EvaluationInfo.AuxFitnessArr = fitnessInfo._auxFitnessArr;
         }
     });
 }
Exemple #6
0
 private void EvaluateOne(TGenome genome, TPhenome phenome, ParallelEvaluationParameters parameters)
 {
     if (null == phenome)
     {   // Non-viable genome.
         System.Diagnostics.Debug.WriteLine("Non-viable phenome found");
         genome.EvaluationInfo.SetFitness(0.0);
         genome.EvaluationInfo.AuxFitnessArr = null;
     }
     else
     {
         System.Diagnostics.Debug.WriteLine("Evaluate one calls pseudoevaluator.");
         FitnessInfo fitnessInfo = _phenomeEvaluator.Evaluate(phenome, parameters);
         // We don't want to update fitness in this way in the website-based project.
         // See evolution algorithm.
         //genome.EvaluationInfo.SetFitness(fitnessInfo._fitness);
         //genome.EvaluationInfo.AuxFitnessArr = fitnessInfo._auxFitnessArr;
     }
 }
Exemple #7
0
 private void Evaluate_NonCaching(IList <TGenome> genomeList)
 {
     // Decode and evaluate each genome in turn.
     foreach (TGenome genome in genomeList)
     {
         TPhenome phenome = _genomeDecoder.Decode(genome);
         if (null == phenome)
         {   // Non-viable genome.
             genome.EvaluationInfo.SetFitness(0.0);
             genome.EvaluationInfo.AuxFitnessArr = null;
         }
         else
         {
             FitnessInfo fitnessInfo = _phenomeEvaluator.Evaluate(phenome, genome);
             genome.EvaluationInfo.SetFitness(fitnessInfo._fitness);
             genome.EvaluationInfo.AuxFitnessArr = fitnessInfo._auxFitnessArr;
         }
     }
 }
        /// <summary>
        /// Main genome evaluation loop with phenome caching (decode only if no cached phenome is present
        /// from a previous decode).
        /// </summary>
        private void Evaluate_Caching(IList <TGenome> genomeList)
        {
            Parallel.ForEach(genomeList, _parallelOptions, delegate(TGenome genome)
            {
                TPhenome phenome = (TPhenome)genome.CachedPhenome;
                if (null == phenome)
                {   // Decode the phenome and store a ref against the genome.
                    phenome = _genomeDecoder.Decode(genome);
                    genome.CachedPhenome = phenome;
                }

                if (null == phenome)
                {   // Non-viable genome.
                    genome.EvaluationInfo.SetFitness(0.0);
                    genome.EvaluationInfo.AlternativeFitness = 0.0;
                }
                else
                {
                    FitnessInfo fitnessInfo = _phenomeEvaluator.Evaluate(phenome);
                    genome.EvaluationInfo.SetFitness(fitnessInfo._fitness);
                    genome.EvaluationInfo.AlternativeFitness = fitnessInfo._alternativeFitness;
                }
            });
        }
        //readonly ParallelOptions _parallelOptions;
        /// <summary>
        /// Main genome evaluation loop with no phenome caching (decode
        /// on each evaluation). Individuals are competed pairwise against
        /// every other in the population.
        /// Evaluations are summed to get the final genome fitness.
        /// </summary>
        public void Evaluate(IList <TGenome> genomeList)
        {
            //Create a temporary list of fitness values
            FitnessInfo[] results = new FitnessInfo[genomeList.Count];
            for (int i = 0; i < results.Length; i++)
            {
                results[i] = FitnessInfo.Zero;
            }

            // Exhaustively compete individuals against each other.
            for (int i = 0; i < genomeList.Count; i++)
            {
                for (int j = 0; j < genomeList.Count; j++)
                {
                    // Don't bother evaluating inviduals against themselves.
                    if (i == j)
                    {
                        continue;
                    }

                    // Decode the first genome.
                    TPhenome phenome1 = _genomeDecoder.Decode(genomeList[i]);

                    // Check that the first genome is valid.
                    if (phenome1 == null)
                    {
                        continue;
                    }

                    // Decode the second genome.
                    TPhenome phenome2 = _genomeDecoder.Decode(genomeList[j]);

                    // Check that the second genome is valid.
                    if (phenome2 == null)
                    {
                        continue;
                    }

                    // Compete the two individuals against each other and get
                    // the results.
                    FitnessInfo fitness1, fitness2;
                    _phenomeEvaluator.Evaluate(phenome1, phenome2,
                                               out fitness1, out fitness2);

                    // Add the results to each genome's overall fitness.
                    // Note that we need to use a lock here because
                    // the += operation is not atomic.
                    lock (results)
                    {
                        results[i]._fitness += fitness1._fitness;
                        //results[i]._alternativeFitness +=
                        //                              fitness1._alternativeFitness;
                        results[j]._fitness += fitness2._fitness;
                        //results[j]._alternativeFitness +=
                        //                              fitness2._alternativeFitness;
                    }
                }
            }

            // Update every genome in the population with its new fitness score.
            for (int i = 0; i < results.Length; i++)
            {
                genomeList[i].EvaluationInfo.SetFitness(results[i]._fitness);
                //genomeList[i].EvaluationInfo.AlternativeFitness =
                //                                      results[i]._alternativeFitness;
            }
        }