/// <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);
            }
        }
예제 #2
0
        /// <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);
        }
예제 #4
0
        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);
                }
                                         );
            }
        }