Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Analysis/3.3/QualityAnalysis/BestAverageWorstQualityAnalyzer.cs @ 6051

Last change on this file since 6051 was 6051, checked in by swagner, 13 years ago

Changed some more parameters to be hidden per default and corrected wrong layout in some parameter views (#1377)

File size: 11.6 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System;
23using HeuristicLab.Common;
24using HeuristicLab.Core;
25using HeuristicLab.Data;
26using HeuristicLab.Operators;
27using HeuristicLab.Optimization;
28using HeuristicLab.Optimization.Operators;
29using HeuristicLab.Parameters;
30using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
31
32namespace HeuristicLab.Analysis {
33  /// <summary>
34  /// An operator which analyzes the best, average and worst quality of solutions in the scope tree.
35  /// </summary>
36  [Item("BestAverageWorstQualityAnalyzer", "An operator which analyzes the best, average and worst quality of solutions in the scope tree.")]
37  [StorableClass]
38  public sealed class BestAverageWorstQualityAnalyzer : AlgorithmOperator, IAnalyzer {
39    #region Parameter properties
40    public ValueLookupParameter<BoolValue> MaximizationParameter {
41      get { return (ValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
42    }
43    public ScopeTreeLookupParameter<DoubleValue> QualityParameter {
44      get { return (ScopeTreeLookupParameter<DoubleValue>)Parameters["Quality"]; }
45    }
46    public ValueLookupParameter<DoubleValue> BestKnownQualityParameter {
47      get { return (ValueLookupParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
48    }
49    public ValueLookupParameter<DoubleValue> BestQualityParameter {
50      get { return (ValueLookupParameter<DoubleValue>)Parameters["BestQuality"]; }
51    }
52    public ValueLookupParameter<DoubleValue> CurrentBestQualityParameter {
53      get { return (ValueLookupParameter<DoubleValue>)Parameters["CurrentBestQuality"]; }
54    }
55    public ValueLookupParameter<DoubleValue> CurrentAverageQualityParameter {
56      get { return (ValueLookupParameter<DoubleValue>)Parameters["CurrentAverageQuality"]; }
57    }
58    public ValueLookupParameter<DoubleValue> CurrentWorstQualityParameter {
59      get { return (ValueLookupParameter<DoubleValue>)Parameters["CurrentWorstQuality"]; }
60    }
61    public ValueLookupParameter<DataTable> QualitiesParameter {
62      get { return (ValueLookupParameter<DataTable>)Parameters["Qualities"]; }
63    }
64    public ValueLookupParameter<DoubleValue> AbsoluteDifferenceBestKnownToBestParameter {
65      get { return (ValueLookupParameter<DoubleValue>)Parameters["AbsoluteDifferenceBestKnownToBest"]; }
66    }
67    public ValueLookupParameter<PercentValue> RelativeDifferenceBestKnownToBestParameter {
68      get { return (ValueLookupParameter<PercentValue>)Parameters["RelativeDifferenceBestKnownToBest"]; }
69    }
70    public ValueLookupParameter<ResultCollection> ResultsParameter {
71      get { return (ValueLookupParameter<ResultCollection>)Parameters["Results"]; }
72    }
73    #endregion
74
75    #region Properties
76    private BestQualityMemorizer BestQualityMemorizer {
77      get { return (BestQualityMemorizer)OperatorGraph.InitialOperator; }
78    }
79    private BestAverageWorstQualityCalculator BestAverageWorstQualityCalculator {
80      get { return (BestAverageWorstQualityCalculator)BestQualityMemorizer.Successor; }
81    }
82    #endregion
83
84    #region Storing & Cloning
85    [StorableConstructor]
86    private BestAverageWorstQualityAnalyzer(bool deserializing) : base(deserializing) { }
87    private BestAverageWorstQualityAnalyzer(BestAverageWorstQualityAnalyzer original, Cloner cloner)
88      : base(original, cloner) {
89      Initialize();
90    }
91    public override IDeepCloneable Clone(Cloner cloner) {
92      return new BestAverageWorstQualityAnalyzer(this, cloner);
93    }
94    #endregion
95    public BestAverageWorstQualityAnalyzer()
96      : base() {
97      #region Create parameters
98      Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false."));
99      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
100      Parameters.Add(new ValueLookupParameter<DoubleValue>("BestKnownQuality", "The best known quality value found so far."));
101      Parameters.Add(new ValueLookupParameter<DoubleValue>("BestQuality", "The best quality value found in the current run."));
102      Parameters.Add(new ValueLookupParameter<DoubleValue>("CurrentBestQuality", "The best quality value found in the current population."));
103      Parameters.Add(new ValueLookupParameter<DoubleValue>("CurrentAverageQuality", "The average quality value of all solutions in the current population."));
104      Parameters.Add(new ValueLookupParameter<DoubleValue>("CurrentWorstQuality", "The worst quality value found in the current population."));
105      Parameters.Add(new ValueLookupParameter<DataTable>("Qualities", "The data table to store the current best, current average, current worst, best and best known quality value."));
106      Parameters.Add(new ValueLookupParameter<DoubleValue>("AbsoluteDifferenceBestKnownToBest", "The absolute difference of the best known quality value to the best quality value."));
107      Parameters.Add(new ValueLookupParameter<PercentValue>("RelativeDifferenceBestKnownToBest", "The relative difference of the best known quality value to the best quality value."));
108      Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The results collection where the analysis values should be stored."));
109
110      BestQualityParameter.Hidden = true;
111      CurrentBestQualityParameter.Hidden = true;
112      CurrentAverageQualityParameter.Hidden = true;
113      CurrentWorstQualityParameter.Hidden = true;
114      QualitiesParameter.Hidden = true;
115      AbsoluteDifferenceBestKnownToBestParameter.Hidden = true;
116      RelativeDifferenceBestKnownToBestParameter.Hidden = true;
117      #endregion
118
119      #region Create operators
120      BestQualityMemorizer bestQualityMemorizer = new BestQualityMemorizer();
121      BestAverageWorstQualityCalculator bestAverageWorstQualityCalculator = new BestAverageWorstQualityCalculator();
122      DataTableValuesCollector dataTableValuesCollector = new DataTableValuesCollector();
123      QualityDifferenceCalculator qualityDifferenceCalculator = new QualityDifferenceCalculator();
124      ResultsCollector resultsCollector = new ResultsCollector();
125
126      bestQualityMemorizer.BestQualityParameter.ActualName = BestQualityParameter.Name;
127      bestQualityMemorizer.MaximizationParameter.ActualName = MaximizationParameter.Name;
128      bestQualityMemorizer.QualityParameter.ActualName = QualityParameter.Name;
129      bestQualityMemorizer.QualityParameter.Depth = QualityParameter.Depth;
130
131      bestAverageWorstQualityCalculator.AverageQualityParameter.ActualName = CurrentAverageQualityParameter.Name;
132      bestAverageWorstQualityCalculator.BestQualityParameter.ActualName = CurrentBestQualityParameter.Name;
133      bestAverageWorstQualityCalculator.MaximizationParameter.ActualName = MaximizationParameter.Name;
134      bestAverageWorstQualityCalculator.QualityParameter.ActualName = QualityParameter.Name;
135      bestAverageWorstQualityCalculator.QualityParameter.Depth = QualityParameter.Depth;
136      bestAverageWorstQualityCalculator.WorstQualityParameter.ActualName = CurrentWorstQualityParameter.Name;
137
138      dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("CurrentBestQuality", null, CurrentBestQualityParameter.Name));
139      dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("CurrentAverageQuality", null, CurrentAverageQualityParameter.Name));
140      dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("CurrentWorstQuality", null, CurrentWorstQualityParameter.Name));
141      dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("BestQuality", null, BestQualityParameter.Name));
142      dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("BestKnownQuality", null, BestKnownQualityParameter.Name));
143      dataTableValuesCollector.DataTableParameter.ActualName = QualitiesParameter.Name;
144
145      qualityDifferenceCalculator.AbsoluteDifferenceParameter.ActualName = AbsoluteDifferenceBestKnownToBestParameter.Name;
146      qualityDifferenceCalculator.FirstQualityParameter.ActualName = BestKnownQualityParameter.Name;
147      qualityDifferenceCalculator.RelativeDifferenceParameter.ActualName = RelativeDifferenceBestKnownToBestParameter.Name;
148      qualityDifferenceCalculator.SecondQualityParameter.ActualName = BestQualityParameter.Name;
149
150      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("CurrentBestQuality", null, CurrentBestQualityParameter.Name));
151      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("CurrentAverageQuality", null, CurrentAverageQualityParameter.Name));
152      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("CurrentWorstQuality", null, CurrentWorstQualityParameter.Name));
153      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("BestQuality", null, BestQualityParameter.Name));
154      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("BestKnownQuality", null, BestKnownQualityParameter.Name));
155      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("AbsoluteDifferenceBestKnownToBest", null, AbsoluteDifferenceBestKnownToBestParameter.Name));
156      resultsCollector.CollectedValues.Add(new LookupParameter<PercentValue>("RelativeDifferenceBestKnownToBest", null, RelativeDifferenceBestKnownToBestParameter.Name));
157      resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>(QualitiesParameter.Name));
158      resultsCollector.ResultsParameter.ActualName = ResultsParameter.Name;
159      #endregion
160
161      #region Create operator graph
162      OperatorGraph.InitialOperator = bestQualityMemorizer;
163      bestQualityMemorizer.Successor = bestAverageWorstQualityCalculator;
164      bestAverageWorstQualityCalculator.Successor = dataTableValuesCollector;
165      dataTableValuesCollector.Successor = qualityDifferenceCalculator;
166      qualityDifferenceCalculator.Successor = resultsCollector;
167      resultsCollector.Successor = null;
168      #endregion
169
170      Initialize();
171    }
172
173    [StorableHook(HookType.AfterDeserialization)]
174    private void AfterDeserialization() {
175      Initialize();
176      // BackwardsCompatibility3.3
177      #region Backwards compatible code, remove with 3.4
178      if (Parameters["Results"] is ValueLookupParameter<VariableCollection>) {
179        Parameters.Remove("Results");
180        Parameters.Add(new ValueLookupParameter<ResultCollection>("Results", "The results collection where the analysis values should be stored."));
181      }
182      #endregion
183    }
184
185    private void Initialize() {
186      QualityParameter.DepthChanged += new EventHandler(QualityParameter_DepthChanged);
187    }
188
189    private void QualityParameter_DepthChanged(object sender, System.EventArgs e) {
190      BestQualityMemorizer.QualityParameter.Depth = QualityParameter.Depth;
191      BestAverageWorstQualityCalculator.QualityParameter.Depth = QualityParameter.Depth;
192    }
193  }
194}
Note: See TracBrowser for help on using the repository browser.