Free cookie consent management tool by TermsFeed Policy Generator

source: branches/FitnessLandscapeAnalysis/HeuristicLab.Analysis.FitnessLandscape/Analysis/InformationAnalyzer.cs @ 8725

Last change on this file since 8725 was 8725, checked in by epitzer, 12 years ago

improve information analysis #1696

  • fixed a bug in quality delta filtering
  • report finer-grained results
  • add total entropy
  • add peak values to results
File size: 13.7 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
21using System.Linq;
22using HeuristicLab.Analysis.FitnessLandscape.DataTables;
23using HeuristicLab.Common;
24using HeuristicLab.Core;
25using HeuristicLab.Data;
26using HeuristicLab.Operators;
27using HeuristicLab.Optimization.Operators;
28using HeuristicLab.Parameters;
29using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
30
31namespace HeuristicLab.Analysis.FitnessLandscape.Analysis {
32
33  [StorableClass]
34  public class InformationAnalyzer : AlgorithmOperator, IQualityTrailAnalyzer {
35    public bool EnabledByDefault {
36      get { return false; }
37    }
38
39    #region Parameters
40    public LookupParameter<DataTable> QualityTrailParameter {
41      get { return (LookupParameter<DataTable>)Parameters["Quality Trail"]; }
42    }
43    public LookupParameter<InformationStabilityTable> InformationStabilityParameter {
44      get { return (LookupParameter<InformationStabilityTable>)Parameters["Information Stability"]; }
45    }
46    public LookupParameter<InformationAnalysisTable> InformationParameter {
47      get { return (LookupParameter<InformationAnalysisTable>)Parameters["Information"]; }
48    }
49    public LookupParameter<VariableCollection> ResultsParameter {
50      get { return (LookupParameter<VariableCollection>)Parameters["Results"]; }
51    }
52    public ValueLookupParameter<IntValue> NQuantilesParameter {
53      get { return (ValueLookupParameter<IntValue>)Parameters["NQuantiles"]; }
54    }
55    public LookupParameter<DoubleValue> InformationContentValueParameter {
56      get { return (LookupParameter<DoubleValue>)Parameters["InformationContentValue"]; }
57    }
58    public LookupParameter<DoubleValue> PartialInformationContentValueParameter {
59      get { return (LookupParameter<DoubleValue>)Parameters["PartialInformationContentValue"]; }
60    }
61    public LookupParameter<DoubleValue> DensityBasinInformationValueParameter {
62      get { return (LookupParameter<DoubleValue>)Parameters["DensityBasinInformationValue"]; }
63    }
64    public LookupParameter<DoubleValue> TotalEntropyValueParameter {
65      get { return (LookupParameter<DoubleValue>)Parameters["TotalEntropyValue"]; }
66    }
67    public LookupParameter<DoubleValue> InformationStabilityValueParameter {
68      get { return (LookupParameter<DoubleValue>)Parameters["InformationStabilityValue"]; }
69    }
70    public LookupParameter<IntValue> RegularityValueParameter {
71      get { return (LookupParameter<IntValue>)Parameters["RegularityValue"]; }
72    }
73    public LookupParameter<IntValue> DiversityValueParameter {
74      get { return (LookupParameter<IntValue>)Parameters["DiversityValue"]; }
75    }
76
77    #region Peaks
78    public LookupParameter<DoubleValue> PeakInformationContentParameter {
79      get { return (LookupParameter<DoubleValue>) Parameters["PeakInformationContent"]; }
80    }
81    public LookupParameter<DoubleValue> PeakInformationContentQualityDeltaParameter {
82      get { return (LookupParameter<DoubleValue>) Parameters["PeakInformationContentQualityDelta"]; }
83    }
84    public LookupParameter<DoubleValue> PeakDensityBasinInformationParameter {
85      get { return (LookupParameter<DoubleValue>) Parameters["PeakDensityBasinInformation"]; }
86    }
87    public LookupParameter<DoubleValue> PeakDensityBasinInformationQualityDeltaParameter {
88      get { return (LookupParameter<DoubleValue>) Parameters["PeakDensityBasinInformationQualityDelta"]; }
89    }
90
91
92    #endregion
93
94    #endregion
95
96    private InformationStabilityTable InformationStability {
97      get { return InformationStabilityParameter.ActualValue; }
98    }
99    private double InformationContentValue {
100      set { InformationContentValueParameter.ActualValue = new DoubleValue(value); }
101    }
102    private double PartialInformationContentValue {
103      set { PartialInformationContentValueParameter.ActualValue = new DoubleValue(value); }
104    }
105    private double DensityBasinInformationValue {
106      set { DensityBasinInformationValueParameter.ActualValue = new DoubleValue(value); }
107    }
108    private double TotalEntropyValue {
109      set { TotalEntropyValueParameter.ActualValue = new DoubleValue(value); }
110    }
111    private double InformationStabilityValue {
112      set { InformationStabilityValueParameter.ActualValue = new DoubleValue(value); }
113    }
114
115    [StorableConstructor]
116    protected InformationAnalyzer(bool deserializing) : base(deserializing) { }
117    protected InformationAnalyzer(InformationAnalyzer original, Cloner cloner) : base(original, cloner) { }
118
119    public InformationAnalyzer() {
120      Parameters.Add(new LookupParameter<DataTable>("Quality Trail", "The qualities of the solutions"));
121      Parameters.Add(new LookupParameter<InformationStabilityTable>("Information Stability", "Information stability development over time"));
122      Parameters.Add(new LookupParameter<InformationAnalysisTable>("Information", "A data table that information theoretic fitness landscape characteristics"));
123      Parameters.Add(new LookupParameter<VariableCollection>("Results", "The collection of all results of this algorithm"));
124      Parameters.Add(new ValueLookupParameter<IntValue>("NQuantiles", "The number of delta quantiles to display", new IntValue(20)));
125      Parameters.Add(new LookupParameter<DoubleValue>("InformationContentValue", "The information content H(0) at eps = 0"));
126      Parameters.Add(new LookupParameter<DoubleValue>("PartialInformationContentValue", "Partial information content M(0) at eps = 0"));
127      Parameters.Add(new LookupParameter<DoubleValue>("DensityBasinInformationValue", "Density Basin Information h(0) at eps = 0"));
128      Parameters.Add(new LookupParameter<DoubleValue>("TotalEntropyValue", "The overall disorder in the trajectory"));
129      Parameters.Add(new LookupParameter<DoubleValue>("InformationStabilityValue", "Information Stability Value"));
130      Parameters.Add(new LookupParameter<IntValue>("RegularityValue", "The number of different quality differences"));
131      Parameters.Add(new LookupParameter<IntValue>("DiversityValue", "The number of different quality values"));
132      Parameters.Add(new LookupParameter<DoubleValue>("PeakInformationContent", "Maximum information content at any quality delta."));
133      Parameters.Add(new LookupParameter<DoubleValue>("PeakInformationContentQualityDelta", "Quality delta with maximum information content."));
134      Parameters.Add(new LookupParameter<DoubleValue>("PeakDensityBasinInformation", "Maximum density basin information at any quality delta."));
135      Parameters.Add(new LookupParameter<DoubleValue>("PeakDensityBasinInformationQualityDelta", "Quality delta with maximum density basin information."));
136
137      var resultsCollector = new ResultsCollector();
138      resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>(InformationParameter.Name));
139      resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>(InformationStabilityParameter.Name));
140      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(InformationContentValueParameter.Name));
141      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(PartialInformationContentValueParameter.Name));
142      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(DensityBasinInformationValueParameter.Name));
143      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(TotalEntropyValueParameter.Name));
144      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(InformationStabilityValueParameter.Name));
145      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>(RegularityValueParameter.Name));
146      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>(DiversityValueParameter.Name));
147      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(PeakInformationContentParameter.Name));
148      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(PeakInformationContentQualityDeltaParameter.Name));
149      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(PeakDensityBasinInformationParameter.Name));
150      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(PeakDensityBasinInformationQualityDeltaParameter.Name));
151
152      OperatorGraph.InitialOperator = resultsCollector;
153      resultsCollector.Successor = null;
154    }
155
156    public override IDeepCloneable Clone(Cloner cloner) {
157      return new InformationAnalyzer(this, cloner);
158    }
159
160    public override IOperation Apply() {
161      DataTable qualityTrail = QualityTrailParameter.ActualValue;
162      if (qualityTrail != null && qualityTrail.Rows.Count > 0) {
163        EnsureExistsInformationStabilityTable();
164        EnsureExistsInformationTable();
165        AnalyseInformation();
166      }
167      return base.Apply();
168    }
169
170    private void AnalyseInformation() {
171      int nQuantiles = NQuantilesParameter.ActualValue.Value;
172      var qualities = QualityTrailParameter.ActualValue.Rows.First().Values.ToList();
173      if (qualities.Count > nQuantiles) {
174        InformationAnalysisTable informationTable = InformationParameter.ActualValue;
175        var informationContent = informationTable.Rows["Information Content"].Values;
176        var partialInformationContent = informationTable.Rows["Partial Information Content"].Values;
177        var densityBasinInformation = informationTable.Rows["Density Basin Information"].Values;
178        var totalEntropy = informationTable.Rows["Total Entropy"].Values;
179        var qualityDelta = informationTable.Rows["Quality Delta"].Values;
180        var analysis = new InformationAnalysis(qualities, nQuantiles);
181        InformationStability.Rows["Regularity"].Values.Add(analysis.Regularity);
182        InformationStability.Rows["Diversity"].Values.Add(analysis.Diversity);
183        InformationStability.Rows["Relative Regularity"].Values.Add(1.0 * analysis.Regularity / qualities.Count);
184        InformationStability.Rows["Relative Diversity"].Values.Add(1.0 * analysis.Diversity / qualities.Count);
185        InformationStability.Rows["Information Stability"].Values.Add(analysis.InformationStability);
186        informationContent.Clear();
187        informationContent.AddRange(analysis.InformationContent);
188        partialInformationContent.Clear();
189        partialInformationContent.AddRange(analysis.PartialInformationContent);
190        densityBasinInformation.Clear();
191        densityBasinInformation.AddRange(analysis.DensityBasinInformation);
192        totalEntropy.Clear();
193        totalEntropy.AddRange(analysis.TotalEntropy);
194        qualityDelta.Clear();
195        qualityDelta.AddRange(analysis.QualityDelta);
196        InformationContentValue = analysis.InformationContent.FirstOrDefault();
197        PartialInformationContentValue = analysis.PartialInformationContent.FirstOrDefault();
198        DensityBasinInformationValue = analysis.DensityBasinInformation.FirstOrDefault();
199        InformationStabilityValue = analysis.InformationStability;
200        RegularityValueParameter.ActualValue = new IntValue(analysis.Regularity);
201        DiversityValueParameter.ActualValue = new IntValue(analysis.Diversity);
202        PeakInformationContentParameter.ActualValue = new DoubleValue(analysis.PeakInformationContent.Value);
203        PeakDensityBasinInformationParameter.ActualValue = new DoubleValue(analysis.PeakDensityBasinInformation.Value);
204        PeakInformationContentQualityDeltaParameter.ActualValue = new DoubleValue(analysis.PeakInformationContent.QualityDelta);
205        PeakDensityBasinInformationQualityDeltaParameter.ActualValue = new DoubleValue(analysis.PeakDensityBasinInformation.QualityDelta);
206      }
207    }
208
209    private void EnsureExistsInformationTable() {
210      InformationAnalysisTable information = InformationParameter.ActualValue;
211      if (information == null) {
212        information = new InformationAnalysisTable("Information");
213        information.Rows.Add(new DataRow("Information Content"));
214        information.Rows.Add(new DataRow("Partial Information Content"));
215        information.Rows.Add(new DataRow("Density Basin Information"));
216        information.Rows.Add(new DataRow("Total Entropy"));
217        information.Rows.Add(new DataRow("Quality Delta") {VisualProperties = {SecondYAxis = true}});
218        InformationParameter.ActualValue = information;
219      }
220    }
221
222    private void EnsureExistsInformationStabilityTable() {
223      InformationStabilityTable informationStability = InformationStabilityParameter.ActualValue;
224      if (informationStability == null) {
225        informationStability = new InformationStabilityTable("Information Stability");
226        informationStability.Rows.Add(new DataRow("Information Stability"));
227        informationStability.Rows.Add(new DataRow("Relative Regularity"));
228        informationStability.Rows.Add(new DataRow("Relative Diversity"));
229        informationStability.Rows.Add(new DataRow("Regularity") {VisualProperties = {SecondYAxis = true}});
230        informationStability.Rows.Add(new DataRow("Diversity") {VisualProperties = {SecondYAxis = true}});
231        InformationStabilityParameter.ActualValue = informationStability;
232      }
233    }
234  }
235}
Note: See TracBrowser for help on using the repository browser.