Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Analysis/3.3/PopulationBestAverageWorstQualityAnalyzer.cs @ 3618

Last change on this file since 3618 was 3618, checked in by swagner, 14 years ago

Worked on refactoring of algorithm analysis and tracing (#999)

  • added interfaces to specify on which scope level an analyzer can be applied
  • adapted MultiAnalyzer
File size: 9.4 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2010 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 HeuristicLab.Core;
23using HeuristicLab.Data;
24using HeuristicLab.Operators;
25using HeuristicLab.Optimization;
26using HeuristicLab.Optimization.Operators;
27using HeuristicLab.Parameters;
28using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
29
30namespace HeuristicLab.Analysis {
31  /// <summary>
32  /// An operator which analyzes the best, average and worst solution quality in the current population.
33  /// </summary>
34  [Item("PopulationBestAverageWorstQualityAnalyzer", "An operator which analyzes the best, average and worst solution quality in the current population.")]
35  [StorableClass]
36  public sealed class PopulationBestAverageWorstQualityAnalyzer : AlgorithmOperator, IPopulationAnalyzer {
37    #region Parameter properties
38    public ValueLookupParameter<BoolValue> MaximizationParameter {
39      get { return (ValueLookupParameter<BoolValue>)Parameters["Maximization"]; }
40    }
41    public SubScopesLookupParameter<DoubleValue> QualityParameter {
42      get { return (SubScopesLookupParameter<DoubleValue>)Parameters["Quality"]; }
43    }
44    public ValueLookupParameter<DoubleValue> BestKnownQualityParameter {
45      get { return (ValueLookupParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
46    }
47    public ValueLookupParameter<DoubleValue> BestQualityParameter {
48      get { return (ValueLookupParameter<DoubleValue>)Parameters["BestQuality"]; }
49    }
50    public ValueLookupParameter<DoubleValue> CurrentBestQualityParameter {
51      get { return (ValueLookupParameter<DoubleValue>)Parameters["CurrentBestQuality"]; }
52    }
53    public ValueLookupParameter<DoubleValue> CurrentAverageQualityParameter {
54      get { return (ValueLookupParameter<DoubleValue>)Parameters["CurrentAverageQuality"]; }
55    }
56    public ValueLookupParameter<DoubleValue> CurrentWorstQualityParameter {
57      get { return (ValueLookupParameter<DoubleValue>)Parameters["CurrentWorstQuality"]; }
58    }
59    public ValueLookupParameter<DoubleValue> AbsoluteDifferenceBestKnownToBestParameter {
60      get { return (ValueLookupParameter<DoubleValue>)Parameters["AbsoluteDifferenceBestKnownToBest"]; }
61    }
62    public ValueLookupParameter<PercentValue> RelativeDifferenceBestKnownToBestParameter {
63      get { return (ValueLookupParameter<PercentValue>)Parameters["RelativeDifferenceBestKnownToBest"]; }
64    }
65    public ValueLookupParameter<VariableCollection> ResultsParameter {
66      get { return (ValueLookupParameter<VariableCollection>)Parameters["Results"]; }
67    }
68    #endregion
69
70    [StorableConstructor]
71    private PopulationBestAverageWorstQualityAnalyzer(bool deserializing) : base() { }
72    public PopulationBestAverageWorstQualityAnalyzer()
73      : base() {
74      Initialize();
75    }
76
77    private void Initialize() {
78      #region Create parameters
79      Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false."));
80      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
81      Parameters.Add(new ValueLookupParameter<DoubleValue>("BestKnownQuality", "The best known quality value found so far."));
82      Parameters.Add(new ValueLookupParameter<DoubleValue>("BestQuality", "The best quality value found in the current run."));
83      Parameters.Add(new ValueLookupParameter<DoubleValue>("CurrentBestQuality", "The best quality value found in the current population."));
84      Parameters.Add(new ValueLookupParameter<DoubleValue>("CurrentAverageQuality", "The average quality value of all solutions in the current population."));
85      Parameters.Add(new ValueLookupParameter<DoubleValue>("CurrentWorstQuality", "The worst quality value found in the current population."));
86      Parameters.Add(new ValueLookupParameter<DoubleValue>("AbsoluteDifferenceBestKnownToBest", "The absolute difference of the best known quality value to the best quality value."));
87      Parameters.Add(new ValueLookupParameter<PercentValue>("RelativeDifferenceBestKnownToBest", "The relative difference of the best known quality value to the best quality value."));
88      Parameters.Add(new ValueLookupParameter<VariableCollection>("Results", "The variable collection where results should be stored."));
89      #endregion
90
91      #region Create operators
92      BestQualityMemorizer bestQualityMemorizer1 = new BestQualityMemorizer();
93      BestQualityMemorizer bestQualityMemorizer2 = new BestQualityMemorizer();
94      BestAverageWorstQualityCalculator bestAverageWorstQualityCalculator = new BestAverageWorstQualityCalculator();
95      DataTableValuesCollector dataTableValuesCollector = new DataTableValuesCollector();
96      QualityDifferenceCalculator qualityDifferenceCalculator = new QualityDifferenceCalculator();
97      ResultsCollector resultsCollector = new ResultsCollector();
98
99      bestQualityMemorizer1.BestQualityParameter.ActualName = "BestQuality";
100      bestQualityMemorizer1.MaximizationParameter.ActualName = "Maximization";
101      bestQualityMemorizer1.QualityParameter.ActualName = "Quality";
102
103      bestQualityMemorizer2.BestQualityParameter.ActualName = "BestKnownQuality";
104      bestQualityMemorizer2.MaximizationParameter.ActualName = "Maximization";
105      bestQualityMemorizer2.QualityParameter.ActualName = "Quality";
106
107      bestAverageWorstQualityCalculator.AverageQualityParameter.ActualName = "CurrentAverageQuality";
108      bestAverageWorstQualityCalculator.BestQualityParameter.ActualName = "CurrentBestQuality";
109      bestAverageWorstQualityCalculator.MaximizationParameter.ActualName = "Maximization";
110      bestAverageWorstQualityCalculator.QualityParameter.ActualName = "Quality";
111      bestAverageWorstQualityCalculator.WorstQualityParameter.ActualName = "CurrentWorstQuality";
112
113      dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best Quality", null, "CurrentBestQuality"));
114      dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average Quality", null, "CurrentAverageQuality"));
115      dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst Quality", null, "CurrentWorstQuality"));
116      dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
117      dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, "BestKnownQuality"));
118      dataTableValuesCollector.DataTableParameter.ActualName = "Qualities";
119
120      qualityDifferenceCalculator.AbsoluteDifferenceParameter.ActualName = "AbsoluteDifferenceBestKnownToBest";
121      qualityDifferenceCalculator.FirstQualityParameter.ActualName = "BestKnownQuality";
122      qualityDifferenceCalculator.RelativeDifferenceParameter.ActualName = "RelativeDifferenceBestKnownToBest";
123      qualityDifferenceCalculator.SecondQualityParameter.ActualName = "BestQuality";
124
125      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best Quality", null, "CurrentBestQuality"));
126      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average Quality", null, "CurrentAverageQuality"));
127      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst Quality", null, "CurrentWorstQuality"));
128      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality", null, "BestQuality"));
129      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, "BestKnownQuality"));
130      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Absolute Difference of Best Known Quality to Best Quality", null, "AbsoluteDifferenceBestKnownToBest"));
131      resultsCollector.CollectedValues.Add(new LookupParameter<PercentValue>("Relative Difference of Best Known Quality to Best Quality", null, "RelativeDifferenceBestKnownToBest"));
132      resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>("Qualities"));
133      resultsCollector.ResultsParameter.ActualName = "Results";
134      #endregion
135
136      #region Create operator graph
137      OperatorGraph.InitialOperator = bestQualityMemorizer1;
138      bestQualityMemorizer1.Successor = bestQualityMemorizer2;
139      bestQualityMemorizer2.Successor = bestAverageWorstQualityCalculator;
140      bestAverageWorstQualityCalculator.Successor = dataTableValuesCollector;
141      dataTableValuesCollector.Successor = qualityDifferenceCalculator;
142      qualityDifferenceCalculator.Successor = resultsCollector;
143      resultsCollector.Successor = null;
144      #endregion
145    }
146  }
147}
Note: See TracBrowser for help on using the repository browser.