using System.Collections.Generic; using HeuristicLab.Analysis.FitnessLandscape.DataTables; using HeuristicLab.Common; using HeuristicLab.Core; using HeuristicLab.Optimization; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; namespace HeuristicLab.Analysis.FitnessLandscape { [Item("QualityTrailSummary Aggregator", "Aggregates quality trail summaries.")] [StorableClass] public class QualityTrailSummaryAggregator : Aggregator { [StorableConstructor] protected QualityTrailSummaryAggregator(bool deserializing) : base(deserializing) { } protected QualityTrailSummaryAggregator(QualityTrailSummaryAggregator original, Cloner cloner) : base(original, cloner) { } public QualityTrailSummaryAggregator() { } public override IDeepCloneable Clone(Cloner cloner) { return new QualityTrailSummaryAggregator(this, cloner); } public override IResult CreateResult() { return new Result("Quality Trail Summary", Aggregate(items)); } public static DataTable Aggregate(List qualityTrailSummaryTables) { DataRow minRow = new DataRow("Minima"); DataRow q1Row = new DataRow("Q1"); DataRow medRow = new DataRow("Medians"); DataRow q3Row = new DataRow("Q3"); DataRow maxRow = new DataRow("Maxima"); foreach (var table in qualityTrailSummaryTables) { var quartiles = table.Rows["Value Quantiles"].Values; minRow.Values.Add(quartiles[0]); q1Row.Values.Add(quartiles[1]); medRow.Values.Add(quartiles[2]); q3Row.Values.Add(quartiles[3]); maxRow.Values.Add(quartiles[4]); } DataTable summaryTable = new DataTable("Quality Quartiles"); summaryTable.Rows.Add(minRow); summaryTable.Rows.Add(q1Row); summaryTable.Rows.Add(medRow); summaryTable.Rows.Add(q3Row); summaryTable.Rows.Add(maxRow); return summaryTable; } } }