Changeset 13583 for branches/PerformanceComparison/HeuristicLab.Analysis.FitnessLandscape/3.3/Analysis/InformationAnalyzer.cs
- Timestamp:
- 02/02/16 14:10:53 (8 years ago)
- Location:
- branches/PerformanceComparison/HeuristicLab.Analysis.FitnessLandscape
- Files:
-
- 1 added
- 1 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/PerformanceComparison/HeuristicLab.Analysis.FitnessLandscape/3.3/Analysis/InformationAnalyzer.cs
r9142 r13583 20 20 #endregion 21 21 22 using System;23 using System.Linq;24 using HeuristicLab.Analysis.FitnessLandscape.DataTables;25 22 using HeuristicLab.Common; 26 23 using HeuristicLab.Core; 27 24 using HeuristicLab.Data; 28 25 using HeuristicLab.Operators; 29 using HeuristicLab.Optimization .Operators;26 using HeuristicLab.Optimization; 30 27 using HeuristicLab.Parameters; 31 28 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 29 using System.Linq; 32 30 33 namespace HeuristicLab.Analysis.FitnessLandscape .Analysis{31 namespace HeuristicLab.Analysis.FitnessLandscape { 34 32 35 33 [StorableClass] 36 public class InformationAnalyzer : AlgorithmOperator, IQualityTrailAnalyzer {34 public class InformationAnalyzer : SingleSuccessorOperator, IQualityTrailAnalyzer { 37 35 public bool EnabledByDefault { 38 36 get { return false; } … … 43 41 get { return (LookupParameter<DataTable>)Parameters["Quality Trail"]; } 44 42 } 45 public LookupParameter<InformationStabilityTable> InformationStabilityParameter { 46 get { return (LookupParameter<InformationStabilityTable>)Parameters["Information Stability"]; } 47 } 48 public LookupParameter<InformationAnalysisTable> InformationParameter { 49 get { return (LookupParameter<InformationAnalysisTable>)Parameters["Information"]; } 50 } 51 public LookupParameter<VariableCollection> ResultsParameter { 52 get { return (LookupParameter<VariableCollection>)Parameters["Results"]; } 43 public LookupParameter<ResultCollection> ResultsParameter { 44 get { return (LookupParameter<ResultCollection>)Parameters["Results"]; } 53 45 } 54 46 public ValueLookupParameter<IntValue> NQuantilesParameter { … … 58 50 get { return (ValueLookupParameter<IntValue>)Parameters["ShapeSize"]; } 59 51 } 60 public LookupParameter<DoubleValue> InformationContent ValueParameter {61 get { return (LookupParameter<DoubleValue>)Parameters["InformationContent Value"]; }52 public LookupParameter<DoubleValue> InformationContentParameter { 53 get { return (LookupParameter<DoubleValue>)Parameters["InformationContent"]; } 62 54 } 63 public LookupParameter<DoubleValue> PartialInformationContent ValueParameter {64 get { return (LookupParameter<DoubleValue>)Parameters["PartialInformationContent Value"]; }55 public LookupParameter<DoubleValue> PartialInformationContentParameter { 56 get { return (LookupParameter<DoubleValue>)Parameters["PartialInformationContent"]; } 65 57 } 66 public LookupParameter<DoubleValue> DensityBasinInformation ValueParameter {67 get { return (LookupParameter<DoubleValue>)Parameters["DensityBasinInformation Value"]; }58 public LookupParameter<DoubleValue> DensityBasinInformationParameter { 59 get { return (LookupParameter<DoubleValue>)Parameters["DensityBasinInformation"]; } 68 60 } 69 public LookupParameter<DoubleValue> TotalEntropy ValueParameter {70 get { return (LookupParameter<DoubleValue>)Parameters["TotalEntropy Value"]; }61 public LookupParameter<DoubleValue> TotalEntropyParameter { 62 get { return (LookupParameter<DoubleValue>)Parameters["TotalEntropy"]; } 71 63 } 72 public LookupParameter<DoubleValue> InformationStability ValueParameter {73 get { return (LookupParameter<DoubleValue>)Parameters["InformationStability Value"]; }64 public LookupParameter<DoubleValue> InformationStabilityParameter { 65 get { return (LookupParameter<DoubleValue>)Parameters["InformationStability"]; } 74 66 } 75 public LookupParameter< IntValue> RegularityValueParameter {76 get { return (LookupParameter< IntValue>)Parameters["RegularityValue"]; }67 public LookupParameter<DoubleValue> RegularityParameter { 68 get { return (LookupParameter<DoubleValue>)Parameters["Regularity"]; } 77 69 } 78 public LookupParameter< IntValue> DiversityValueParameter {79 get { return (LookupParameter< IntValue>)Parameters["DiversityValue"]; }70 public LookupParameter<DoubleValue> DiversityParameter { 71 get { return (LookupParameter<DoubleValue>)Parameters["Diversity"]; } 80 72 } 81 82 #region Peaks83 73 public LookupParameter<DoubleValue> PeakInformationContentParameter { 84 get { return (LookupParameter<DoubleValue>) Parameters["PeakInformationContent"]; } 85 } 86 public LookupParameter<DoubleValue> PeakInformationContentQualityDeltaParameter { 87 get { return (LookupParameter<DoubleValue>) Parameters["PeakInformationContentQualityDelta"]; } 74 get { return (LookupParameter<DoubleValue>)Parameters["PeakInformationContent"]; } 88 75 } 89 76 public LookupParameter<DoubleValue> PeakDensityBasinInformationParameter { 90 get { return (LookupParameter<DoubleValue>) 77 get { return (LookupParameter<DoubleValue>)Parameters["PeakDensityBasinInformation"]; } 91 78 } 92 public LookupParameter<DoubleValue> PeakDensityBasinInformationQualityDeltaParameter {93 get { return (LookupParameter<DoubleValue>) Parameters["PeakDensityBasinInformationQualityDelta"]; }94 }95 96 97 79 #endregion 98 99 #endregion100 101 private InformationStabilityTable InformationStability {102 get { return InformationStabilityParameter.ActualValue; }103 }104 private double InformationContentValue {105 set { InformationContentValueParameter.ActualValue = new DoubleValue(value); }106 }107 private double PartialInformationContentValue {108 set { PartialInformationContentValueParameter.ActualValue = new DoubleValue(value); }109 }110 private double DensityBasinInformationValue {111 set { DensityBasinInformationValueParameter.ActualValue = new DoubleValue(value); }112 }113 private double TotalEntropyValue {114 set { TotalEntropyValueParameter.ActualValue = new DoubleValue(value); }115 }116 private double InformationStabilityValue {117 set { InformationStabilityValueParameter.ActualValue = new DoubleValue(value); }118 }119 80 120 81 [StorableConstructor] … … 124 85 public InformationAnalyzer() { 125 86 Parameters.Add(new LookupParameter<DataTable>("Quality Trail", "The qualities of the solutions")); 126 Parameters.Add(new LookupParameter<InformationStabilityTable>("Information Stability", "Information stability development over time")); 127 Parameters.Add(new LookupParameter<InformationAnalysisTable>("Information", "A data table that information theoretic fitness landscape characteristics")); 128 Parameters.Add(new LookupParameter<VariableCollection>("Results", "The collection of all results of this algorithm")); 87 Parameters.Add(new LookupParameter<ResultCollection>("Results", "The collection of all results of this algorithm")); 129 88 130 89 Parameters.Add(new ValueLookupParameter<IntValue>("NQuantiles", "The number of delta quantiles to display", new IntValue(20))); 131 90 Parameters.Add(new ValueLookupParameter<IntValue>("ShapeSize", "The number of slopes to consider as shapes.", new IntValue(2))); 132 91 133 Parameters.Add(new LookupParameter<DoubleValue>("InformationContent Value", "The information content H(0) at eps = 0"));134 Parameters.Add(new LookupParameter<DoubleValue>("PartialInformationContent Value", "Partial information content M(0) at eps = 0"));135 Parameters.Add(new LookupParameter<DoubleValue>("DensityBasinInformation Value", "Density Basin Information h(0) at eps = 0"));136 Parameters.Add(new LookupParameter<DoubleValue>("TotalEntropy Value", "The overall disorder in the trajectory"));137 Parameters.Add(new LookupParameter<DoubleValue>("InformationStability Value", "Information Stability Value"));138 Parameters.Add(new LookupParameter< IntValue>("RegularityValue", "The number of different quality differences"));139 Parameters.Add(new LookupParameter< IntValue>("DiversityValue", "The number of different quality values"));92 Parameters.Add(new LookupParameter<DoubleValue>("InformationContent", "The information content H(0) at eps = 0")); 93 Parameters.Add(new LookupParameter<DoubleValue>("PartialInformationContent", "Partial information content M(0) at eps = 0")); 94 Parameters.Add(new LookupParameter<DoubleValue>("DensityBasinInformation", "Density Basin Information h(0) at eps = 0")); 95 Parameters.Add(new LookupParameter<DoubleValue>("TotalEntropy", "The overall disorder in the trajectory")); 96 Parameters.Add(new LookupParameter<DoubleValue>("InformationStability", "Information Stability Value")); 97 Parameters.Add(new LookupParameter<DoubleValue>("Regularity", "The number of different quality differences")); 98 Parameters.Add(new LookupParameter<DoubleValue>("Diversity", "The number of different quality values")); 140 99 Parameters.Add(new LookupParameter<DoubleValue>("PeakInformationContent", "Maximum information content at any quality delta.")); 141 Parameters.Add(new LookupParameter<DoubleValue>("PeakInformationContentQualityDelta", "Quality delta with maximum information content."));142 100 Parameters.Add(new LookupParameter<DoubleValue>("PeakDensityBasinInformation", "Maximum density basin information at any quality delta.")); 143 Parameters.Add(new LookupParameter<DoubleValue>("PeakDensityBasinInformationQualityDelta", "Quality delta with maximum density basin information."));144 145 var resultsCollector = new ResultsCollector();146 resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>(InformationParameter.Name));147 resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>(InformationStabilityParameter.Name));148 resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(InformationContentValueParameter.Name));149 resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(PartialInformationContentValueParameter.Name));150 resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(DensityBasinInformationValueParameter.Name));151 resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(TotalEntropyValueParameter.Name));152 resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(InformationStabilityValueParameter.Name));153 resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>(RegularityValueParameter.Name));154 resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>(DiversityValueParameter.Name));155 resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(PeakInformationContentParameter.Name));156 resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(PeakInformationContentQualityDeltaParameter.Name));157 resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(PeakDensityBasinInformationParameter.Name));158 resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(PeakDensityBasinInformationQualityDeltaParameter.Name));159 160 OperatorGraph.InitialOperator = resultsCollector;161 resultsCollector.Successor = null;162 101 } 163 102 … … 167 106 168 107 public override IOperation Apply() { 169 DataTable qualityTrail = QualityTrailParameter.ActualValue; 170 if (qualityTrail != null && qualityTrail.Rows.Count > 0) { 171 EnsureExistsInformationStabilityTable(); 172 EnsureExistsInformationTable(); 173 AnalyseInformation(); 174 } 108 var qualityTrail = QualityTrailParameter.ActualValue; 109 if (qualityTrail == null || qualityTrail.Rows.Count == 0) return base.Apply(); 110 111 var qualities = QualityTrailParameter.ActualValue.Rows.First().Values.ToList(); 112 if (qualities.Count <= 2) return base.Apply(); 113 114 var nQuantiles = NQuantilesParameter.ActualValue.Value; 115 var shapeSize = ShapeSizeParameter.ActualValue.Value; 116 var results = ResultsParameter.ActualValue; 117 118 var analysis = new InformationAnalysis(qualities, nQuantiles, shapeSize); 119 var ic = new DoubleValue(analysis.InformationContent.FirstOrDefault()); 120 InformationContentParameter.ActualValue = ic; 121 AddOrUpdateResult(results, InformationContentParameter.Name, ic); 122 var pic = new DoubleValue(analysis.PartialInformationContent.FirstOrDefault()); 123 PartialInformationContentParameter.ActualValue = pic; 124 AddOrUpdateResult(results, PartialInformationContentParameter.Name, pic); 125 var dbi = new DoubleValue(analysis.DensityBasinInformation.FirstOrDefault()); 126 DensityBasinInformationParameter.ActualValue = dbi; 127 AddOrUpdateResult(results, DensityBasinInformationParameter.Name, dbi); 128 var @is = new DoubleValue(analysis.InformationStability); 129 InformationStabilityParameter.ActualValue = @is; 130 AddOrUpdateResult(results, InformationStabilityParameter.Name, @is); 131 var regularity = new DoubleValue(1.0 * analysis.Regularity / qualities.Count); 132 RegularityParameter.ActualValue = regularity; 133 AddOrUpdateResult(results, RegularityParameter.Name, regularity); 134 var diversity = new DoubleValue(1.0 * analysis.Diversity / qualities.Count); 135 DiversityParameter.ActualValue = diversity; 136 AddOrUpdateResult(results, DiversityParameter.Name, diversity); 137 var totalEntropy = new DoubleValue(analysis.TotalEntropy.FirstOrDefault()); 138 TotalEntropyParameter.ActualValue = totalEntropy; 139 AddOrUpdateResult(results, TotalEntropyParameter.Name, totalEntropy); 140 var peakIc = new DoubleValue(analysis.PeakInformationContent.Value); 141 PeakInformationContentParameter.ActualValue = peakIc; 142 AddOrUpdateResult(results, PeakInformationContentParameter.Name, peakIc); 143 var peakDbi = new DoubleValue(analysis.PeakDensityBasinInformation.Value); 144 PeakDensityBasinInformationParameter.ActualValue = peakDbi; 145 AddOrUpdateResult(results, PeakDensityBasinInformationParameter.Name, peakDbi); 146 175 147 return base.Apply(); 176 148 } 177 149 178 private void AnalyseInformation() { 179 int nQuantiles = NQuantilesParameter.ActualValue.Value; 180 int shapeSize = ShapeSizeParameter.ActualValue.Value; 181 var qualities = QualityTrailParameter.ActualValue.Rows.First().Values.ToList(); 182 if (qualities.Count > 2) { 183 InformationAnalysisTable informationTable = InformationParameter.ActualValue; 184 var informationContent = informationTable.Rows["Information Content"].Values; 185 var partialInformationContent = informationTable.Rows["Partial Information Content"].Values; 186 var densityBasinInformation = informationTable.Rows["Density Basin Information"].Values; 187 var totalEntropy = informationTable.Rows["Total Entropy"].Values; 188 var qualityDelta = informationTable.Rows["Quality Delta"].Values; 189 var analysis = new InformationAnalysis(qualities, nQuantiles, shapeSize); 190 InformationStability.Rows["Regularity"].Values.Add(analysis.Regularity); 191 InformationStability.Rows["Diversity"].Values.Add(analysis.Diversity); 192 InformationStability.Rows["Relative Regularity"].Values.Add(1.0*analysis.Regularity/qualities.Count); 193 InformationStability.Rows["Relative Diversity"].Values.Add(1.0*analysis.Diversity/qualities.Count); 194 InformationStability.Rows["Information Stability"].Values.Add(analysis.InformationStability); 195 informationContent.Clear(); 196 informationContent.AddRange(analysis.InformationContent); 197 partialInformationContent.Clear(); 198 partialInformationContent.AddRange(analysis.PartialInformationContent); 199 densityBasinInformation.Clear(); 200 densityBasinInformation.AddRange(analysis.DensityBasinInformation); 201 totalEntropy.Clear(); 202 totalEntropy.AddRange(analysis.TotalEntropy); 203 qualityDelta.Clear(); 204 qualityDelta.AddRange(analysis.QualityDelta); 205 InformationContentValue = analysis.InformationContent.FirstOrDefault(); 206 PartialInformationContentValue = analysis.PartialInformationContent.FirstOrDefault(); 207 DensityBasinInformationValue = analysis.DensityBasinInformation.FirstOrDefault(); 208 InformationStabilityValue = analysis.InformationStability; 209 RegularityValueParameter.ActualValue = new IntValue(analysis.Regularity); 210 DiversityValueParameter.ActualValue = new IntValue(analysis.Diversity); 211 if (analysis.PeakInformationContent != null) { 212 PeakInformationContentParameter.ActualValue = new DoubleValue(analysis.PeakInformationContent.Value); 213 PeakInformationContentQualityDeltaParameter.ActualValue = new DoubleValue(analysis.PeakInformationContent.QualityDelta); 214 } 215 if (analysis.PeakDensityBasinInformation != null) { 216 PeakDensityBasinInformationParameter.ActualValue = new DoubleValue(analysis.PeakDensityBasinInformation.Value); 217 PeakDensityBasinInformationQualityDeltaParameter.ActualValue = new DoubleValue(analysis.PeakDensityBasinInformation.QualityDelta); 218 } 219 } 220 } 221 222 private void EnsureExistsInformationTable() { 223 InformationAnalysisTable information = InformationParameter.ActualValue; 224 if (information == null) { 225 information = new InformationAnalysisTable("Information"); 226 information.Rows.Add(new DataRow("Information Content")); 227 information.Rows.Add(new DataRow("Partial Information Content")); 228 information.Rows.Add(new DataRow("Density Basin Information")); 229 information.Rows.Add(new DataRow("Total Entropy")); 230 information.Rows.Add(new DataRow("Quality Delta") {VisualProperties = {SecondYAxis = true}}); 231 InformationParameter.ActualValue = information; 232 } 233 } 234 235 private void EnsureExistsInformationStabilityTable() { 236 InformationStabilityTable informationStability = InformationStabilityParameter.ActualValue; 237 if (informationStability == null) { 238 informationStability = new InformationStabilityTable("Information Stability"); 239 informationStability.Rows.Add(new DataRow("Information Stability")); 240 informationStability.Rows.Add(new DataRow("Relative Regularity")); 241 informationStability.Rows.Add(new DataRow("Relative Diversity")); 242 informationStability.Rows.Add(new DataRow("Regularity") {VisualProperties = {SecondYAxis = true}}); 243 informationStability.Rows.Add(new DataRow("Diversity") {VisualProperties = {SecondYAxis = true}}); 244 InformationStabilityParameter.ActualValue = informationStability; 245 } 150 private static void AddOrUpdateResult(ResultCollection results, string name, IItem item, bool clone = false) { 151 IResult r; 152 if (!results.TryGetValue(name, out r)) { 153 results.Add(new Result(name, clone ? (IItem)item.Clone() : item)); 154 } else r.Value = clone ? (IItem)item.Clone() : item; 246 155 } 247 156 }
Note: See TracChangeset
for help on using the changeset viewer.