Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Analysis.FitnessLandscape.sln
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Analysis.FitnessLandscape.sln	(revision 11661)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Analysis.FitnessLandscape.sln	(revision 12483)
@@ -1,5 +1,7 @@
 ﻿
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.31101.0
+MinimumVisualStudioVersion = 10.0.40219.1
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Analysis.FitnessLandscape", "HeuristicLab.Analysis.FitnessLandscape\HeuristicLab.Analysis.FitnessLandscape.csproj", "{5FBDCD4A-3C2A-4EC6-83CE-34B29F43621A}"
 EndProject
@@ -13,4 +15,6 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VRPProblemAnalyzer", "VRPProblemAnalyzer\VRPProblemAnalyzer.csproj", "{683C29F1-9A43-4998-B58A-C477B86B7A64}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.NKNew", "HeuristicLab.Problems.NKNew\HeuristicLab.Problems.NKNew.csproj", "{56D80626-06F1-49AE-A911-3F3A20888968}"
 EndProject
 Global
@@ -96,4 +100,16 @@
 		{683C29F1-9A43-4998-B58A-C477B86B7A64}.Release|x86.ActiveCfg = Release|x86
 		{683C29F1-9A43-4998-B58A-C477B86B7A64}.Release|x86.Build.0 = Release|x86
+		{56D80626-06F1-49AE-A911-3F3A20888968}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{56D80626-06F1-49AE-A911-3F3A20888968}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{56D80626-06F1-49AE-A911-3F3A20888968}.Debug|x64.ActiveCfg = Debug|x64
+		{56D80626-06F1-49AE-A911-3F3A20888968}.Debug|x64.Build.0 = Debug|x64
+		{56D80626-06F1-49AE-A911-3F3A20888968}.Debug|x86.ActiveCfg = Debug|x86
+		{56D80626-06F1-49AE-A911-3F3A20888968}.Debug|x86.Build.0 = Debug|x86
+		{56D80626-06F1-49AE-A911-3F3A20888968}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{56D80626-06F1-49AE-A911-3F3A20888968}.Release|Any CPU.Build.0 = Release|Any CPU
+		{56D80626-06F1-49AE-A911-3F3A20888968}.Release|x64.ActiveCfg = Release|x64
+		{56D80626-06F1-49AE-A911-3F3A20888968}.Release|x64.Build.0 = Release|x64
+		{56D80626-06F1-49AE-A911-3F3A20888968}.Release|x86.ActiveCfg = Release|x86
+		{56D80626-06F1-49AE-A911-3F3A20888968}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/BinaryVectorComparers/AverageBitBinaryVectorComparer.cs
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/BinaryVectorComparers/AverageBitBinaryVectorComparer.cs	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/BinaryVectorComparers/AverageBitBinaryVectorComparer.cs	(revision 12483)
@@ -0,0 +1,31 @@
+﻿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 : BinaryVectorComparer {
+
+    [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);
+    }
+
+    public static double AverageBit(BinaryVector x) {
+      return x.Select((b, i) => new { b, i }).Where(v => v.b).Average(v => v.i);
+    }
+
+    public override int Compare(BinaryVector x, BinaryVector y) {
+      return (AverageBit(x) - AverageBit(y)).CompareTo(0);
+    }
+  }
+}
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/BinaryVectorComparers/BinaryVectorComparer.cs
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/BinaryVectorComparers/BinaryVectorComparer.cs	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/BinaryVectorComparers/BinaryVectorComparer.cs	(revision 12483)
@@ -0,0 +1,32 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Encodings.BinaryVectorEncoding;
+
+namespace HeuristicLab.Problems.NK {
+
+  public interface IBinaryVectorComparer : INamedItem, IComparer<BinaryVector> { }
+
+  [StorableClass]
+  public abstract class BinaryVectorComparer : NamedItem, IBinaryVectorComparer {
+
+    public override bool CanChangeName { get { return false; } }
+    public override bool CanChangeDescription { get { return false; } }
+
+    [StorableConstructor]
+    protected BinaryVectorComparer(bool serializing) : base(serializing) { }
+    protected BinaryVectorComparer(BinaryVectorComparer original, Cloner cloner)
+      : base(original, cloner) { }
+    public BinaryVectorComparer() {
+      name = ItemName;
+      description = ItemDescription;
+    }    
+
+    public abstract int Compare(BinaryVector x, BinaryVector y);
+  }  
+}
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/BinaryVectorComparers/LexicographicBinaryVectorComparer.cs
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/BinaryVectorComparers/LexicographicBinaryVectorComparer.cs	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/BinaryVectorComparers/LexicographicBinaryVectorComparer.cs	(revision 12483)
@@ -0,0 +1,37 @@
+﻿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 : BinaryVectorComparer {
+
+    [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 override 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: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/BinaryVectorComparers/MedianBitBinaryVectorComparer.cs
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/BinaryVectorComparers/MedianBitBinaryVectorComparer.cs	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/BinaryVectorComparers/MedianBitBinaryVectorComparer.cs	(revision 12483)
@@ -0,0 +1,34 @@
+﻿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 : BinaryVectorComparer {
+
+    [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);
+    }
+
+    public 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 override int Compare(BinaryVector x, BinaryVector y) {
+      return MedianBit(x) - MedianBit(y);
+    }
+  }
+}
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/HeuristicLab.Problems.NKNew.csproj
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/HeuristicLab.Problems.NKNew.csproj	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/HeuristicLab.Problems.NKNew.csproj	(revision 12483)
@@ -0,0 +1,212 @@
+﻿<?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>{56D80626-06F1-49AE-A911-3F3A20888968}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.NKNew</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.NKNew-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="HeuristicLab.Collections-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Data-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Encodings.BinaryVectorEncoding-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Encodings.BinaryVectorEncoding-3.3.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.Operators-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Operators-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Optimization-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Parameters-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Parameters-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.Binary-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Problems.Binary-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Random-3.3">
+      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Random-3.3.dll</HintPath>
+    </Reference>
+    <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\BinaryVectorComparer.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="NKLandscapeNew.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="HeuristicLabProblemsNKPlugin.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="HeuristicLabProblemsNKPlugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\Properties\AssemblyInfo.cs.frame" "%25ProjectDir%25\Properties\AssemblyInfo.cs"
+SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\HeuristicLabProblemsNKPlugin.cs.frame" "%25ProjectDir%25\HeuristicLabProblemsNKPlugin.cs"</PreBuildEvent>
+  </PropertyGroup>
+  <PropertyGroup>
+    <PostBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+set Platform=$(PlatformName)
+set Configuration=$(ConfigurationName)</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: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/HeuristicLabProblemsNKPlugin.cs.frame
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/HeuristicLabProblemsNKPlugin.cs.frame	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/HeuristicLabProblemsNKPlugin.cs.frame	(revision 12483)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 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.NKNew", "3.3.0.$WCREV$")]
+  [PluginFile("HeuristicLab.Problems.NKNew-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.Random", "3.3")]    
+  public class HeuristicProblemsNKNewPlugin : PluginBase { }
+}
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/INKMoveEvaluator.cs
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/INKMoveEvaluator.cs	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/INKMoveEvaluator.cs	(revision 12483)
@@ -0,0 +1,5 @@
+﻿
+using HeuristicLab.Optimization;
+namespace HeuristicLab.Problems.NK {
+  public interface INKMoveEvaluator : ISingleObjectiveMoveEvaluator, IMoveOperator { }
+}
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/InteractionInitializers/IInteractionInitializer.cs
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/InteractionInitializers/IInteractionInitializer.cs	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/InteractionInitializers/IInteractionInitializer.cs	(revision 12483)
@@ -0,0 +1,12 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Problems.NK {
+  public interface IInteractionInitializer : INamedItem {
+    BoolMatrix InitializeInterations(int length, int nComponents, int nInteractions, IRandom random);
+  }
+}
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/InteractionInitializers/IncreasingBlockSizeInteractionsInitializer.cs
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/InteractionInitializers/IncreasingBlockSizeInteractionsInitializer.cs	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/InteractionInitializers/IncreasingBlockSizeInteractionsInitializer.cs	(revision 12483)
@@ -0,0 +1,64 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Encodings.BinaryVectorEncoding;
+using HeuristicLab.Parameters;
+using HeuristicLab.PluginInfrastructure;
+
+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 class IncreasingBlockSizeInteractionsInitializer : ParameterizedNamedItem, IInteractionInitializer {    
+    
+    [StorableConstructor]
+    protected IncreasingBlockSizeInteractionsInitializer(bool serializing) : base(serializing) { }
+    protected IncreasingBlockSizeInteractionsInitializer(IncreasingBlockSizeInteractionsInitializer original, Cloner cloner) : base(original, cloner) { }
+    public IncreasingBlockSizeInteractionsInitializer() {      
+    }
+    
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new IncreasingBlockSizeInteractionsInitializer(this, cloner);
+    }    
+
+    #region IInteractionInitializer Members
+    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;
+    }
+    #endregion
+  }
+}
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/InteractionInitializers/LimitedRandomInteractionsInitializer.cs
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/InteractionInitializers/LimitedRandomInteractionsInitializer.cs	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/InteractionInitializers/LimitedRandomInteractionsInitializer.cs	(revision 12483)
@@ -0,0 +1,84 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Encodings.BinaryVectorEncoding;
+using HeuristicLab.Parameters;
+using HeuristicLab.PluginInfrastructure;
+
+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 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 ValueParameter<IntValue> MaximumDistanceParameter {
+      get { return (ValueParameter<IntValue>)Parameters["MaximumDistance"]; }
+    }
+    public ValueParameter<DoubleValue> MaximumDistanceRatioParameter {
+      get { return (ValueParameter<DoubleValue>)Parameters["MaximumDistanceRatio"]; }
+    }    
+
+    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 == 0 ? length : (int)Math.Round(maxDistRatio*length));      
+      if (maxBitDist * 2 < nInteractions)
+        maxBitDist = (int)Math.Ceiling(0.5 * nInteractions);
+      return maxBitDist;
+    }    
+        
+    [StorableConstructor]
+    protected LimitedRandomInteractionsInitializer(bool serializing) : base(serializing) { }
+    protected 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);
+    }    
+
+    #region IInteractionInitializer Members
+    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;      
+    }
+    #endregion
+  }
+}
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/InteractionInitializers/RandomInteractionsInitializer.cs
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/InteractionInitializers/RandomInteractionsInitializer.cs	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/InteractionInitializers/RandomInteractionsInitializer.cs	(revision 12483)
@@ -0,0 +1,51 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.NK {
+
+  [Item("RandomInteractionsInitializer", "Randomly assignes interactions across all bits")]
+  [StorableClass]
+  public class RandomInteractionsInitializer : NamedItem, IInteractionInitializer {
+
+    public override bool CanChangeName { get { return false; } }
+    public override bool CanChangeDescription { get { return false; } }
+
+
+    [StorableConstructor]
+    protected RandomInteractionsInitializer(bool serializing) : base(serializing) { }
+    protected RandomInteractionsInitializer(RandomInteractionsInitializer original, Cloner cloner) : base(original, cloner) { }
+    public RandomInteractionsInitializer() {
+      name = ItemName;
+      description = ItemDescription;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new RandomInteractionsInitializer(this, cloner);
+    }
+
+    #region IInteractionInitializer Members
+    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;      
+    }
+    #endregion
+  }
+}
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/InteractionInitializers/SortedRandomInteractionsInitializer.cs
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/InteractionInitializers/SortedRandomInteractionsInitializer.cs	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/InteractionInitializers/SortedRandomInteractionsInitializer.cs	(revision 12483)
@@ -0,0 +1,79 @@
+﻿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 assigned interactions across all bits and sorts components according to bit affinity.")]
+  [StorableClass]
+  public class SortedRandomInteractionsInitializer : ParameterizedNamedItem, IInteractionInitializer {
+
+    public IConstrainedValueParameter<IBinaryVectorComparer> ComparerParameter {
+      get { return (IConstrainedValueParameter<IBinaryVectorComparer>)Parameters["Comparer"]; }
+    }
+
+    public IBinaryVectorComparer Comparer {
+      get { return ComparerParameter.Value; }
+    }
+
+    [StorableConstructor]
+    protected SortedRandomInteractionsInitializer(bool serializing) : base(serializing) { }
+    protected SortedRandomInteractionsInitializer(SortedRandomInteractionsInitializer original, Cloner cloner) : base(original, cloner) { }
+    public SortedRandomInteractionsInitializer() {
+      AddComparerParameter();
+    }
+
+    private void AddComparerParameter() {
+      Parameters.Add(new ConstrainedValueParameter<IBinaryVectorComparer>("Comparer", "Comparison for sorting of component functions"));
+      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);
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      try {
+        IBinaryVectorComparer comparer = Comparer;
+      }
+      catch {
+        Parameters.Remove("Comparer");
+        AddComparerParameter();
+      }
+    }
+
+    #region IInteractionInitializer Members
+    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;
+    }
+    #endregion
+  }
+}
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/NKBitFlipMoveEvaluator.cs
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/NKBitFlipMoveEvaluator.cs	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/NKBitFlipMoveEvaluator.cs	(revision 12483)
@@ -0,0 +1,71 @@
+﻿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 LookupParameter<BinaryVector> MovedBinaryVectorParameter {
+      get { return (LookupParameter<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;
+
+      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 = NKLandscapeNew.Evaluate(moved, interactions, weights, seed, out f_i);
+      } else {
+        long x = NKLandscapeNew.Encode(binaryVector);
+        long y = NKLandscapeNew.Encode(moved);
+        long[] g = NKLandscapeNew.Encode(interactions);
+        double[] w = NKLandscapeNew.Normalize(weights);
+        foreach (var c in affectedFitnessComponents) {
+          moveQuality -= w[c % w.Length] * NKLandscapeNew.F_i(x, c, g[c], seed);
+          moveQuality += w[c % w.Length] * NKLandscapeNew.F_i(y, c, g[c], seed);
+        }
+      }
+
+      if (MoveQualityParameter.ActualValue == null) MoveQualityParameter.ActualValue = new DoubleValue(moveQuality);
+      else MoveQualityParameter.ActualValue.Value = moveQuality;
+      return base.Apply();
+    }
+  }
+}
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/NKLandscapeNew.cs
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/NKLandscapeNew.cs	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/NKLandscapeNew.cs	(revision 12483)
@@ -0,0 +1,247 @@
+﻿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.Problems.NK.WeightInitializers;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.Problems.NK {
+
+  [Item("NK Landscape New", "Represents an NK landscape optimization problem.")]
+  [Creatable("Problems")]
+  [StorableClass]
+  public sealed class NKLandscapeNew : BinaryProblem {
+    public override bool Maximization {
+      get { return false; }
+    }
+
+    #region Parameters
+    public ValueParameter<BoolMatrix> GeneInteractionsParameter {
+      get { return (ValueParameter<BoolMatrix>)Parameters["GeneInteractions"]; }
+    }
+    public ValueParameter<IntValue> InteractionSeedParameter {
+      get { return (ValueParameter<IntValue>)Parameters["InteractionSeed"]; }
+    }
+    public ValueParameter<IntValue> NrOfInteractionsParameter {
+      get { return (ValueParameter<IntValue>)Parameters["NrOfInteractions"]; }
+    }
+    public ValueParameter<IntValue> NrOfFitnessComponentsParameter {
+      get { return (ValueParameter<IntValue>)Parameters["NrOfFitnessComponents"]; }
+    }
+    public ValueParameter<DoubleArray> WeightsParameter {
+      get { return (ValueParameter<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; }
+    }
+    #endregion
+
+    [ThreadStatic]
+    private static MersenneTwister random;
+    public static MersenneTwister Random {
+      get {
+        if (random == null) {
+          random = new MersenneTwister();
+        }
+        return random;
+      }
+    }
+
+    [ThreadStatic]
+    private static HashAlgorithm hashAlgorithm;
+
+    public static HashAlgorithm HashAlgorithm {
+      get {
+        if (hashAlgorithm == null) {
+          hashAlgorithm = HashAlgorithm.Create("MD5");
+        }
+        return hashAlgorithm;
+      }
+    }
+
+    [StorableConstructor]
+    private NKLandscapeNew(bool deserializing) : base(deserializing) { }
+    private NKLandscapeNew(NKLandscapeNew original, Cloner cloner)
+      : base(original, cloner) {
+      RegisterEventHandlers();
+    }
+    public NKLandscapeNew()
+      : base() {
+      Parameters.Add(new ValueParameter<BoolMatrix>("GeneInteractions", "Every column gives the participating genes for each fitness component"));
+      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<DoubleArray>("Weights", "The weights for the component functions. If shorted, will be repeated.", new DoubleArray(new[] { 1.0 })));
+      Parameters.Add(new OptionalConstrainedValueParameter<IInteractionInitializer>("InteractionInitializer", "Initialize interactions within the component functions."));
+      Parameters.Add(new OptionalConstrainedValueParameter<IWeightsInitializer>("WeightsInitializer", "Operator to initialize weights distribution"));
+
+      InitializeInteractionInitializerParameter();
+      InitializeWeightsInitializerParameter();
+
+      InitializeOperators();
+      RegisterEventHandlers();
+      InitializeInteractions();
+    }
+
+    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 NKLandscapeNew(this, cloner);
+    }
+
+    #region Events
+    protected override void LengthParameter_ValueChanged(object sender, EventArgs e) {
+      BestKnownQualityParameter.Value = new DoubleValue(Length);
+      NrOfFitnessComponentsParameter.Value = new IntValue(Length);
+    }
+    #endregion
+
+    #region Helpers
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterEventHandlers();
+    }
+
+    private void RegisterEventHandlers() {
+      NrOfInteractionsParameter.ValueChanged += InteractionParameterChanged;
+      NrOfInteractionsParameter.Value.ValueChanged += InteractionParameterChanged;
+      NrOfFitnessComponentsParameter.ValueChanged += InteractionParameterChanged;
+      NrOfFitnessComponentsParameter.Value.ValueChanged += InteractionParameterChanged;
+      InteractionInitializerParameter.ValueChanged += InteractionInitializerParameter_ValueChanged;
+      WeightsInitializerParameter.ValueChanged += WeightsInitializerParameter_ValueChanged;
+    }
+
+    void WeightsInitializerParameter_ValueChanged(object sender, EventArgs e) {
+      InitializeWeights();
+    }
+
+    void InteractionInitializerParameter_ValueChanged(object sender, EventArgs e) {
+      InitializeInteractions();
+    }
+
+    private void InteractionParameterChanged(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,
+          NrOfFitnessComponentsParameter.Value.Value,
+          NrOfInteractionsParameter.Value.Value, Random);
+    }
+
+    private void InitializeWeights() {
+      if (WeightsInitializerParameter.Value != null)
+        WeightsParameter.Value = new DoubleArray(
+          WeightsInitializerParameter.Value.GetWeights(NrOfFitnessComponentsParameter.Value.Value)
+          .ToArray());
+    }
+    #endregion
+
+    #region Evaluation function
+    public static long Hash(long x) {
+      return BitConverter.ToInt64(HashAlgorithm.ComputeHash(BitConverter.GetBytes(x), 0, 8), 0);
+    }
+
+    public static double F_i(long x, long i, long g_i, long seed) {
+      return Math.Abs((double)Hash((x & g_i) ^ Hash(g_i ^ Hash(i ^ seed)))) / long.MaxValue;
+    }
+
+    public static double F(long x, long[] g, double[] w, long seed, ref double[] f_i) {
+      double value = 0;
+      for (int i = 0; i < g.Length; i++) {
+        f_i[i] = F_i(x, i, g[i], seed);
+        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) {
+      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);
+    }
+
+    public override double Evaluate(BinaryVector vector, IRandom random) {
+      double[] f_i;//not used atm
+      double quality = Evaluate(vector, GeneInteractions, Weights, InteractionSeed.Value, out f_i);
+      return quality;
+    }
+    #endregion
+  }
+}
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/NKMoveEvaluator.cs
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/NKMoveEvaluator.cs	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/NKMoveEvaluator.cs	(revision 12483)
@@ -0,0 +1,48 @@
+﻿using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.BinaryVectorEncoding;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+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 Lanscape.")]
+  [StorableClass]
+  public abstract class NKMoveEvaluator : SingleSuccessorOperator, INKMoveEvaluator, IMoveOperator, 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 LookupParameter<BoolMatrix> GeneInteractionsParameter {
+      get { return (LookupParameter<BoolMatrix>)Parameters["GeneInteractions"]; }
+    }
+    public LookupParameter<IntValue> InteractionSeedParameter {
+      get { return (LookupParameter<IntValue>)Parameters["InteractionSeed"]; }
+    }
+    public LookupParameter<DoubleArray> WeightsParameter {
+      get { return (LookupParameter<DoubleArray>)Parameters["Weights"]; }
+    }
+
+    [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."));
+    }
+  }
+}
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/Properties/AssemblyInfo.cs.frame
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/Properties/AssemblyInfo.cs.frame	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/Properties/AssemblyInfo.cs.frame	(revision 12483)
@@ -0,0 +1,37 @@
+﻿using System.Reflection;
+using System.Runtime.CompilerServices;
+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 Lanscape Analysis Test Problem")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2011 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("1.0.*")]
+[assembly: AssemblyVersion("3.3.0.3000")]
+[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
+
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/EqualWeightsInitializer.cs
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/EqualWeightsInitializer.cs	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/EqualWeightsInitializer.cs	(revision 12483)
@@ -0,0 +1,39 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Problems.NK.WeightInitializers {
+  
+  [Item("EqualWeightsInitializer", "Initializes all weights to 1.0")]
+  public class EqualWeightsInitializer : NamedItem, IWeightsInitializer {
+
+    public override bool CanChangeName { get { return false; } }
+    public override bool CanChangeDescription { get { return false; } }
+
+    [StorableConstructor]
+    protected EqualWeightsInitializer(bool deserializing) : base(deserializing) { }
+    protected EqualWeightsInitializer(EqualWeightsInitializer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public EqualWeightsInitializer() {
+      name = ItemName;
+      description = ItemDescription;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new EqualWeightsInitializer(this, cloner);
+    }
+
+    #region IWeightsInitializer Members
+
+    public IEnumerable<double> GetWeights(int nComponents) {
+      return new[] { 1.0 };
+    }
+
+    #endregion
+  }
+
+}
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/ExponentialDistributionWeightsInitializer.cs
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/ExponentialDistributionWeightsInitializer.cs	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/ExponentialDistributionWeightsInitializer.cs	(revision 12483)
@@ -0,0 +1,49 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+using HeuristicLab.Parameters;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Problems.NK.WeightInitializers {
+
+  [Item("ExponentialDistributionWeightsInitializer", "Assigned exponentially decreasing weights using the rate parameter lambad.")]
+  public class ExponentialDistributionWeightsInitializer : ParameterizedNamedItem, IWeightsInitializer {
+
+    public override bool CanChangeName { get { return false; } }
+    public override bool CanChangeDescription { get { return false; } }
+    public ValueParameter<DoubleValue> LambdaParameter {
+      get { return (ValueParameter<DoubleValue>)Parameters["Lambda"]; }
+    }    
+
+    [StorableConstructor]
+    protected ExponentialDistributionWeightsInitializer(bool deserializing) : base(deserializing) { }
+    protected ExponentialDistributionWeightsInitializer(ExponentialDistributionWeightsInitializer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public ExponentialDistributionWeightsInitializer() {      
+      Parameters.Add(new ValueParameter<DoubleValue>("Lambda", "The rate paramter of the exponential distribution.", new DoubleValue(1.0)));
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ExponentialDistributionWeightsInitializer(this, cloner);
+    }
+
+    public static double f(double x, double lambda) {
+      if (x < 0)
+        return 0;
+      return lambda * Math.Exp(-lambda * x);
+    }
+
+    #region IWeightsInitializer Members
+    public IEnumerable<double> GetWeights(int nComponents) {
+      double lambda = LambdaParameter.Value.Value;
+      for (int i = 0; i<nComponents; i++)
+        yield return f(i, lambda);        
+    }
+    #endregion
+  }
+
+}
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/ExponentialWeightsInitializer.cs
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/ExponentialWeightsInitializer.cs	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/ExponentialWeightsInitializer.cs	(revision 12483)
@@ -0,0 +1,40 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Problems.NK.WeightInitializers {
+
+  [Item("ExponentialWeightsInitializer", "Assigned exponentially increasing weights.")]
+  public class ExponentialWeightsInitializer : NamedItem, IWeightsInitializer {
+
+    public override bool CanChangeName { get { return false; } }
+    public override bool CanChangeDescription { get { return false; } }
+
+    [StorableConstructor]
+    protected ExponentialWeightsInitializer(bool deserializing) : base(deserializing) { }
+    protected ExponentialWeightsInitializer(ExponentialWeightsInitializer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public ExponentialWeightsInitializer() {
+      name = ItemName;
+      description = ItemDescription;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ExponentialWeightsInitializer(this, cloner);
+    }
+
+    #region IWeightsInitializer Members
+
+    public IEnumerable<double> GetWeights(int nComponents) {
+      for (int i = 0; i<nComponents; i++)
+        yield return Math.Pow(2, i);
+    }
+
+    #endregion
+  }
+
+}
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/IWeightsInitializer.cs
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/IWeightsInitializer.cs	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/IWeightsInitializer.cs	(revision 12483)
@@ -0,0 +1,13 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Problems.NK {
+
+  public interface IWeightsInitializer : INamedItem {
+    IEnumerable<double> GetWeights(int nComponents);
+  }
+
+}
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/LinearWeightsInitializer.cs
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/LinearWeightsInitializer.cs	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/LinearWeightsInitializer.cs	(revision 12483)
@@ -0,0 +1,40 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Problems.NK.WeightInitializers {
+
+  [Item("LinearWeightsInitializer", "Assigned linear increasing weights.")]
+  public class LinearWeightsInitializer : NamedItem, IWeightsInitializer {
+
+    public override bool CanChangeName { get { return false; } }
+    public override bool CanChangeDescription { get { return false; } }
+
+    [StorableConstructor]
+    protected LinearWeightsInitializer(bool deserializing) : base(deserializing) { }
+    protected LinearWeightsInitializer(LinearWeightsInitializer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public LinearWeightsInitializer() {
+      name = ItemName;
+      description = ItemDescription;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new LinearWeightsInitializer(this, cloner);
+    }
+
+    #region IWeightsInitializer Members
+
+    public IEnumerable<double> GetWeights(int nComponents) {
+      for (int i = 0; i<nComponents; i++)
+        yield return i;
+    }
+
+    #endregion
+  }
+
+}
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/ReverseExponentialWeightsInitializer.cs
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/ReverseExponentialWeightsInitializer.cs	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/ReverseExponentialWeightsInitializer.cs	(revision 12483)
@@ -0,0 +1,40 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Problems.NK.WeightInitializers {
+
+  [Item("ReverseExponentialWeightsInitializer", "Assigned exponentially decreasing weights.")]
+  public class ReverseExponentialWeightsInitializer : NamedItem, IWeightsInitializer {
+
+    public override bool CanChangeName { get { return false; } }
+    public override bool CanChangeDescription { get { return false; } }
+
+    [StorableConstructor]
+    protected ReverseExponentialWeightsInitializer(bool deserializing) : base(deserializing) { }
+    protected ReverseExponentialWeightsInitializer(ReverseExponentialWeightsInitializer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public ReverseExponentialWeightsInitializer() {
+      name = ItemName;
+      description = ItemDescription;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ReverseExponentialWeightsInitializer(this, cloner);
+    }
+
+    #region IWeightsInitializer Members
+
+    public IEnumerable<double> GetWeights(int nComponents) {
+      for (int i = nComponents-1; i>=0; i--)
+        yield return Math.Pow(2, i);
+    }
+
+    #endregion
+  }
+
+}
Index: branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/ReverseLinearWeightsInitializer.cs
===================================================================
--- branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/ReverseLinearWeightsInitializer.cs	(revision 12483)
+++ branches/FitnessLandscapeAnalysis/HeuristicLab.Problems.NKNew/WeightInitializers/ReverseLinearWeightsInitializer.cs	(revision 12483)
@@ -0,0 +1,40 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Problems.NK.WeightInitializers {
+
+  [Item("ReverseLienarWeightsInitializer", "Assigned exponentially decreasing weights.")]
+  public class ReverseLinearWeightsInitializer : NamedItem, IWeightsInitializer {
+
+    public override bool CanChangeName { get { return false; } }
+    public override bool CanChangeDescription { get { return false; } }
+
+    [StorableConstructor]
+    protected ReverseLinearWeightsInitializer(bool deserializing) : base(deserializing) { }
+    protected ReverseLinearWeightsInitializer(ReverseLinearWeightsInitializer original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public ReverseLinearWeightsInitializer() {
+      name = ItemName;
+      description = ItemDescription;
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ReverseLinearWeightsInitializer(this, cloner);
+    }
+
+    #region IWeightsInitializer Members
+
+    public IEnumerable<double> GetWeights(int nComponents) {
+      for (int i = nComponents-1; i>=0; i--)
+        yield return i;
+    }
+
+    #endregion
+  }
+
+}
