Index: /trunk/sources/HeuristicLab.Problems.Knapsack.Views/3.3/KnapsackSolutionView.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Knapsack.Views/3.3/KnapsackSolutionView.cs	(revision 3536)
+++ /trunk/sources/HeuristicLab.Problems.Knapsack.Views/3.3/KnapsackSolutionView.cs	(revision 3537)
@@ -154,5 +154,5 @@
               //draw knapsack
               graphics.DrawRectangle(Pens.Black,
-                borderX - 1, borderY - 1, width + 2, knapsackHeight + 2);
+                borderX - 1, pictureBox.Height - borderY - knapsackHeight - 1, width + 2, knapsackHeight + 2);
 
               //draw items sorted by value
@@ -180,5 +180,5 @@
                   double weight = Content.Weights[i];
                   double factor = weight / capacity;
-                  int elementHeight = (int)Math.Round(height * factor);
+                  int elementHeight = (int)Math.Floor(knapsackHeight * factor);
 
                   double value = Content.Values[i];
Index: /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/Evaluators/KnapsackEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/Evaluators/KnapsackEvaluator.cs	(revision 3536)
+++ /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/Evaluators/KnapsackEvaluator.cs	(revision 3537)
@@ -39,4 +39,16 @@
       get { return (ILookupParameter<DoubleValue>)Parameters["Quality"]; }
     }
+
+    public ILookupParameter<DoubleValue> SumWeightsParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters["SumWeights"]; }
+    }
+
+    public ILookupParameter<DoubleValue> SumValuesParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters["SumValues"]; }
+    }
+
+    public ILookupParameter<DoubleValue> AppliedPenaltyParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters["AppliedPenalty"]; }
+    }
     
     public ILookupParameter<BinaryVector> BinaryVectorParameter {
@@ -60,4 +72,7 @@
       : base() {
       Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The evaluated quality of the OneMax solution."));
+      Parameters.Add(new LookupParameter<DoubleValue>("SumWeights", "The evaluated quality of the OneMax solution."));
+      Parameters.Add(new LookupParameter<DoubleValue>("SumValues", "The evaluated quality of the OneMax solution."));
+      Parameters.Add(new LookupParameter<DoubleValue>("AppliedPenalty", "The evaluated quality of the OneMax solution."));
       Parameters.Add(new LookupParameter<BinaryVector>("BinaryVector", "The OneMax solution given in path representation which should be evaluated."));
       Parameters.Add(new LookupParameter<IntValue>("KnapsackCapacity", "Capacity of the Knapsack."));
@@ -67,12 +82,22 @@
     }
 
-    public static DoubleValue Apply(BinaryVector v, IntValue capacity, DoubleValue penalty, IntArray weights, IntArray values) {
+    public struct KnapsackEvaluation {
+      public DoubleValue Quality;
+      public DoubleValue SumWeights;
+      public DoubleValue SumValues;
+      public DoubleValue AppliedPenalty;
+    }
+
+    public static KnapsackEvaluation Apply(BinaryVector v, IntValue capacity, DoubleValue penalty, IntArray weights, IntArray values) {
       if (weights.Length != values.Length)
-        throw new InvalidOperationException("The weights and values parameters of the Knapsack problem have different sizes"); 
-      
+        throw new InvalidOperationException("The weights and values parameters of the Knapsack problem have different sizes");
+
+      KnapsackEvaluation result = new KnapsackEvaluation();
+
       double quality = 0;
 
       int weight = 0;
       int value = 0;
+      double appliedPenalty = 0;
 
       for (int i = 0; i < v.Length; i++) {
@@ -84,11 +109,15 @@
 
       if (weight > capacity.Value) {
-        quality =
-          value - penalty.Value * (weight - capacity.Value);
-      } else {
-        quality = value;
-      }
+        appliedPenalty = penalty.Value * (weight - capacity.Value);
+      } 
 
-      return new DoubleValue(quality);
+      quality =  value - appliedPenalty;
+
+      result.AppliedPenalty = new DoubleValue(appliedPenalty);
+      result.SumWeights = new DoubleValue(weight);
+      result.SumValues = new DoubleValue(value);
+      result.Quality = new DoubleValue(quality);
+
+      return result;
     }
 
@@ -96,5 +125,5 @@
       BinaryVector v = BinaryVectorParameter.ActualValue;
 
-      DoubleValue quality = Apply(BinaryVectorParameter.ActualValue,
+      KnapsackEvaluation evaluation = Apply(BinaryVectorParameter.ActualValue,
         KnapsackCapacityParameter.ActualValue, 
         PenaltyParameter.ActualValue, 
@@ -102,5 +131,8 @@
         ValuesParameter.ActualValue);
 
-      QualityParameter.ActualValue = quality;
+      QualityParameter.ActualValue = evaluation.Quality;
+      SumWeightsParameter.ActualValue = evaluation.SumWeights;
+      SumValuesParameter.ActualValue = evaluation.SumValues;
+      AppliedPenaltyParameter.ActualValue = evaluation.AppliedPenalty;
 
       return base.Apply();
Index: /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs	(revision 3536)
+++ /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/KnapsackProblem.cs	(revision 3537)
@@ -143,9 +143,8 @@
 
       int itemCount = rand.Next(10, 100);
-      int capacity = itemCount * 5;
-
-      KnapsackCapacity = new IntValue(capacity);
       Weights = new IntArray(itemCount);
       Values = new IntArray(itemCount);
+
+      double totalWeight = 0;
 
       for (int i = 0; i < itemCount; i++ ) {
@@ -155,5 +154,9 @@
         Values[i] = value;
         Weights[i] = weight;
-      }
+        totalWeight += weight;
+      }
+
+      int capacity = (int)Math.Round(0.7 * totalWeight);
+      KnapsackCapacity = new IntValue(capacity);
     }
 
@@ -175,5 +178,4 @@
 
       creator.BinaryVectorParameter.ActualName = "KnapsackSolution";
-      evaluator.QualityParameter.ActualName = "NumberOfOnes";
 
       InitializeRandomKnapsackInstance();
Index: /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/MoveEvaluators/KnapsackOneBitflipMoveEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/MoveEvaluators/KnapsackOneBitflipMoveEvaluator.cs	(revision 3536)
+++ /trunk/sources/HeuristicLab.Problems.Knapsack/3.3/MoveEvaluators/KnapsackOneBitflipMoveEvaluator.cs	(revision 3537)
@@ -56,5 +56,5 @@
         PenaltyParameter.ActualValue,
         WeightsParameter.ActualValue,
-        ValuesParameter.ActualValue);
+        ValuesParameter.ActualValue).Quality;
 
       double moveQuality = quality.Value;
