public void Pareto_OneDimension_SmallerIsBetter() { var benchmark = new MockedBenchmark( time: n => 10.0 * n + 30, memory: n => 20.0 * n + 10); var pareto = new ParetoFilter<string>(new Dictionary<string, DimensionRating>() { { "Time", DimensionRating.SmallerIsBetter } }); var result = pareto.Filter(benchmark.CreateMeasurements(20)).ToList(); Assert.AreEqual(1, result.Count); Assert.AreEqual(30.0, result.Single().Measurements["Time"]); }
public void Pareto_OneDimension_BiggerIsBetter() { var benchmark = new MockedBenchmark( time: n => 10.0 * n + 30, memory: n => 20.0 * n + 10); var pareto = new ParetoFilter <string>(new Dictionary <string, DimensionRating>() { { "Time", DimensionRating.BiggerIsBetter } }); var result = pareto.Filter(benchmark.CreateMeasurements(20)).ToList(); Assert.AreEqual(1, result.Count); Assert.AreEqual(220.0, result.Single().Measurements["Time"]); }
public void Pareto_TwoDimension_NotCorrelated() { var benchmark = new MockedBenchmark( time: n => n < 25 ? 10.0 * n + 30 : 10.0 * (n-25) + 10, memory: n => n < 25 ? 20.0 * n + 10 : 30.0 * (n-25) + 20); var pareto = new ParetoFilter<string>(new Dictionary<string, DimensionRating>() { { "Time", DimensionRating.SmallerIsBetter }, { "Memory", DimensionRating.BiggerIsBetter } }); var result = pareto.Filter(benchmark.CreateMeasurements(50)).ToList(); Assert.AreEqual(25, result.Count); }
public void Pareto_TwoDimension_NotCorrelated() { var benchmark = new MockedBenchmark( time: n => n < 25 ? 10.0 * n + 30 : 10.0 * (n - 25) + 10, memory: n => n < 25 ? 20.0 * n + 10 : 30.0 * (n - 25) + 20); var pareto = new ParetoFilter <string>(new Dictionary <string, DimensionRating>() { { "Time", DimensionRating.SmallerIsBetter }, { "Memory", DimensionRating.BiggerIsBetter } }); var result = pareto.Filter(benchmark.CreateMeasurements(50)).ToList(); Assert.AreEqual(25, result.Count); }
private void OptimizeAnalysis(Configuration baseConfiguration) { IList <MeasuredConfiguration <Configuration> > measurements; var benchmark = CreateBenchmark(); if (options.Repetitions > 1) { benchmark = new RepeatAverageBenchmark <Configuration>(benchmark, options.Repetitions); } switch (options.Method) { case OptimizationAlgorithm.Full: measurements = PerformFullExploration(baseConfiguration, benchmark); break; case OptimizationAlgorithm.Genetic: measurements = PerformGeneticAlgorithm(baseConfiguration, benchmark, options); break; default: throw new ArgumentOutOfRangeException("options", "The chosen method is not supported"); } if (!options.All) { Console.WriteLine("Starting Pareto filter for dimensions Time and Memory"); var paretoDimensions = new Dictionary <string, DimensionRating>(); paretoDimensions.Add("Time", DimensionRating.SmallerIsBetter); paretoDimensions.Add("Memory", DimensionRating.SmallerIsBetter); var pareto = new ParetoFilter <Configuration>(paretoDimensions); measurements = pareto.Filter(measurements).ToList(); } else { Console.WriteLine("Skipping Pareto filter"); } Console.WriteLine("Saving results to disk."); if (measurements.Count == 1) { repository.Save(measurements[0].Configuration, options.Configuration); } else { using (var csv = new StreamWriter(Path.ChangeExtension(options.Configuration, "csv"), false)) { csv.Write("Configuration"); foreach (var metric in benchmark.Metrics) { csv.Write(";" + metric); } csv.WriteLine(); var index = 1; var baseName = Path.ChangeExtension(options.Configuration, null); foreach (var config in measurements) { var fileName = string.Format("{0}_{1}.xmi", baseName, index); csv.Write(Path.GetFileNameWithoutExtension(fileName)); foreach (var metric in benchmark.Metrics) { csv.Write(";"); csv.Write(config.Measurements[metric]); } csv.WriteLine(); repository.Save(config.Configuration, fileName); index++; } } } }