Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encodings/ParameterConfigurationTree.cs @ 5023

Last change on this file since 5023 was 5023, checked in by cneumuel, 13 years ago

#1215 worked on metaoptimization

File size: 4.8 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using HeuristicLab.Core;
6using HeuristicLab.Common;
7using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
8using HeuristicLab.Optimization;
9using HeuristicLab.Data;
10
11namespace HeuristicLab.Problems.MetaOptimization {
12  // todo: storable, name, descr, ...
13  [StorableClass]
14  public class ParameterConfigurationTree : ValueConfiguration {
15    [Storable]
16    public EngineAlgorithm Algorithm {
17      get { return (EngineAlgorithm)base.ActualValue.Value; }
18      set {
19        base.ActualValue.Value = value;
20      }
21    }
22
23    [Storable]
24    private DoubleValue bestQuality;
25    public DoubleValue BestQuality {
26      get { return bestQuality; }
27      set {
28        if (bestQuality != value) {
29          if (bestQuality != null) DeregisterQualityEvents();
30          bestQuality = value;
31          if (bestQuality != null) RegisterQualityEvents();
32          OnQualityChanged();
33        }
34      }
35    }
36
37    [Storable]
38    private DoubleValue averageQuality;
39    public DoubleValue AverageQuality {
40      get { return averageQuality; }
41      set { averageQuality = value; }
42    }
43
44    [Storable]
45    private DoubleValue worstQuality;
46    public DoubleValue WorstQuality {
47      get { return worstQuality; }
48      set { worstQuality = value; }
49    }
50   
51    [Storable]
52    private DoubleValue qualityVariance;
53    public DoubleValue QualityVariance {
54      get { return qualityVariance; }
55      set { qualityVariance = value; }
56    }
57   
58    [Storable]
59    private DoubleValue qualityStandardDeviation;
60    public DoubleValue QualityStandardDeviation {
61      get { return qualityStandardDeviation; }
62      set { qualityStandardDeviation = value; }
63    }
64   
65    [Storable]
66    private TimeSpanValue averageExecutionTime;
67    public TimeSpanValue AverageExecutionTime {
68      get { return averageExecutionTime; }
69      set { averageExecutionTime = value; }
70    }
71
72    [Storable]
73    private IntValue repetitions;
74    public IntValue Repetitions {
75      get { return repetitions; }
76      set { repetitions = value; }
77    }
78
79    [Storable]
80    public RunCollection Runs { get; set; }
81   
82    #region constructors and cloning
83    public ParameterConfigurationTree(EngineAlgorithm algorithm) : base(algorithm, algorithm.GetType()) {
84      this.Optimize = true; // root must always be optimized
85      this.BestQuality = new DoubleValue();
86    }
87    public ParameterConfigurationTree() {
88      Initialize();
89    }
90    [StorableConstructor]
91    protected ParameterConfigurationTree(bool deserializing) : base(deserializing) { }
92    protected ParameterConfigurationTree(ParameterConfigurationTree original, Cloner cloner) : base(original, cloner) {
93      this.bestQuality = cloner.Clone(original.BestQuality);
94      this.Algorithm.Prepare();
95      this.Algorithm.Runs.Clear();
96      Initialize();
97    }
98    public override IDeepCloneable Clone(Cloner cloner) {
99      return new ParameterConfigurationTree(this, cloner);
100    }
101    [StorableHook(HookType.AfterDeserialization)]
102    private void AfterDeserialization() {
103      Initialize();
104    }
105    #endregion
106
107    private void Initialize() {
108      //if (algorithm != null) RegisterAlgorithmEvents();
109      if (bestQuality != null) RegisterQualityEvents();
110    }
111
112    public virtual void CollectResultValues(IDictionary<string, IItem> values) {
113      values.Add("RunsAverageExecutionTime", AverageExecutionTime);
114      values.Add("Repetitions", Repetitions);
115      values.Add("RunsBestQuality", BestQuality);
116      values.Add("RunsAverageQuality", AverageQuality);
117      values.Add("RunsWorstQuality", WorstQuality);
118      values.Add("RunsQualityVariance", QualityVariance);
119      values.Add("RunsQualityStandardDeviation", QualityStandardDeviation);
120      values.Add("Runs", Runs);
121    }
122
123    #region Events
124    //public event EventHandler AlgorithmChanged;
125    //private void OnAlgorithmChanged() {
126    //  var handler = AlgorithmChanged;
127    //  if (handler != null) handler(this, EventArgs.Empty);
128    //}
129    public event EventHandler QualityChanged;
130    private void OnQualityChanged() {
131      var handler = QualityChanged;
132      if (handler != null) handler(this, EventArgs.Empty);
133    }
134
135    //private void RegisterAlgorithmEvents() {
136     
137    //}
138    //private void DeregisterAlgorithmEvents() {
139
140    //}
141    private void RegisterQualityEvents() {
142      BestQuality.ValueChanged += new EventHandler(Quality_ValueChanged);
143    }
144    private void DeregisterQualityEvents() {
145      BestQuality.ValueChanged -= new EventHandler(Quality_ValueChanged);
146    }
147
148    private void Quality_ValueChanged(object sender, EventArgs e) {
149      OnQualityChanged();
150    }
151    #endregion
152
153  }
154}
Note: See TracBrowser for help on using the repository browser.