Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/12/17 21:59:49 (7 years ago)
Author:
abeham
Message:

#2634, #2744, #745: merged revisions 14102, 14647, 14652, 14654, 14734, 14737, 14775, 15048, 15125, 15126 to stable, reverted changes from revision 15153

Location:
stable
Files:
3 edited
6 copied

Legend:

Unmodified
Added
Removed
  • stable

  • stable/HeuristicLab.Analysis

  • stable/HeuristicLab.Analysis/3.3/DataVisualization/GanttData.cs

    r14734 r15220  
    3434  [Item("Gantt Data", "Data of a Gantt visualization")]
    3535  [StorableClass]
    36   public class GanttData : Item {
     36  public class GanttData : NamedItem {
    3737
    3838    [Storable]
     
    5151      categoryColors = new ObservableDictionary<string, Color>(original.categoryColors);
    5252    }
    53     public GanttData() {
     53    public GanttData() : this("Gantt Data", "Data of a Gantt visualization") { }
     54    public GanttData(string name) : this(name, string.Empty) { }
     55    public GanttData(string name, string description) : base(name, description) {
    5456      rows = new NamedItemCollection<GanttRow>();
    5557      categoryColors = new ObservableDictionary<string, Color>();
    5658    }
    57     public GanttData(IEnumerable<GanttRow> rows) {
     59    public GanttData(IEnumerable<GanttRow> rows) : this("Gantt Data", rows) { }
     60    public GanttData(string name, IEnumerable<GanttRow> rows) : this(name, string.Empty, rows) { }
     61    public GanttData(string name, string description, IEnumerable<GanttRow> rows) : base(name, description) {
    5862      this.rows = new NamedItemCollection<GanttRow>(rows);
    5963      categoryColors = new ObservableDictionary<string, Color>();
     
    7882      items = cloner.Clone(original.items);
    7983    }
    80     public GanttRow() {
     84    public GanttRow() : this("Gantt Row", "Row of a Gantt chart") { }
     85    public GanttRow(string name) : this(name, string.Empty) { }
     86    public GanttRow(string name, string description) : base(name, description) {
    8187      items = new ItemList<GanttItem>();
    8288    }
    83     public GanttRow(IEnumerable<GanttItem> items) {
     89    public GanttRow(IEnumerable<GanttItem> items) : this("Gantt Row", items) { }
     90    public GanttRow(string name, IEnumerable<GanttItem> items) : this(name, string.Empty, items) { }
     91    public GanttRow(string name, string description, IEnumerable<GanttItem> items) : base(name, description) {
    8492      this.items = new ItemList<GanttItem>(items);
    8593    }
  • stable/HeuristicLab.Analysis/3.3/DataVisualization/IndexedDataRow.cs

    r14102 r15220  
    3030
    3131namespace HeuristicLab.Analysis {
    32   [Item("IndexedDataRow", "A data row that contains time series.")]
     32  [Item("IndexedDataRow", "A data row that contains a series of points.")]
    3333  [StorableClass]
    3434  public class IndexedDataRow<T> : NamedItem {
     
    105105      OnVisualPropertiesChanged();
    106106    }
     107    protected override void OnNameChanged() {
     108      base.OnNameChanged();
     109      VisualProperties.DisplayName = Name;
     110    }
    107111  }
    108112}
  • stable/HeuristicLab.Analysis/3.3/DataVisualization/IndexedDataTable.cs

    r14102 r15220  
    107107    public event EventHandler VisualPropertiesChanged;
    108108    protected virtual void OnVisualPropertiesChanged() {
    109       EventHandler handler = VisualPropertiesChanged;
     109      var handler = VisualPropertiesChanged;
    110110      if (handler != null) handler(this, EventArgs.Empty);
    111111    }
     
    115115    }
    116116
    117     protected virtual void RegisterRowsEvents() {
    118       rows.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedDataRow<T>>(rows_ItemsAdded);
    119       rows.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedDataRow<T>>(rows_ItemsRemoved);
    120       rows.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedDataRow<T>>(rows_ItemsReplaced);
    121       rows.CollectionReset += new CollectionItemsChangedEventHandler<IndexedDataRow<T>>(rows_CollectionReset);
    122     }
    123     private void rows_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedDataRow<T>> e) {
     117    private void RegisterRowsEvents() {
     118      rows.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedDataRow<T>>(RowsOnItemsAdded);
     119      rows.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedDataRow<T>>(RowsOnItemsRemoved);
     120      rows.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedDataRow<T>>(RowsOnItemsReplaced);
     121      rows.CollectionReset += new CollectionItemsChangedEventHandler<IndexedDataRow<T>>(RowsOnCollectionReset);
     122      foreach (var row in Rows) RegisterRowEvents(row);
     123    }
     124    protected virtual void RowsOnItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedDataRow<T>> e) {
    124125      foreach (var row in e.Items)
    125126        this.RegisterRowEvents(row);
     
    129130      this.OnReset();
    130131    }
    131     private void rows_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedDataRow<T>> e) {
     132    protected virtual void RowsOnItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedDataRow<T>> e) {
    132133      foreach (var row in e.Items)
    133134        this.DeregisterRowEvents(row);
     
    137138      this.OnReset();
    138139    }
    139     private void rows_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedDataRow<T>> e) {
     140    protected virtual void RowsOnItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedDataRow<T>> e) {
    140141      foreach (var row in e.OldItems)
    141142        this.DeregisterRowEvents(row);
     
    147148      this.OnReset();
    148149    }
    149     private void rows_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedDataRow<T>> e) {
     150    protected virtual void RowsOnCollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedDataRow<T>> e) {
    150151      foreach (var row in e.OldItems)
    151152        this.DeregisterRowEvents(row);
     
    159160    }
    160161
    161     protected virtual void RegisterRowEvents(IndexedDataRow<T> row) {
    162       row.Values.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<Tuple<T, double>>>(Values_ItemsAdded);
    163       row.Values.ItemsMoved += new CollectionItemsChangedEventHandler<IndexedItem<Tuple<T, double>>>(Values_ItemsMoved);
    164       row.Values.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<Tuple<T, double>>>(Values_ItemsRemoved);
    165       row.Values.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<Tuple<T, double>>>(Values_ItemsReplaced);
    166       row.Values.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<Tuple<T, double>>>(Values_CollectionReset);
    167     }
    168     protected virtual void DeregisterRowEvents(IndexedDataRow<T> row) {
    169       row.Values.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<Tuple<T, double>>>(Values_ItemsAdded);
    170       row.Values.ItemsMoved -= new CollectionItemsChangedEventHandler<IndexedItem<Tuple<T, double>>>(Values_ItemsMoved);
    171       row.Values.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<Tuple<T, double>>>(Values_ItemsRemoved);
    172       row.Values.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<Tuple<T, double>>>(Values_ItemsReplaced);
    173       row.Values.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<Tuple<T, double>>>(Values_CollectionReset);
    174     }
    175 
    176     private void Values_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<Tuple<T, double>>> e) {
    177       this.OnReset();
    178     }
    179     private void Values_ItemsMoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<Tuple<T, double>>> e) {
    180       this.OnReset();
    181     }
    182     private void Values_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<Tuple<T, double>>> e) {
    183       this.OnReset();
    184     }
    185     private void Values_ItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<Tuple<T, double>>> e) {
    186       this.OnReset();
    187     }
    188     private void Values_CollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<Tuple<T, double>>> e) {
     162    private void RegisterRowEvents(IndexedDataRow<T> row) {
     163      row.Values.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<Tuple<T, double>>>(ValuesOnItemsAdded);
     164      row.Values.ItemsMoved += new CollectionItemsChangedEventHandler<IndexedItem<Tuple<T, double>>>(ValuesOnItemsMoved);
     165      row.Values.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<Tuple<T, double>>>(ValuesOnItemsRemoved);
     166      row.Values.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<Tuple<T, double>>>(ValuesOnItemsReplaced);
     167      row.Values.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<Tuple<T, double>>>(ValuesOnCollectionReset);
     168    }
     169    private void DeregisterRowEvents(IndexedDataRow<T> row) {
     170      row.Values.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<Tuple<T, double>>>(ValuesOnItemsAdded);
     171      row.Values.ItemsMoved -= new CollectionItemsChangedEventHandler<IndexedItem<Tuple<T, double>>>(ValuesOnItemsMoved);
     172      row.Values.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<Tuple<T, double>>>(ValuesOnItemsRemoved);
     173      row.Values.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<Tuple<T, double>>>(ValuesOnItemsReplaced);
     174      row.Values.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<Tuple<T, double>>>(ValuesOnCollectionReset);
     175    }
     176
     177    protected virtual void ValuesOnItemsAdded(object sender, CollectionItemsChangedEventArgs<IndexedItem<Tuple<T, double>>> e) {
     178      this.OnReset();
     179    }
     180    protected virtual void ValuesOnItemsMoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<Tuple<T, double>>> e) {
     181      this.OnReset();
     182    }
     183    protected virtual void ValuesOnItemsRemoved(object sender, CollectionItemsChangedEventArgs<IndexedItem<Tuple<T, double>>> e) {
     184      this.OnReset();
     185    }
     186    protected virtual void ValuesOnItemsReplaced(object sender, CollectionItemsChangedEventArgs<IndexedItem<Tuple<T, double>>> e) {
     187      this.OnReset();
     188    }
     189    protected virtual void ValuesOnCollectionReset(object sender, CollectionItemsChangedEventArgs<IndexedItem<Tuple<T, double>>> e) {
    189190      this.OnReset();
    190191    }
  • stable/HeuristicLab.Analysis/3.3/HeuristicLab.Analysis-3.3.csproj

    r12280 r15220  
    131131    <Compile Include="AlleleFrequencyAnalysis\AlleleFrequencyCollectionHistory.cs" />
    132132    <Compile Include="BestScopeSolutionAnalyzer.cs" />
     133    <Compile Include="DataVisualization\GanttData.cs" />
     134    <Compile Include="DataVisualization\IndexedDataRow.cs" />
     135    <Compile Include="DataVisualization\IndexedDataTable.cs" />
    133136    <Compile Include="DataVisualization\ScatterPlotDataRowVisualProperties.cs" />
    134137    <Compile Include="DataVisualization\ScatterPlotDataRow.cs" />
     
    154157    <Compile Include="QualityAnalysis\BestAverageWorstQualityCalculator.cs" />
    155158    <Compile Include="QualityAnalysis\BestQualityMemorizer.cs" />
     159    <Compile Include="QualityAnalysis\ExpectedRuntimeHelper.cs" />
    156160    <Compile Include="QualityAnalysis\QualityAnalyzer.cs" />
    157161    <Compile Include="QualityAnalysis\QualityDifferenceCalculator.cs" />
     
    159163    <Compile Include="Properties\AssemblyInfo.cs" />
    160164    <Compile Include="QualityAnalysis\QualityDistributionAnalyzer.cs" />
     165    <Compile Include="QualityAnalysis\QualityPerClockAnalyzer.cs" />
     166    <Compile Include="QualityAnalysis\QualityPerEvaluationsAnalyzer.cs" />
    161167    <Compile Include="QualityAnalysis\ScaledQualityDifferenceAnalyzer.cs" />
    162168    <Compile Include="Statistics\BonferroniHolm.cs" />
  • stable/HeuristicLab.Analysis/3.3/QualityAnalysis/ExpectedRuntimeHelper.cs

    r14102 r15220  
    3030      if (successful.Count > 0) {
    3131        var succAvg = successful.Average();
    32         var succDev = successful.StandardDeviation();
     32        var succDev = successful.StandardDeviation() + 1e-7;
    3333        successful.RemoveAll(x => x < succAvg - 2 * succDev);
    3434        unsuccessful.RemoveAll(x => x < succAvg - 2 * succDev);
     
    4646
    4747  public struct ErtCalculationResult {
    48     public int SuccessfulRuns;
    49     public int TotalRuns;
    50     public double ExpectedRuntime;
     48    public readonly int SuccessfulRuns;
     49    public readonly int TotalRuns;
     50    public readonly double ExpectedRuntime;
    5151
    5252    public ErtCalculationResult(int successful, int total, double ert) {
     
    5757
    5858    public override string ToString() {
    59       return SuccessfulRuns == 0 ? "\u221e" // infinity symbol
    60                                  : ExpectedRuntime.ToString("##,0.0", CultureInfo.CurrentCulture.NumberFormat);
     59      return ExpectedRuntime.ToString("##,0.0", CultureInfo.CurrentCulture.NumberFormat);
    6160    }
    6261  }
  • stable/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityPerClockAnalyzer.cs

    r14102 r15220  
    9191
    9292      if (values.Count == 0) {
    93         values.Add(newEntry);
    94         values.Add(Tuple.Create(runtimeSoFar, bestQuality)); // duplicate entry that will be replaced
     93        values.Add(newEntry); // record the first data
     94        values.Add(Tuple.Create(runtimeSoFar, bestQuality)); // last entry records max number of evaluations
    9595        return base.Apply();
    9696      }
     
    9898      var improvement = values.Last().Item2 != bestQuality;
    9999      if (improvement) {
    100         values[values.Count - 1] = newEntry;
    101         values.Add(Tuple.Create(runtimeSoFar, bestQuality)); // duplicate entry that will be replaced
     100        values[values.Count - 1] = newEntry; // record the improvement
     101        values.Add(Tuple.Create(runtimeSoFar, bestQuality)); // last entry records max number of evaluations
    102102      } else {
    103103        values[values.Count - 1] = Tuple.Create(runtimeSoFar, bestQuality);
  • stable/HeuristicLab.Analysis/3.3/QualityAnalysis/QualityPerEvaluationsAnalyzer.cs

    r14102 r15220  
    8888      if (evalMoves != null) evaluations += evalMoves.Value * MoveCostPerSolutionParameter.ActualValue.Value;
    8989
    90       var dataTable = QualityPerEvaluationsParameter.ActualValue;
    91       var values = dataTable.Rows["First-hit Graph"].Values;
    92       if (evaluations == 0 || values.Count > 0 && evaluations < values.Last().Item1) evaluations = 1;
    93       var newEntry = Tuple.Create(evaluations, bestQuality);
     90      if (evaluations > 0) {
     91        var dataTable = QualityPerEvaluationsParameter.ActualValue;
     92        var values = dataTable.Rows["First-hit Graph"].Values;
    9493
    95       if (values.Count == 0) {
    96         values.Add(newEntry);
    97         values.Add(Tuple.Create(evaluations, bestQuality)); // duplicate entry that will be replaced
    98         return base.Apply();
    99       }
     94        var newEntry = Tuple.Create(evaluations, bestQuality);
    10095
    101       var improvement = values.Last().Item2 != bestQuality;
    102       if (improvement) {
    103         values[values.Count - 1] = newEntry;
    104         values.Add(Tuple.Create(evaluations, bestQuality)); // duplicate entry that will be replaced
    105       } else {
    106         values[values.Count - 1] = Tuple.Create(evaluations, bestQuality);
     96        if (values.Count == 0) {
     97          values.Add(newEntry); // record the first data
     98          values.Add(Tuple.Create(evaluations, bestQuality)); // last entry records max number of evaluations
     99          return base.Apply();
     100        }
     101
     102        var improvement = values.Last().Item2 != bestQuality;
     103        if (improvement) {
     104          values[values.Count - 1] = newEntry; // record the improvement
     105          values.Add(Tuple.Create(evaluations, bestQuality)); // last entry records max number of evaluations
     106        } else {
     107          values[values.Count - 1] = Tuple.Create(evaluations, bestQuality); // the last entry is updated
     108        }
    107109      }
    108110      return base.Apply();
Note: See TracChangeset for help on using the changeset viewer.