Index: /trunk/sources/HeuristicLab 3.3.sln
===================================================================
--- /trunk/sources/HeuristicLab 3.3.sln	(revision 12754)
+++ /trunk/sources/HeuristicLab 3.3.sln	(revision 12755)
@@ -421,5 +421,5 @@
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.ExternalEvaluation.Views-3.4", "HeuristicLab.Problems.ExternalEvaluation.Views\3.4\HeuristicLab.Problems.ExternalEvaluation.Views-3.4.csproj", "{F7E5B975-FDF2-45A4-91CB-FF6D3C33D65E}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.NK", "HeuristicLab.Problems.NK\HeuristicLab.Problems.NK.csproj", "{C3AD50E6-E717-490E-ABC7-32EF7FB03C97}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.NK", "HeuristicLab.Problems.NK\3.3\HeuristicLab.Problems.NK.csproj", "{C3AD50E6-E717-490E-ABC7-32EF7FB03C97}"
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OutdatedPlugins", "OutdatedPlugins", "{D1B1DE45-F9C7-4FBF-B73C-E759BC4223D5}"
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/BinaryVectorComparers/AverageBitBinaryVectorComparer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/BinaryVectorComparers/AverageBitBinaryVectorComparer.cs	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/BinaryVectorComparers/AverageBitBinaryVectorComparer.cs	(revision 12755)
@@ -0,0 +1,49 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.BinaryVectorEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.NK {
+  [Item("Average Bit Binary Vector Comparer", "Compares two binary vectors by their average positive bit location")]
+  [StorableClass]
+  public sealed class AverageBitBinaryVectorComparer : Item, IBinaryVectorComparer {
+    [StorableConstructor]
+    private AverageBitBinaryVectorComparer(bool deserializing) : base(deserializing) { }
+    private AverageBitBinaryVectorComparer(AverageBitBinaryVectorComparer original, Cloner cloner)
+      : base(original, cloner) { }
+    public AverageBitBinaryVectorComparer() { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new AverageBitBinaryVectorComparer(this, cloner);
+    }
+
+    private static double AverageBit(BinaryVector x) {
+      return x.Select((b, i) => new { b, i }).Where(v => v.b).Average(v => v.i);
+    }
+
+    public int Compare(BinaryVector x, BinaryVector y) {
+      return (AverageBit(x) - AverageBit(y)).CompareTo(0);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/BinaryVectorComparers/IBinaryVectorComparer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/BinaryVectorComparers/IBinaryVectorComparer.cs	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/BinaryVectorComparers/IBinaryVectorComparer.cs	(revision 12755)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Collections.Generic;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.BinaryVectorEncoding;
+
+namespace HeuristicLab.Problems.NK {
+  public interface IBinaryVectorComparer : IItem, IComparer<BinaryVector> { }
+}
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/BinaryVectorComparers/LexicographicBinaryVectorComparer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/BinaryVectorComparers/LexicographicBinaryVectorComparer.cs	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/BinaryVectorComparers/LexicographicBinaryVectorComparer.cs	(revision 12755)
@@ -0,0 +1,55 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.BinaryVectorEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.NK {
+  [Item("Lexicographic Binary Vector Comparer", "Compares two binary vectors lexicographically")]
+  [StorableClass]
+  public sealed class LexicographicBinaryVectorComparer : Item, IBinaryVectorComparer {
+    [StorableConstructor]
+    private LexicographicBinaryVectorComparer(bool deserializing) : base(deserializing) { }
+    private LexicographicBinaryVectorComparer(LexicographicBinaryVectorComparer original, Cloner cloner)
+      : base(original, cloner) { }
+    public LexicographicBinaryVectorComparer() { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new LexicographicBinaryVectorComparer(this, cloner);
+    }
+
+    public int Compare(BinaryVector x, BinaryVector y) {
+      for (int i = 0; i < Math.Min(x.Length, y.Length); i++) {
+        if (!x[i] && y[i])
+          return -1;
+        if (x[i] && !y[i])
+          return 1;
+      }
+      if (x.Length > y.Length)
+        return 1;
+      if (x.Length < y.Length)
+        return -1;
+      return 0;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/BinaryVectorComparers/MedianBitBinaryVectorComparer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/BinaryVectorComparers/MedianBitBinaryVectorComparer.cs	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/BinaryVectorComparers/MedianBitBinaryVectorComparer.cs	(revision 12755)
@@ -0,0 +1,53 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.BinaryVectorEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.NK {
+  [Item("Median Bit Binary Vector Comparer", "Compares two binary vectors by the median positive bit location")]
+  [StorableClass]
+  public sealed class MedianBitBinaryVectorComparer : Item, IBinaryVectorComparer {
+    [StorableConstructor]
+    private MedianBitBinaryVectorComparer(bool deserializing) : base(deserializing) { }
+    private MedianBitBinaryVectorComparer(MedianBitBinaryVectorComparer original, Cloner cloner)
+      : base(original, cloner) { }
+    public MedianBitBinaryVectorComparer() { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new MedianBitBinaryVectorComparer(this, cloner);
+    }
+
+    private static int MedianBit(BinaryVector x) {
+      var activeIndices = x.Select((b, i) => new { b, i }).Where(v => v.b).ToList();
+      if (activeIndices.Count > 0)
+        return activeIndices[activeIndices.Count / 2].i;
+      else
+        return 0;
+    }
+
+    public int Compare(BinaryVector x, BinaryVector y) {
+      return MedianBit(x) - MedianBit(y);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK.csproj	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/HeuristicLab.Problems.NK.csproj	(revision 12755)
@@ -0,0 +1,239 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{C3AD50E6-E717-490E-ABC7-32EF7FB03C97}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.NK</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.NK-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Release\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Release\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="BinaryVectorComparers\IBinaryVectorComparer.cs" />
+    <Compile Include="BinaryVectorComparers\LexicographicBinaryVectorComparer.cs" />
+    <Compile Include="BinaryVectorComparers\AverageBitBinaryVectorComparer.cs" />
+    <Compile Include="BinaryVectorComparers\MedianBitBinaryVectorComparer.cs" />
+    <Compile Include="InteractionInitializers\LimitedRandomInteractionsInitializer.cs" />
+    <Compile Include="InteractionInitializers\IncreasingBlockSizeInteractionsInitializer.cs" />
+    <Compile Include="InteractionInitializers\SortedRandomInteractionsInitializer.cs" />
+    <Compile Include="InteractionInitializers\IInteractionInitializer.cs" />
+    <Compile Include="INKMoveEvaluator.cs" />
+    <Compile Include="NKLandscape.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="WeightInitializers\ExponentialDistributionWeightsInitializer.cs" />
+    <Compile Include="WeightInitializers\ReverseLinearWeightsInitializer.cs" />
+    <Compile Include="WeightInitializers\LinearWeightsInitializer.cs" />
+    <Compile Include="WeightInitializers\ReverseExponentialWeightsInitializer.cs" />
+    <Compile Include="WeightInitializers\ExponentialWeightsInitializer.cs" />
+    <Compile Include="WeightInitializers\IWeightsInitializer.cs" />
+    <Compile Include="NKBitFlipMoveEvaluator.cs" />
+    <Compile Include="NKMoveEvaluator.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="InteractionInitializers\RandomInteractionsInitializer.cs" />
+    <Compile Include="WeightInitializers\EqualWeightsInitializer.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="HeuristicLab.snk" />
+    <None Include="Plugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
+      <Project>{958b43bc-cc5c-4fa2-8628-2b3b01d890b6}</Project>
+      <Name>HeuristicLab.Collections-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
+      <Project>{a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c}</Project>
+      <Name>HeuristicLab.Common-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
+      <Project>{c36bd924-a541-4a00-afa8-41701378ddc5}</Project>
+      <Name>HeuristicLab.Core-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
+      <Project>{bbab9df5-5ef3-4ba8-ade9-b36e82114937}</Project>
+      <Name>HeuristicLab.Data-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Encodings.BinaryVectorEncoding\3.3\HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj">
+      <Project>{66d249c3-a01d-42a8-82a2-919bc8ec3d83}</Project>
+      <Name>HeuristicLab.Encodings.BinaryVectorEncoding-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Operators\3.3\HeuristicLab.Operators-3.3.csproj">
+      <Project>{23da7ff4-d5b8-41b6-aa96-f0561d24f3ee}</Project>
+      <Name>HeuristicLab.Operators-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
+      <Project>{14ab8d24-25bc-400c-a846-4627aa945192}</Project>
+      <Name>HeuristicLab.Optimization-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Parameters\3.3\HeuristicLab.Parameters-3.3.csproj">
+      <Project>{56f9106a-079f-4c61-92f6-86a84c2d84b7}</Project>
+      <Name>HeuristicLab.Parameters-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
+      <Project>{102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b}</Project>
+      <Name>HeuristicLab.Persistence-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
+      <Project>{94186a6a-5176-4402-ae83-886557b53cca}</Project>
+      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.Binary\3.3\HeuristicLab.Problems.Binary-3.3.csproj">
+      <Project>{fc627be5-0f93-47d8-bd2e-530ea2b8aa5f}</Project>
+      <Name>HeuristicLab.Problems.Binary-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Random\3.3\HeuristicLab.Random-3.3.csproj">
+      <Project>{f4539fb6-4708-40c9-be64-0a1390aea197}</Project>
+      <Name>HeuristicLab.Random-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">
+      set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+      set ProjectDir=$(ProjectDir)
+      set SolutionDir=$(SolutionDir)
+      set Outdir=$(Outdir)
+
+      call PreBuildEvent.cmd
+    </PreBuildEvent>
+    <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
+      export ProjectDir=$(ProjectDir)
+      export SolutionDir=$(SolutionDir)
+
+      $SolutionDir/PreBuildEvent.sh
+    </PreBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/INKMoveEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/INKMoveEvaluator.cs	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/INKMoveEvaluator.cs	(revision 12755)
@@ -0,0 +1,26 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Optimization;
+
+namespace HeuristicLab.Problems.NK {
+  public interface INKMoveEvaluator : ISingleObjectiveMoveEvaluator, IMoveOperator { }
+}
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/InteractionInitializers/IInteractionInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/InteractionInitializers/IInteractionInitializer.cs	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/InteractionInitializers/IInteractionInitializer.cs	(revision 12755)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Problems.NK {
+  public interface IInteractionInitializer : IParameterizedItem {
+    BoolMatrix InitializeInterations(int length, int nComponents, int nInteractions, IRandom random);
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/InteractionInitializers/IncreasingBlockSizeInteractionsInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/InteractionInitializers/IncreasingBlockSizeInteractionsInitializer.cs	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/InteractionInitializers/IncreasingBlockSizeInteractionsInitializer.cs	(revision 12755)
@@ -0,0 +1,74 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.BinaryVectorEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.NK {
+  [Item("IncreasingBlockSizeInteractionsInitializer", "Randomly assignes interactions across all bits but makes sure that different numbers of ineractions are applied to different bits.")]
+  [StorableClass]
+  public sealed class IncreasingBlockSizeInteractionsInitializer : ParameterizedNamedItem, IInteractionInitializer {
+    [StorableConstructor]
+    private IncreasingBlockSizeInteractionsInitializer(bool serializing) : base(serializing) { }
+    private IncreasingBlockSizeInteractionsInitializer(IncreasingBlockSizeInteractionsInitializer original, Cloner cloner) : base(original, cloner) { }
+    public IncreasingBlockSizeInteractionsInitializer() { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new IncreasingBlockSizeInteractionsInitializer(this, cloner);
+    }
+
+    public BoolMatrix InitializeInterations(int length, int nComponents, int nInteractions, IRandom random) {
+      Dictionary<int, int> bitInteractionCounts = new Dictionary<int, int>();
+      for (int i = 0; i < length; i++) {
+        int count = nInteractions * 2 * i / length;
+        if (count > 0)
+          bitInteractionCounts[i] = count;
+      }
+      List<BinaryVector> components = new List<BinaryVector>();
+      while (bitInteractionCounts.Count > 0) {
+        BinaryVector component = new BinaryVector(length);
+        for (int i = 0; i < nInteractions; i++) {
+          while (bitInteractionCounts.Count > 0) {
+            int bit = bitInteractionCounts.ElementAt(random.Next(bitInteractionCounts.Count)).Key;
+            if (bitInteractionCounts[bit]-- <= 0)
+              bitInteractionCounts.Remove(bit);
+            if (!component[bit]) {
+              component[bit] = true;
+              break;
+            }
+          }
+        }
+        components.Add(component);
+      }
+      BoolMatrix m = new BoolMatrix(length, components.Count);
+      foreach (var c in components.Select((v, j) => new { v, j })) {
+        for (int i = 0; i < c.v.Length; i++) {
+          m[i, c.j] = c.v[i];
+        }
+      }
+      return m;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/InteractionInitializers/LimitedRandomInteractionsInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/InteractionInitializers/LimitedRandomInteractionsInitializer.cs	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/InteractionInitializers/LimitedRandomInteractionsInitializer.cs	(revision 12755)
@@ -0,0 +1,97 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.NK {
+  [Item("LimitedRandomInteractionsInitializer", "Randomly assignes interactions across bits in the vicinity of each other respecting the maximum distances if possible.")]
+  [StorableClass]
+  public sealed class LimitedRandomInteractionsInitializer : ParameterizedNamedItem, IInteractionInitializer {
+    private class Bounds {
+      public readonly int Min;
+      public readonly int Max;
+      public Bounds(int min, int max) {
+        Min = Math.Min(min, max);
+        Max = Math.Max(min, max);
+      }
+      public int Bounded(int n) {
+        return Math.Max(Min, Math.Min(Max, n));
+      }
+    }
+
+    public IValueParameter<IntValue> MaximumDistanceParameter {
+      get { return (IValueParameter<IntValue>)Parameters["MaximumDistance"]; }
+    }
+    public IValueParameter<DoubleValue> MaximumDistanceRatioParameter {
+      get { return (IValueParameter<DoubleValue>)Parameters["MaximumDistanceRatio"]; }
+    }
+
+    [StorableConstructor]
+    private LimitedRandomInteractionsInitializer(bool serializing) : base(serializing) { }
+    private LimitedRandomInteractionsInitializer(LimitedRandomInteractionsInitializer original, Cloner cloner) : base(original, cloner) { }
+    public LimitedRandomInteractionsInitializer() {
+      Parameters.Add(new ValueParameter<IntValue>("MaximumDistance", "Maximum distance of interactions in bits or 0 for unlimited"));
+      Parameters.Add(new ValueParameter<DoubleValue>("MaximumDistanceRatio", "Maximum distance of interactions as ratio of the total length or 0 for unlimited"));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new LimitedRandomInteractionsInitializer(this, cloner);
+    }
+
+    private int MaximumDistance(int length, int nInteractions) {
+      int maxBitDist = MaximumDistanceParameter.Value.Value;
+      double maxDistRatio = MaximumDistanceRatioParameter.Value.Value;
+      maxBitDist = Math.Min(
+        maxBitDist == 0 ? length : maxBitDist,
+        maxDistRatio.IsAlmost(0.0) ? length : (int)Math.Round(maxDistRatio * length));
+      if (maxBitDist * 2 < nInteractions)
+        maxBitDist = (int)Math.Ceiling(0.5 * nInteractions);
+      return maxBitDist;
+    }
+
+    public BoolMatrix InitializeInterations(int length, int nComponents, int nInteractions, IRandom random) {
+      BoolMatrix m = new BoolMatrix(length, nComponents);
+      int maxBitDistance = MaximumDistance(length, nInteractions);
+      var minBounds = new Bounds(0, length - nInteractions);
+      var maxBounds = new Bounds(nInteractions, length - 1);
+      for (int c = 0; c < m.Columns; c++) {
+        int min = minBounds.Bounded(c - maxBitDistance);
+        int max = maxBounds.Bounded(c + maxBitDistance);
+        var indices = Enumerable.Range(min, max - min).ToList();
+        indices.Remove(c);
+        m[c, c] = true;
+        while (indices.Count > nInteractions) {
+          indices.RemoveAt(random.Next(indices.Count));
+        }
+        foreach (var i in indices) {
+          m[i, c] = true;
+        }
+      }
+      return m;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/InteractionInitializers/RandomInteractionsInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/InteractionInitializers/RandomInteractionsInitializer.cs	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/InteractionInitializers/RandomInteractionsInitializer.cs	(revision 12755)
@@ -0,0 +1,58 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.NK {
+  [Item("RandomInteractionsInitializer", "Randomly assignes interactions across all bits")]
+  [StorableClass]
+  public sealed class RandomInteractionsInitializer : ParameterizedNamedItem, IInteractionInitializer {
+    [StorableConstructor]
+    private RandomInteractionsInitializer(bool serializing) : base(serializing) { }
+    private RandomInteractionsInitializer(RandomInteractionsInitializer original, Cloner cloner) : base(original, cloner) { }
+    public RandomInteractionsInitializer() { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new RandomInteractionsInitializer(this, cloner);
+    }
+
+    public BoolMatrix InitializeInterations(int length, int nComponents, int nInteractions, IRandom random) {
+      BoolMatrix m = new BoolMatrix(length, nComponents);
+      for (int c = 0; c < m.Columns; c++) {
+        var indices = Enumerable.Range(0, length).ToList();
+        if (indices.Count > c) {
+          indices.RemoveAt(c);
+          m[c, c] = true;
+        }
+        while (indices.Count > nInteractions) {
+          indices.RemoveAt(random.Next(indices.Count));
+        }
+        foreach (var i in indices) {
+          m[i, c] = true;
+        }
+      }
+      return m;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/InteractionInitializers/SortedRandomInteractionsInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/InteractionInitializers/SortedRandomInteractionsInitializer.cs	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/InteractionInitializers/SortedRandomInteractionsInitializer.cs	(revision 12755)
@@ -0,0 +1,84 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.BinaryVectorEncoding;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.NK {
+  [Item("SortedRandomInteractionsInitializer", "Randomly assigns interactions across all bits and sorts components according to bit affinity.")]
+  [StorableClass]
+  public sealed class SortedRandomInteractionsInitializer : ParameterizedNamedItem, IInteractionInitializer {
+    public IConstrainedValueParameter<IBinaryVectorComparer> ComparerParameter {
+      get { return (IConstrainedValueParameter<IBinaryVectorComparer>)Parameters["Comparer"]; }
+    }
+    public IBinaryVectorComparer Comparer {
+      get { return ComparerParameter.Value; }
+    }
+
+    [StorableConstructor]
+    private SortedRandomInteractionsInitializer(bool serializing) : base(serializing) { }
+    private SortedRandomInteractionsInitializer(SortedRandomInteractionsInitializer original, Cloner cloner) : base(original, cloner) { }
+    public SortedRandomInteractionsInitializer() {
+      Parameters.Add(new ConstrainedValueParameter<IBinaryVectorComparer>("Comparer", "Comparison for sorting of component functions."));
+      InitializeComparers();
+    }
+
+    private void InitializeComparers() {
+      foreach (var comparer in ApplicationManager.Manager.GetInstances<IBinaryVectorComparer>())
+        ComparerParameter.ValidValues.Add(comparer);
+      ComparerParameter.Value = ComparerParameter.ValidValues.First(v => v is AverageBitBinaryVectorComparer);
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SortedRandomInteractionsInitializer(this, cloner);
+    }
+
+    public BoolMatrix InitializeInterations(int length, int nComponents, int nInteractions, IRandom random) {
+      BinaryVector[] components = Enumerable.Range(0, nComponents).Select(i => new BinaryVector(length)).ToArray();
+      for (int c = 0; c < components.Length; c++) {
+        var indices = Enumerable.Range(0, length).ToList();
+        if (indices.Count > c) {
+          indices.RemoveAt(c);
+          components[c][c] = true;
+        }
+        while (indices.Count > nInteractions) {
+          indices.RemoveAt(random.Next(indices.Count));
+        }
+        foreach (var i in indices) {
+          components[c][i] = true;
+        }
+      }
+      BoolMatrix m = new BoolMatrix(length, nComponents);
+      foreach (var c in components.OrderBy(v => v, Comparer).Select((v, j) => new { v, j })) {
+        for (int i = 0; i < c.v.Length; i++) {
+          m[i, c.j] = c.v[i];
+        }
+      }
+      return m;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/NKBitFlipMoveEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/NKBitFlipMoveEvaluator.cs	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/NKBitFlipMoveEvaluator.cs	(revision 12755)
@@ -0,0 +1,92 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Collections.Generic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.BinaryVectorEncoding;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.NK {
+
+  [Item("NK BitFlip Move Evaluator", "Evaluates a single bit flip on an NK landscape.")]
+  [StorableClass]
+  public class NKBitFlipMoveEvaluator : NKMoveEvaluator, IOneBitflipMoveOperator {
+    public ILookupParameter<OneBitflipMove> OneBitflipMoveParameter {
+      get { return (ILookupParameter<OneBitflipMove>)Parameters["OneBitflipMove"]; }
+    }
+    public ILookupParameter<BinaryVector> MovedBinaryVectorParameter {
+      get { return (ILookupParameter<BinaryVector>)Parameters["MovedBinaryVector"]; }
+    }
+
+    [StorableConstructor]
+    protected NKBitFlipMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected NKBitFlipMoveEvaluator(NKBitFlipMoveEvaluator original, Cloner cloner)
+      : base(original, cloner) { }
+    public NKBitFlipMoveEvaluator()
+      : base() {
+      Parameters.Add(new LookupParameter<OneBitflipMove>("OneBitflipMove", "The move to evaluate."));
+      Parameters.Add(new LookupParameter<BinaryVector>("MovedBinaryVector", "The resulting binary vector after the move."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new NKBitFlipMoveEvaluator(this, cloner);
+    }
+
+    public override IOperation Apply() {
+      BinaryVector binaryVector = BinaryVectorParameter.ActualValue;
+      OneBitflipMove move = OneBitflipMoveParameter.ActualValue;
+      BoolMatrix interactions = GeneInteractionsParameter.ActualValue;
+      DoubleArray weights = WeightsParameter.ActualValue;
+      int seed = InteractionSeedParameter.ActualValue.Value;
+      double moveQuality = QualityParameter.ActualValue.Value;
+      int q = QParameter.ActualValue.Value;
+      double p = PParameter.ActualValue.Value;
+
+      List<int> affectedFitnessComponents = new List<int>();
+      for (int c = 0; c < interactions.Columns; c++)
+        if (interactions[move.Index, c])
+          affectedFitnessComponents.Add(c);
+      BinaryVector moved = new BinaryVector(binaryVector);
+      MovedBinaryVectorParameter.ActualValue = moved;
+      moved[move.Index] = !moved[move.Index];
+      if (affectedFitnessComponents.Count * 2 > interactions.Columns) {
+        double[] f_i;
+        moveQuality = NKLandscape.Evaluate(moved, interactions, weights, seed, out f_i, q, p);
+      } else {
+        long x = NKLandscape.Encode(binaryVector);
+        long y = NKLandscape.Encode(moved);
+        long[] g = NKLandscape.Encode(interactions);
+        double[] w = NKLandscape.Normalize(weights);
+        foreach (var c in affectedFitnessComponents) {
+          moveQuality -= w[c%w.Length]*NKLandscape.F_i(x, c, g[c], seed, q, p);
+          moveQuality += w[c%w.Length]*NKLandscape.F_i(y, c, g[c], seed, q, p);
+        }
+      }
+
+      if (MoveQualityParameter.ActualValue == null) MoveQualityParameter.ActualValue = new DoubleValue(moveQuality);
+      else MoveQualityParameter.ActualValue.Value = moveQuality;
+      return base.Apply();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/NKLandscape.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/NKLandscape.cs	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/NKLandscape.cs	(revision 12755)
@@ -0,0 +1,346 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Linq;
+using System.Security.Cryptography;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.BinaryVectorEncoding;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Problems.Binary;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.Problems.NK {
+  [Item("NK Landscape", "Represents an NK landscape optimization problem.")]
+  [Creatable(CreatableAttribute.Categories.CombinatorialProblems, Priority = 215)]
+  [StorableClass]
+  public sealed class NKLandscape : BinaryProblem {
+    public override bool Maximization {
+      get { return false; }
+    }
+
+    #region Parameters
+    public IValueParameter<BoolMatrix> GeneInteractionsParameter {
+      get { return (IValueParameter<BoolMatrix>)Parameters["GeneInteractions"]; }
+    }
+    public IValueParameter<IntValue> SeedParameter {
+      get { return (IValueParameter<IntValue>)Parameters["ProblemSeed"]; }
+    }
+    public IValueParameter<IntValue> InteractionSeedParameter {
+      get { return (IValueParameter<IntValue>)Parameters["InteractionSeed"]; }
+    }
+    public IValueParameter<IntValue> NrOfInteractionsParameter {
+      get { return (IValueParameter<IntValue>)Parameters["NrOfInteractions"]; }
+    }
+    public IValueParameter<IntValue> NrOfFitnessComponentsParameter {
+      get { return (IValueParameter<IntValue>)Parameters["NrOfFitnessComponents"]; }
+    }
+    public IValueParameter<IntValue> QParameter {
+      get { return (IValueParameter<IntValue>)Parameters["Q"]; }
+    }
+    public IValueParameter<DoubleValue> PParameter {
+      get { return (IValueParameter<DoubleValue>)Parameters["P"]; }
+    }
+    public IValueParameter<DoubleArray> WeightsParameter {
+      get { return (IValueParameter<DoubleArray>)Parameters["Weights"]; }
+    }
+    public IConstrainedValueParameter<IInteractionInitializer> InteractionInitializerParameter {
+      get { return (IConstrainedValueParameter<IInteractionInitializer>)Parameters["InteractionInitializer"]; }
+    }
+    public IConstrainedValueParameter<IWeightsInitializer> WeightsInitializerParameter {
+      get { return (IConstrainedValueParameter<IWeightsInitializer>)Parameters["WeightsInitializer"]; }
+    }
+    #endregion
+
+    #region Properties
+    public IInteractionInitializer InteractionInitializer {
+      get { return InteractionInitializerParameter.Value; }
+    }
+    public BoolMatrix GeneInteractions {
+      get { return GeneInteractionsParameter.Value; }
+    }
+    public DoubleArray Weights {
+      get { return WeightsParameter.Value; }
+    }
+    public IntValue InteractionSeed {
+      get { return InteractionSeedParameter.Value; }
+    }
+    public IntValue NrOfFitnessComponents {
+      get { return NrOfFitnessComponentsParameter.Value; }
+    }
+    public IntValue NrOfInteractions {
+      get { return NrOfInteractionsParameter.Value; }
+    }
+    public IWeightsInitializer WeightsInitializer {
+      get { return WeightsInitializerParameter.Value; }
+    }
+    public int Q {
+      get { return QParameter.Value.Value; }
+    }
+    public double P {
+      get { return PParameter.Value.Value; }
+    }
+    public IntValue Seed {
+      get { return SeedParameter.Value; }
+    }
+    #endregion
+
+    [Storable]
+    private MersenneTwister random;
+
+    [ThreadStatic]
+    private static HashAlgorithm hashAlgorithm;
+
+    [ThreadStatic]
+    private static HashAlgorithm hashAlgorithmP;
+
+    private static HashAlgorithm HashAlgorithm {
+      get {
+        if (hashAlgorithm == null) {
+          hashAlgorithm = HashAlgorithm.Create("MD5");
+        }
+        return hashAlgorithm;
+      }
+    }
+
+    private static HashAlgorithm HashAlgorithmP {
+      get {
+        if (hashAlgorithmP == null) {
+          hashAlgorithmP = HashAlgorithm.Create("SHA1");
+        }
+        return hashAlgorithmP;
+      }
+    }
+
+    [StorableConstructor]
+    private NKLandscape(bool deserializing) : base(deserializing) { }
+    private NKLandscape(NKLandscape original, Cloner cloner)
+      : base(original, cloner) {
+      random = (MersenneTwister)original.random.Clone(cloner);
+      RegisterEventHandlers();
+    }
+    public NKLandscape()
+      : base() {
+      random = new MersenneTwister();
+
+      Parameters.Add(new ValueParameter<BoolMatrix>("GeneInteractions", "Every column gives the participating genes for each fitness component."));
+      Parameters.Add(new ValueParameter<IntValue>("ProblemSeed", "The seed used for the random number generator.", new IntValue(0)));
+      random.Reset(Seed.Value);
+
+      Parameters.Add(new ValueParameter<IntValue>("InteractionSeed", "The seed used for the hash function to generate interaction tables.", new IntValue(random.Next())));
+      Parameters.Add(new ValueParameter<IntValue>("NrOfFitnessComponents", "Number of fitness component functions. (nr of columns in the interaction column)", new IntValue(10)));
+      Parameters.Add(new ValueParameter<IntValue>("NrOfInteractions", "Number of genes interacting with each other. (nr of True values per column in the interaction matrix)", new IntValue(3)));
+      Parameters.Add(new ValueParameter<IntValue>("Q", "Number of allowed fitness values in the (virutal) random table, or zero.", new IntValue(0)));
+      Parameters.Add(new ValueParameter<DoubleValue>("P", "Probability of any entry in the (virtual) random table being zero.", new DoubleValue(0)));
+      Parameters.Add(new ValueParameter<DoubleArray>("Weights", "The weights for the component functions. If shorted, will be repeated.", new DoubleArray(new[] { 1.0 })));
+      Parameters.Add(new ConstrainedValueParameter<IInteractionInitializer>("InteractionInitializer", "Initialize interactions within the component functions."));
+      Parameters.Add(new ConstrainedValueParameter<IWeightsInitializer>("WeightsInitializer", "Operator to initialize the weights distribution."));
+
+      //allow just the standard NK[P,Q] formulations at the moment
+      WeightsParameter.Hidden = true;
+      InteractionInitializerParameter.Hidden = true;
+      WeightsInitializerParameter.Hidden = true;
+      EncodingParameter.Hidden = true;
+
+      InitializeInteractionInitializerParameter();
+      InitializeWeightsInitializerParameter();
+
+      InitializeOperators();
+      InitializeInteractions();
+      RegisterEventHandlers();
+    }
+
+    private void InitializeInteractionInitializerParameter() {
+      foreach (var initializer in ApplicationManager.Manager.GetInstances<IInteractionInitializer>())
+        InteractionInitializerParameter.ValidValues.Add(initializer);
+      InteractionInitializerParameter.Value = InteractionInitializerParameter.ValidValues.First(v => v is RandomInteractionsInitializer);
+    }
+
+    private void InitializeWeightsInitializerParameter() {
+      foreach (var initializer in ApplicationManager.Manager.GetInstances<IWeightsInitializer>())
+        WeightsInitializerParameter.ValidValues.Add(initializer);
+      WeightsInitializerParameter.Value = WeightsInitializerParameter.ValidValues.First(v => v is EqualWeightsInitializer);
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new NKLandscape(this, cloner);
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterEventHandlers();
+    }
+
+    private void RegisterEventHandlers() {
+      NrOfInteractionsParameter.ValueChanged += InteractionParameter_ValueChanged;
+      NrOfInteractionsParameter.Value.ValueChanged += InteractionParameter_ValueChanged;
+      NrOfFitnessComponentsParameter.ValueChanged += InteractionParameter_ValueChanged;
+      NrOfFitnessComponentsParameter.Value.ValueChanged += InteractionParameter_ValueChanged;
+      InteractionInitializerParameter.ValueChanged += InteractionParameter_ValueChanged;
+      WeightsInitializerParameter.ValueChanged += WeightsInitializerParameter_ValueChanged;
+      SeedParameter.ValueChanged += SeedParameter_ValueChanged;
+      SeedParameter.Value.ValueChanged += SeedParameter_ValueChanged;
+
+      RegisterInteractionInitializerParameterEvents();
+      RegisterWeightsParameterEvents();
+    }
+
+    private void RegisterWeightsParameterEvents() {
+      foreach (var vv in WeightsInitializerParameter.ValidValues) {
+        foreach (var p in vv.Parameters) {
+          if (p.ActualValue != null && p.ActualValue is IStringConvertibleValue) {
+            var v = (IStringConvertibleValue)p.ActualValue;
+            v.ValueChanged += WeightsInitializerParameter_ValueChanged;
+          }
+        }
+      }
+    }
+
+    private void RegisterInteractionInitializerParameterEvents() {
+      foreach (var vv in InteractionInitializerParameter.ValidValues) {
+        foreach (var p in vv.Parameters) {
+          if (p.ActualValue != null && p.ActualValue is IStringConvertibleValue) {
+            var v = (IStringConvertibleValue)p.ActualValue;
+            v.ValueChanged += InteractionParameter_ValueChanged;
+          } else if (p.ActualValue != null && p is IConstrainedValueParameter<IBinaryVectorComparer>) {
+            ((IConstrainedValueParameter<IBinaryVectorComparer>)p).ValueChanged +=
+              InteractionParameter_ValueChanged;
+          }
+        }
+      }
+    }
+
+    protected override void LengthParameter_ValueChanged(object sender, EventArgs e) {
+      NrOfFitnessComponentsParameter.Value = new IntValue(Length);
+    }
+
+    private void SeedParameter_ValueChanged(object sender, EventArgs e) {
+      random.Reset(Seed.Value);
+      InteractionSeed.Value = random.Next();
+      InitializeInteractions();
+    }
+
+    private void WeightsInitializerParameter_ValueChanged(object sender, EventArgs e) {
+      InitializeWeights();
+    }
+
+    private void InteractionParameter_ValueChanged(object sender, EventArgs e) {
+      InitializeInteractions();
+    }
+
+    private void InitializeOperators() {
+      NKBitFlipMoveEvaluator nkEvaluator = new NKBitFlipMoveEvaluator();
+      Encoding.ConfigureOperator(nkEvaluator);
+      Operators.Add(nkEvaluator);
+    }
+
+    private void InitializeInteractions() {
+      if (InteractionInitializer != null)
+        GeneInteractionsParameter.Value = InteractionInitializer.InitializeInterations(
+          Length,
+          NrOfFitnessComponents.Value,
+          NrOfInteractions.Value, random);
+    }
+
+    private void InitializeWeights() {
+      if (WeightsInitializerParameter.Value != null)
+        WeightsParameter.Value = new DoubleArray(
+          WeightsInitializer.GetWeights(NrOfFitnessComponents.Value)
+          .ToArray());
+    }
+
+    #region Evaluation function
+    private static long Hash(long x, HashAlgorithm hashAlg) {
+      return BitConverter.ToInt64(hashAlg.ComputeHash(BitConverter.GetBytes(x), 0, 8), 0);
+    }
+
+    public static double F_i(long x, long i, long g_i, long seed, int q, double p) {
+      var hash = new Func<long, long>(y => Hash(y, HashAlgorithm));
+      var fi = Math.Abs((double)hash((x & g_i) ^ hash(g_i ^ hash(i ^ seed)))) / long.MaxValue;
+      if (q > 0) { fi = Math.Round(fi * q) / q; }
+      if (p > 0) {
+        hash = y => Hash(y, HashAlgorithmP);
+        var r = Math.Abs((double)hash((x & g_i) ^ hash(g_i ^ hash(i ^ seed)))) / long.MaxValue;
+        fi = (r <= p) ? 0 : fi;
+      }
+      return fi;
+    }
+
+    private static double F(long x, long[] g, double[] w, long seed, ref double[] f_i, int q, double p) {
+      double value = 0;
+      for (int i = 0; i < g.Length; i++) {
+        f_i[i] = F_i(x, i, g[i], seed, q, p);
+        value += w[i % w.Length] * f_i[i];
+      }
+      return value;
+    }
+
+    public static long Encode(BinaryVector v) {
+      long x = 0;
+      for (int i = 0; i < 64 && i < v.Length; i++) {
+        x |= (v[i] ? (long)1 : (long)0) << i;
+      }
+      return x;
+    }
+
+    public static long[] Encode(BoolMatrix m) {
+      long[] x = new long[m.Columns];
+      for (int c = 0; c < m.Columns; c++) {
+        x[c] = 0;
+        for (int r = 0; r < 64 && r < m.Rows; r++) {
+          x[c] |= (m[r, c] ? (long)1 : (long)0) << r;
+        }
+      }
+      return x;
+    }
+
+    public static double[] Normalize(DoubleArray weights) {
+      double sum = 0;
+      double[] w = new double[weights.Length];
+      foreach (var v in weights) {
+        sum += Math.Abs(v);
+      }
+      for (int i = 0; i < weights.Length; i++) {
+        w[i] = Math.Abs(weights[i]) / sum;
+      }
+      return w;
+    }
+
+    public static double Evaluate(BinaryVector vector, BoolMatrix interactions, DoubleArray weights, int seed, out double[] f_i, int q, double p) {
+      long x = Encode(vector);
+      long[] g = Encode(interactions);
+      double[] w = Normalize(weights);
+      f_i = new double[interactions.Columns];
+      return F(x, g, w, (long)seed, ref f_i, q, p);
+    }
+
+    public override double Evaluate(BinaryVector vector, IRandom random) {
+      double[] f_i; //useful for debugging
+      double quality = Evaluate(vector, GeneInteractions, Weights, InteractionSeed.Value, out f_i, Q, P);
+      return quality;
+    }
+    #endregion
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/NKMoveEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/NKMoveEvaluator.cs	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/NKMoveEvaluator.cs	(revision 12755)
@@ -0,0 +1,72 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Data;
+using HeuristicLab.Encodings.BinaryVectorEncoding;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.NK {
+
+  [Item("NKMoveEvaluator", "A base class for operators which evaluate moves on the NK Landscape.")]
+  [StorableClass]
+  public abstract class NKMoveEvaluator : SingleSuccessorOperator, INKMoveEvaluator, IBinaryVectorMoveOperator {
+
+    public ILookupParameter<DoubleValue> QualityParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters["Quality"]; }
+    }
+    public ILookupParameter<DoubleValue> MoveQualityParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters["MoveQuality"]; }
+    }
+    public ILookupParameter<BinaryVector> BinaryVectorParameter {
+      get { return (ILookupParameter<BinaryVector>)Parameters["BinaryVector"]; }
+    }
+    public ILookupParameter<BoolMatrix> GeneInteractionsParameter {
+      get { return (ILookupParameter<BoolMatrix>)Parameters["GeneInteractions"]; }
+    }
+    public ILookupParameter<IntValue> InteractionSeedParameter {
+      get { return (ILookupParameter<IntValue>)Parameters["InteractionSeed"]; }
+    }
+    public ILookupParameter<DoubleArray> WeightsParameter {
+      get { return (ILookupParameter<DoubleArray>)Parameters["Weights"]; }
+    }
+    public ILookupParameter<IntValue> QParameter { get { return (ILookupParameter<IntValue>)Parameters["Q"]; } }
+    public ILookupParameter<DoubleValue> PParameter { get { return (ILookupParameter<DoubleValue>)Parameters["P"]; } }
+
+    [StorableConstructor]
+    protected NKMoveEvaluator(bool deserializing) : base(deserializing) { }
+    protected NKMoveEvaluator(NKMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
+    protected NKMoveEvaluator()
+      : base() {
+      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality of a OneMax solution."));
+      Parameters.Add(new LookupParameter<DoubleValue>("MoveQuality", "The evaluated quality of a move on a OneMax solution."));
+      Parameters.Add(new LookupParameter<BinaryVector>("BinaryVector", "The solution as BinaryVector."));
+      Parameters.Add(new LookupParameter<BoolMatrix>("GeneInteractions", "Matrix indicating gene interactions."));
+      Parameters.Add(new LookupParameter<IntValue>("InteractionSeed", "Seed used for randomly generting gene interactions."));
+      Parameters.Add(new LookupParameter<DoubleArray>("Weights", "The weights for the component functions. If shorter, will be repeated."));
+      Parameters.Add(new LookupParameter<IntValue>("Q", "Number of allowed fitness values in the (virutal) random table, or zero"));
+      Parameters.Add(new LookupParameter<DoubleValue>("P", "Probability of any entry in the (virtual) random table being zero"));
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/Plugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/Plugin.cs.frame	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/Plugin.cs.frame	(revision 12755)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.NK {
+  [Plugin("HeuristicLab.Problems.NK", "3.3.12.$WCREV$")]
+  [PluginFile("HeuristicLab.Problems.NK-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]  
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.BinaryVectorEncoding", "3.3")]
+  [PluginDependency("HeuristicLab.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]  
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]  
+  [PluginDependency("HeuristicLab.Problems.Binary", "3.3")]
+  [PluginDependency("HeuristicLab.Random", "3.3")]    
+  public class HeuristicLabProblemsNKPlugin : PluginBase { }
+}
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/Properties/AssemblyInfo.cs.frame	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/Properties/AssemblyInfo.cs.frame	(revision 12755)
@@ -0,0 +1,56 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Problems.NK")]
+[assembly: AssemblyDescription("NK Fitness Landscape Analysis Test Problem")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("34e1ec7e-0124-4f76-b8f8-42b9244d2b09")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.12.$WCREV$")]
+
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/EqualWeightsInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/EqualWeightsInitializer.cs	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/EqualWeightsInitializer.cs	(revision 12755)
@@ -0,0 +1,44 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Collections.Generic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.NK {
+  [Item("EqualWeightsInitializer", "Initializes all weights to 1.0.")]
+  [StorableClass]
+  public sealed class EqualWeightsInitializer : ParameterizedNamedItem, IWeightsInitializer {
+    [StorableConstructor]
+    private EqualWeightsInitializer(bool deserializing) : base(deserializing) { }
+    private EqualWeightsInitializer(EqualWeightsInitializer original, Cloner cloner)
+      : base(original, cloner) { }
+    public EqualWeightsInitializer() { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new EqualWeightsInitializer(this, cloner);
+    }
+
+    public IEnumerable<double> GetWeights(int nComponents) {
+      return new[] { 1.0 };
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/ExponentialDistributionWeightsInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/ExponentialDistributionWeightsInitializer.cs	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/ExponentialDistributionWeightsInitializer.cs	(revision 12755)
@@ -0,0 +1,62 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Collections.Generic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.NK {
+  [Item("ExponentialDistributionWeightsInitializer", "Assigns exponentially decreasing weights using the rate parameter lambda.")]
+  [StorableClass]
+  public sealed class ExponentialDistributionWeightsInitializer : ParameterizedNamedItem, IWeightsInitializer {
+    public IValueParameter<DoubleValue> LambdaParameter {
+      get { return (IValueParameter<DoubleValue>)Parameters["Lambda"]; }
+    }
+
+    [StorableConstructor]
+    private ExponentialDistributionWeightsInitializer(bool deserializing) : base(deserializing) { }
+    private ExponentialDistributionWeightsInitializer(ExponentialDistributionWeightsInitializer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public ExponentialDistributionWeightsInitializer() {
+      Parameters.Add(new ValueParameter<DoubleValue>("Lambda", "The rate parameter of the exponential distribution.", new DoubleValue(1.0)));
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ExponentialDistributionWeightsInitializer(this, cloner);
+    }
+
+    private static double f(double x, double lambda) {
+      if (x < 0.0)
+        return 0.0;
+      return lambda * Math.Exp(-lambda * x);
+    }
+
+    public IEnumerable<double> GetWeights(int nComponents) {
+      double lambda = LambdaParameter.Value.Value;
+      for (int i = 0; i < nComponents; i++)
+        yield return f(i, lambda);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/ExponentialWeightsInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/ExponentialWeightsInitializer.cs	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/ExponentialWeightsInitializer.cs	(revision 12755)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Collections.Generic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.NK {
+  [Item("ExponentialWeightsInitializer", "Assigns exponentially increasing weights.")]
+  [StorableClass]
+  public sealed class ExponentialWeightsInitializer : ParameterizedNamedItem, IWeightsInitializer {
+    [StorableConstructor]
+    private ExponentialWeightsInitializer(bool deserializing) : base(deserializing) { }
+    private ExponentialWeightsInitializer(ExponentialWeightsInitializer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public ExponentialWeightsInitializer() { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ExponentialWeightsInitializer(this, cloner);
+    }
+
+    public IEnumerable<double> GetWeights(int nComponents) {
+      for (int i = 0; i < nComponents; i++)
+        yield return Math.Pow(2, i);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/IWeightsInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/IWeightsInitializer.cs	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/IWeightsInitializer.cs	(revision 12755)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Collections.Generic;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.NK {
+  public interface IWeightsInitializer : IParameterizedItem {
+    IEnumerable<double> GetWeights(int nComponents);
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/LinearWeightsInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/LinearWeightsInitializer.cs	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/LinearWeightsInitializer.cs	(revision 12755)
@@ -0,0 +1,46 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Collections.Generic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.NK {
+  [Item("LinearWeightsInitializer", "Assigns linear increasing weights.")]
+  [StorableClass]
+  public sealed class LinearWeightsInitializer : ParameterizedNamedItem, IWeightsInitializer {
+    [StorableConstructor]
+    private LinearWeightsInitializer(bool deserializing) : base(deserializing) { }
+    private LinearWeightsInitializer(LinearWeightsInitializer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public LinearWeightsInitializer() { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new LinearWeightsInitializer(this, cloner);
+    }
+
+    public IEnumerable<double> GetWeights(int nComponents) {
+      for (int i = 0; i < nComponents; i++)
+        yield return i;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/ReverseExponentialWeightsInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/ReverseExponentialWeightsInitializer.cs	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/ReverseExponentialWeightsInitializer.cs	(revision 12755)
@@ -0,0 +1,47 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Collections.Generic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.NK {
+  [Item("ReverseExponentialWeightsInitializer", "Assigns exponentially decreasing weights.")]
+  [StorableClass]
+  public sealed class ReverseExponentialWeightsInitializer : ParameterizedNamedItem, IWeightsInitializer {
+    [StorableConstructor]
+    private ReverseExponentialWeightsInitializer(bool deserializing) : base(deserializing) { }
+    private ReverseExponentialWeightsInitializer(ReverseExponentialWeightsInitializer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public ReverseExponentialWeightsInitializer() { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ReverseExponentialWeightsInitializer(this, cloner);
+    }
+
+    public IEnumerable<double> GetWeights(int nComponents) {
+      for (int i = nComponents - 1; i >= 0; i--)
+        yield return Math.Pow(2, i);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/ReverseLinearWeightsInitializer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/ReverseLinearWeightsInitializer.cs	(revision 12755)
+++ /trunk/sources/HeuristicLab.Problems.NK/3.3/WeightInitializers/ReverseLinearWeightsInitializer.cs	(revision 12755)
@@ -0,0 +1,46 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2015 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.Collections.Generic;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.NK {
+  [Item("ReverseLinearWeightsInitializer", "Assigns exponentially decreasing weights.")]
+  [StorableClass]
+  public sealed class ReverseLinearWeightsInitializer : ParameterizedNamedItem, IWeightsInitializer {
+    [StorableConstructor]
+    private ReverseLinearWeightsInitializer(bool deserializing) : base(deserializing) { }
+    private ReverseLinearWeightsInitializer(ReverseLinearWeightsInitializer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public ReverseLinearWeightsInitializer() { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ReverseLinearWeightsInitializer(this, cloner);
+    }
+
+    public IEnumerable<double> GetWeights(int nComponents) {
+      for (int i = nComponents - 1; i >= 0; i--)
+        yield return i;
+    }
+  }
+}
Index: unk/sources/HeuristicLab.Problems.NK/HeuristicLab.Problems.NK.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/HeuristicLab.Problems.NK.csproj	(revision 12754)
+++ 	(revision )
@@ -1,239 +1,0 @@
-﻿<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>8.0.30703</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{C3AD50E6-E717-490E-ABC7-32EF7FB03C97}</ProjectGuid>
-    <OutputType>Library</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>HeuristicLab.Problems.NK</RootNamespace>
-    <AssemblyName>HeuristicLab.Problems.NK-3.3</AssemblyName>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <TargetFrameworkProfile />
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>..\..\..\trunk\sources\bin\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <Prefer32Bit>false</Prefer32Bit>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>..\..\..\trunk\sources\bin\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <Prefer32Bit>false</Prefer32Bit>
-  </PropertyGroup>
-  <PropertyGroup>
-    <SignAssembly>true</SignAssembly>
-  </PropertyGroup>
-  <PropertyGroup>
-    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>..\..\..\trunk\sources\bin\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x86</PlatformTarget>
-    <CodeAnalysisLogFile>bin\Debug\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
-    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
-    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
-    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
-    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
-    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
-    <Prefer32Bit>false</Prefer32Bit>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
-    <OutputPath>..\..\..\trunk\sources\bin\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x86</PlatformTarget>
-    <CodeAnalysisLogFile>bin\Release\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
-    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
-    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
-    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
-    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
-    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
-    <Prefer32Bit>false</Prefer32Bit>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
-    <DebugSymbols>true</DebugSymbols>
-    <OutputPath>..\..\..\trunk\sources\bin\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <DebugType>full</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <CodeAnalysisLogFile>bin\Debug\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
-    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
-    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
-    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
-    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
-    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
-    <Prefer32Bit>false</Prefer32Bit>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
-    <OutputPath>..\..\..\trunk\sources\bin\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <Optimize>true</Optimize>
-    <DebugType>pdbonly</DebugType>
-    <PlatformTarget>x64</PlatformTarget>
-    <CodeAnalysisLogFile>bin\Release\HeuristicLab.Problems.NK.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
-    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
-    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
-    <ErrorReport>prompt</ErrorReport>
-    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
-    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
-    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
-    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
-    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
-    <Prefer32Bit>false</Prefer32Bit>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.Drawing" />
-    <Reference Include="System.Xml.Linq" />
-    <Reference Include="System.Data.DataSetExtensions" />
-    <Reference Include="Microsoft.CSharp" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="BinaryVectorComparers\IBinaryVectorComparer.cs" />
-    <Compile Include="BinaryVectorComparers\LexicographicBinaryVectorComparer.cs" />
-    <Compile Include="BinaryVectorComparers\AverageBitBinaryVectorComparer.cs" />
-    <Compile Include="BinaryVectorComparers\MedianBitBinaryVectorComparer.cs" />
-    <Compile Include="InteractionInitializers\LimitedRandomInteractionsInitializer.cs" />
-    <Compile Include="InteractionInitializers\IncreasingBlockSizeInteractionsInitializer.cs" />
-    <Compile Include="InteractionInitializers\SortedRandomInteractionsInitializer.cs" />
-    <Compile Include="InteractionInitializers\IInteractionInitializer.cs" />
-    <Compile Include="INKMoveEvaluator.cs" />
-    <Compile Include="NKLandscape.cs" />
-    <Compile Include="Plugin.cs" />
-    <Compile Include="WeightInitializers\ExponentialDistributionWeightsInitializer.cs" />
-    <Compile Include="WeightInitializers\ReverseLinearWeightsInitializer.cs" />
-    <Compile Include="WeightInitializers\LinearWeightsInitializer.cs" />
-    <Compile Include="WeightInitializers\ReverseExponentialWeightsInitializer.cs" />
-    <Compile Include="WeightInitializers\ExponentialWeightsInitializer.cs" />
-    <Compile Include="WeightInitializers\IWeightsInitializer.cs" />
-    <Compile Include="NKBitFlipMoveEvaluator.cs" />
-    <Compile Include="NKMoveEvaluator.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-    <Compile Include="InteractionInitializers\RandomInteractionsInitializer.cs" />
-    <Compile Include="WeightInitializers\EqualWeightsInitializer.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="HeuristicLab.snk" />
-    <None Include="Plugin.cs.frame" />
-    <None Include="Properties\AssemblyInfo.cs.frame" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\HeuristicLab.Collections\3.3\HeuristicLab.Collections-3.3.csproj">
-      <Project>{958b43bc-cc5c-4fa2-8628-2b3b01d890b6}</Project>
-      <Name>HeuristicLab.Collections-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
-      <Project>{a9ad58b9-3ef9-4cc1-97e5-8d909039ff5c}</Project>
-      <Name>HeuristicLab.Common-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.Core\3.3\HeuristicLab.Core-3.3.csproj">
-      <Project>{c36bd924-a541-4a00-afa8-41701378ddc5}</Project>
-      <Name>HeuristicLab.Core-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.Data\3.3\HeuristicLab.Data-3.3.csproj">
-      <Project>{bbab9df5-5ef3-4ba8-ade9-b36e82114937}</Project>
-      <Name>HeuristicLab.Data-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.Encodings.BinaryVectorEncoding\3.3\HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj">
-      <Project>{66d249c3-a01d-42a8-82a2-919bc8ec3d83}</Project>
-      <Name>HeuristicLab.Encodings.BinaryVectorEncoding-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.Operators\3.3\HeuristicLab.Operators-3.3.csproj">
-      <Project>{23da7ff4-d5b8-41b6-aa96-f0561d24f3ee}</Project>
-      <Name>HeuristicLab.Operators-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
-      <Project>{14ab8d24-25bc-400c-a846-4627aa945192}</Project>
-      <Name>HeuristicLab.Optimization-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.Parameters\3.3\HeuristicLab.Parameters-3.3.csproj">
-      <Project>{56f9106a-079f-4c61-92f6-86a84c2d84b7}</Project>
-      <Name>HeuristicLab.Parameters-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.Persistence\3.3\HeuristicLab.Persistence-3.3.csproj">
-      <Project>{102bc7d3-0ef9-439c-8f6d-96ff0fdb8e1b}</Project>
-      <Name>HeuristicLab.Persistence-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.PluginInfrastructure\3.3\HeuristicLab.PluginInfrastructure-3.3.csproj">
-      <Project>{94186a6a-5176-4402-ae83-886557b53cca}</Project>
-      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.Problems.Binary\3.3\HeuristicLab.Problems.Binary-3.3.csproj">
-      <Project>{fc627be5-0f93-47d8-bd2e-530ea2b8aa5f}</Project>
-      <Name>HeuristicLab.Problems.Binary-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\HeuristicLab.Random\3.3\HeuristicLab.Random-3.3.csproj">
-      <Project>{f4539fb6-4708-40c9-be64-0a1390aea197}</Project>
-      <Name>HeuristicLab.Random-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <PropertyGroup>
-    <PreBuildEvent Condition=" '$(OS)' == 'Windows_NT' ">
-      set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
-      set ProjectDir=$(ProjectDir)
-      set SolutionDir=$(SolutionDir)
-      set Outdir=$(Outdir)
-
-      call PreBuildEvent.cmd
-    </PreBuildEvent>
-    <PreBuildEvent Condition=" '$(OS)' != 'Windows_NT' ">
-      export ProjectDir=$(ProjectDir)
-      export SolutionDir=$(SolutionDir)
-
-      $SolutionDir/PreBuildEvent.sh
-    </PreBuildEvent>
-  </PropertyGroup>
-  <PropertyGroup>
-    <PostBuildEvent>
-    </PostBuildEvent>
-  </PropertyGroup>
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-</Project>
Index: unk/sources/HeuristicLab.Problems.NK/INKMoveEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/INKMoveEvaluator.cs	(revision 12754)
+++ 	(revision )
@@ -1,26 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2015 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.Optimization;
-
-namespace HeuristicLab.Problems.NK {
-  public interface INKMoveEvaluator : ISingleObjectiveMoveEvaluator, IMoveOperator { }
-}
Index: unk/sources/HeuristicLab.Problems.NK/NKBitFlipMoveEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/NKBitFlipMoveEvaluator.cs	(revision 12754)
+++ 	(revision )
@@ -1,92 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2015 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.Collections.Generic;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Encodings.BinaryVectorEncoding;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Problems.NK {
-
-  [Item("NK BitFlip Move Evaluator", "Evaluates a single bit flip on an NK landscape.")]
-  [StorableClass]
-  public class NKBitFlipMoveEvaluator : NKMoveEvaluator, IOneBitflipMoveOperator {
-    public ILookupParameter<OneBitflipMove> OneBitflipMoveParameter {
-      get { return (ILookupParameter<OneBitflipMove>)Parameters["OneBitflipMove"]; }
-    }
-    public ILookupParameter<BinaryVector> MovedBinaryVectorParameter {
-      get { return (ILookupParameter<BinaryVector>)Parameters["MovedBinaryVector"]; }
-    }
-
-    [StorableConstructor]
-    protected NKBitFlipMoveEvaluator(bool deserializing) : base(deserializing) { }
-    protected NKBitFlipMoveEvaluator(NKBitFlipMoveEvaluator original, Cloner cloner)
-      : base(original, cloner) { }
-    public NKBitFlipMoveEvaluator()
-      : base() {
-      Parameters.Add(new LookupParameter<OneBitflipMove>("OneBitflipMove", "The move to evaluate."));
-      Parameters.Add(new LookupParameter<BinaryVector>("MovedBinaryVector", "The resulting binary vector after the move."));
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new NKBitFlipMoveEvaluator(this, cloner);
-    }
-
-    public override IOperation Apply() {
-      BinaryVector binaryVector = BinaryVectorParameter.ActualValue;
-      OneBitflipMove move = OneBitflipMoveParameter.ActualValue;
-      BoolMatrix interactions = GeneInteractionsParameter.ActualValue;
-      DoubleArray weights = WeightsParameter.ActualValue;
-      int seed = InteractionSeedParameter.ActualValue.Value;
-      double moveQuality = QualityParameter.ActualValue.Value;
-      int q = QParameter.ActualValue.Value;
-      double p = PParameter.ActualValue.Value;
-
-      List<int> affectedFitnessComponents = new List<int>();
-      for (int c = 0; c < interactions.Columns; c++)
-        if (interactions[move.Index, c])
-          affectedFitnessComponents.Add(c);
-      BinaryVector moved = new BinaryVector(binaryVector);
-      MovedBinaryVectorParameter.ActualValue = moved;
-      moved[move.Index] = !moved[move.Index];
-      if (affectedFitnessComponents.Count * 2 > interactions.Columns) {
-        double[] f_i;
-        moveQuality = NKLandscape.Evaluate(moved, interactions, weights, seed, out f_i, q, p);
-      } else {
-        long x = NKLandscape.Encode(binaryVector);
-        long y = NKLandscape.Encode(moved);
-        long[] g = NKLandscape.Encode(interactions);
-        double[] w = NKLandscape.Normalize(weights);
-        foreach (var c in affectedFitnessComponents) {
-          moveQuality -= w[c%w.Length]*NKLandscape.F_i(x, c, g[c], seed, q, p);
-          moveQuality += w[c%w.Length]*NKLandscape.F_i(y, c, g[c], seed, q, p);
-        }
-      }
-
-      if (MoveQualityParameter.ActualValue == null) MoveQualityParameter.ActualValue = new DoubleValue(moveQuality);
-      else MoveQualityParameter.ActualValue.Value = moveQuality;
-      return base.Apply();
-    }
-  }
-}
Index: unk/sources/HeuristicLab.Problems.NK/NKLandscape.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/NKLandscape.cs	(revision 12754)
+++ 	(revision )
@@ -1,346 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2015 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.Linq;
-using System.Security.Cryptography;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Encodings.BinaryVectorEncoding;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.PluginInfrastructure;
-using HeuristicLab.Problems.Binary;
-using HeuristicLab.Random;
-
-namespace HeuristicLab.Problems.NK {
-  [Item("NK Landscape", "Represents an NK landscape optimization problem.")]
-  [Creatable(CreatableAttribute.Categories.CombinatorialProblems, Priority = 215)]
-  [StorableClass]
-  public sealed class NKLandscape : BinaryProblem {
-    public override bool Maximization {
-      get { return false; }
-    }
-
-    #region Parameters
-    public IValueParameter<BoolMatrix> GeneInteractionsParameter {
-      get { return (IValueParameter<BoolMatrix>)Parameters["GeneInteractions"]; }
-    }
-    public IValueParameter<IntValue> SeedParameter {
-      get { return (IValueParameter<IntValue>)Parameters["ProblemSeed"]; }
-    }
-    public IValueParameter<IntValue> InteractionSeedParameter {
-      get { return (IValueParameter<IntValue>)Parameters["InteractionSeed"]; }
-    }
-    public IValueParameter<IntValue> NrOfInteractionsParameter {
-      get { return (IValueParameter<IntValue>)Parameters["NrOfInteractions"]; }
-    }
-    public IValueParameter<IntValue> NrOfFitnessComponentsParameter {
-      get { return (IValueParameter<IntValue>)Parameters["NrOfFitnessComponents"]; }
-    }
-    public IValueParameter<IntValue> QParameter {
-      get { return (IValueParameter<IntValue>)Parameters["Q"]; }
-    }
-    public IValueParameter<DoubleValue> PParameter {
-      get { return (IValueParameter<DoubleValue>)Parameters["P"]; }
-    }
-    public IValueParameter<DoubleArray> WeightsParameter {
-      get { return (IValueParameter<DoubleArray>)Parameters["Weights"]; }
-    }
-    public IConstrainedValueParameter<IInteractionInitializer> InteractionInitializerParameter {
-      get { return (IConstrainedValueParameter<IInteractionInitializer>)Parameters["InteractionInitializer"]; }
-    }
-    public IConstrainedValueParameter<IWeightsInitializer> WeightsInitializerParameter {
-      get { return (IConstrainedValueParameter<IWeightsInitializer>)Parameters["WeightsInitializer"]; }
-    }
-    #endregion
-
-    #region Properties
-    public IInteractionInitializer InteractionInitializer {
-      get { return InteractionInitializerParameter.Value; }
-    }
-    public BoolMatrix GeneInteractions {
-      get { return GeneInteractionsParameter.Value; }
-    }
-    public DoubleArray Weights {
-      get { return WeightsParameter.Value; }
-    }
-    public IntValue InteractionSeed {
-      get { return InteractionSeedParameter.Value; }
-    }
-    public IntValue NrOfFitnessComponents {
-      get { return NrOfFitnessComponentsParameter.Value; }
-    }
-    public IntValue NrOfInteractions {
-      get { return NrOfInteractionsParameter.Value; }
-    }
-    public IWeightsInitializer WeightsInitializer {
-      get { return WeightsInitializerParameter.Value; }
-    }
-    public int Q {
-      get { return QParameter.Value.Value; }
-    }
-    public double P {
-      get { return PParameter.Value.Value; }
-    }
-    public IntValue Seed {
-      get { return SeedParameter.Value; }
-    }
-    #endregion
-
-    [Storable]
-    private MersenneTwister random;
-
-    [ThreadStatic]
-    private static HashAlgorithm hashAlgorithm;
-
-    [ThreadStatic]
-    private static HashAlgorithm hashAlgorithmP;
-
-    private static HashAlgorithm HashAlgorithm {
-      get {
-        if (hashAlgorithm == null) {
-          hashAlgorithm = HashAlgorithm.Create("MD5");
-        }
-        return hashAlgorithm;
-      }
-    }
-
-    private static HashAlgorithm HashAlgorithmP {
-      get {
-        if (hashAlgorithmP == null) {
-          hashAlgorithmP = HashAlgorithm.Create("SHA1");
-        }
-        return hashAlgorithmP;
-      }
-    }
-
-    [StorableConstructor]
-    private NKLandscape(bool deserializing) : base(deserializing) { }
-    private NKLandscape(NKLandscape original, Cloner cloner)
-      : base(original, cloner) {
-      random = (MersenneTwister)original.random.Clone(cloner);
-      RegisterEventHandlers();
-    }
-    public NKLandscape()
-      : base() {
-      random = new MersenneTwister();
-
-      Parameters.Add(new ValueParameter<BoolMatrix>("GeneInteractions", "Every column gives the participating genes for each fitness component."));
-      Parameters.Add(new ValueParameter<IntValue>("ProblemSeed", "The seed used for the random number generator.", new IntValue(0)));
-      random.Reset(Seed.Value);
-
-      Parameters.Add(new ValueParameter<IntValue>("InteractionSeed", "The seed used for the hash function to generate interaction tables.", new IntValue(random.Next())));
-      Parameters.Add(new ValueParameter<IntValue>("NrOfFitnessComponents", "Number of fitness component functions. (nr of columns in the interaction column)", new IntValue(10)));
-      Parameters.Add(new ValueParameter<IntValue>("NrOfInteractions", "Number of genes interacting with each other. (nr of True values per column in the interaction matrix)", new IntValue(3)));
-      Parameters.Add(new ValueParameter<IntValue>("Q", "Number of allowed fitness values in the (virutal) random table, or zero.", new IntValue(0)));
-      Parameters.Add(new ValueParameter<DoubleValue>("P", "Probability of any entry in the (virtual) random table being zero.", new DoubleValue(0)));
-      Parameters.Add(new ValueParameter<DoubleArray>("Weights", "The weights for the component functions. If shorted, will be repeated.", new DoubleArray(new[] { 1.0 })));
-      Parameters.Add(new ConstrainedValueParameter<IInteractionInitializer>("InteractionInitializer", "Initialize interactions within the component functions."));
-      Parameters.Add(new ConstrainedValueParameter<IWeightsInitializer>("WeightsInitializer", "Operator to initialize the weights distribution."));
-
-      //allow just the standard NK[P,Q] formulations at the moment
-      WeightsParameter.Hidden = true;
-      InteractionInitializerParameter.Hidden = true;
-      WeightsInitializerParameter.Hidden = true;
-      EncodingParameter.Hidden = true;
-
-      InitializeInteractionInitializerParameter();
-      InitializeWeightsInitializerParameter();
-
-      InitializeOperators();
-      InitializeInteractions();
-      RegisterEventHandlers();
-    }
-
-    private void InitializeInteractionInitializerParameter() {
-      foreach (var initializer in ApplicationManager.Manager.GetInstances<IInteractionInitializer>())
-        InteractionInitializerParameter.ValidValues.Add(initializer);
-      InteractionInitializerParameter.Value = InteractionInitializerParameter.ValidValues.First(v => v is RandomInteractionsInitializer);
-    }
-
-    private void InitializeWeightsInitializerParameter() {
-      foreach (var initializer in ApplicationManager.Manager.GetInstances<IWeightsInitializer>())
-        WeightsInitializerParameter.ValidValues.Add(initializer);
-      WeightsInitializerParameter.Value = WeightsInitializerParameter.ValidValues.First(v => v is EqualWeightsInitializer);
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new NKLandscape(this, cloner);
-    }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() {
-      RegisterEventHandlers();
-    }
-
-    private void RegisterEventHandlers() {
-      NrOfInteractionsParameter.ValueChanged += InteractionParameter_ValueChanged;
-      NrOfInteractionsParameter.Value.ValueChanged += InteractionParameter_ValueChanged;
-      NrOfFitnessComponentsParameter.ValueChanged += InteractionParameter_ValueChanged;
-      NrOfFitnessComponentsParameter.Value.ValueChanged += InteractionParameter_ValueChanged;
-      InteractionInitializerParameter.ValueChanged += InteractionParameter_ValueChanged;
-      WeightsInitializerParameter.ValueChanged += WeightsInitializerParameter_ValueChanged;
-      SeedParameter.ValueChanged += SeedParameter_ValueChanged;
-      SeedParameter.Value.ValueChanged += SeedParameter_ValueChanged;
-
-      RegisterInteractionInitializerParameterEvents();
-      RegisterWeightsParameterEvents();
-    }
-
-    private void RegisterWeightsParameterEvents() {
-      foreach (var vv in WeightsInitializerParameter.ValidValues) {
-        foreach (var p in vv.Parameters) {
-          if (p.ActualValue != null && p.ActualValue is IStringConvertibleValue) {
-            var v = (IStringConvertibleValue)p.ActualValue;
-            v.ValueChanged += WeightsInitializerParameter_ValueChanged;
-          }
-        }
-      }
-    }
-
-    private void RegisterInteractionInitializerParameterEvents() {
-      foreach (var vv in InteractionInitializerParameter.ValidValues) {
-        foreach (var p in vv.Parameters) {
-          if (p.ActualValue != null && p.ActualValue is IStringConvertibleValue) {
-            var v = (IStringConvertibleValue)p.ActualValue;
-            v.ValueChanged += InteractionParameter_ValueChanged;
-          } else if (p.ActualValue != null && p is IConstrainedValueParameter<IBinaryVectorComparer>) {
-            ((IConstrainedValueParameter<IBinaryVectorComparer>)p).ValueChanged +=
-              InteractionParameter_ValueChanged;
-          }
-        }
-      }
-    }
-
-    protected override void LengthParameter_ValueChanged(object sender, EventArgs e) {
-      NrOfFitnessComponentsParameter.Value = new IntValue(Length);
-    }
-
-    private void SeedParameter_ValueChanged(object sender, EventArgs e) {
-      random.Reset(Seed.Value);
-      InteractionSeed.Value = random.Next();
-      InitializeInteractions();
-    }
-
-    private void WeightsInitializerParameter_ValueChanged(object sender, EventArgs e) {
-      InitializeWeights();
-    }
-
-    private void InteractionParameter_ValueChanged(object sender, EventArgs e) {
-      InitializeInteractions();
-    }
-
-    private void InitializeOperators() {
-      NKBitFlipMoveEvaluator nkEvaluator = new NKBitFlipMoveEvaluator();
-      Encoding.ConfigureOperator(nkEvaluator);
-      Operators.Add(nkEvaluator);
-    }
-
-    private void InitializeInteractions() {
-      if (InteractionInitializer != null)
-        GeneInteractionsParameter.Value = InteractionInitializer.InitializeInterations(
-          Length,
-          NrOfFitnessComponents.Value,
-          NrOfInteractions.Value, random);
-    }
-
-    private void InitializeWeights() {
-      if (WeightsInitializerParameter.Value != null)
-        WeightsParameter.Value = new DoubleArray(
-          WeightsInitializer.GetWeights(NrOfFitnessComponents.Value)
-          .ToArray());
-    }
-
-    #region Evaluation function
-    private static long Hash(long x, HashAlgorithm hashAlg) {
-      return BitConverter.ToInt64(hashAlg.ComputeHash(BitConverter.GetBytes(x), 0, 8), 0);
-    }
-
-    public static double F_i(long x, long i, long g_i, long seed, int q, double p) {
-      var hash = new Func<long, long>(y => Hash(y, HashAlgorithm));
-      var fi = Math.Abs((double)hash((x & g_i) ^ hash(g_i ^ hash(i ^ seed)))) / long.MaxValue;
-      if (q > 0) { fi = Math.Round(fi * q) / q; }
-      if (p > 0) {
-        hash = y => Hash(y, HashAlgorithmP);
-        var r = Math.Abs((double)hash((x & g_i) ^ hash(g_i ^ hash(i ^ seed)))) / long.MaxValue;
-        fi = (r <= p) ? 0 : fi;
-      }
-      return fi;
-    }
-
-    private static double F(long x, long[] g, double[] w, long seed, ref double[] f_i, int q, double p) {
-      double value = 0;
-      for (int i = 0; i < g.Length; i++) {
-        f_i[i] = F_i(x, i, g[i], seed, q, p);
-        value += w[i % w.Length] * f_i[i];
-      }
-      return value;
-    }
-
-    public static long Encode(BinaryVector v) {
-      long x = 0;
-      for (int i = 0; i < 64 && i < v.Length; i++) {
-        x |= (v[i] ? (long)1 : (long)0) << i;
-      }
-      return x;
-    }
-
-    public static long[] Encode(BoolMatrix m) {
-      long[] x = new long[m.Columns];
-      for (int c = 0; c < m.Columns; c++) {
-        x[c] = 0;
-        for (int r = 0; r < 64 && r < m.Rows; r++) {
-          x[c] |= (m[r, c] ? (long)1 : (long)0) << r;
-        }
-      }
-      return x;
-    }
-
-    public static double[] Normalize(DoubleArray weights) {
-      double sum = 0;
-      double[] w = new double[weights.Length];
-      foreach (var v in weights) {
-        sum += Math.Abs(v);
-      }
-      for (int i = 0; i < weights.Length; i++) {
-        w[i] = Math.Abs(weights[i]) / sum;
-      }
-      return w;
-    }
-
-    public static double Evaluate(BinaryVector vector, BoolMatrix interactions, DoubleArray weights, int seed, out double[] f_i, int q, double p) {
-      long x = Encode(vector);
-      long[] g = Encode(interactions);
-      double[] w = Normalize(weights);
-      f_i = new double[interactions.Columns];
-      return F(x, g, w, (long)seed, ref f_i, q, p);
-    }
-
-    public override double Evaluate(BinaryVector vector, IRandom random) {
-      double[] f_i; //useful for debugging
-      double quality = Evaluate(vector, GeneInteractions, Weights, InteractionSeed.Value, out f_i, Q, P);
-      return quality;
-    }
-    #endregion
-  }
-}
Index: unk/sources/HeuristicLab.Problems.NK/NKMoveEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/NKMoveEvaluator.cs	(revision 12754)
+++ 	(revision )
@@ -1,72 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2015 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.Data;
-using HeuristicLab.Encodings.BinaryVectorEncoding;
-using HeuristicLab.Operators;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-
-namespace HeuristicLab.Problems.NK {
-
-  [Item("NKMoveEvaluator", "A base class for operators which evaluate moves on the NK Landscape.")]
-  [StorableClass]
-  public abstract class NKMoveEvaluator : SingleSuccessorOperator, INKMoveEvaluator, IBinaryVectorMoveOperator {
-
-    public ILookupParameter<DoubleValue> QualityParameter {
-      get { return (ILookupParameter<DoubleValue>)Parameters["Quality"]; }
-    }
-    public ILookupParameter<DoubleValue> MoveQualityParameter {
-      get { return (ILookupParameter<DoubleValue>)Parameters["MoveQuality"]; }
-    }
-    public ILookupParameter<BinaryVector> BinaryVectorParameter {
-      get { return (ILookupParameter<BinaryVector>)Parameters["BinaryVector"]; }
-    }
-    public ILookupParameter<BoolMatrix> GeneInteractionsParameter {
-      get { return (ILookupParameter<BoolMatrix>)Parameters["GeneInteractions"]; }
-    }
-    public ILookupParameter<IntValue> InteractionSeedParameter {
-      get { return (ILookupParameter<IntValue>)Parameters["InteractionSeed"]; }
-    }
-    public ILookupParameter<DoubleArray> WeightsParameter {
-      get { return (ILookupParameter<DoubleArray>)Parameters["Weights"]; }
-    }
-    public ILookupParameter<IntValue> QParameter { get { return (ILookupParameter<IntValue>)Parameters["Q"]; } }
-    public ILookupParameter<DoubleValue> PParameter { get { return (ILookupParameter<DoubleValue>)Parameters["P"]; } }
-
-    [StorableConstructor]
-    protected NKMoveEvaluator(bool deserializing) : base(deserializing) { }
-    protected NKMoveEvaluator(NKMoveEvaluator original, Cloner cloner) : base(original, cloner) { }
-    protected NKMoveEvaluator()
-      : base() {
-      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality of a OneMax solution."));
-      Parameters.Add(new LookupParameter<DoubleValue>("MoveQuality", "The evaluated quality of a move on a OneMax solution."));
-      Parameters.Add(new LookupParameter<BinaryVector>("BinaryVector", "The solution as BinaryVector."));
-      Parameters.Add(new LookupParameter<BoolMatrix>("GeneInteractions", "Matrix indicating gene interactions."));
-      Parameters.Add(new LookupParameter<IntValue>("InteractionSeed", "Seed used for randomly generting gene interactions."));
-      Parameters.Add(new LookupParameter<DoubleArray>("Weights", "The weights for the component functions. If shorter, will be repeated."));
-      Parameters.Add(new LookupParameter<IntValue>("Q", "Number of allowed fitness values in the (virutal) random table, or zero"));
-      Parameters.Add(new LookupParameter<DoubleValue>("P", "Probability of any entry in the (virtual) random table being zero"));
-    }
-  }
-}
Index: unk/sources/HeuristicLab.Problems.NK/Plugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Problems.NK/Plugin.cs.frame	(revision 12754)
+++ 	(revision )
@@ -1,39 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2015 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.PluginInfrastructure;
-
-namespace HeuristicLab.Problems.NK {
-  [Plugin("HeuristicLab.Problems.NK", "3.3.12.$WCREV$")]
-  [PluginFile("HeuristicLab.Problems.NK-3.3.dll", PluginFileType.Assembly)]
-  [PluginDependency("HeuristicLab.Collections", "3.3")]
-  [PluginDependency("HeuristicLab.Common", "3.3")]
-  [PluginDependency("HeuristicLab.Core", "3.3")]  
-  [PluginDependency("HeuristicLab.Data", "3.3")]
-  [PluginDependency("HeuristicLab.Encodings.BinaryVectorEncoding", "3.3")]
-  [PluginDependency("HeuristicLab.Operators", "3.3")]
-  [PluginDependency("HeuristicLab.Optimization", "3.3")]  
-  [PluginDependency("HeuristicLab.Parameters", "3.3")]
-  [PluginDependency("HeuristicLab.Persistence", "3.3")]  
-  [PluginDependency("HeuristicLab.Problems.Binary", "3.3")]
-  [PluginDependency("HeuristicLab.Random", "3.3")]    
-  public class HeuristicLabProblemsNKPlugin : PluginBase { }
-}
