Index: /trunk/sources/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSeachOperator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSeachOperator.cs	(revision 12834)
+++ /trunk/sources/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSeachOperator.cs	(revision 12835)
@@ -20,4 +20,5 @@
 #endregion
 
+using System;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
@@ -92,6 +93,10 @@
     }
 
-    public ILookupParameter<IntValue> EvaluatedMovesParameter {
-      get { return (ILookupParameter<IntValue>)Parameters["EvaluatedMoves"]; }
+    public ILookupParameter<IntValue> EvaluatedSolutionsParameter {
+      get { return (ILookupParameter<IntValue>)Parameters["EvaluatedSolutions"]; }
+    }
+
+    public ILookupParameter<DoubleValue> EvaluatedSolutionEquivalentsParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters["EvaluatedSolutionEquivalents"]; }
     }
     #endregion
@@ -121,5 +126,6 @@
       Parameters.Add(new ValueLookupParameter<IntValue>("AlternativeAspirationTenure", "The time t that a move will be remembered for the alternative aspiration condition."));
       Parameters.Add(new LookupParameter<BoolValue>("AllMovesTabu", "Indicates that all moves are tabu."));
-      Parameters.Add(new LookupParameter<IntValue>("EvaluatedMoves", "The number of move evaluations made."));
+      Parameters.Add(new LookupParameter<IntValue>("EvaluatedSolutions", "The number of evaluated solutions."));
+      Parameters.Add(new LookupParameter<DoubleValue>("EvaluatedSolutionEquivalents", "The number of evaluated solution equivalents."));
     }
 
@@ -135,6 +141,9 @@
         Parameters.Add(new LookupParameter<BoolValue>("AllMovesTabu", "Indicates that all moves are tabu."));
       }
-      if (!Parameters.ContainsKey("EvaluatedMoves")) {
-        Parameters.Add(new LookupParameter<IntValue>("EvaluatedMoves", "The number of move evaluations made."));
+      if (!Parameters.ContainsKey("EvaluatedSolutions")) {
+        Parameters.Add(new LookupParameter<IntValue>("EvaluatedSolutions", "The number of evaluated solutions."));
+      }
+      if (!Parameters.ContainsKey("EvaluatedSolutionEquivalents")) {
+        Parameters.Add(new LookupParameter<DoubleValue>("EvaluatedSolutionEquivalents", "The number of evaluated solution equivalents."));
       }
       #endregion
@@ -171,14 +180,16 @@
       bool already_aspired = false;
 
-      var evaluatedMoves = 0;
+      double evaluations = EvaluatedSolutionsParameter.ActualValue.Value;
       foreach (Swap2Move move in ExhaustiveSwap2MoveGenerator.Generate(solution)) {
         double moveQuality;
         if (lastMove == null) {
           moveQuality = QAPSwap2MoveEvaluator.Apply(solution, move, weights, distances);
-          evaluatedMoves++;
+          evaluations += 4.0 / solution.Length;
         } else if (allMovesTabu) moveQuality = moveQualityMatrix[move.Index1, move.Index2];
         else {
           moveQuality = QAPSwap2MoveEvaluator.Apply(solution, move, moveQualityMatrix[move.Index1, move.Index2], weights, distances, lastMove);
-          evaluatedMoves++;
+          if (move.Index1 == lastMove.Index1 || move.Index2 == lastMove.Index1 || move.Index1 == lastMove.Index2 || move.Index2 == lastMove.Index2)
+            evaluations += 4.0 / solution.Length;
+          else evaluations += 2.0 / (solution.Length * solution.Length);
         }
 
@@ -214,5 +225,6 @@
       }
 
-      EvaluatedMovesParameter.ActualValue.Value += evaluatedMoves;
+      EvaluatedSolutionEquivalentsParameter.ActualValue.Value = evaluations;
+      EvaluatedSolutionsParameter.ActualValue.Value = (int)Math.Ceiling(evaluations);
 
       allMovesTabu = bestMove == null;
Index: /trunk/sources/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSearch.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSearch.cs	(revision 12834)
+++ /trunk/sources/HeuristicLab.Problems.QuadraticAssignment.Algorithms/3.3/RobustTabooSearch.cs	(revision 12835)
@@ -168,18 +168,13 @@
       VariableCreator variableCreator = new VariableCreator();
       variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Iterations", new IntValue(0)));
-      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("EvaluatedSolutions", new IntValue(0)));
-      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("EvaluatedMoves", new IntValue(0)));
+      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("EvaluatedSolutions", new IntValue(1)));
+      variableCreator.CollectedValues.Add(new ValueParameter<DoubleValue>("EvaluatedSolutionEquivalents", new DoubleValue(1)));
 
       ResultsCollector resultsCollector = new ResultsCollector();
       resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Iterations", "The actual iteration."));
-      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("EvaluatedSolutions", "The number of full solution evaluations."));
-      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("EvaluatedMoves", "The number of move evaluations."));
+      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("EvaluatedSolutions", "Number of evaluated solutions."));
 
       solutionsCreator = new SolutionsCreator();
       solutionsCreator.NumberOfSolutions = new IntValue(1);
-
-      IntCounter counter = new IntCounter();
-      counter.ValueParameter.ActualName = "EvaluatedSolutions";
-      counter.Increment = new IntValue(1);
 
       Placeholder analyzer = new Placeholder();
@@ -202,5 +197,6 @@
       mainOperator.ShortTermMemoryParameter.ActualName = "ShortTermMemory";
       mainOperator.UseAlternativeAspirationParameter.ActualName = UseAlternativeAspirationParameter.Name;
-      mainOperator.EvaluatedMovesParameter.ActualName = "EvaluatedMoves";
+      mainOperator.EvaluatedSolutionsParameter.ActualName = "EvaluatedSolutions";
+      mainOperator.EvaluatedSolutionEquivalentsParameter.ActualName = "EvaluatedSolutionEquivalents";
 
       ConditionalBranch qualityStopBranch = new ConditionalBranch();
@@ -235,6 +231,5 @@
       variableCreator.Successor = resultsCollector;
       resultsCollector.Successor = solutionsCreator;
-      solutionsCreator.Successor = counter;
-      counter.Successor = analyzer;
+      solutionsCreator.Successor = analyzer;
       analyzer.Successor = ussp;
       ussp.Operator = mainOperator;
