Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/02/16 14:10:53 (8 years ago)
Author:
abeham
Message:

#2457:

  • Added stripped-down version of FLA branch
  • Added appropriate calculators
  • Fixed detecting maximization in RLD view
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  
    2020#endregion
    2121
    22 using System;
    23 using System.Linq;
    24 using HeuristicLab.Analysis.FitnessLandscape.DataTables;
    2522using HeuristicLab.Common;
    2623using HeuristicLab.Core;
    2724using HeuristicLab.Data;
    2825using HeuristicLab.Operators;
    29 using HeuristicLab.Optimization.Operators;
     26using HeuristicLab.Optimization;
    3027using HeuristicLab.Parameters;
    3128using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     29using System.Linq;
    3230
    33 namespace HeuristicLab.Analysis.FitnessLandscape.Analysis {
     31namespace HeuristicLab.Analysis.FitnessLandscape {
    3432
    3533  [StorableClass]
    36   public class InformationAnalyzer : AlgorithmOperator, IQualityTrailAnalyzer {
     34  public class InformationAnalyzer : SingleSuccessorOperator, IQualityTrailAnalyzer {
    3735    public bool EnabledByDefault {
    3836      get { return false; }
     
    4341      get { return (LookupParameter<DataTable>)Parameters["Quality Trail"]; }
    4442    }
    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"]; }
    5345    }
    5446    public ValueLookupParameter<IntValue> NQuantilesParameter {
     
    5850      get { return (ValueLookupParameter<IntValue>)Parameters["ShapeSize"]; }
    5951    }
    60     public LookupParameter<DoubleValue> InformationContentValueParameter {
    61       get { return (LookupParameter<DoubleValue>)Parameters["InformationContentValue"]; }
     52    public LookupParameter<DoubleValue> InformationContentParameter {
     53      get { return (LookupParameter<DoubleValue>)Parameters["InformationContent"]; }
    6254    }
    63     public LookupParameter<DoubleValue> PartialInformationContentValueParameter {
    64       get { return (LookupParameter<DoubleValue>)Parameters["PartialInformationContentValue"]; }
     55    public LookupParameter<DoubleValue> PartialInformationContentParameter {
     56      get { return (LookupParameter<DoubleValue>)Parameters["PartialInformationContent"]; }
    6557    }
    66     public LookupParameter<DoubleValue> DensityBasinInformationValueParameter {
    67       get { return (LookupParameter<DoubleValue>)Parameters["DensityBasinInformationValue"]; }
     58    public LookupParameter<DoubleValue> DensityBasinInformationParameter {
     59      get { return (LookupParameter<DoubleValue>)Parameters["DensityBasinInformation"]; }
    6860    }
    69     public LookupParameter<DoubleValue> TotalEntropyValueParameter {
    70       get { return (LookupParameter<DoubleValue>)Parameters["TotalEntropyValue"]; }
     61    public LookupParameter<DoubleValue> TotalEntropyParameter {
     62      get { return (LookupParameter<DoubleValue>)Parameters["TotalEntropy"]; }
    7163    }
    72     public LookupParameter<DoubleValue> InformationStabilityValueParameter {
    73       get { return (LookupParameter<DoubleValue>)Parameters["InformationStabilityValue"]; }
     64    public LookupParameter<DoubleValue> InformationStabilityParameter {
     65      get { return (LookupParameter<DoubleValue>)Parameters["InformationStability"]; }
    7466    }
    75     public LookupParameter<IntValue> RegularityValueParameter {
    76       get { return (LookupParameter<IntValue>)Parameters["RegularityValue"]; }
     67    public LookupParameter<DoubleValue> RegularityParameter {
     68      get { return (LookupParameter<DoubleValue>)Parameters["Regularity"]; }
    7769    }
    78     public LookupParameter<IntValue> DiversityValueParameter {
    79       get { return (LookupParameter<IntValue>)Parameters["DiversityValue"]; }
     70    public LookupParameter<DoubleValue> DiversityParameter {
     71      get { return (LookupParameter<DoubleValue>)Parameters["Diversity"]; }
    8072    }
    81 
    82     #region Peaks
    8373    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"]; }
    8875    }
    8976    public LookupParameter<DoubleValue> PeakDensityBasinInformationParameter {
    90       get { return (LookupParameter<DoubleValue>) Parameters["PeakDensityBasinInformation"]; }
     77      get { return (LookupParameter<DoubleValue>)Parameters["PeakDensityBasinInformation"]; }
    9178    }
    92     public LookupParameter<DoubleValue> PeakDensityBasinInformationQualityDeltaParameter {
    93       get { return (LookupParameter<DoubleValue>) Parameters["PeakDensityBasinInformationQualityDelta"]; }
    94     }
    95 
    96 
    9779    #endregion
    98 
    99     #endregion
    100 
    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     }
    11980
    12081    [StorableConstructor]
     
    12485    public InformationAnalyzer() {
    12586      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"));
    12988
    13089      Parameters.Add(new ValueLookupParameter<IntValue>("NQuantiles", "The number of delta quantiles to display", new IntValue(20)));
    13190      Parameters.Add(new ValueLookupParameter<IntValue>("ShapeSize", "The number of slopes to consider as shapes.", new IntValue(2)));
    13291
    133       Parameters.Add(new LookupParameter<DoubleValue>("InformationContentValue", "The information content H(0) at eps = 0"));
    134       Parameters.Add(new LookupParameter<DoubleValue>("PartialInformationContentValue", "Partial information content M(0) at eps = 0"));
    135       Parameters.Add(new LookupParameter<DoubleValue>("DensityBasinInformationValue", "Density Basin Information h(0) at eps = 0"));
    136       Parameters.Add(new LookupParameter<DoubleValue>("TotalEntropyValue", "The overall disorder in the trajectory"));
    137       Parameters.Add(new LookupParameter<DoubleValue>("InformationStabilityValue", "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"));
    14099      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."));
    142100      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;
    162101    }
    163102
     
    167106
    168107    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
    175147      return base.Apply();
    176148    }
    177149
    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;
    246155    }
    247156  }
Note: See TracChangeset for help on using the changeset viewer.