Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/CPLEX/CplexContext.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/CPLEX/CplexContext.cs	(revision 15574)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/CPLEX/CplexContext.cs	(revision 15574)
@@ -0,0 +1,45 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2017 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms.CPLEX {
+  [Item("CPLEX Context", "A context for CPLEX solvers.")]
+  public class CplexContext : SingleSolutionContext<ISingleObjectiveSolutionScope<GQAPSolution>> {
+    
+    [StorableConstructor]
+    protected CplexContext(bool deserializing) : base(deserializing) { }
+    protected CplexContext(CplexContext original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public CplexContext() : base() { }
+    public CplexContext(string name) : base(name) { }
+    public CplexContext(string name, ParameterCollection parameters) : base(name, parameters) { }
+    public CplexContext(string name, string description) : base(name, description) { }
+    public CplexContext(string name, string description, ParameterCollection parameters) : base(name, description, parameters) { }
+    
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new CplexContext(this, cloner);
+    }
+  }
+}
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/CPLEX/CplexSolver.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/CPLEX/CplexSolver.cs	(revision 15574)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/CPLEX/CplexSolver.cs	(revision 15574)
@@ -0,0 +1,120 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2017 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Threading;
+using HeuristicLab.Analysis;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.IntegerVectorEncoding;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using ILOG.CPLEX;
+using ILOG.OPL;
+
+namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms.CPLEX {
+  [Item("CPLEX Solver (GQAP)", "Base class")]
+  [StorableClass]
+  public abstract class CplexSolver : ContextAlgorithm<CplexContext, IntegerVectorEncoding> {
+    public override bool SupportsPause {
+      get { return false; }
+    }
+
+    public override Type ProblemType {
+      get { return typeof(GQAP); }
+    }
+
+    public new GQAP Problem {
+      get { return (GQAP)base.Problem; }
+      set { base.Problem = value; }
+    }
+
+    [StorableConstructor]
+    protected CplexSolver(bool deserializing) : base(deserializing) { }
+    protected CplexSolver(CplexSolver original, Cloner cloner)
+    : base(original, cloner) {
+    }
+    public CplexSolver() {
+      Problem = new GQAP();
+      ((MultiAnalyzer)Analyzer).AddOperator(new QualityPerClockAnalyzer());
+    }
+
+    protected override void Initialize(CancellationToken cancellationToken) {
+      base.Initialize(cancellationToken);
+
+      try {
+        Context.RunOperator(Analyzer, cancellationToken);
+      } catch (OperationCanceledException) { }
+    }
+
+    protected override void Run(CancellationToken cancellationToken) {
+      var factory = new OplFactory();
+      var cplex = factory.CreateCplex();
+      cplex.Use(new LogCallback(this, cancellationToken));
+      cplex.SetParam(Cplex.DoubleParam.TiLim, MaximumRuntime.TotalSeconds);
+      var dataSource = new GQAPDataSource(factory, Problem.ProblemInstance);
+      using (var settings = factory.CreateOplSettings(factory.CreateOplErrorHandler()))
+      using (var opl = GetModel(factory, settings, cplex)) {
+        opl.AddDataSource(dataSource);
+        opl.Generate();
+        cplex.Solve();
+        cplex.End();
+      }
+    }
+
+    protected abstract OplModel GetModel(OplFactory factory, OplSettings settings, Cplex cplex);
+  }
+
+  public class LogCallback : Cplex.MIPInfoCallback {
+    private CplexSolver algorithm;
+    private CancellationToken token;
+    private double prev;
+
+
+    public LogCallback(CplexSolver algorithm, CancellationToken token) {
+      this.algorithm = algorithm;
+      this.token = token;
+      prev = double.NaN;
+    }
+
+    protected override void Main() {
+      if (HasIncumbent()) {
+        var val = GetIncumbentObjValue();
+        if (val == prev) return;
+        algorithm.Context.Iterations++;
+        algorithm.Context.BestQuality = val;
+        IResult result;
+        if (algorithm.Results.TryGetValue("Iterations", out result))
+          ((IntValue)result.Value).Value = algorithm.Context.Iterations;
+        else algorithm.Results.Add(new Result("Iterations", new IntValue(algorithm.Context.Iterations)));
+        if (algorithm.Results.TryGetValue("BestQuality", out result))
+          ((DoubleValue)result.Value).Value = algorithm.Context.BestQuality;
+        else algorithm.Results.Add(new Result("BestQuality", new DoubleValue(algorithm.Context.BestQuality)));
+        algorithm.Context.RunOperator(algorithm.Analyzer, CancellationToken.None);
+        prev = val;
+        if (val.IsAlmost(algorithm.Problem.BestKnownQuality))
+          Abort();
+      }
+      if (token.IsCancellationRequested) Abort();
+    }
+  }
+}
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/CPLEX/GQAP-FY.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/CPLEX/GQAP-FY.cs	(revision 15574)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/CPLEX/GQAP-FY.cs	(revision 15574)
@@ -0,0 +1,101 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2017 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using ILOG.CPLEX;
+using ILOG.OPL;
+
+namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms.CPLEX {
+  [Item("FY-Linearization CPLEX (GQAP)", "")]
+  [StorableClass]
+  [Creatable(CreatableAttribute.Categories.Algorithms)]
+  public sealed class GQAP_FY : CplexSolver {
+    
+    [StorableConstructor]
+    private GQAP_FY(bool deserializing) : base(deserializing) { }
+    private GQAP_FY(GQAP_FY original, Cloner cloner)
+    : base(original, cloner) {
+    }
+    public GQAP_FY() {
+
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new GQAP_FY(this, cloner);
+    }
+
+    protected override OplModel GetModel(OplFactory factory, OplSettings settings, Cplex cplex) {
+      using (var modelSource = factory.CreateOplModelSourceFromString(model, "gqap_fy"))
+      using (var def = factory.CreateOplModelDefinition(modelSource, settings))
+        return factory.CreateOplModel(def, cplex);
+    }
+
+    private const string model = @"/*********************************************
+ * OPL 12.7.0.0 Model
+ * Author: Andreas Beham
+ * Creation Date: 31.10.2017 at 14:30:01
+ *********************************************/
+
+int EQUIPMENTS = ...;
+int LOCATIONS = ...;
+float TC = ...;
+
+range N = 1..EQUIPMENTS;
+range M = 1..LOCATIONS;
+
+int weights[N][N] = ...;
+int distances[M][M] = ...;
+int install[N][M] = ...;
+int demands[N] = ...;
+int capacities[M] = ...;
+
+dvar int+ x[N][M] in 0..1;
+dvar float+ z[N][M][N][M] in 0..1;
+
+dexpr float installCosts = sum(i in N, k in M) x[i][k] * install[i][k];
+dexpr float flowCosts = TC * sum(i in 1..EQUIPMENTS-1, k in M, j in N, h in M: j > i)
+  (weights[i][j] * distances[k][h] + weights[j][i] * distances[h][k]) * z[i][k][j][h];
+
+minimize installCosts + flowCosts;
+  
+subject to {
+
+forall (i in N)
+  AllAssigned:
+  sum(k in M) x[i][k] == 1;
+
+forall (k in M)
+  Capacity:
+  sum(i in N) x[i][k] * demands[i] <= capacities[k];
+
+forall (i in 1..EQUIPMENTS-1, k in M, j in N: j > i)
+  sum(h in M) z[i][k][j][h] == x[i][k];
+
+forall (i in 1..EQUIPMENTS-1, j in N, h in M: j > i)
+  sum(k in M) z[i][k][j][h] == x[j][h];
+ 
+}
+
+";
+  }
+}
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/CPLEX/GQAP-KB.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/CPLEX/GQAP-KB.cs	(revision 15574)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/CPLEX/GQAP-KB.cs	(revision 15574)
@@ -0,0 +1,99 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2017 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using ILOG.CPLEX;
+using ILOG.OPL;
+
+namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms.CPLEX {
+  [Item("KB-Linearization CPLEX (GQAP)", "")]
+  [StorableClass]
+  [Creatable(CreatableAttribute.Categories.Algorithms)]
+  public sealed class GQAP_KB : CplexSolver {
+    
+    [StorableConstructor]
+    private GQAP_KB(bool deserializing) : base(deserializing) { }
+    private GQAP_KB(GQAP_KB original, Cloner cloner)
+    : base(original, cloner) {
+    }
+    public GQAP_KB() {
+
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new GQAP_KB(this, cloner);
+    }
+
+    protected override OplModel GetModel(OplFactory factory, OplSettings settings, Cplex cplex) {
+      using (var modelSource = factory.CreateOplModelSourceFromString(model, "gqap_kb"))
+      using (var def = factory.CreateOplModelDefinition(modelSource, settings))
+        return factory.CreateOplModel(def, cplex);
+    }
+
+    private const string model = @"/*********************************************
+ * OPL 12.7.0.0 Model
+ * Author: Andreas Beham
+ * Creation Date: 31.10.2017 at 14:30:01
+ *********************************************/
+
+int EQUIPMENTS = ...;
+int LOCATIONS = ...;
+float TC = ...;
+
+range N = 1..EQUIPMENTS;
+range M = 1..LOCATIONS;
+
+float weights[N][N] = ...;
+float distances[M][M] = ...;
+float install[N][M] = ...;
+float demands[N] = ...;
+float capacities[M] = ...;
+
+float v[i in N][k in M] = sum(j in N, h in M) (weights[i][j] * distances[k][h]);
+
+dvar int+ x[N][M] in 0..1;
+dvar float+ y[N][M];
+
+dexpr float installCosts = sum(i in N, k in M) x[i][k] * install[i][k];
+dexpr float flowCosts = TC * sum(i in N, k in M) y[i][k];
+
+minimize installCosts + flowCosts;
+  
+subject to {
+
+forall (i in N)
+  AllAssigned:
+  sum(k in M) x[i][k] == 1;
+
+forall (k in M)
+  Capacity:
+  sum(i in N) x[i][k] * demands[i] <= capacities[k];
+
+forall (i in N, k in M)
+  v[i][k] * ( x[i][k] - 1 ) + sum(j in N, h in M) (x[j][h] * weights[i][j] * distances[k][h]) <= y[i][k];
+
+}
+
+";
+  }
+}
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/CPLEX/GQAPDataSource.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/CPLEX/GQAPDataSource.cs	(revision 15574)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/CPLEX/GQAPDataSource.cs	(revision 15574)
@@ -0,0 +1,78 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2017 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.Data;
+using ILOG.OPL;
+
+namespace HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms.CPLEX {
+  public class GQAPDataSource : CustomOplDataSource {
+    protected GQAPInstance Instance { get; set; }
+
+    public GQAPDataSource(OplFactory factory, GQAPInstance instance)
+      : base(factory) {
+      Instance = instance;
+    }
+
+    public override void CustomRead() {
+      NewElement("EQUIPMENTS", () => Add(Instance.Demands.Length));
+      NewElement("LOCATIONS", () => Add(Instance.Capacities.Length));
+      NewElement("TC", () => Add(Instance.TransportationCosts));
+      NewElement("weights", () => Add(Instance.Weights));
+      NewElement("distances", () => Add(Instance.Distances));
+      NewElement("install", () => Add(Instance.InstallationCosts));
+      NewElement("demands", () => Add(Instance.Demands));
+      NewElement("capacities", () => Add(Instance.Capacities));
+    }
+
+    protected void NewElement(string name, Action add) {
+      DataHandler.StartElement(name);
+      add();
+      DataHandler.EndElement();
+    }
+    protected void Add(int value) {
+      DataHandler.AddIntItem(value);
+    }
+    protected void Add(double value) {
+      DataHandler.AddNumItem(value);
+    }
+
+    protected void Add(DoubleArray values) {
+      DataHandler.StartArray();
+      for (var i = 0; i < values.Length; i++) {
+        Add(values[i]);
+      }
+      DataHandler.EndArray();
+    }
+
+    protected void Add(DoubleMatrix values) {
+      DataHandler.StartArray();
+      for (var i = 0; i < values.Rows; i++) {
+        DataHandler.StartArray();
+        for (var j = 0; j < values.Columns; j++) {
+          Add(values[i, j]);
+        }
+        DataHandler.EndArray();
+      }
+      DataHandler.EndArray();
+    }
+  }
+}
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/Evolutionary/EvolutionStrategy.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/Evolutionary/EvolutionStrategy.cs	(revision 15573)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/Evolutionary/EvolutionStrategy.cs	(revision 15574)
@@ -145,5 +145,5 @@
       Results.Add(new Result("BestSolution", Context.BestSolution));
 
-      Context.RunOperator(Analyzer, Context.Scope, cancellationToken);
+      Context.RunOperator(Analyzer, cancellationToken);
     }
 
@@ -209,5 +209,5 @@
 
         try {
-          Context.RunOperator(Analyzer, Context.Scope, cancellationToken);
+          Context.RunOperator(Analyzer, cancellationToken);
         } catch (OperationCanceledException) { }
 
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/Evolutionary/OSGA.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/Evolutionary/OSGA.cs	(revision 15573)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/Evolutionary/OSGA.cs	(revision 15574)
@@ -118,5 +118,5 @@
       Results.Add(new Result("BestSolution", Context.BestSolution));
 
-      Context.RunOperator(Analyzer, Context.Scope, cancellationToken);
+      Context.RunOperator(Analyzer, cancellationToken);
     }
 
@@ -195,5 +195,5 @@
 
         try {
-          Context.RunOperator(Analyzer, Context.Scope, cancellationToken);
+          Context.RunOperator(Analyzer, cancellationToken);
         } catch (OperationCanceledException) { }
 
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/GRASP/GRASP.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/GRASP/GRASP.cs	(revision 15573)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/GRASP/GRASP.cs	(revision 15574)
@@ -162,5 +162,5 @@
       Results.Add(new Result("BestSolution", typeof(GQAPSolution)));
 
-      Context.RunOperator(Analyzer, Context.Scope, cancellationToken);
+      Context.RunOperator(Analyzer, cancellationToken);
     }
 
@@ -246,5 +246,5 @@
 
         try {
-          Context.RunOperator(Analyzer, Context.Scope, cancellationToken);
+          Context.RunOperator(Analyzer, cancellationToken);
         } catch (OperationCanceledException) { }
 
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms-3.3.csproj
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms-3.3.csproj	(revision 15573)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms-3.3.csproj	(revision 15574)
@@ -93,4 +93,14 @@
       <Private>False</Private>
     </Reference>
+    <Reference Include="localsolvernet, Version=7.5.0.0, Culture=neutral, processorArchitecture=AMD64">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\localsolvernet.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="oplall, Version=12.7.0.0, Culture=neutral, PublicKeyToken=7906592bc7cc7340, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\trunk\sources\bin\oplall.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
@@ -99,4 +109,9 @@
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="CPLEX\CplexSolver.cs" />
+    <Compile Include="CPLEX\GQAP-FY.cs" />
+    <Compile Include="CPLEX\GQAP-KB.cs" />
+    <Compile Include="CPLEX\GQAPDataSource.cs" />
+    <Compile Include="CPLEX\CplexContext.cs" />
     <Compile Include="Evolutionary\ESContext.cs" />
     <Compile Include="Evolutionary\ESGQAPSolution.cs" />
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/Infrastructure/Algorithms/ContextAlgorithm.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/Infrastructure/Algorithms/ContextAlgorithm.cs	(revision 15573)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/Infrastructure/Algorithms/ContextAlgorithm.cs	(revision 15574)
@@ -48,5 +48,5 @@
     [Storable]
     private TContext context;
-    protected TContext Context {
+    public TContext Context {
       get { return context; }
     }
@@ -132,4 +132,5 @@
       context.Iterations = 0;
       context.EvaluatedSolutions = 0;
+      context.BestQuality = double.NaN;
     }
 
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/Infrastructure/Contexts/BasicContext.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/Infrastructure/Contexts/BasicContext.cs	(revision 15573)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/Infrastructure/Contexts/BasicContext.cs	(revision 15574)
@@ -114,5 +114,5 @@
     }
 
-    public void RunOperator(IOperator op, IScope scope, CancellationToken cancellationToken) {
+    public void RunOperator(IOperator op, CancellationToken cancellationToken) {
       var stack = new Stack<IOperation>();
       stack.Push(((IExecutionContext)this).CreateChildOperation(op, scope));
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/LAHC/LAHC.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/LAHC/LAHC.cs	(revision 15573)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/LAHC/LAHC.cs	(revision 15574)
@@ -101,5 +101,7 @@
       Results.Add(new Result("BestSolution", Context.BestSolution));
 
-      Context.RunOperator(Analyzer, Context.Scope, token);
+      try {
+        Context.RunOperator(Analyzer, token);
+      } catch (OperationCanceledException) { }
     }
 
@@ -157,5 +159,5 @@
 
         try {
-          Context.RunOperator(Analyzer, Context.Scope, cancellationToken);
+          Context.RunOperator(Analyzer, cancellationToken);
         } catch (OperationCanceledException) { }
 
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/LAHC/pLAHC.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/LAHC/pLAHC.cs	(revision 15573)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/LAHC/pLAHC.cs	(revision 15574)
@@ -112,4 +112,8 @@
       Results.Add(new Result("EvaluatedSolutions", new IntValue(Context.EvaluatedSolutions)));
       Results.Add(new Result("CurrentMemorySize", new IntValue(0)));
+
+      try {
+        Context.RunOperator(Analyzer, token);
+      } catch (OperationCanceledException) { }
     }
 
@@ -189,5 +193,5 @@
 
           try {
-            Context.RunOperator(Analyzer, Context.Scope, cancellationToken);
+            Context.RunOperator(Analyzer, cancellationToken);
           } catch (OperationCanceledException) { }
 
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/LocalSearch/IteratedLS.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/LocalSearch/IteratedLS.cs	(revision 15573)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/LocalSearch/IteratedLS.cs	(revision 15574)
@@ -101,5 +101,7 @@
       Results.Add(new Result("BestSolution", Context.BestSolution));
 
-      Context.RunOperator(Analyzer, Context.Scope, token);
+      try {
+        Context.RunOperator(Analyzer, token);
+      } catch (OperationCanceledException) { }
     }
 
@@ -141,5 +143,5 @@
 
         try {
-          Context.RunOperator(Analyzer, Context.Scope, cancellationToken);
+          Context.RunOperator(Analyzer, cancellationToken);
         } catch (OperationCanceledException) { }
 
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/LocalSearch/MultistartLS.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/LocalSearch/MultistartLS.cs	(revision 15573)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/LocalSearch/MultistartLS.cs	(revision 15574)
@@ -108,5 +108,5 @@
 
         try {
-          Context.RunOperator(Analyzer, Context.Scope, cancellationToken);
+          Context.RunOperator(Analyzer, cancellationToken);
         } catch (OperationCanceledException) { }
 
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/Plugin.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/Plugin.cs	(revision 15573)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/Plugin.cs	(revision 15574)
@@ -40,4 +40,6 @@
   [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
   [PluginDependency("HeuristicLab.Random", "3.3")]
+  [PluginDependency("CPLEX Transport", "12.7.0")]
+  [PluginDependency("LocalSolver 7.5 Transport", "7.5")]
   public class Plugin : PluginBase {
   }
