Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/07/12 15:14:47 (13 years ago)
Author:
epitzer
Message:

#1696 add neutrality breadth analysis by including and analyzing the number of possible neutral neighbors both overall and inside neutral areas

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/FitnessLandscapeAnalysis/HeuristicLab.Analysis.FitnessLandscape/Analysis/NeutralityAnalyzer.cs

    r7176 r7783  
    4848      get { return (LookupParameter<DoubleValue>)Parameters["CurrentNeutralDistance"]; }
    4949    }
     50    public LookupParameter<DoubleValue> CurrentFractionOfNeutralNeighborsParameter {
     51      get { return (LookupParameter<DoubleValue>)Parameters["CurrentFractionOfNeutralNeighbors"]; }
     52    }
    5053    public LookupParameter<DataTable> NeutralWalkDistancesTableParameter {
    5154      get { return (LookupParameter<DataTable>)Parameters["NeutralWalkDistancesTable"]; }
     
    5760      get { return (LookupParameter<DoubleValue>)Parameters["AverageNeutralWalkDistance"]; }
    5861    }
     62    public LookupParameter<DoubleValue> AverageNeutralNeighborFractionParameter {
     63      get { return (LookupParameter<DoubleValue>)Parameters["AverageNeutralNeighborFraction"]; }
     64    }
     65    public LookupParameter<DoubleValue> AverageInnerNeutralNeighborFractionParameter {
     66      get { return (LookupParameter<DoubleValue>)Parameters["AverageInnerNeutralNeighborFraction"]; }
     67    }
    5968    public LookupParameter<DoubleValue> NeutralWalkLengthVarianceParameter {
    6069      get { return (LookupParameter<DoubleValue>)Parameters["NeutralWalkLengthVariance"]; }
     
    6372      get { return (LookupParameter<DoubleValue>)Parameters["NeutralWalkDistanceVariance"]; }
    6473    }       
     74    public LookupParameter<DoubleValue> NeutralNeighborFractionVarianceParameter {
     75      get { return (LookupParameter<DoubleValue>)Parameters["NeutralNeighborFractionVariance"]; }
     76    }
     77    public LookupParameter<DoubleValue> InnerNeutralNeighborFractionVarianceParameter {
     78      get { return (LookupParameter<DoubleValue>)Parameters["InnerNeutralNeighborFractionVariance"]; }
     79    }
    6580    public LookupParameter<VariableCollection> ResultsParameter {
    6681      get { return (LookupParameter<VariableCollection>)Parameters["Results"]; }
     
    7590      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The current quality"));
    7691      Parameters.Add(new LookupParameter<DoubleValue>("CurrentNeutralDistance", "The distance of the current solution to the starting point of the neutral (portion of the) walk."));
     92      Parameters.Add(new LookupParameter<DoubleValue>("CurrentFractionOfNeutralNeighbors", "The current fraction of neighbors with the same fitness (within epsilon)"));
    7793      Parameters.Add(new LookupParameter<DataTable>("NeutralWalkDistancesTable", "The historical values of the current neutral distance."));
    7894      Parameters.Add(new LookupParameter<DoubleValue>("AverageNeutralWalkLength", "The average length of a neutral walk"));
    7995      Parameters.Add(new LookupParameter<DoubleValue>("AverageNeutralWalkDistance", "The average distance of the neutral walk to the starting point."));
     96      Parameters.Add(new LookupParameter<DoubleValue>("AverageNeutralNeighborFraction", "The average fraction of neutral neighbors overall."));
     97      Parameters.Add(new LookupParameter<DoubleValue>("AverageInnerNeutralNeighborFraction", "The average fraction of neutral neighbors within a neutral area."));
    8098      Parameters.Add(new LookupParameter<DoubleValue>("NeutralWalkLengthVariance", "The variance of the neutral walks lengths"));
    8199      Parameters.Add(new LookupParameter<DoubleValue>("NeutralWalkDistanceVariance", "The varaince of the neutral walks distances"));
     100      Parameters.Add(new LookupParameter<DoubleValue>("NeutralNeighborFractionVariance", "The average fraction of neutral neighbors overall."));
     101      Parameters.Add(new LookupParameter<DoubleValue>("InnerNeutralNeighborFractionVariance", "The average fraction of neutral neighbors within a neutral area."));
    82102
    83103      var resultsCollector = new ResultsCollector();
    84104      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(CurrentNeutralDistanceParameter.ActualName));
     105      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(CurrentFractionOfNeutralNeighborsParameter.ActualName));
    85106      resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>(NeutralWalkDistancesTableParameter.Name));
    86107      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(AverageNeutralWalkLengthParameter.Name));
    87108      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(AverageNeutralWalkDistanceParameter.Name));
     109      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(AverageNeutralNeighborFractionParameter.Name));
     110      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(AverageInnerNeutralNeighborFractionParameter.Name));
    88111      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(NeutralWalkLengthVarianceParameter.Name));
    89112      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(NeutralWalkDistanceVarianceParameter.Name));
     113      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(NeutralNeighborFractionVarianceParameter.Name));
     114      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>(InnerNeutralNeighborFractionVarianceParameter.Name));
    90115
    91116      OperatorGraph.InitialOperator = resultsCollector;
     
    99124    public override IOperation Apply() {
    100125      DataTable distanceTable = GetOrCreateDistanceTable();
    101       var values = distanceTable.Rows["Neutral Walk Distances"].Values;
    102       values.Add(CurrentNeutralDistanceParameter.ActualValue == null ? 0 : CurrentNeutralDistanceParameter.ActualValue.Value);
    103       List<double> lenghts = new List<double>();
    104       List<double> distances = new List<double>();
     126      var distanceValues = distanceTable.Rows["Neutral Walk Distances"].Values;
     127      var fractionValues = distanceTable.Rows["Neutral Neighbor Fractions"].Values;
     128      distanceValues.Add(CurrentNeutralDistanceParameter.ActualValue == null ? 0 : CurrentNeutralDistanceParameter.ActualValue.Value);
     129      fractionValues.Add(CurrentFractionOfNeutralNeighborsParameter.ActualValue == null ? 0 : CurrentFractionOfNeutralNeighborsParameter.ActualValue.Value);
     130      var lengths = new List<double>();
     131      var distances = new List<double>();
     132      var innerFractions = new List<double>();
    105133      double lastValue = -1;
    106134      int lastStart = 0;
    107       for (int i = 0; i<values.Count; i++) {
    108         if (values[i] < lastValue) {
    109           lenghts.Add(i - lastStart - 1);
     135      for (int i = 0; i<distanceValues.Count; i++) {
     136        if (distanceValues[i] < lastValue) { // restart
     137          lengths.Add(i - lastStart - 1);
    110138          distances.Add(lastValue);
    111139          lastStart = i;
     140        } else { // inside neutral area
     141          innerFractions.Add(fractionValues[i]);
    112142        }
    113         lastValue = values[i];
     143        lastValue = distanceValues[i];
    114144      }
    115       if (distances.Count > 0 && lenghts.Count > 0) {
     145      if (lastStart != distanceValues.Count-1) {
     146        lengths.Add(distanceValues.Count - lastStart - 1);
     147        distances.Add(lastValue);
     148      }
     149      if (distances.Count > 0 && lengths.Count > 0) {
    116150        AverageNeutralWalkDistanceParameter.ActualValue = new DoubleValue(distances.Average());
    117151        NeutralWalkDistanceVarianceParameter.ActualValue = new DoubleValue(distances.Variance());
    118         AverageNeutralWalkLengthParameter.ActualValue = new DoubleValue(lenghts.Average());
    119         NeutralWalkLengthVarianceParameter.ActualValue = new DoubleValue(lenghts.Variance());
     152        AverageNeutralWalkLengthParameter.ActualValue = new DoubleValue(lengths.Average());
     153        NeutralWalkLengthVarianceParameter.ActualValue = new DoubleValue(lengths.Variance());
     154        AverageNeutralNeighborFractionParameter.ActualValue = new DoubleValue(fractionValues.Average());
     155        NeutralNeighborFractionVarianceParameter.ActualValue = new DoubleValue(fractionValues.Variance());
     156        AverageInnerNeutralNeighborFractionParameter.ActualValue = new DoubleValue(innerFractions.Average());
     157        InnerNeutralNeighborFractionVarianceParameter.ActualValue = new DoubleValue(innerFractions.Variance());
    120158      }
    121159      return base.Apply();
     
    127165        distancesTable = new DataTable("Neutral Walk Distances");
    128166        NeutralWalkDistancesTableParameter.ActualValue = distancesTable;
    129         var row = new DataRow("Neutral Walk Distances");
    130         distancesTable.Rows.Add(row);
     167        distancesTable.Rows.Add(new DataRow("Neutral Walk Distances"));
     168        distancesTable.Rows.Add(new DataRow("Neutral Neighbor Fractions") {VisualProperties = {SecondYAxis = true}});
    131169      }
    132170      return distancesTable;
Note: See TracChangeset for help on using the changeset viewer.