Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/GQAPAssignmentView.Designer.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/GQAPAssignmentView.Designer.cs	(revision 7470)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/GQAPAssignmentView.Designer.cs	(revision 7471)
@@ -49,4 +49,6 @@
       this.qualityLabel = new System.Windows.Forms.Label();
       this.assignmentGroupBox = new System.Windows.Forms.GroupBox();
+      this.assignmentSplitContainer = new System.Windows.Forms.SplitContainer();
+      this.assignmentView = new HeuristicLab.Data.Views.StringConvertibleArrayView();
       this.characteristicsGroupBox = new System.Windows.Forms.GroupBox();
       this.label7 = new System.Windows.Forms.Label();
@@ -56,12 +58,11 @@
       this.label3 = new System.Windows.Forms.Label();
       this.flowDistanceQualityLabel = new System.Windows.Forms.Label();
-      this.assignmentSplitContainer = new System.Windows.Forms.SplitContainer();
-      this.assignmentView = new HeuristicLab.Data.Views.StringConvertibleArrayView();
+      this.recalculateButton = new System.Windows.Forms.Button();
       this.assignmentGroupBox.SuspendLayout();
-      this.characteristicsGroupBox.SuspendLayout();
       ((System.ComponentModel.ISupportInitialize)(this.assignmentSplitContainer)).BeginInit();
       this.assignmentSplitContainer.Panel1.SuspendLayout();
       this.assignmentSplitContainer.Panel2.SuspendLayout();
       this.assignmentSplitContainer.SuspendLayout();
+      this.characteristicsGroupBox.SuspendLayout();
       this.SuspendLayout();
       // 
@@ -110,8 +111,37 @@
       this.assignmentGroupBox.Text = "Assignment";
       // 
+      // assignmentSplitContainer
+      // 
+      this.assignmentSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.assignmentSplitContainer.Location = new System.Drawing.Point(3, 16);
+      this.assignmentSplitContainer.Name = "assignmentSplitContainer";
+      // 
+      // assignmentSplitContainer.Panel1
+      // 
+      this.assignmentSplitContainer.Panel1.Controls.Add(this.assignmentTreeView);
+      // 
+      // assignmentSplitContainer.Panel2
+      // 
+      this.assignmentSplitContainer.Panel2.Controls.Add(this.assignmentView);
+      this.assignmentSplitContainer.Size = new System.Drawing.Size(234, 337);
+      this.assignmentSplitContainer.SplitterDistance = 78;
+      this.assignmentSplitContainer.TabIndex = 4;
+      // 
+      // assignmentView
+      // 
+      this.assignmentView.Caption = "StringConvertibleArray View";
+      this.assignmentView.Content = null;
+      this.assignmentView.Dock = System.Windows.Forms.DockStyle.Fill;
+      this.assignmentView.Location = new System.Drawing.Point(0, 0);
+      this.assignmentView.Name = "assignmentView";
+      this.assignmentView.ReadOnly = false;
+      this.assignmentView.Size = new System.Drawing.Size(152, 337);
+      this.assignmentView.TabIndex = 0;
+      // 
       // characteristicsGroupBox
       // 
       this.characteristicsGroupBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
             | System.Windows.Forms.AnchorStyles.Left)));
+      this.characteristicsGroupBox.Controls.Add(this.recalculateButton);
       this.characteristicsGroupBox.Controls.Add(this.label7);
       this.characteristicsGroupBox.Controls.Add(this.overbookedCapacityLabel);
@@ -189,31 +219,14 @@
       this.flowDistanceQualityLabel.Text = "-";
       // 
-      // assignmentSplitContainer
-      // 
-      this.assignmentSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.assignmentSplitContainer.Location = new System.Drawing.Point(3, 16);
-      this.assignmentSplitContainer.Name = "assignmentSplitContainer";
-      // 
-      // assignmentSplitContainer.Panel1
-      // 
-      this.assignmentSplitContainer.Panel1.Controls.Add(this.assignmentTreeView);
-      // 
-      // assignmentSplitContainer.Panel2
-      // 
-      this.assignmentSplitContainer.Panel2.Controls.Add(this.assignmentView);
-      this.assignmentSplitContainer.Size = new System.Drawing.Size(234, 337);
-      this.assignmentSplitContainer.SplitterDistance = 78;
-      this.assignmentSplitContainer.TabIndex = 4;
-      // 
-      // assignmentView
-      // 
-      this.assignmentView.Caption = "StringConvertibleArray View";
-      this.assignmentView.Content = null;
-      this.assignmentView.Dock = System.Windows.Forms.DockStyle.Fill;
-      this.assignmentView.Location = new System.Drawing.Point(0, 0);
-      this.assignmentView.Name = "assignmentView";
-      this.assignmentView.ReadOnly = false;
-      this.assignmentView.Size = new System.Drawing.Size(152, 337);
-      this.assignmentView.TabIndex = 0;
+      // recalculateButton
+      // 
+      this.recalculateButton.Location = new System.Drawing.Point(9, 95);
+      this.recalculateButton.Name = "recalculateButton";
+      this.recalculateButton.Size = new System.Drawing.Size(193, 23);
+      this.recalculateButton.TabIndex = 5;
+      this.recalculateButton.Text = "Recalculate";
+      this.recalculateButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
+      this.recalculateButton.UseVisualStyleBackColor = true;
+      this.recalculateButton.Click += new System.EventHandler(this.recalculateButton_Click);
       // 
       // GQAPAssignmentView
@@ -226,10 +239,10 @@
       this.Size = new System.Drawing.Size(460, 362);
       this.assignmentGroupBox.ResumeLayout(false);
-      this.characteristicsGroupBox.ResumeLayout(false);
-      this.characteristicsGroupBox.PerformLayout();
       this.assignmentSplitContainer.Panel1.ResumeLayout(false);
       this.assignmentSplitContainer.Panel2.ResumeLayout(false);
       ((System.ComponentModel.ISupportInitialize)(this.assignmentSplitContainer)).EndInit();
       this.assignmentSplitContainer.ResumeLayout(false);
+      this.characteristicsGroupBox.ResumeLayout(false);
+      this.characteristicsGroupBox.PerformLayout();
       this.ResumeLayout(false);
 
@@ -251,4 +264,5 @@
     private System.Windows.Forms.SplitContainer assignmentSplitContainer;
     private Data.Views.StringConvertibleArrayView assignmentView;
+    private System.Windows.Forms.Button recalculateButton;
   }
 }
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/GQAPAssignmentView.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/GQAPAssignmentView.cs	(revision 7470)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Views/3.3/GQAPAssignmentView.cs	(revision 7471)
@@ -26,5 +26,7 @@
 using System.Linq;
 using System.Windows.Forms;
+using HeuristicLab.Common.Resources;
 using HeuristicLab.Core.Views;
+using HeuristicLab.Data;
 using HeuristicLab.Encodings.IntegerVectorEncoding;
 using HeuristicLab.MainForm;
@@ -44,4 +46,5 @@
     public GQAPAssignmentView() {
       InitializeComponent();
+      recalculateButton.Image = VSImageLibrary.Refresh;
     }
 
@@ -307,4 +310,17 @@
     }
     #endregion
+
+    private void recalculateButton_Click(object sender, EventArgs e) {
+      double fdq, iq, oc;
+      GQAPEvaluator.Evaluate(Content.Assignment, Content.Weights,
+        Content.Distances, Content.InstallationCosts, Content.Demands,
+        Content.Capacities, out fdq, out iq, out oc);
+      Content.FlowDistanceQuality = new DoubleValue(fdq);
+      Content.InstallationQuality = new DoubleValue(iq);
+      Content.OverbookedCapacity = new DoubleValue(oc);
+      Content.Quality = new DoubleValue(
+        GQAPEvaluator.GetCombinedQuality(fdq, iq, oc,
+        Content.TransportationCosts.Value, Content.OverbookedCapacityPenalty.Value));
+    }
   }
 }
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/GeneralizedQuadraticAssignmentProblem.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/GeneralizedQuadraticAssignmentProblem.cs	(revision 7470)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment/3.3/GeneralizedQuadraticAssignmentProblem.cs	(revision 7471)
@@ -175,4 +175,6 @@
       DistancesParameter.ReactOnValueToStringChangedAndValueItemImageChanged = false;
       InstallationCostsParameter.ReactOnValueToStringChangedAndValueItemImageChanged = false;
+      DemandsParameter.ReactOnValueToStringChangedAndValueItemImageChanged = false;
+      CapacitiesParameter.ReactOnValueToStringChangedAndValueItemImageChanged = false;
 
       Weights = new DoubleMatrix(5, 5);
@@ -330,10 +332,13 @@
 
     private void EvaluateAndLoadAssignment(int[] vector) {
-      var assignment = new IntegerVector(vector);
+      EvaluateAndLoadAssignment(new IntegerVector(vector));
+    }
+    private void EvaluateAndLoadAssignment(IntegerVector assignment) {
+      if (!IsConfigurationValid()) return;
       double flowDistanceQuality, installationQuality, overbookedCapacity;
       GQAPEvaluator.Evaluate(assignment, Weights, Distances, InstallationCosts, Demands, Capacities,
         out flowDistanceQuality, out installationQuality, out overbookedCapacity);
       double quality = GQAPEvaluator.GetCombinedQuality(flowDistanceQuality, installationQuality, overbookedCapacity, TransportationCosts.Value, OverbookedCapacityPenalty.Value);
-      BestKnownSolution = new GQAPAssignment(assignment, new DoubleValue(quality),
+      BestKnownSolution = new GQAPAssignment((IntegerVector)assignment.Clone(), new DoubleValue(quality),
         new DoubleValue(flowDistanceQuality), new DoubleValue(installationQuality),
         new DoubleValue(overbookedCapacity), EquipmentNames, LocationNames, Distances, Weights, InstallationCosts,
@@ -341,5 +346,5 @@
       BestKnownQuality = new DoubleValue(quality);
       BestKnownSolutions = new GQAPAssignmentArchive(EquipmentNames, LocationNames, Distances, Weights, InstallationCosts, Demands, Capacities, TransportationCosts, OverbookedCapacityPenalty);
-      BestKnownSolutions.Solutions.Add(BestKnownSolution);
+      BestKnownSolutions.Solutions.Add(new GQAPSolution((IntegerVector)assignment.Clone(), new DoubleValue(quality), new DoubleValue(flowDistanceQuality), new DoubleValue(installationQuality), new DoubleValue(overbookedCapacity)));
     }
 
@@ -480,4 +485,11 @@
     }
     #endregion
+
+    private bool IsConfigurationValid() {
+      return Weights != null && Distances != null && Demands != null && Capacities != null && InstallationCosts != null
+        && Weights.Rows == Weights.Columns && Weights.Rows == InstallationCosts.Rows
+        && Distances.Rows == Distances.Columns && Distances.Rows == InstallationCosts.Columns
+        && Demands.Length == Weights.Rows && Capacities.Length == Distances.Rows;
+    }
   }
 }
