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; } }); }
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; } }
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; } }