/// <summary> /// Evaluates the chromosome's fitness. /// </summary> public override async Task EvaluateAsync(IChromosome chromosome) { try { // cast to the base type var chromosomeBase = (Chromosome)chromosome; // Convert to dictionary and add "id" key-value pair var list = chromosomeBase.ToDictionary(); list.Add("chromosome-id", chromosomeBase.Id); // Set algorithm start and end dates list.Add("start-date", StartDate.ToString("O")); list.Add("end-date", EndDate.ToString("O")); // Additional settings to the list list.Add("algorithm-type-name", Shared.Config.AlgorithmTypeName); list.Add("algorithm-location", Shared.Config.AlgorithmLocation); list.Add("data-folder", Shared.Config.DataFolder); // Obtain full results var result = await Task.Run(() => AppDomainRunner.RunAlgorithm(list)); // Calculate fitness and concat the results with an output string var fitness = StatisticsAdapter.CalculateFitness(result, FitnessScore, FilterEnabled); // Save full results chromosomeBase.FitnessResult = new FitnessResult { Chromosome = chromosomeBase, StartDate = this.StartDate, EndDate = this.EndDate, FullResults = result }; // create an output string var theOutput = chromosomeBase.EvaluationToLogOutput(result, FitnessScore, fitness); // Display the output lock (_lock) { Shared.Logger.Trace(theOutput + Environment.NewLine); } // assign a value to chromosome fitness chromosome.Fitness = fitness; } catch (Exception ex) { Shared.Logger.Error("OptimizerFitness.Evaluate: " + ex.Message); } }