Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SymbolicRegressionProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SymbolicRegressionProblem.cs	(revision 3616)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Regression/3.3/Symbolic/SymbolicRegressionProblem.cs	(revision 3651)
@@ -39,4 +39,6 @@
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Creators;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Interfaces;
+using HeuristicLab.Problems.DataAnalysis.Regression.Symbolic.Analyzers;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Analyzers;
 
 namespace HeuristicLab.Problems.DataAnalysis.Regression.Symbolic {
@@ -150,7 +152,10 @@
       get { return BestKnownQualityParameter.Value; }
     }
-    private List<ISymbolicExpressionTreeOperator> operators;
+    private List<IOperator> operators;
     public IEnumerable<IOperator> Operators {
-      get { return operators.Cast<IOperator>(); }
+      get { return operators; }
+    }
+    public IEnumerable<ISymbolicRegressionSolutionPopulationAnalyzer> Analyzers {
+      get { return operators.OfType<ISymbolicRegressionSolutionPopulationAnalyzer>(); }
     }
     public DoubleValue PunishmentFactor {
@@ -180,5 +185,4 @@
       var grammar = new ArithmeticExpressionGrammar();
       var globalGrammar = new GlobalSymbolicExpressionGrammar(grammar);
-      var visualizer = new BestValidationSymbolicRegressionSolutionVisualizer();
       var interpreter = new SimpleArithmeticExpressionInterpreter();
       Parameters.Add(new ValueParameter<BoolValue>("Maximization", "Set to false as the error of the regression model should be minimized.", (BoolValue)new BoolValue(false).AsReadOnly()));
@@ -200,5 +204,4 @@
       ParameterizeSolutionCreator();
       ParameterizeEvaluator();
-      ParameterizeVisualizer();
 
       UpdateGrammar();
@@ -240,5 +243,5 @@
       // paritions could be changed
       ParameterizeEvaluator();
-      ParameterizeVisualizer();
+      ParameterizeAnalyzers();
       // input variables could have been changed
       UpdateGrammar();
@@ -260,5 +263,5 @@
     protected virtual void OnSolutionParameterNameChanged(EventArgs e) {
       ParameterizeEvaluator();
-      ParameterizeVisualizer();
+      ParameterizeAnalyzers();
       ParameterizeOperators();
     }
@@ -267,9 +270,9 @@
       Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
       ParameterizeEvaluator();
-      ParameterizeVisualizer();
+      ParameterizeAnalyzers();
       RaiseEvaluatorChanged(e);
     }
     protected virtual void OnQualityParameterNameChanged(EventArgs e) {
-      ParameterizeVisualizer();
+      ParameterizeAnalyzers();
     }
     #endregion
@@ -345,7 +348,11 @@
 
     private void InitializeOperators() {
-      operators = new List<ISymbolicExpressionTreeOperator>();
-      operators.AddRange(ApplicationManager.Manager.GetInstances<ISymbolicExpressionTreeOperator>());
+      operators = new List<IOperator>();
+      operators.AddRange(ApplicationManager.Manager.GetInstances<ISymbolicExpressionTreeOperator>().OfType<IOperator>());
+      operators.Add(new PopulationValidationBestScaledSymbolicRegressionSolutionAnalyzer());
+      operators.Add(new PopulationMinAvgMaxTreeSizeAnalyzer());
+      operators.Add(new PopulationSymbolicRegressionVariableFrequencyAnalyzer());
       ParameterizeOperators();
+      ParameterizeAnalyzers();
     }
 
@@ -365,16 +372,25 @@
     }
 
-    private void ParameterizeVisualizer() {
-      //var solutionVisualizer = Visualizer as BestValidationSymbolicRegressionSolutionVisualizer;
-      //if (solutionVisualizer != null) {
-      //  solutionVisualizer.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
-      //  solutionVisualizer.DataAnalysisProblemDataParameter.ActualName = DataAnalysisProblemDataParameter.Name;
-      //  solutionVisualizer.UpperEstimationLimitParameter.ActualName = UpperEstimationLimitParameter.Name;
-      //  solutionVisualizer.LowerEstimationLimitParameter.ActualName = LowerEstimationLimitParameter.Name;
-      //  solutionVisualizer.QualityParameter.ActualName = Evaluator.QualityParameter.Name;
-      //  solutionVisualizer.SymbolicExpressionTreeInterpreterParameter.ActualName = SymbolicExpressionTreeInterpreterParameter.Name;
-      //  solutionVisualizer.ValidationSamplesStartParameter.Value = ValidationSamplesStart;
-      //  solutionVisualizer.ValidationSamplesEndParameter.Value = ValidationSamplesEnd;
-      //}
+    private void ParameterizeAnalyzers() {
+      foreach (var analyzer in Analyzers) {
+        analyzer.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
+        var bestValidationSolutionAnalyzer = analyzer as PopulationValidationBestScaledSymbolicRegressionSolutionAnalyzer;
+        if (bestValidationSolutionAnalyzer != null) {
+          bestValidationSolutionAnalyzer.ProblemDataParameter.ActualName = DataAnalysisProblemDataParameter.Name;
+          bestValidationSolutionAnalyzer.UpperEstimationLimitParameter.ActualName = UpperEstimationLimitParameter.Name;
+          bestValidationSolutionAnalyzer.LowerEstimationLimitParameter.ActualName = LowerEstimationLimitParameter.Name;
+          bestValidationSolutionAnalyzer.SymbolicExpressionTreeInterpreterParameter.ActualName = SymbolicExpressionTreeInterpreterParameter.Name;
+          bestValidationSolutionAnalyzer.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
+          bestValidationSolutionAnalyzer.SamplesStartParameter.Value = ValidationSamplesStart;
+          bestValidationSolutionAnalyzer.SamplesEndParameter.Value = ValidationSamplesEnd;
+        }
+        var varFreqAnalyzer = analyzer as PopulationSymbolicRegressionVariableFrequencyAnalyzer;
+        if (varFreqAnalyzer != null) {
+          varFreqAnalyzer.ProblemDataParameter.ActualName = DataAnalysisProblemDataParameter.Name;
+        }
+      }
+      foreach (ISymbolicExpressionTreePopulationAnalyzer analyzer in Operators.OfType<ISymbolicExpressionTreePopulationAnalyzer>()) {
+        analyzer.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
+      }
     }
 
