Index: /trunk/sources/HeuristicLab.Problems.ArtificialAnt/3.5/ArtificialAntProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.ArtificialAnt/3.5/ArtificialAntProblem.cs	(revision 12902)
+++ /trunk/sources/HeuristicLab.Problems.ArtificialAnt/3.5/ArtificialAntProblem.cs	(revision 12903)
@@ -22,4 +22,5 @@
 using System;
 using System.Diagnostics.Contracts;
+using System.Drawing.Text;
 using System.Linq;
 using HeuristicLab.Common;
@@ -27,7 +28,8 @@
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Optimization;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.ArtificialAnt.Analyzers;
+
 
 namespace HeuristicLab.Problems.ArtificialAnt {
@@ -114,7 +116,4 @@
       g.AddTerminalSymbols(new string[] { "Left", "Right", "Move" });
       base.Encoding = new SymbolicExpressionTreeEncoding(g, 20, 10);
-
-      InitializeOperators();
-      RegisterEventHandlers();
     }
 
@@ -126,4 +125,16 @@
     }
 
+    public override void Analyze(ISymbolicExpressionTree[] trees, double[] qualities, ResultCollection results, IRandom random) {
+      const string bestSolutionResultName = "Best Solution";
+      var bestQuality = Maximization ? qualities.Max() : qualities.Min();
+      var bestIdx = Array.IndexOf(qualities, bestQuality);
+
+      if (!results.ContainsKey(bestSolutionResultName)) {
+        results.Add(new Result(bestSolutionResultName, new AntTrail(World, trees[bestIdx], MaxTimeSteps.Value, qualities[bestIdx])));
+      } else if (((AntTrail)(results[bestSolutionResultName].Value)).Quality < qualities[bestIdx]) {
+        results[bestSolutionResultName].Value = new AntTrail(World, trees[bestIdx], MaxTimeSteps.Value, qualities[bestIdx]);
+      }
+    }
+
     // persistence
     [StorableConstructor]
@@ -131,5 +142,4 @@
     [StorableHook(HookType.AfterDeserialization)]
     private void AfterDeserialization() {
-      RegisterEventHandlers();
     }
 
@@ -137,5 +147,4 @@
     private ArtificialAntProblem(ArtificialAntProblem original, Cloner cloner)
       : base(original, cloner) {
-      RegisterEventHandlers();
     }
     public override IDeepCloneable Clone(Cloner cloner) {
@@ -143,50 +152,5 @@
     }
 
-    #region Events
-    protected override void OnSolutionCreatorChanged() {
-      base.OnSolutionCreatorChanged();
-      ParameterizeAnalyzers();
-      ParameterizeOperators();
-    }
-    protected override void OnEvaluatorChanged() {
-      base.OnEvaluatorChanged();
-      ParameterizeAnalyzers();
-      ParameterizeOperators();
-    }
-    private void SolutionCreator_SymbolicExpressionTreeParameter_ActualNameChanged(object sender, EventArgs e) {
-      ParameterizeAnalyzers();
-      ParameterizeOperators();
-    }
-    private void Evaluator_QualityParameter_ActualNameChanged(object sender, EventArgs e) {
-      ParameterizeAnalyzers();
-      ParameterizeOperators();
-    }
-    #endregion
-
-    #region Helpers
-    private void RegisterEventHandlers() {
-      Encoding.SolutionCreator.SymbolicExpressionTreeParameter.ActualNameChanged += new EventHandler(SolutionCreator_SymbolicExpressionTreeParameter_ActualNameChanged);
-      Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
-    }
-
-    private void InitializeOperators() {
-      Operators.Add(new BestAntTrailAnalyzer());
-      ParameterizeAnalyzers();
-      ParameterizeOperators();
-    }
-
-    private void ParameterizeAnalyzers() {
-      foreach (var analyzer in Operators.OfType<BestAntTrailAnalyzer>()) {
-        analyzer.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName;
-        analyzer.SymbolicExpressionTreeParameter.ActualName = Encoding.SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
-        analyzer.WorldParameter.ActualName = WorldParameter.Name;
-        analyzer.MaxTimeStepsParameter.ActualName = MaxTimeStepsParameter.Name;
-      }
-    }
-
-    private void ParameterizeOperators() {
-      // no problem-specific operators to parameterize
-    }
-
+    #region helpers
     private bool[,] ToBoolMatrix(char[][] ch) {
       var rows = ch.Length;
Index: /trunk/sources/HeuristicLab.Problems.ArtificialAnt/3.5/HeuristicLab.Problems.ArtificialAnt-3.5.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Problems.ArtificialAnt/3.5/HeuristicLab.Problems.ArtificialAnt-3.5.csproj	(revision 12902)
+++ /trunk/sources/HeuristicLab.Problems.ArtificialAnt/3.5/HeuristicLab.Problems.ArtificialAnt-3.5.csproj	(revision 12903)
@@ -106,5 +106,4 @@
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="Analyzers\BestAntTrailAnalyzer.cs" />
     <Compile Include="AntInterpreter.cs" />
     <Compile Include="ArtificialAntProblem.cs" />
