/// <summary> /// The Success Rate is the percentage of the independent runs which reached specified accuracy levels. /// A total of numLevels accuracy levels have been considered, with the accuracy levels starting at the best /// accuracy obtained by all algorithms, logarithmically increasing towards the worst accuracy. /// </summary> /// <param name="algorithms">Algorithms.</param> /// <param name="numLevels">The number of accuracy levels.</param> public static void AddSuccessRate(List <Algorithm> algorithms, int numLevels) { double bestFit = double.MaxValue; double worstFit = double.MinValue; var fitnesses = algorithms.Select(x => x.GetFitness()); foreach (Measurement measure in fitnesses) { worstFit = Math.Max(worstFit, measure.FinalIteration.Max); bestFit = Math.Min(bestFit, measure.FinalIteration.Min); } List <double> accuracyLevels = LogarithmicallyIncreasingScale(bestFit, worstFit, numLevels); foreach (Algorithm algorithm in algorithms) { Measurement measure = algorithm.GetFitness(); double runs = measure.FinalIteration.Values.Count; List <double> successRate = new List <double>(numLevels); //TODO: this can be improved majorly! foreach (double level in accuracyLevels) { //TODO: (1 - success) as R expects minimization and success rate is maximization successRate.Add(1 - measure.FinalIteration.Values.Count(x => x < level) / runs); } Measurement result = new Measurement("SuccessRate"); IterationStats stats = new IterationStats(1, successRate); result.AddIterationStatistics(1, stats); algorithm.AddMeasurement(result); } }
/// <summary> /// Adds the iteration statistics to the list. /// </summary> /// <param name="iteration">The iteration which we are adding.</param> /// <param name="stats">The iteration statistics to add.</param> public void AddIterationStatistics(int iteration, IterationStats stats) { _iterationStatistics.TryAdd(iteration, stats); if (iteration > maxIters) { maxIters = iteration; //check if the new iteration is greater than previous maximum } }
/// <summary> /// The Consistency is the sum of the squared differences between the fitness and the average fitnesses. /// </summary> /// <param name="fitness">Fitness.</param> public static Measurement Consistency(Measurement fitness) { double avg = fitness.FinalIteration.Average; Measurement result = new Measurement("Consistency"); IterationStats stats = new IterationStats(1, fitness.FinalIteration.Values.Select(x => Math.Pow(x - avg, 2))); result.AddIterationStatistics(1, stats); return(result); }
protected virtual void ReadLine(string line) { string[] tokens = line.Split(splitChars, StringSplitOptions.RemoveEmptyEntries); int iter; if (!int.TryParse(tokens[0], out iter)) { Console.WriteLine("Iteration is not the first column."); } string columnName; int index = 1; //the index of the column being parsed //loop through each column while (index < columnArray.Length) { columnName = columnArray[index]; List <double> values = new List <double>(); //loop through the various columns (i.e., runs) for this measure while (index <= columnArray.Length && columnArray[index - 1] == columnName) { values.Add(double.Parse(tokens[index])); index++; } IterationStats stats = new IterationStats(iter, values); measurements.AddOrUpdate(columnName, x => //add function { Measurement meas = new Measurement(columnName); meas.AddIterationStatistics(iter, stats); return(meas); }, (name, meas) => //update function { meas.AddIterationStatistics(iter, stats); return(meas); } ); } }