Index: /trunk/sources/HeuristicLab 3.3.sln
===================================================================
--- /trunk/sources/HeuristicLab 3.3.sln	(revision 10604)
+++ /trunk/sources/HeuristicLab 3.3.sln	(revision 10605)
@@ -387,4 +387,8 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Scripting.Views-3.3", "HeuristicLab.Scripting.Views\3.3\HeuristicLab.Scripting.Views-3.3.csproj", "{0C2917C8-7AA8-4E18-800A-C4D064F992ED}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.ParameterOptimization-3.3", "HeuristicLab.Problems.ParameterOptimization\3.3\HeuristicLab.Problems.ParameterOptimization-3.3.csproj", "{D2C39FBA-A1D5-403A-9211-B0A299A76313}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3", "HeuristicLab.Problems.ExternalEvaluation.Scilab\3.3\HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj", "{C633FB23-BAE6-448E-BF5D-E1F9A839B5ED}"
 EndProject
 Global
@@ -1886,4 +1890,24 @@
 		{0C2917C8-7AA8-4E18-800A-C4D064F992ED}.Release|x86.ActiveCfg = Release|x86
 		{0C2917C8-7AA8-4E18-800A-C4D064F992ED}.Release|x86.Build.0 = Release|x86
+		{D2C39FBA-A1D5-403A-9211-B0A299A76313}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D2C39FBA-A1D5-403A-9211-B0A299A76313}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D2C39FBA-A1D5-403A-9211-B0A299A76313}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{D2C39FBA-A1D5-403A-9211-B0A299A76313}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{D2C39FBA-A1D5-403A-9211-B0A299A76313}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D2C39FBA-A1D5-403A-9211-B0A299A76313}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D2C39FBA-A1D5-403A-9211-B0A299A76313}.Release|x64.ActiveCfg = Release|Any CPU
+		{D2C39FBA-A1D5-403A-9211-B0A299A76313}.Release|x86.ActiveCfg = Release|Any CPU
+		{C633FB23-BAE6-448E-BF5D-E1F9A839B5ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C633FB23-BAE6-448E-BF5D-E1F9A839B5ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C633FB23-BAE6-448E-BF5D-E1F9A839B5ED}.Debug|x64.ActiveCfg = Debug|x64
+		{C633FB23-BAE6-448E-BF5D-E1F9A839B5ED}.Debug|x64.Build.0 = Debug|x64
+		{C633FB23-BAE6-448E-BF5D-E1F9A839B5ED}.Debug|x86.ActiveCfg = Debug|x86
+		{C633FB23-BAE6-448E-BF5D-E1F9A839B5ED}.Debug|x86.Build.0 = Debug|x86
+		{C633FB23-BAE6-448E-BF5D-E1F9A839B5ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{C633FB23-BAE6-448E-BF5D-E1F9A839B5ED}.Release|Any CPU.Build.0 = Release|Any CPU
+		{C633FB23-BAE6-448E-BF5D-E1F9A839B5ED}.Release|x64.ActiveCfg = Release|x64
+		{C633FB23-BAE6-448E-BF5D-E1F9A839B5ED}.Release|x64.Build.0 = Release|x64
+		{C633FB23-BAE6-448E-BF5D-E1F9A839B5ED}.Release|x86.ActiveCfg = Release|x86
+		{C633FB23-BAE6-448E-BF5D-E1F9A839B5ED}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: /trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj	(revision 10605)
+++ /trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.csproj	(revision 10605)
@@ -0,0 +1,191 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{C633FB23-BAE6-448E-BF5D-E1F9A839B5ED}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.ExternalEvaluation.Scilab</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SccProjectName>Svn</SccProjectName>
+    <SccLocalPath>Svn</SccLocalPath>
+    <SccAuxPath>Svn</SccAuxPath>
+    <SccProvider>SubversionScc</SccProvider>
+  </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>
+  </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>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>..\..\bin\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="DotNetScilab-1.0, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\bin\DotNetScilab-1.0.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="HeuristicLab.DotNetScilab-1.0, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\bin\HeuristicLab.DotNetScilab-1.0.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <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="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ScilabParameterVectorEvaluator.cs" />
+    <Compile Include="ScilabParameterOptimizationProblem.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.RealVectorEncoding\3.3\HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj">
+      <Project>{bb6d334a-4bb6-4674-9883-31a6ebb32cab}</Project>
+      <Name>HeuristicLab.Encodings.RealVectorEncoding-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.ParameterOptimization\3.3\HeuristicLab.Problems.ParameterOptimization-3.3.csproj">
+      <Project>{d2c39fba-a1d5-403a-9211-b0a299a76313}</Project>
+      <Name>HeuristicLab.Problems.ParameterOptimization-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>
+  <!-- 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.ExternalEvaluation.Scilab/3.3/Plugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/Plugin.cs.frame	(revision 10605)
+++ /trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/Plugin.cs.frame	(revision 10605)
@@ -0,0 +1,77 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.PluginInfrastructure;
+using Microsoft.Win32;
+
+namespace HeuristicLab.Problems.ExternalEvaluation.Scilab {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Problems.ExternalEvaluation.Scilab plugin.
+  /// </summary>
+  [Plugin("HeuristicLab.Problems.ExternalEvaluation.Scilab", "3.3.9.$WCREV$")]
+  [PluginFile("HeuristicLab.Problems.ExternalEvaluation.Scilab-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.DotNetScilab", "1.0")]
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.RealVectorEncoding", "3.3")]
+  [PluginDependency("HeuristicLab.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.ParameterOptimization", "3.3")]
+  public class HeuristicLabProblemsExternalEvaluationScilabPlugin : PluginBase {
+    private const string registryKey = @"SOFTWARE\Scilab";
+    private const string scilab_Install = @"LASTINSTALL";
+    private const string scilab_PATH = @"SCIPATH";
+
+    public override void OnLoad() {
+      base.OnLoad();
+
+      var currentPath = Environment.GetEnvironmentVariable("path");
+      if (currentPath == null) return;
+
+      var scilabPath = GetScilabInstallPath();
+      if (string.IsNullOrEmpty(scilabPath)) return;
+
+      Environment.SetEnvironmentVariable("path", scilabPath + ";" + currentPath);
+    }
+
+    private string GetScilabInstallPath() {
+      using (var registryLocalMachine = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Default)) {
+        using (var registryScilab = registryLocalMachine.OpenSubKey(registryKey)) {
+          if (registryScilab == null) return string.Empty;
+          var scilabVersion = registryScilab.GetValue(scilab_Install);
+          if (scilabVersion == null) return string.Empty;
+          using (var registryScilabVersion = registryScilab.OpenSubKey(scilabVersion.ToString())) {
+            if (registryScilabVersion == null) return string.Empty;
+            var scilabPath = registryScilabVersion.GetValue(scilab_PATH);
+            if (scilabPath == null) return string.Empty;
+            string path = scilabPath.ToString();
+            path += @"\bin";
+            return path;
+          }
+        }
+      }
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/Properties/AssemblyInfo.cs.frame	(revision 10605)
+++ /trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/Properties/AssemblyInfo.cs.frame	(revision 10605)
@@ -0,0 +1,55 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.ExternalEvaluation.Scilab")]
+[assembly: AssemblyDescription("HeuristicLab problems for real valued parameter optimization performed in Scilab.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2013 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("B211BD50-DE67-4AB1-8A43-DF3C5222B1D5")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.8.$WCREV$")]
Index: /trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/ScilabParameterOptimizationProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/ScilabParameterOptimizationProblem.cs	(revision 10605)
+++ /trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/ScilabParameterOptimizationProblem.cs	(revision 10605)
@@ -0,0 +1,83 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.ParameterOptimization;
+
+namespace HeuristicLab.Problems.ExternalEvaluation.Scilab {
+  [Item("Scilab Parameter Optimization Problem", "Optimization of a parameter vector which is evaluated in Scilab.")]
+  [StorableClass]
+  [Creatable("Problems")]
+  public class ScilabParameterOptimizationProblem : ParameterOptimizationProblem {
+    private const string QualityVariableParameterName = "QualityVariableName";
+    private const string ScilabEvaluationScriptParameterName = "ScilabEvaluationScript";
+    private const string ScilabInitializationScriptParameterName = "ScilabInitializationScript";
+
+    #region parameters
+    public IFixedValueParameter<StringValue> QualityVariableParameter {
+      get { return (IFixedValueParameter<StringValue>)Parameters[QualityVariableParameterName]; }
+    }
+    public IFixedValueParameter<TextFileValue> ScilabEvaluationScriptParameter {
+      get { return (IFixedValueParameter<TextFileValue>)Parameters[ScilabEvaluationScriptParameterName]; }
+    }
+    public IFixedValueParameter<TextFileValue> ScilabInitializationScriptParameter {
+      get { return (IFixedValueParameter<TextFileValue>)Parameters[ScilabInitializationScriptParameterName]; }
+    }
+    #endregion
+
+    #region properties
+    public string QualityVariable {
+      get { return QualityVariableParameter.Value.Value; }
+      set { QualityVariableParameter.Value.Value = value; }
+    }
+    public TextFileValue ScilabEvaluationScript {
+      get { return ScilabEvaluationScriptParameter.Value; }
+    }
+    public TextFileValue ScilabInitializationScript {
+      get { return ScilabInitializationScriptParameter.Value; }
+    }
+
+    #endregion
+
+    [StorableConstructor]
+    protected ScilabParameterOptimizationProblem(bool deserializing) : base(deserializing) { }
+    protected ScilabParameterOptimizationProblem(ScilabParameterOptimizationProblem original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ScilabParameterOptimizationProblem(this, cloner);
+    }
+
+    public ScilabParameterOptimizationProblem()
+      : base(new ScilabParameterVectorEvaluator()) {
+      Parameters.Add(new FixedValueParameter<StringValue>(QualityVariableParameterName, "The name of the quality variable of the Scilab script.", new StringValue("quality")));
+      Parameters.Add(new FixedValueParameter<TextFileValue>(ScilabEvaluationScriptParameterName, "The path to the Scilab evaluation script.", new TextFileValue()));
+      Parameters.Add(new FixedValueParameter<TextFileValue>(ScilabInitializationScriptParameterName, "The path to a Scilab script the should be execute before the evaluation starts.", new TextFileValue()));
+
+      ScilabEvaluationScript.FileDialogFilter = @"Scilab Scripts|*.sce|All files|*.*";
+      ScilabInitializationScript.FileDialogFilter = @"Scilab Scripts|*.sce|All files|*.*";
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/ScilabParameterVectorEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/ScilabParameterVectorEvaluator.cs	(revision 10605)
+++ /trunk/sources/HeuristicLab.Problems.ExternalEvaluation.Scilab/3.3/ScilabParameterVectorEvaluator.cs	(revision 10605)
@@ -0,0 +1,141 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.IO;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.ParameterOptimization;
+using ScilabConnector = DotNetScilab.Scilab;
+
+namespace HeuristicLab.Problems.ExternalEvaluation.Scilab {
+  [Item("SciLabParameterVectorEvaluator", "An evaluator which takes a parameter vector and returns a quality value, calculated by a Scilab script.")]
+  [StorableClass]
+  public sealed class ScilabParameterVectorEvaluator : ParameterVectorEvaluator {
+    private const string QualityVariableParameterName = "QualityVariableName";
+    private const string ScilabEvaluationScriptParameterName = "ScilabEvaluationScript";
+    private const string ScilabInitializationScriptParameterName = "ScilabInitializationScript";
+
+    #region parameters
+    public ILookupParameter<StringValue> QualityVariableParameter {
+      get { return (ILookupParameter<StringValue>)Parameters[QualityVariableParameterName]; }
+    }
+    public ILookupParameter<TextFileValue> ScilabEvaluationScriptParameter {
+      get { return (ILookupParameter<TextFileValue>)Parameters[ScilabEvaluationScriptParameterName]; }
+    }
+    public ILookupParameter<TextFileValue> ScilabInitializationScriptParameter {
+      get { return (ILookupParameter<TextFileValue>)Parameters[ScilabInitializationScriptParameterName]; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    private ScilabParameterVectorEvaluator(bool deserializing) : base(deserializing) { }
+    private ScilabParameterVectorEvaluator(ScilabParameterVectorEvaluator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ScilabParameterVectorEvaluator(this, cloner);
+    }
+
+    public ScilabParameterVectorEvaluator()
+      : base() {
+      Parameters.Add(new LookupParameter<StringValue>(QualityVariableParameterName, "The name of the quality variable of the Scilab script."));
+      Parameters.Add(new LookupParameter<TextFileValue>(ScilabEvaluationScriptParameterName, "The path to the Scilab evaluation script."));
+      Parameters.Add(new LookupParameter<TextFileValue>(ScilabInitializationScriptParameterName, "The path to a Scilab script the should be execute before the evaluation starts."));
+    }
+
+    private readonly object locker = new object();
+    private static ScilabConnector scilab = null;
+    private bool startedScilab = false;
+
+    public override IOperation Apply() {
+      var evaluationScript = ScilabEvaluationScriptParameter.ActualValue;
+      if (string.IsNullOrEmpty(evaluationScript.Value)) throw new FileNotFoundException("The evaluation script in the problem is not set.");
+      if (!evaluationScript.Exists()) throw new FileNotFoundException(string.Format("The evaluation script \"{0}\" cannot be found.", evaluationScript.Value));
+
+      var initializationScript = ScilabInitializationScriptParameter.ActualValue;
+      if (!string.IsNullOrEmpty(initializationScript.Value) && !initializationScript.Exists()) throw new FileNotFoundException(string.Format("The initialization script \"{0}\" cannot be found.", initializationScript.Value));
+
+      int result;
+      //Scilab is used via a c++ wrapper that calls static methods. Hence it is not possible to parallelize the evaluation.
+      lock (locker) {
+        //initialize scilab and execute initialization script
+        if (scilab == null) {
+          startedScilab = true;
+          scilab = new ScilabConnector(false);
+          if (!string.IsNullOrEmpty(initializationScript.Value)) {
+            result = scilab.execScilabScript(initializationScript.Value);
+            if (result != 0) ThrowSciLabException(initializationScript.Value, result);
+          }
+        } else if (!startedScilab) {
+          throw new InvalidOperationException("Could not run multiple optimization algorithms in parallel.");
+        }
+
+        var parameterVector = ParameterVectorParameter.ActualValue;
+        var parameterNames = ParameterNamesParameter.ActualValue;
+        if (parameterNames.Any(string.IsNullOrEmpty)) throw new ArgumentException("Not all parameter names are provided.");
+
+        for (int i = 0; i < ProblemSizeParameter.ActualValue.Value; i++) {
+          result = scilab.createNamedMatrixOfDouble(parameterNames[i], 1, 1, new double[] { parameterVector[i] });
+          if (result != 0) ThrowSciLabException("setting parameter " + parameterNames[i], result);
+        }
+
+        string script = ScilabEvaluationScriptParameter.ActualValue.Value;
+        result = scilab.execScilabScript(script);
+        if (result != 0) ThrowSciLabException(script, result);
+
+        string qualityVariableName = QualityVariableParameter.ActualValue.Value;
+        double[] values = scilab.readNamedMatrixOfDouble(qualityVariableName);
+        if (values == null) throw new InvalidOperationException(string.Format("Could not find the variable \"{0}\" in the Scilab workspace, that should hold the quality value.", qualityVariableName));
+        double quality = values[0];
+
+        if (double.IsNaN(quality)) quality = double.MaxValue;
+        if (double.IsInfinity(quality)) quality = double.MaxValue;
+
+        QualityParameter.ActualValue = new DoubleValue(quality);
+        return base.Apply();
+      }
+    }
+
+    public override void ClearState() {
+      base.ClearState();
+      if (startedScilab)
+        scilab = null;
+      startedScilab = false;
+    }
+
+    private void ThrowSciLabException(string fileName, int errorCode) {
+      const string code = "errorMsg = lasterror();";
+      int result = scilab.SendScilabJob(code);
+      if (result != 0) throw new InvalidOperationException(string.Format("An error occured during the execution of the Scilab script {0}.", fileName));
+
+      string errorMessage = scilab.readNamedMatrixOfString("errorMsg")[0];
+
+      string message = string.Format("The error {1} occured during the execution of the Scilab script {0}. "
+        + Environment.NewLine + Environment.NewLine + " {2}", fileName, errorCode, errorMessage);
+      throw new InvalidOperationException(message);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/BestSolutionAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/BestSolutionAnalyzer.cs	(revision 10605)
+++ /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/BestSolutionAnalyzer.cs	(revision 10605)
@@ -0,0 +1,134 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.RealVectorEncoding;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.ParameterOptimization {
+  [Item("BestSolutionAnalyzer", "Tracks the best parameter vector solution of the current algorithm run.")]
+  [StorableClass]
+  public class BestSolutionAnalyzer : SingleSuccessorOperator, IAnalyzer {
+    private const string MaximizationParameterName = "Maximization";
+    private const string ParameterVectorParameterName = "RealVector";
+    private const string ParameterNamesParameterName = "ParameterNames";
+    private const string QualityParameterName = "Quality";
+    private const string BestQualityParameterName = "BestQuality";
+    private const string BestKnownQualityParameterName = "BestKnownQuality";
+
+    private const string ResultsParameterName = "Results";
+    private const string BestSolutionResultName = "Best Solution";
+
+    public virtual bool EnabledByDefault {
+      get { return true; }
+    }
+
+    public ILookupParameter<BoolValue> MaximizationParameter {
+      get { return (ILookupParameter<BoolValue>)Parameters[MaximizationParameterName]; }
+    }
+    public IScopeTreeLookupParameter<RealVector> ParameterVectorParameter {
+      get { return (IScopeTreeLookupParameter<RealVector>)Parameters[ParameterVectorParameterName]; }
+    }
+    public ILookupParameter<StringArray> ParameterNamesParameter {
+      get { return (ILookupParameter<StringArray>)Parameters[ParameterNamesParameterName]; }
+    }
+    public IScopeTreeLookupParameter<DoubleValue> QualityParameter {
+      get { return (IScopeTreeLookupParameter<DoubleValue>)Parameters[QualityParameterName]; }
+    }
+    public ILookupParameter<DoubleValue> BestQualityParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters[BestQualityParameterName]; }
+    }
+    public ILookupParameter<DoubleValue> BestKnownQualityParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters[BestKnownQualityParameterName]; }
+    }
+    public IValueLookupParameter<ResultCollection> ResultsParameter {
+      get { return (IValueLookupParameter<ResultCollection>)Parameters[ResultsParameterName]; }
+    }
+
+    [StorableConstructor]
+    protected BestSolutionAnalyzer(bool deserializing) : base(deserializing) { }
+    protected BestSolutionAnalyzer(BestSolutionAnalyzer original, Cloner cloner)
+      : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BestSolutionAnalyzer(this, cloner);
+    }
+
+    public BestSolutionAnalyzer()
+      : base() {
+      Parameters.Add(new LookupParameter<BoolValue>(MaximizationParameterName, "True if the problem is a maximization problem."));
+      Parameters.Add(new ScopeTreeLookupParameter<RealVector>(ParameterVectorParameterName, "The parameter vector which should be evaluated."));
+      Parameters.Add(new LookupParameter<StringArray>(ParameterNamesParameterName, "The names of the elements in the parameter vector."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>(QualityParameterName, "The quality name for the parameter vectors."));
+      Parameters.Add(new LookupParameter<DoubleValue>(BestQualityParameterName, "The best quality found so far."));
+      Parameters.Add(new LookupParameter<DoubleValue>(BestKnownQualityParameterName, "The quality of the best known solution."));
+      Parameters.Add(new ValueLookupParameter<ResultCollection>(ResultsParameterName, "The result collection where the results should be stored."));
+    }
+
+    public override IOperation Apply() {
+      ItemArray<RealVector> parameterVectors = ParameterVectorParameter.ActualValue;
+      ItemArray<DoubleValue> qualities = QualityParameter.ActualValue;
+      bool max = MaximizationParameter.ActualValue.Value;
+      DoubleValue bestKnownQuality = BestKnownQualityParameter.ActualValue;
+
+      int ind = -1;
+      if (!max) ind = qualities.Select((x, index) => new { index, x.Value }).OrderBy(x => x.Value).First().index;
+      else ind = qualities.Select((x, index) => new { index, x.Value }).OrderByDescending(x => x.Value).First().index;
+
+      var bestQuality = qualities[ind].Value;
+      var bestParameterVector = (RealVector)parameterVectors[ind].Clone();
+
+      if (BestQualityParameter.ActualValue == null) {
+        if (max) BestQualityParameter.ActualValue = new DoubleValue(double.MinValue);
+        else BestQualityParameter.ActualValue = new DoubleValue(double.MaxValue);
+      }
+
+      if (max && bestQuality > BestQualityParameter.ActualValue.Value
+          || !max && bestQuality < BestQualityParameter.ActualValue.Value) {
+        BestQualityParameter.ActualValue.Value = bestQuality;
+        ResultCollection results = ResultsParameter.ActualValue;
+        if (results.ContainsKey(BestSolutionResultName)) {
+          var bestSolution = (DoubleArray)results[BestSolutionResultName].Value;
+          bestSolution.ElementNames = ParameterNamesParameter.ActualValue;
+          for (int i = 0; i < bestParameterVector.Length; i++)
+            bestSolution[i] = bestParameterVector[i];
+        } else {
+          results.Add(new Result(BestSolutionResultName, new DoubleArray(bestParameterVector.ToArray())));
+          var bestSolution = (DoubleArray)results[BestSolutionResultName].Value;
+          bestSolution.ElementNames = ParameterNamesParameter.ActualValue;
+        }
+      }
+
+      //update best known quality
+      if (bestKnownQuality == null || max && bestQuality > bestKnownQuality.Value
+        || !max && bestQuality < bestKnownQuality.Value) {
+        BestKnownQualityParameter.ActualValue = new DoubleValue(bestQuality);
+      }
+
+      return base.Apply();
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/BestSolutionsAnalyzer.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/BestSolutionsAnalyzer.cs	(revision 10605)
+++ /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/BestSolutionsAnalyzer.cs	(revision 10605)
@@ -0,0 +1,161 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.RealVectorEncoding;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.ParameterOptimization {
+  [Item("BestSolutionsAnalyzer", "Tracks the best parameter vector solutions of the current algorithm run.")]
+  [StorableClass]
+  public class BestSolutionsAnalyzer : SingleSuccessorOperator, IAnalyzer {
+    private const string MaximizationParameterName = "Maximization";
+    private const string ParameterVectorParameterName = "RealVector";
+    private const string ParameterNamesParameterName = "ParameterNames";
+    private const string QualityParameterName = "Quality";
+    private const string PreviousBestQualityParameterName = "PreviousBestQuality";
+    private const string BestQualityParameterName = "BestQuality";
+    private const string BestKnownQualityParameterName = "BestKnownQuality";
+
+    private const string ResultsParameterName = "Results";
+    private const string BestSolutionsResultName = "Best Solutions Store";
+
+    public virtual bool EnabledByDefault {
+      get { return false; }
+    }
+
+    public ILookupParameter<BoolValue> MaximizationParameter {
+      get { return (ILookupParameter<BoolValue>)Parameters[MaximizationParameterName]; }
+    }
+    public IScopeTreeLookupParameter<RealVector> ParameterVectorParameter {
+      get { return (IScopeTreeLookupParameter<RealVector>)Parameters[ParameterVectorParameterName]; }
+    }
+    public ILookupParameter<StringArray> ParameterNamesParameter {
+      get { return (ILookupParameter<StringArray>)Parameters[ParameterNamesParameterName]; }
+    }
+    public IScopeTreeLookupParameter<DoubleValue> QualityParameter {
+      get { return (IScopeTreeLookupParameter<DoubleValue>)Parameters[QualityParameterName]; }
+    }
+    public ILookupParameter<DoubleValue> PreviousBestQualityParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters[PreviousBestQualityParameterName]; }
+    }
+    public ILookupParameter<DoubleValue> BestQualityParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters[BestQualityParameterName]; }
+    }
+    public ILookupParameter<DoubleValue> BestKnownQualityParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters[BestKnownQualityParameterName]; }
+    }
+    public IValueLookupParameter<ResultCollection> ResultsParameter {
+      get { return (IValueLookupParameter<ResultCollection>)Parameters[ResultsParameterName]; }
+    }
+
+    [StorableConstructor]
+    protected BestSolutionsAnalyzer(bool deserializing) : base(deserializing) { }
+    protected BestSolutionsAnalyzer(BestSolutionsAnalyzer original, Cloner cloner)
+      : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new BestSolutionsAnalyzer(this, cloner);
+    }
+
+    public BestSolutionsAnalyzer()
+      : base() {
+      Parameters.Add(new LookupParameter<BoolValue>(MaximizationParameterName, "True if the problem is a maximization problem."));
+      Parameters.Add(new ScopeTreeLookupParameter<RealVector>(ParameterVectorParameterName, "The parameter vector which should be evaluated."));
+      Parameters.Add(new LookupParameter<StringArray>(ParameterNamesParameterName, "The names of the elements in the parameter vector."));
+      Parameters.Add(new ScopeTreeLookupParameter<DoubleValue>(QualityParameterName, "The quality name for the parameter vectors."));
+      Parameters.Add(new LookupParameter<DoubleValue>(PreviousBestQualityParameterName, "The best quality of the previous iteration."));
+      Parameters.Add(new LookupParameter<DoubleValue>(BestQualityParameterName, "The best quality found so far."));
+      Parameters.Add(new LookupParameter<DoubleValue>(BestKnownQualityParameterName, "The quality of the best known solution."));
+      Parameters.Add(new ValueLookupParameter<ResultCollection>(ResultsParameterName, "The result collection where the results should be stored."));
+    }
+
+    public override IOperation Apply() {
+      ItemArray<RealVector> parameterVectors = ParameterVectorParameter.ActualValue;
+      ItemArray<DoubleValue> qualities = QualityParameter.ActualValue;
+      bool max = MaximizationParameter.ActualValue.Value;
+      DoubleValue bestKnownQuality = BestKnownQualityParameter.ActualValue;
+
+      var solutions = parameterVectors.Zip(qualities, (ParameterVector, Quality) => new { ParameterVector, Quality });
+      if (max) solutions = solutions.MaxItems(s => s.Quality.Value);
+      else solutions = solutions.MinItems(s => s.Quality.Value);
+
+      if (BestQualityParameter.ActualValue == null) {
+        if (max) BestQualityParameter.ActualValue = new DoubleValue(double.MinValue);
+        else BestQualityParameter.ActualValue = new DoubleValue(double.MaxValue);
+      }
+      if (PreviousBestQualityParameter.ActualValue == null)
+        PreviousBestQualityParameter.ActualValue = (DoubleValue)BestQualityParameter.ActualValue.Clone();
+
+      //add result for best solutions
+      ResultCollection results = ResultsParameter.ActualValue;
+      if (!results.ContainsKey(BestSolutionsResultName))
+        results.Add(new Result(BestSolutionsResultName, new ItemSet<DoubleArray>(new DoubleArrayEqualityComparer())));
+
+      var previousBestQuality = PreviousBestQualityParameter.ActualValue.Value;
+      var bestQuality = solutions.First().Quality.Value;
+      var bestSolutions = (ItemSet<DoubleArray>)results[BestSolutionsResultName].Value;
+      //clear best solutions if new found quality is better than the existing one
+      if (max && bestQuality > previousBestQuality
+          || !max && bestQuality < previousBestQuality)
+        bestSolutions.Clear();
+
+      //add new found solutions
+      if (max && bestQuality >= BestQualityParameter.ActualValue.Value
+          || !max && bestQuality <= BestQualityParameter.ActualValue.Value) {
+        foreach (var solution in solutions) {
+          var newSolution = (DoubleArray)solution.ParameterVector.Clone();
+          newSolution.ElementNames = ParameterNamesParameter.ActualValue;
+          bestSolutions.Add(newSolution);
+        }
+      }
+      PreviousBestQualityParameter.ActualValue = (DoubleValue)BestQualityParameter.ActualValue.Clone();
+
+      //update best known quality
+      if (bestKnownQuality == null || max && bestQuality > bestKnownQuality.Value
+        || !max && bestQuality < bestKnownQuality.Value) {
+        BestKnownQualityParameter.ActualValue = new DoubleValue(bestQuality);
+      }
+
+      return base.Apply();
+    }
+  }
+
+  public class DoubleArrayEqualityComparer : IEqualityComparer<DoubleArray> {
+    public bool Equals(DoubleArray x, DoubleArray y) {
+      if (x == null && y == null) return true;
+      if (x == null) return false;
+      if (y == null) return false;
+      return x.SequenceEqual(y);
+    }
+
+    public int GetHashCode(DoubleArray obj) {
+      if (obj == null) return 0;
+      return obj.Aggregate(23, (current, item) => current ^ (int)item);
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj
===================================================================
--- /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj	(revision 10605)
+++ /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/HeuristicLab.Problems.ParameterOptimization-3.3.csproj	(revision 10605)
@@ -0,0 +1,137 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{D2C39FBA-A1D5-403A-9211-B0A299A76313}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.ParameterOptimization</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.ParameterOptimization-3.3</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </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>
+  </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>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </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="BestSolutionAnalyzer.cs" />
+    <Compile Include="BestSolutionsAnalyzer.cs" />
+    <Compile Include="IParameterVectorEvaluator.cs" />
+    <Compile Include="ParameterOptimizationProblem.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ParameterVectorEvaluator.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>
+    </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.RealVectorEncoding\3.3\HeuristicLab.Encodings.RealVectorEncoding-3.3.csproj">
+      <Project>{bb6d334a-4bb6-4674-9883-31a6ebb32cab}</Project>
+      <Name>HeuristicLab.Encodings.RealVectorEncoding-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>
+  </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>
+  <!-- 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.ParameterOptimization/3.3/IParameterVectorEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/IParameterVectorEvaluator.cs	(revision 10605)
+++ /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/IParameterVectorEvaluator.cs	(revision 10605)
@@ -0,0 +1,33 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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;
+using HeuristicLab.Encodings.RealVectorEncoding;
+using HeuristicLab.Optimization;
+
+namespace HeuristicLab.Problems.ParameterOptimization {
+  public interface IParameterVectorEvaluator : ISingleObjectiveEvaluator {
+    ILookupParameter<IntValue> ProblemSizeParameter { get; }
+    ILookupParameter<RealVector> ParameterVectorParameter { get; }
+    ILookupParameter<StringArray> ParameterNamesParameter { get; }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/ParameterOptimizationProblem.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/ParameterOptimizationProblem.cs	(revision 10605)
+++ /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/ParameterOptimizationProblem.cs	(revision 10605)
@@ -0,0 +1,179 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.Encodings.RealVectorEncoding;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.ParameterOptimization {
+  [Item("Parameter Optimization Problem", "A base class for other problems for the optimization of a parameter vector.")]
+  [StorableClass]
+  public abstract class ParameterOptimizationProblem : SingleObjectiveHeuristicOptimizationProblem<IParameterVectorEvaluator, IRealVectorCreator>, IStorableContent {
+    public string Filename { get; set; }
+    private const string ProblemSizeParameterName = "ProblemSize";
+    private const string BoundsParameterName = "Bounds";
+    private const string ParameterNamesParameterName = "ParameterNames";
+
+
+    #region parameters
+    public IFixedValueParameter<IntValue> ProblemSizeParameter {
+      get { return (IFixedValueParameter<IntValue>)Parameters[ProblemSizeParameterName]; }
+    }
+    public IValueParameter<DoubleMatrix> BoundsParameter {
+      get { return (IValueParameter<DoubleMatrix>)Parameters[BoundsParameterName]; }
+    }
+    public IValueParameter<StringArray> ParameterNamesParameter {
+      get { return (IValueParameter<StringArray>)Parameters[ParameterNamesParameterName]; }
+    }
+    #endregion
+
+    #region properties
+    public int ProblemSize {
+      get { return ProblemSizeParameter.Value.Value; }
+      set { ProblemSizeParameter.Value.Value = value; }
+    }
+    public DoubleMatrix Bounds {
+      get { return BoundsParameter.Value; }
+      set { BoundsParameter.Value = value; }
+    }
+    public StringArray ParameterNames {
+      get { return ParameterNamesParameter.Value; }
+      set { ParameterNamesParameter.Value = value; }
+    }
+    #endregion
+
+
+    [Storable]
+    protected StdDevStrategyVectorCreator strategyVectorCreator;
+    [Storable]
+    protected StdDevStrategyVectorCrossover strategyVectorCrossover;
+    [Storable]
+    protected StdDevStrategyVectorManipulator strategyVectorManipulator;
+
+    [StorableConstructor]
+    protected ParameterOptimizationProblem(bool deserializing) : base(deserializing) { }
+    protected ParameterOptimizationProblem(ParameterOptimizationProblem original, Cloner cloner)
+      : base(original, cloner) {
+      strategyVectorCreator = cloner.Clone(original.strategyVectorCreator);
+      strategyVectorCrossover = cloner.Clone(original.strategyVectorCrossover);
+      strategyVectorManipulator = cloner.Clone(original.strategyVectorManipulator);
+      RegisterEventHandlers();
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterEventHandlers();
+    }
+
+    protected ParameterOptimizationProblem(IParameterVectorEvaluator evaluator)
+      : base(evaluator, new UniformRandomRealVectorCreator()) {
+      Parameters.Add(new FixedValueParameter<IntValue>(ProblemSizeParameterName, "The dimension of the parameter vector that is to be optimized.", new IntValue(1)));
+      Parameters.Add(new ValueParameter<DoubleMatrix>(BoundsParameterName, "The bounds for each dimension of the parameter vector. If fewer bounds are", new DoubleMatrix(new double[,] { { 0, 100 } }, new string[] { "LowerBound", "UpperBound" })));
+      Parameters.Add(new ValueParameter<StringArray>(ParameterNamesParameterName, "The element names which are used to calculate the quality of a parameter vector.", new StringArray(new string[] { "Parameter0" })));
+
+      SolutionCreator.LengthParameter.ActualName = "ProblemSize";
+
+      Operators.AddRange(ApplicationManager.Manager.GetInstances<IRealVectorOperator>());
+
+      strategyVectorCreator = new StdDevStrategyVectorCreator();
+      strategyVectorCreator.LengthParameter.ActualName = ProblemSizeParameter.Name;
+      strategyVectorCrossover = new StdDevStrategyVectorCrossover();
+      strategyVectorManipulator = new StdDevStrategyVectorManipulator();
+      strategyVectorManipulator.LearningRateParameter.Value = new DoubleValue(0.5);
+      strategyVectorManipulator.GeneralLearningRateParameter.Value = new DoubleValue(0.5);
+
+      Operators.Add(strategyVectorCreator);
+      Operators.Add(strategyVectorCrossover);
+      Operators.Add(strategyVectorManipulator);
+      Operators.Add(new BestSolutionAnalyzer());
+      Operators.Add(new BestSolutionsAnalyzer());
+      UpdateParameters();
+      UpdateStrategyVectorBounds();
+
+      RegisterEventHandlers();
+    }
+
+    protected override void OnEvaluatorChanged() {
+      base.OnEvaluatorChanged();
+      strategyVectorManipulator.GeneralLearningRateParameter.Value = new DoubleValue(1.0 / Math.Sqrt(2 * ProblemSize));
+      strategyVectorManipulator.LearningRateParameter.Value = new DoubleValue(1.0 / Math.Sqrt(2 * Math.Sqrt(ProblemSize)));
+      UpdateParameters();
+    }
+
+    private void RegisterEventHandlers() {
+      Bounds.ToStringChanged += Bounds_ToStringChanged;
+      ProblemSizeParameter.Value.ValueChanged += ProblemSize_Changed;
+      ParameterNames.Reset += ParameterNames_Reset;
+    }
+
+    private void UpdateParameters() {
+      Evaluator.ParameterVectorParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
+      Evaluator.ParameterNamesParameter.ActualName = ParameterNamesParameter.Name;
+
+      var bestSolutionAnalyzer = Operators.OfType<BestSolutionAnalyzer>().First();
+      bestSolutionAnalyzer.ParameterVectorParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
+      bestSolutionAnalyzer.ParameterNamesParameter.ActualName = ParameterNamesParameter.Name;
+
+      Bounds = new DoubleMatrix(ProblemSize, 2);
+      Bounds.RowNames = ParameterNames;
+      for (int i = 0; i < Bounds.Rows; i++) {
+        Bounds[i, 0] = 0.0;
+        Bounds[i, 1] = 100.0;
+      }
+
+      foreach (var op in Operators.OfType<IRealVectorManipulator>())
+        op.RealVectorParameter.ActualName = SolutionCreator.RealVectorParameter.ActualName;
+    }
+
+    private void Bounds_ToStringChanged(object sender, EventArgs e) {
+      if (Bounds.Columns != 2 || Bounds.Rows < 1)
+        Bounds = new DoubleMatrix(1, 2);
+      UpdateStrategyVectorBounds();
+    }
+    protected virtual void UpdateStrategyVectorBounds() {
+      DoubleMatrix strategyBounds = (DoubleMatrix)Bounds.Clone();
+      for (int i = 0; i < strategyBounds.Rows; i++) {
+        if (strategyBounds[i, 0] < 0) strategyBounds[i, 0] = 0;
+        strategyBounds[i, 1] = 0.1 * (Bounds[i, 1] - Bounds[i, 0]);
+      }
+      strategyVectorCreator.BoundsParameter.Value = strategyBounds;
+    }
+
+    protected virtual void ProblemSize_Changed(object sender, EventArgs e) {
+      if (ParameterNames.Length != ProblemSize)
+        ((IStringConvertibleArray)ParameterNames).Length = ProblemSize;
+      for (int i = 0; i < ParameterNames.Length; i++) {
+        if (string.IsNullOrEmpty(ParameterNames[i])) ParameterNames[i] = "Parameter" + i;
+      }
+    }
+
+    protected virtual void ParameterNames_Reset(object sender, EventArgs e) {
+      ProblemSize = ParameterNames.Length;
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/ParameterVectorEvaluator.cs
===================================================================
--- /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/ParameterVectorEvaluator.cs	(revision 10605)
+++ /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/ParameterVectorEvaluator.cs	(revision 10605)
@@ -0,0 +1,69 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.RealVectorEncoding;
+using HeuristicLab.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.ParameterOptimization {
+  [Item("ParameterVectorEvaluator", "An base class for other parameter vector evaluators.")]
+  [StorableClass]
+  public abstract class ParameterVectorEvaluator : SingleSuccessorOperator, IParameterVectorEvaluator {
+    private const string QualityParameterName = "Quality";
+    private const string ProblemSizeParameterName = "ProblemSize";
+    private const string ParameterVectorParameterName = "RealVector";
+    private const string ParameterNamesParameterName = "ParameterNames";
+
+    #region parameters
+    public ILookupParameter<DoubleValue> QualityParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters[QualityParameterName]; }
+    }
+    public ILookupParameter<IntValue> ProblemSizeParameter {
+      get { return (ILookupParameter<IntValue>)Parameters[ProblemSizeParameterName]; }
+    }
+    public ILookupParameter<RealVector> ParameterVectorParameter {
+      get { return (ILookupParameter<RealVector>)Parameters[ParameterVectorParameterName]; }
+    }
+    public ILookupParameter<StringArray> ParameterNamesParameter {
+      get { return (ILookupParameter<StringArray>)Parameters[ParameterNamesParameterName]; }
+    }
+    #endregion
+
+
+    [StorableConstructor]
+    protected ParameterVectorEvaluator(bool deserializing) : base(deserializing) { }
+    protected ParameterVectorEvaluator(ParameterVectorEvaluator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    protected ParameterVectorEvaluator()
+      : base() {
+      Parameters.Add(new LookupParameter<DoubleValue>(QualityParameterName, "Result of the evaluation of a parameter vector."));
+      Parameters.Add(new LookupParameter<IntValue>(ProblemSizeParameterName, "The dimension of the parameter vector that is to be optimized."));
+      Parameters.Add(new LookupParameter<RealVector>(ParameterVectorParameterName, "The parameter vector which should be evaluated."));
+      Parameters.Add(new LookupParameter<StringArray>(ParameterNamesParameterName, "The name of the parameters that should be optimized."));
+    }
+  }
+}
Index: /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/Plugin.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/Plugin.cs.frame	(revision 10605)
+++ /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/Plugin.cs.frame	(revision 10605)
@@ -0,0 +1,42 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.PluginInfrastructure;
+using Microsoft.Win32;
+
+namespace HeuristicLab.Problems.ParameterOptimization {
+  /// <summary>
+  /// Plugin class for HeuristicLab.Problems.ParameterOptimization.
+  /// </summary>
+  [Plugin("HeuristicLab.Problems.ParameterOptimization", "3.3.8.$WCREV$")]
+  [PluginFile("HeuristicLab.Problems.ParameterOptimization-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.RealVectorEncoding", "3.3")]
+  [PluginDependency("HeuristicLab.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  public class HeuristicLabProblemsParameterOptimizationPlugin : PluginBase {    }
+}
Index: /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/Properties/AssemblyInfo.cs.frame	(revision 10605)
+++ /trunk/sources/HeuristicLab.Problems.ParameterOptimization/3.3/Properties/AssemblyInfo.cs.frame	(revision 10605)
@@ -0,0 +1,55 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2014 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.ParameterOptimization")]
+[assembly: AssemblyDescription("HeuristicLab problems for parameter optimization.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2014 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("B211BD50-DE67-4AB1-8A43-DF3C5222B1D5")]
+
+// 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 Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.3.0.0")]
+[assembly: AssemblyFileVersion("3.3.9.$WCREV$")]
