Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/HeuristicLab.Problems.DataAnalysis.Regression-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/HeuristicLab.Problems.DataAnalysis.Regression-3.3.csproj	(revision 3528)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/HeuristicLab.Problems.DataAnalysis.Regression-3.3.csproj	(revision 3531)
@@ -103,4 +103,8 @@
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Analysis\3.3\HeuristicLab.Analysis-3.3.csproj">
+      <Project>{887425B4-4348-49ED-A457-B7D2C26DDBF9}</Project>
+      <Name>HeuristicLab.Analysis-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
       <Project>{958B43BC-CC5C-4FA2-8628-2B3B01D890B6}</Project>
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/BestValidationSymbolicRegressionSolutionVisualizer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/BestValidationSymbolicRegressionSolutionVisualizer.cs	(revision 3528)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/BestValidationSymbolicRegressionSolutionVisualizer.cs	(revision 3531)
@@ -31,4 +31,6 @@
 using HeuristicLab.Problems.DataAnalysis.Evaluators;
 using HeuristicLab.Problems.DataAnalysis.Symbolic;
+using System.Collections.Generic;
+using HeuristicLab.Analysis;
 
 namespace HeuristicLab.Problems.DataAnalysis.Regression.Symbolic {
@@ -49,4 +51,5 @@
     private const string QualityParameterName = "Quality";
     private const string ResultsParameterName = "Results";
+    private const string VariableFrequenciesParameterName = "VariableFrequencies";
 
     #region parameter properties
@@ -87,4 +90,8 @@
       get { return (ILookupParameter<ResultCollection>)Parameters[ResultsParameterName]; }
     }
+    public ILookupParameter<DataTable> VariableFrequenciesParameter {
+      get { return (ILookupParameter<DataTable>)Parameters[VariableFrequenciesParameterName]; }
+    }
+
     #endregion
 
@@ -104,4 +111,8 @@
     public IntValue ValidationSamplesEnd {
       get { return ValidationSamplesEndParameter.ActualValue; }
+    }
+    public DataTable VariableFrequencies {
+      get { return VariableFrequenciesParameter.ActualValue; }
+      set { VariableFrequenciesParameter.ActualValue = value; }
     }
     #endregion
@@ -118,4 +129,5 @@
       Parameters.Add(new ValueLookupParameter<IntValue>(ValidationSamplesEndParameterName, "The end index of the validation partition (part of the training partition)."));
       Parameters.Add(new LookupParameter<SymbolicRegressionSolution>(BestValidationSolutionParameterName, "The best symbolic expression tree based on the validation data for the symbolic regression problem."));
+      Parameters.Add(new LookupParameter<DataTable>(VariableFrequenciesParameterName, "The relative variable reference frequencies aggregated over the whole population."));
       Parameters.Add(new LookupParameter<ResultCollection>(ResultsParameterName, "The result collection of the algorithm."));
     }
@@ -124,5 +136,19 @@
       ItemArray<SymbolicExpressionTree> expressions = SymbolicExpressionTreeParameter.ActualValue;
       DataAnalysisProblemData problemData = DataAnalysisProblemDataParameter.ActualValue;
-
+      #region update variable frequencies
+      var inputVariables = problemData.InputVariables.Select(x => x.Value);
+      if (VariableFrequencies == null) {
+        VariableFrequencies = new DataTable("Variable Frequencies", "Relative frequency of variable references aggregated over the whole population.");
+        AddResult("VariableFrequencies", VariableFrequencies);
+        // add a data row for each input variable
+        foreach (var inputVariable in inputVariables)
+          VariableFrequencies.Rows.Add(new DataRow(inputVariable));
+      }
+      foreach (var pair in VariableFrequencyAnalyser.CalculateVariableFrequencies(expressions, inputVariables)) {
+        VariableFrequencies.Rows[pair.Key].Values.Add(pair.Value);
+      }
+      #endregion
+
+      #region determination of validation-best solution
       int validationSamplesStart = ValidationSamplesStart.Value;
       int validationSamplesEnd = ValidationSamplesEnd.Value;
@@ -142,4 +168,6 @@
 
       SymbolicRegressionSolution bestOfRunSolution = BestValidationSolutionParameter.ActualValue;
+      #endregion
+      #region update of validation-best solution
       if (bestOfRunSolution == null) {
         // no best of run solution yet -> make a solution from the currentBestExpression
@@ -153,6 +181,5 @@
         }
       }
-
-
+      #endregion
       return base.Apply();
     }
