Index: trunk/sources/HeuristicLab 3.3.sln
===================================================================
--- trunk/sources/HeuristicLab 3.3.sln	(revision 8399)
+++ trunk/sources/HeuristicLab 3.3.sln	(revision 8401)
@@ -64,4 +64,5 @@
 		{3E9E8944-44FF-40BB-A622-3A4A7DD0F198} = {3E9E8944-44FF-40BB-A622-3A4A7DD0F198}
 		{49F28045-7B5F-411B-8D59-16C846FA26E0} = {49F28045-7B5F-411B-8D59-16C846FA26E0}
+		{1256B945-EEA9-4BE4-9880-76B5B113F089} = {1256B945-EEA9-4BE4-9880-76B5B113F089}
 		{0C39A349-1979-419A-89BD-E4E2F26BD287} = {0C39A349-1979-419A-89BD-E4E2F26BD287}
 		{C49CB749-8B24-4628-8003-E86475749410} = {C49CB749-8B24-4628-8003-E86475749410}
@@ -115,4 +116,5 @@
 		{887425B4-4348-49ED-A457-B7D2C26DDBF9} = {887425B4-4348-49ED-A457-B7D2C26DDBF9}
 		{25735DB4-8E54-4A2C-83E3-A60C76565E55} = {25735DB4-8E54-4A2C-83E3-A60C76565E55}
+		{5FEE5DB4-7FD9-4CBD-BEC2-3FEE17B31A94} = {5FEE5DB4-7FD9-4CBD-BEC2-3FEE17B31A94}
 		{F4539FB6-4708-40C9-BE64-0A1390AEA197} = {F4539FB6-4708-40C9-BE64-0A1390AEA197}
 		{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C} = {A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}
@@ -341,4 +343,6 @@
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Algorithms.ScatterSearch-3.3", "HeuristicLab.Algorithms.ScatterSearch\3.3\HeuristicLab.Algorithms.ScatterSearch-3.3.csproj", "{5FEE5DB4-7FD9-4CBD-BEC2-3FEE17B31A94}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Algorithms.GradientDescent", "HeuristicLab.Algorithms.GradientDescent\3.3\HeuristicLab.Algorithms.GradientDescent.csproj", "{1256B945-EEA9-4BE4-9880-76B5B113F089}"
 EndProject
 Global
@@ -1672,4 +1676,16 @@
 		{5FEE5DB4-7FD9-4CBD-BEC2-3FEE17B31A94}.Release|x86.ActiveCfg = Release|x86
 		{5FEE5DB4-7FD9-4CBD-BEC2-3FEE17B31A94}.Release|x86.Build.0 = Release|x86
+		{1256B945-EEA9-4BE4-9880-76B5B113F089}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{1256B945-EEA9-4BE4-9880-76B5B113F089}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1256B945-EEA9-4BE4-9880-76B5B113F089}.Debug|x64.ActiveCfg = Debug|x64
+		{1256B945-EEA9-4BE4-9880-76B5B113F089}.Debug|x64.Build.0 = Debug|x64
+		{1256B945-EEA9-4BE4-9880-76B5B113F089}.Debug|x86.ActiveCfg = Debug|x86
+		{1256B945-EEA9-4BE4-9880-76B5B113F089}.Debug|x86.Build.0 = Debug|x86
+		{1256B945-EEA9-4BE4-9880-76B5B113F089}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{1256B945-EEA9-4BE4-9880-76B5B113F089}.Release|Any CPU.Build.0 = Release|Any CPU
+		{1256B945-EEA9-4BE4-9880-76B5B113F089}.Release|x64.ActiveCfg = Release|x64
+		{1256B945-EEA9-4BE4-9880-76B5B113F089}.Release|x64.Build.0 = Release|x64
+		{1256B945-EEA9-4BE4-9880-76B5B113F089}.Release|x86.ActiveCfg = Release|x86
+		{1256B945-EEA9-4BE4-9880-76B5B113F089}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceLinear.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceLinear.cs	(revision 8399)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceLinear.cs	(revision 8401)
@@ -1,3 +1,24 @@
-﻿using System;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceSEard.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceSEard.cs	(revision 8399)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceSEard.cs	(revision 8401)
@@ -1,3 +1,24 @@
-﻿using System;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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;
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceSEiso.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceSEiso.cs	(revision 8399)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceSEiso.cs	(revision 8401)
@@ -1,3 +1,24 @@
-﻿using System;
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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;
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessHyperparameterInitializer.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessHyperparameterInitializer.cs	(revision 8399)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessHyperparameterInitializer.cs	(revision 8401)
@@ -23,7 +23,5 @@
 using HeuristicLab.Common;
 using HeuristicLab.Core;
-using HeuristicLab.Data;
 using HeuristicLab.Encodings.RealVectorEncoding;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
 using HeuristicLab.Operators;
 using HeuristicLab.Parameters;
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessModelCreator.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessModelCreator.cs	(revision 8399)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessModelCreator.cs	(revision 8401)
@@ -24,9 +24,7 @@
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.RealVectorEncoding;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
 using HeuristicLab.Operators;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.DataAnalysis;
 
 namespace HeuristicLab.Algorithms.DataAnalysis {
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessRegression.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessRegression.cs	(revision 8399)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessRegression.cs	(revision 8401)
@@ -24,9 +24,8 @@
 using System.Collections.Generic;
 using System.Linq;
-using HeuristicLab.Analysis;
+using HeuristicLab.Algorithms.GradientDescent;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
-using HeuristicLab.Encodings.RealVectorEncoding;
 using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
@@ -35,5 +34,4 @@
 using HeuristicLab.PluginInfrastructure;
 using HeuristicLab.Problems.DataAnalysis;
-using HeuristicLab.Random;
 
 namespace HeuristicLab.Algorithms.DataAnalysis {
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessRegressionModelCreator.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessRegressionModelCreator.cs	(revision 8399)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessRegressionModelCreator.cs	(revision 8401)
@@ -20,5 +20,4 @@
 #endregion
 
-using System.Collections.Generic;
 using System.Linq;
 using HeuristicLab.Common;
@@ -26,6 +25,4 @@
 using HeuristicLab.Data;
 using HeuristicLab.Encodings.RealVectorEncoding;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Operators;
 using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessRegressionSolutionCreator.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessRegressionSolutionCreator.cs	(revision 8399)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessRegressionSolutionCreator.cs	(revision 8401)
@@ -20,10 +20,7 @@
 #endregion
 
-using System.Collections.Generic;
-using System.Linq;
 using HeuristicLab.Common;
 using HeuristicLab.Core;
 using HeuristicLab.Data;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
 using HeuristicLab.Operators;
 using HeuristicLab.Optimization;
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/ICovarianceFunction.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/ICovarianceFunction.cs	(revision 8399)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/ICovarianceFunction.cs	(revision 8401)
@@ -1,3 +1,22 @@
-﻿
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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;
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/IMeanFunction.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/IMeanFunction.cs	(revision 8399)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/IMeanFunction.cs	(revision 8401)
@@ -1,3 +1,22 @@
-﻿
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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;
 
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/Lbfgs.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/Lbfgs.cs	(revision 8399)
+++ 	(revision )
@@ -1,163 +1,0 @@
-
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using HeuristicLab.Analysis;
-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;
-using HeuristicLab.PluginInfrastructure;
-using HeuristicLab.Problems.DataAnalysis;
-using HeuristicLab.Problems.TestFunctions;
-using HeuristicLab.Random;
-
-namespace HeuristicLab.Algorithms.DataAnalysis {
-  /// <summary>
-  /// Limited-Memory BFGS optimization algorithm.
-  /// </summary>
-  [Item("LM-BFGS", "The limited-memory BFGS (BroydenFletcherGoldfarbShanno) optimization algorithm.")]
-  [Creatable("Algorithms")]
-  [StorableClass]
-  public sealed class LbfgsAlgorithm : HeuristicOptimizationEngineAlgorithm, IStorableContent {
-    public override Type ProblemType {
-      get { return typeof(SingleObjectiveTestFunctionProblem); }
-    }
-
-    public new SingleObjectiveTestFunctionProblem Problem {
-      get { return (SingleObjectiveTestFunctionProblem)base.Problem; }
-      set { base.Problem = value; }
-    }
-
-    public string Filename { get; set; }
-
-    private const string MaxIterationsParameterName = "MaxIterations";
-    private const string ApproximateGradientsParameterName = "ApproximateGradients";
-    private const string SeedParameterName = "Seed";
-    private const string SetSeedRandomlyParameterName = "SetSeedRandomly";
-
-    #region parameter properties
-    public IValueParameter<IntValue> MaxIterationsParameter {
-      get { return (IValueParameter<IntValue>)Parameters[MaxIterationsParameterName]; }
-    }
-    public IValueParameter<IntValue> SeedParameter {
-      get { return (IValueParameter<IntValue>)Parameters[SeedParameterName]; }
-    }
-    public IValueParameter<BoolValue> SetSeedRandomlyParameter {
-      get { return (IValueParameter<BoolValue>)Parameters[SetSeedRandomlyParameterName]; }
-    }
-    #endregion
-    #region properties
-    public int MaxIterations {
-      set { MaxIterationsParameter.Value.Value = value; }
-      get { return MaxIterationsParameter.Value.Value; }
-    }
-    public int Seed { get { return SeedParameter.Value.Value; } set { SeedParameter.Value.Value = value; } }
-    public bool SetSeedRandomly { get { return SetSeedRandomlyParameter.Value.Value; } set { SetSeedRandomlyParameter.Value.Value = value; } }
-    #endregion
-
-    [StorableConstructor]
-    private LbfgsAlgorithm(bool deserializing) : base(deserializing) { }
-    private LbfgsAlgorithm(LbfgsAlgorithm original, Cloner cloner)
-      : base(original, cloner) {
-    }
-    public LbfgsAlgorithm()
-      : base() {
-      this.name = ItemName;
-      this.description = ItemDescription;
-
-      Problem = new SingleObjectiveTestFunctionProblem();
-
-      Parameters.Add(new ValueParameter<IntValue>(MaxIterationsParameterName, "The maximal number of iterations for.", new IntValue(20)));
-      Parameters.Add(new ValueParameter<IntValue>(SeedParameterName, "The random seed used to initialize the new pseudo random number generator.", new IntValue(0)));
-      Parameters.Add(new ValueParameter<BoolValue>(SetSeedRandomlyParameterName, "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true)));
-      Parameters.Add(new ValueParameter<BoolValue>(ApproximateGradientsParameterName, "Indicates that gradients should be approximated.", new BoolValue(true)));
-      Parameters[ApproximateGradientsParameterName].Hidden = true; // should not be changed
-
-      var randomCreator = new RandomCreator();
-      var solutionCreator = new Placeholder();
-      var bfgsInitializer = new LbfgsInitializer();
-      var makeStep = new LbfgsMakeStep();
-      var branch = new ConditionalBranch();
-      var evaluator = new Placeholder();
-      var updateResults = new LbfgsUpdateResults();
-      var analyzer = new LbfgsAnalyzer();
-      var finalAnalyzer = new LbfgsAnalyzer();
-
-      OperatorGraph.InitialOperator = randomCreator;
-
-      randomCreator.SeedParameter.ActualName = SeedParameterName;
-      randomCreator.SeedParameter.Value = null;
-      randomCreator.SetSeedRandomlyParameter.ActualName = SetSeedRandomlyParameterName;
-      randomCreator.SetSeedRandomlyParameter.Value = null;
-      randomCreator.Successor = solutionCreator;
-
-      solutionCreator.OperatorParameter.ActualName = Problem.SolutionCreatorParameter.Name;
-      solutionCreator.Successor = bfgsInitializer;
-
-      bfgsInitializer.IterationsParameter.ActualName = MaxIterationsParameterName;
-      bfgsInitializer.PointParameter.ActualName = Problem.SolutionCreator.RealVectorParameter.ActualName;
-      bfgsInitializer.ApproximateGradientsParameter.ActualName = ApproximateGradientsParameterName;
-      bfgsInitializer.Successor = makeStep;
-
-      makeStep.StateParameter.ActualName = bfgsInitializer.StateParameter.Name;
-      makeStep.PointParameter.ActualName = bfgsInitializer.PointParameter.ActualName;
-      makeStep.Successor = branch;
-
-      branch.ConditionParameter.ActualName = makeStep.TerminationCriterionParameter.Name;
-      branch.FalseBranch = evaluator;
-      branch.TrueBranch = finalAnalyzer;
-
-      evaluator.OperatorParameter.ActualName = Problem.EvaluatorParameter.Name;
-      evaluator.Successor = updateResults;
-
-      updateResults.StateParameter.ActualName = bfgsInitializer.StateParameter.Name;
-      updateResults.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.Name;
-      updateResults.ApproximateGradientsParameter.ActualName = ApproximateGradientsParameterName;
-      updateResults.Successor = analyzer;
-
-      analyzer.QualityParameter.ActualName = updateResults.QualityParameter.ActualName;
-      analyzer.PointParameter.ActualName = makeStep.PointParameter.ActualName;
-      analyzer.StateParameter.ActualName = bfgsInitializer.StateParameter.Name;
-      analyzer.Successor = makeStep;
-
-      finalAnalyzer.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.Name;
-      finalAnalyzer.PointParameter.ActualName = makeStep.PointParameter.ActualName;
-      finalAnalyzer.PointsTableParameter.ActualName = analyzer.PointsTableParameter.ActualName;
-      finalAnalyzer.QualityGradientsTableParameter.ActualName = analyzer.QualityGradientsTableParameter.ActualName;
-      finalAnalyzer.QualitiesTableParameter.ActualName = analyzer.QualitiesTableParameter.ActualName;
-    }
-
-    [StorableHook(HookType.AfterDeserialization)]
-    private void AfterDeserialization() { }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new LbfgsAlgorithm(this, cloner);
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/LbfgsAnalyzer.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/LbfgsAnalyzer.cs	(revision 8399)
+++ 	(revision )
@@ -1,170 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 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.Analysis;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Encodings.RealVectorEncoding;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Operators;
-using HeuristicLab.Optimization;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.DataAnalysis;
-
-namespace HeuristicLab.Algorithms.DataAnalysis {
-  [StorableClass]
-  [Item(Name = "LBFGS Analyzer", Description = "Analyzer to collect results for the LM-BFGS algorithm.")]
-  public sealed class LbfgsAnalyzer : SingleSuccessorOperator, IAnalyzer {
-    private const string PointParameterName = "Point";
-    private const string QualityGradientsParameterName = "QualityGradients";
-    private const string QualityParameterName = "Quality";
-    private const string ResultCollectionParameterName = "Results";
-    private const string QualitiesTableParameterName = "Qualities";
-    private const string PointsTableParameterName = "PointTable";
-    private const string QualityGradientsTableParameterName = "QualityGradientsTable";
-    private const string StateParameterName = "State";
-    private const string ApproximateGradientsParameterName = "ApproximateGradients";
-
-    #region Parameter Properties
-    public ILookupParameter<RealVector> QualityGradientsParameter {
-      get { return (ILookupParameter<RealVector>)Parameters[QualityGradientsParameterName]; }
-    }
-    public ILookupParameter<RealVector> PointParameter {
-      get { return (ILookupParameter<RealVector>)Parameters[PointParameterName]; }
-    }
-    public ILookupParameter<DoubleValue> QualityParameter {
-      get { return (ILookupParameter<DoubleValue>)Parameters[QualityParameterName]; }
-    }
-    public ILookupParameter<ResultCollection> ResultCollectionParameter {
-      get { return (ILookupParameter<ResultCollection>)Parameters[ResultCollectionParameterName]; }
-    }
-    public ILookupParameter<DataTable> QualitiesTableParameter {
-      get { return (ILookupParameter<DataTable>)Parameters[QualitiesTableParameterName]; }
-    }
-    public ILookupParameter<DataTable> PointsTableParameter {
-      get { return (ILookupParameter<DataTable>)Parameters[PointsTableParameterName]; }
-    }
-    public ILookupParameter<DataTable> QualityGradientsTableParameter {
-      get { return (ILookupParameter<DataTable>)Parameters[QualityGradientsTableParameterName]; }
-    }
-    public ILookupParameter<LbfgsState> StateParameter {
-      get { return (ILookupParameter<LbfgsState>)Parameters[StateParameterName]; }
-    }
-    public ILookupParameter<BoolValue> ApproximateGradientsParameter {
-      get { return (ILookupParameter<BoolValue>)Parameters[ApproximateGradientsParameterName]; }
-    }
-    #endregion
-
-    #region Properties
-    private RealVector QualityGradients { get { return QualityGradientsParameter.ActualValue; } }
-    private RealVector Point { get { return PointParameter.ActualValue; } }
-    private DoubleValue Quality { get { return QualityParameter.ActualValue; } }
-    private ResultCollection ResultCollection { get { return ResultCollectionParameter.ActualValue; } }
-    private BoolValue ApproximateGradients { get { return ApproximateGradientsParameter.ActualValue; } }
-
-    public bool EnabledByDefault {
-      get { return true; }
-    }
-
-    #endregion
-
-    [StorableConstructor]
-    private LbfgsAnalyzer(bool deserializing) : base(deserializing) { }
-    private LbfgsAnalyzer(LbfgsAnalyzer original, Cloner cloner) : base(original, cloner) { }
-    public LbfgsAnalyzer()
-      : base() {
-      // in
-      Parameters.Add(new LookupParameter<RealVector>(PointParameterName, "The current point of the function to optimize."));
-      Parameters.Add(new LookupParameter<RealVector>(QualityGradientsParameterName, "The current gradients of the function to optimize."));
-      Parameters.Add(new LookupParameter<DoubleValue>(QualityParameterName, "The current value of the function to optimize."));
-      Parameters.Add(new LookupParameter<DataTable>(QualitiesTableParameterName, "The table of all visited quality values."));
-      Parameters.Add(new LookupParameter<DataTable>(PointsTableParameterName, "The table of all visited points."));
-      Parameters.Add(new LookupParameter<DataTable>(QualityGradientsTableParameterName, "The table of all visited gradient values."));
-      Parameters.Add(new LookupParameter<LbfgsState>(StateParameterName, "The state of the LM-BFGS optimization algorithm."));
-      Parameters.Add(new LookupParameter<BoolValue>(ApproximateGradientsParameterName,
-                                              "Flag that indicates if gradients should be approximated."));
-
-      // in & out
-      Parameters.Add(new LookupParameter<ResultCollection>(ResultCollectionParameterName, "The result collection of the algorithm."));
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new LbfgsAnalyzer(this, cloner);
-    }
-
-    public override IOperation Apply() {
-      if (StateParameter.ActualValue.State.xupdated) {
-        var f = Quality.Value;
-        double[] g;
-        if (ApproximateGradients.Value) {
-          g = StateParameter.ActualValue.State.g;
-        } else {
-          g = QualityGradients.ToArray();
-        }
-        var x = Point.ToArray();
-        var resultCollection = ResultCollection;
-
-        // create and add tables on the first time
-        if (QualitiesTableParameter.ActualValue == null) {
-          QualitiesTableParameter.ActualValue = new DataTable(QualityParameter.ActualName);
-          PointsTableParameter.ActualValue = new DataTable(PointParameter.ActualName);
-          QualityGradientsTableParameter.ActualValue = new DataTable(QualityGradientsParameter.ActualName);
-
-          QualitiesTableParameter.ActualValue.Rows.Add(new DataRow(QualityParameter.ActualName));
-
-          resultCollection.Add(new Result(QualitiesTableParameter.ActualName,
-                                          QualitiesTableParameter.ActualValue));
-          resultCollection.Add(new Result(PointsTableParameter.ActualName,
-                                          PointsTableParameter.ActualValue));
-          resultCollection.Add(new Result(QualityGradientsTableParameter.ActualName,
-                                          QualityGradientsTableParameter.ActualValue));
-          resultCollection.Add(new Result(QualityParameter.ActualName, QualityParameter.ActualValue));
-        }
-
-        // update
-        var functionValueRow = QualitiesTableParameter.ActualValue.Rows[QualityParameter.ActualName];
-        resultCollection[QualityParameter.ActualName].Value = Quality;
-        functionValueRow.Values.Add(f);
-
-        AddValues(g, QualityGradientsTableParameter.ActualValue);
-        AddValues(x, PointsTableParameter.ActualValue);
-      }
-      return base.Apply();
-    }
-
-    private void AddValues(double[] x, DataTable dataTable) {
-      if (!dataTable.Rows.Any()) {
-        for (int i = 0; i < x.Length; i++) {
-          var newRow = new DataRow("x" + i);
-          newRow.Values.Add(x[i]);
-          dataTable.Rows.Add(newRow);
-        }
-      } else {
-        for (int i = 0; i < x.Length; i++) {
-          dataTable.Rows.ElementAt(i).Values.Add(x[i]);
-        }
-      }
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/LbfgsInitializer.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/LbfgsInitializer.cs	(revision 8399)
+++ 	(revision )
@@ -1,103 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 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.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Operators;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.DataAnalysis;
-
-namespace HeuristicLab.Algorithms.DataAnalysis {
-  [StorableClass]
-  [Item(Name = "LBFGS Initializer", Description = "Initializes the necessary data structures for the LM-BFGS algorithm.")]
-  public sealed class LbfgsInitializer : SingleSuccessorOperator {
-    private const string PointParameterName = "Point";
-    private const string StateParameterName = "State";
-    private const string IterationsParameterName = "Iterations";
-    private const string ApproximateGradientsParameterName = "ApproximateGradients";
-
-    #region Parameter Properties
-    // in
-    public ILookupParameter<IntValue> IterationsParameter {
-      get { return (ILookupParameter<IntValue>)Parameters[IterationsParameterName]; }
-    }
-    public ILookupParameter<RealVector> PointParameter {
-      get { return (ILookupParameter<RealVector>)Parameters[PointParameterName]; }
-    }
-    // out
-    public ILookupParameter<LbfgsState> StateParameter {
-      get { return (ILookupParameter<LbfgsState>)Parameters[StateParameterName]; }
-    }
-    public ILookupParameter<BoolValue> ApproximateGradientsParameter {
-      get { return (ILookupParameter<BoolValue>)Parameters[ApproximateGradientsParameterName]; }
-    }
-
-
-    #endregion
-
-    #region Properties
-    private RealVector Point { get { return PointParameter.ActualValue; } }
-    private IntValue Iterations { get { return IterationsParameter.ActualValue; } }
-    private BoolValue ApproximateGradients { get { return ApproximateGradientsParameter.ActualValue; } }
-    #endregion
-
-    [StorableConstructor]
-    private LbfgsInitializer(bool deserializing) : base(deserializing) { }
-    private LbfgsInitializer(LbfgsInitializer original, Cloner cloner) : base(original, cloner) { }
-    public LbfgsInitializer()
-      : base() {
-      // in
-      Parameters.Add(new LookupParameter<RealVector>(PointParameterName, "The initial point for the LM-BFGS algorithm."));
-      Parameters.Add(new LookupParameter<IntValue>(IterationsParameterName, "The maximal number of iterations for the LM-BFGS algorithm."));
-      Parameters.Add(new LookupParameter<BoolValue>(ApproximateGradientsParameterName,
-                                                    "Flag that indicates if gradients should be approximated."));
-      // out
-      Parameters.Add(new LookupParameter<LbfgsState>(StateParameterName, "The state of the LM-BFGS algorithm."));
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new LbfgsInitializer(this, cloner);
-    }
-
-    public override IOperation Apply() {
-      double[] initialPoint = Point.ToArray();
-      int n = initialPoint.Length;
-      alglib.minlbfgs.minlbfgsstate state = new alglib.minlbfgs.minlbfgsstate();
-      if (ApproximateGradients.Value) {
-        alglib.minlbfgs.minlbfgscreatef(n, Math.Min(n, 7), initialPoint, 1E-5, state);
-      } else {
-        alglib.minlbfgs.minlbfgscreate(n, Math.Min(n, 7), initialPoint, state);
-      }
-      alglib.minlbfgs.minlbfgssetcond(state, 0, 0, 0, Iterations.Value);
-      alglib.minlbfgs.minlbfgssetxrep(state, true);
-
-      PointParameter.ActualValue = new RealVector(initialPoint);
-      StateParameter.ActualValue = new LbfgsState(state);
-      return base.Apply();
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/LbfgsMakeStep.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/LbfgsMakeStep.cs	(revision 8399)
+++ 	(revision )
@@ -1,89 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 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.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Operators;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.DataAnalysis;
-
-namespace HeuristicLab.Algorithms.DataAnalysis {
-  [StorableClass]
-  [Item(Name = "LBFGS MakeStep", Description = "Makes a step in the LM-BFGS optimization algorithm.")]
-  public sealed class LbfgsMakeStep : SingleSuccessorOperator {
-    private const string TerminationCriterionParameterName = "TerminationCriterion";
-    private const string PointParameterName = "Point";
-    private const string StateParameterName = "State";
-
-    #region Parameter Properties
-    public ILookupParameter<LbfgsState> StateParameter {
-      get { return (ILookupParameter<LbfgsState>)Parameters[StateParameterName]; }
-    }
-    public ILookupParameter<BoolValue> TerminationCriterionParameter {
-      get { return (ILookupParameter<BoolValue>)Parameters[TerminationCriterionParameterName]; }
-    }
-    public ILookupParameter<RealVector> PointParameter {
-      get { return (ILookupParameter<RealVector>)Parameters[PointParameterName]; }
-    }
-    #endregion
-
-
-    #region Properties
-    private LbfgsState State { get { return StateParameter.ActualValue; } }
-    #endregion
-
-    [StorableConstructor]
-    private LbfgsMakeStep(bool deserializing) : base(deserializing) { }
-    private LbfgsMakeStep(LbfgsMakeStep original, Cloner cloner) : base(original, cloner) { }
-    public LbfgsMakeStep()
-      : base() {
-      // in & out
-      Parameters.Add(new LookupParameter<LbfgsState>(StateParameterName, "The state of the LM-BFGS algorithm."));
-      // out
-      Parameters.Add(new LookupParameter<BoolValue>(TerminationCriterionParameterName, "The termination criterion indicating that the LM-BFGS optimization algorithm should stop."));
-      Parameters.Add(new LookupParameter<RealVector>(PointParameterName, "The next point that should be evaluated in the LM-BFGS algorithm."));
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new LbfgsMakeStep(this, cloner);
-    }
-
-    public override IOperation Apply() {
-      var state = State;
-      bool @continue = alglib.minlbfgs.minlbfgsiteration(state.State);
-      TerminationCriterionParameter.ActualValue = new BoolValue(!@continue);
-      if (@continue) {
-        PointParameter.ActualValue = new RealVector(state.State.x);
-      } else {
-        double[] x = new double[state.State.x.Length];
-        alglib.minlbfgs.minlbfgsreport rep = new alglib.minlbfgs.minlbfgsreport();
-        alglib.minlbfgs.minlbfgsresults(state.State, ref x, rep);
-        PointParameter.ActualValue = new RealVector(x);
-      }
-      return base.Apply();
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/LbfgsState.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/LbfgsState.cs	(revision 8399)
+++ 	(revision )
@@ -1,301 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Operators;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.DataAnalysis;
-
-namespace HeuristicLab.Algorithms.DataAnalysis {
-  [StorableClass]
-  [Item("LbfgsState", "Internal state for the limited-memory BFGS optimization algorithm.")]
-  public sealed class LbfgsState : Item {
-    private alglib.minlbfgs.minlbfgsstate state;
-    public alglib.minlbfgs.minlbfgsstate State { get { return state; } }
-
-    [StorableConstructor]
-    private LbfgsState(bool deserializing)
-      : base(deserializing) {
-      state = new alglib.minlbfgs.minlbfgsstate();
-    }
-    private LbfgsState(LbfgsState original, Cloner cloner)
-      : base(original, cloner) {
-      this.state = new alglib.minlbfgs.minlbfgsstate();
-      this.state.autobuf = CopyArray(original.state.autobuf);
-      this.state.d = CopyArray(original.state.d);
-      this.state.denseh = CopyArray(original.state.denseh);
-      this.state.diagh = CopyArray(original.state.diagh);
-      this.state.diffstep = original.state.diffstep;
-      this.state.epsf = original.state.epsf;
-      this.state.epsg = original.state.epsg;
-      this.state.epsx = original.state.epsx;
-      this.state.f = original.state.f;
-      this.state.fbase = original.state.fbase;
-      this.state.fm1 = original.state.fm1;
-      this.state.fm2 = original.state.fm2;
-      this.state.fold = original.state.fold;
-      this.state.fp1 = original.state.fp1;
-      this.state.fp2 = original.state.fp1;
-      this.state.g = CopyArray(original.state.g);
-      this.state.gammak = original.state.gammak;
-      this.state.k = original.state.k;
-
-      this.state.lstate.brackt = original.state.lstate.brackt;
-      this.state.lstate.dg = original.state.lstate.dg;
-      this.state.lstate.dginit = original.state.lstate.dginit;
-      this.state.lstate.dgm = original.state.lstate.dgm;
-      this.state.lstate.dgtest = original.state.lstate.dgtest;
-      this.state.lstate.dgx = original.state.lstate.dgx;
-      this.state.lstate.dgxm = original.state.lstate.dgxm;
-      this.state.lstate.dgy = original.state.lstate.dgy;
-      this.state.lstate.dgym = original.state.lstate.dgym;
-      this.state.lstate.finit = original.state.lstate.finit;
-      this.state.lstate.fm = original.state.lstate.fm;
-      this.state.lstate.ftest1 = original.state.lstate.ftest1;
-      this.state.lstate.fx = original.state.lstate.fx;
-      this.state.lstate.fxm = original.state.lstate.fxm;
-      this.state.lstate.fy = original.state.lstate.fy;
-      this.state.lstate.fym = original.state.lstate.fym;
-      this.state.lstate.infoc = original.state.lstate.infoc;
-      this.state.lstate.stage1 = original.state.lstate.stage1;
-      this.state.lstate.stmax = original.state.lstate.stmax;
-      this.state.lstate.stmin = original.state.lstate.stmin;
-      this.state.lstate.stx = original.state.lstate.stx;
-      this.state.lstate.sty = original.state.lstate.sty;
-      this.state.lstate.width = original.state.lstate.width;
-      this.state.lstate.width1 = original.state.lstate.width1;
-      this.state.lstate.xtrapf = original.state.lstate.xtrapf;
-
-      this.state.m = original.state.m;
-      this.state.maxits = original.state.maxits;
-      this.state.mcstage = original.state.mcstage;
-      this.state.n = original.state.n;
-      this.state.needf = original.state.needf;
-      this.state.needfg = original.state.needfg;
-      this.state.nfev = original.state.nfev;
-      this.state.p = original.state.p;
-      this.state.prectype = original.state.prectype;
-      this.state.q = original.state.q;
-      this.state.repiterationscount = original.state.repiterationscount;
-      this.state.repnfev = original.state.repnfev;
-      this.state.repterminationtype = original.state.repterminationtype;
-      this.state.rho = CopyArray(original.state.rho);
-      this.state.rstate.ba = CopyArray(original.state.rstate.ba);
-      this.state.rstate.ca = CopyArray(original.state.rstate.ca);
-      this.state.rstate.ia = CopyArray(original.state.rstate.ia);
-      this.state.rstate.ra = CopyArray(original.state.rstate.ra);
-      this.state.rstate.stage = original.state.rstate.stage;
-
-      this.state.s = CopyArray(original.state.s);
-      this.state.sk = CopyArray(original.state.sk);
-      this.state.stp = original.state.stp;
-      this.state.stpmax = original.state.stpmax;
-      this.state.theta = CopyArray(original.state.theta);
-      this.state.trimthreshold = original.state.trimthreshold;
-      this.state.work = CopyArray(original.state.work);
-      this.state.x = CopyArray(original.state.x);
-      this.state.xrep = original.state.xrep;
-      this.state.xupdated = original.state.xupdated;
-      this.state.yk = CopyArray(original.state.yk);
-    }
-
-    public LbfgsState(alglib.minlbfgs.minlbfgsstate state)
-      : base() {
-      this.state = state;
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new LbfgsState(this, cloner);
-    }
-
-
-    private T[] CopyArray<T>(T[] a) {
-      var c = new T[a.Length];
-      Array.Copy(a, c, c.Length);
-      return c;
-    }
-    private T[,] CopyArray<T>(T[,] a) {
-      var c = new T[a.GetLength(0), a.GetLength(1)];
-      Array.Copy(a, c, c.Length);
-      return c;
-    }
-
-    #region persistence
-    [Storable]
-    private double[] Autobuf { get { return state.autobuf; } set { state.autobuf = value; } }
-    [Storable]
-    private double[] D { get { return state.d; } set { state.d = value; } }
-    [Storable]
-    private double[,] Denseh { get { return state.denseh; } set { state.denseh = value; } }
-    [Storable]
-    private double[] Diagh { get { return state.diagh; } set { state.diagh = value; } }
-    [Storable]
-    private double Diffstep { get { return state.diffstep; } set { state.diffstep = value; } }
-    [Storable]
-    private double Epsf { get { return state.epsf; } set { state.epsf = value; } }
-    [Storable]
-    private double Epsg { get { return state.epsg; } set { state.epsg = value; } }
-    [Storable]
-    private double Epsx { get { return state.epsx; } set { state.epsx = value; } }
-    [Storable]
-    private double F { get { return state.f; } set { state.f = value; } }
-    [Storable]
-    private double Fbase { get { return state.fbase; } set { state.fbase = value; } }
-    [Storable]
-    private double Fm1 { get { return state.fm1; } set { state.fm1 = value; } }
-    [Storable]
-    private double Fm2 { get { return state.fm2; } set { state.fm2 = value; } }
-    [Storable]
-    private double Fold { get { return state.fold; } set { state.fold = value; } }
-    [Storable]
-    private double Fp1 { get { return state.fp1; } set { state.fp1 = value; } }
-    [Storable]
-    private double Fp2 { get { return state.fp2; } set { state.fp2 = value; } }
-    [Storable]
-    private double[] G { get { return state.g; } set { state.g = value; } }
-    [Storable]
-    private double Gammak { get { return state.gammak; } set { state.gammak = value; } }
-    [Storable]
-    private int K { get { return state.k; } set { state.k = value; } }
-    [Storable]
-    private bool LstateBrackt { get { return state.lstate.brackt; } set { state.lstate.brackt = value; } }
-    [Storable]
-    private double LstateDg { get { return state.lstate.dg; } set { state.lstate.dg = value; } }
-    [Storable]
-    private double LstateDginit { get { return state.lstate.dginit; } set { state.lstate.dginit = value; } }
-    [Storable]
-    private double LstateDgm { get { return state.lstate.dgm; } set { state.lstate.dgm = value; } }
-    [Storable]
-    private double LstateDgtest { get { return state.lstate.dgtest; } set { state.lstate.dgtest = value; } }
-    [Storable]
-    private double LstateDgx { get { return state.lstate.dgx; } set { state.lstate.dgx = value; } }
-    [Storable]
-    private double LstateDgxm { get { return state.lstate.dgxm; } set { state.lstate.dgxm = value; } }
-    [Storable]
-    private double LstateDgy { get { return state.lstate.dgy; } set { state.lstate.dgy = value; } }
-    [Storable]
-    private double LstateDgym { get { return state.lstate.dgym; } set { state.lstate.dgym = value; } }
-    [Storable]
-    private double LstateFinit { get { return state.lstate.finit; } set { state.lstate.finit = value; } }
-    [Storable]
-    private double LstateFm { get { return state.lstate.fm; } set { state.lstate.fm = value; } }
-    [Storable]
-    private double LstateFtest1 { get { return state.lstate.ftest1; } set { state.lstate.ftest1 = value; } }
-    [Storable]
-    private double LstateFx { get { return state.lstate.fx; } set { state.lstate.fx = value; } }
-    [Storable]
-    private double LstateFxm { get { return state.lstate.fxm; } set { state.lstate.fxm = value; } }
-    [Storable]
-    private double LstateFy { get { return state.lstate.fy; } set { state.lstate.fy = value; } }
-    [Storable]
-    private double LstateFym { get { return state.lstate.fym; } set { state.lstate.fym = value; } }
-    [Storable]
-    private int LstateInfoc { get { return state.lstate.infoc; } set { state.lstate.infoc = value; } }
-    [Storable]
-    private bool LstateStage1 { get { return state.lstate.stage1; } set { state.lstate.stage1 = value; } }
-    [Storable]
-    private double LstateStmax { get { return state.lstate.stmax; } set { state.lstate.stmax = value; } }
-    [Storable]
-    private double LstateStmin { get { return state.lstate.stmin; } set { state.lstate.stmin = value; } }
-    [Storable]
-    private double LstateStx { get { return state.lstate.stx; } set { state.lstate.stx = value; } }
-    [Storable]
-    private double LstateSty { get { return state.lstate.sty; } set { state.lstate.sty = value; } }
-    [Storable]
-    private double LstateWidth { get { return state.lstate.width; } set { state.lstate.width = value; } }
-    [Storable]
-    private double LstateWidth1 { get { return state.lstate.width1; } set { state.lstate.width1 = value; } }
-    [Storable]
-    private double LstateXtrapf { get { return state.lstate.xtrapf; } set { state.lstate.xtrapf = value; } }
-
-    [Storable]
-    private int M { get { return state.m; } set { state.m = value; } }
-    [Storable]
-    private int MaxIts { get { return state.maxits; } set { state.maxits = value; } }
-    [Storable]
-    private int Mcstage { get { return state.mcstage; } set { state.mcstage = value; } }
-    [Storable]
-    private int N { get { return state.n; } set { state.n = value; } }
-    [Storable]
-    private bool Needf { get { return state.needf; } set { state.needf = value; } }
-    [Storable]
-    private bool Needfg { get { return state.needfg; } set { state.needfg = value; } }
-    [Storable]
-    private int Nfev { get { return state.nfev; } set { state.nfev = value; } }
-    [Storable]
-    private int P { get { return state.p; } set { state.p = value; } }
-    [Storable]
-    private int Prectype { get { return state.prectype; } set { state.prectype = value; } }
-    [Storable]
-    private int Q { get { return state.q; } set { state.q = value; } }
-    [Storable]
-    private int Repiterationscount { get { return state.repiterationscount; } set { state.repiterationscount = value; } }
-    [Storable]
-    private int Repnfev { get { return state.repnfev; } set { state.repnfev = value; } }
-    [Storable]
-    private int Repterminationtype { get { return state.repterminationtype; } set { state.repterminationtype = value; } }
-    [Storable]
-    private double[] Rho { get { return state.rho; } set { state.rho = value; } }
-    [Storable]
-    private bool[] RstateBa { get { return state.rstate.ba; } set { state.rstate.ba = value; } }
-    [Storable]
-    private IList<Tuple<double, double>> RStateCa {
-      get { return state.rstate.ca.Select(c => Tuple.Create(c.x, c.y)).ToList(); }
-      set { state.rstate.ca = value.Select(t => new alglib.complex(t.Item1, t.Item2)).ToArray(); }
-    }
-    [Storable]
-    private int[] RstateIa { get { return state.rstate.ia; } set { state.rstate.ia = value; } }
-    [Storable]
-    private double[] RstateRa { get { return state.rstate.ra; } set { state.rstate.ra = value; } }
-    [Storable]
-    private int RstateStage { get { return state.rstate.stage; } set { state.p = value; } }
-    [Storable]
-    private double[] S { get { return state.s; } set { state.s = value; } }
-    [Storable]
-    private double[,] Sk { get { return state.sk; } set { state.sk = value; } }
-    [Storable]
-    private double Stp { get { return state.stp; } set { state.stp = value; } }
-    [Storable]
-    private double Stpmax { get { return state.stpmax; } set { state.stpmax = value; } }
-    [Storable]
-    private double[] Theta { get { return state.theta; } set { state.theta = value; } }
-    [Storable]
-    private double Trimthreshold { get { return state.trimthreshold; } set { state.trimthreshold = value; } }
-    [Storable]
-    private double[] Work { get { return state.work; } set { state.work = value; } }
-    [Storable]
-    private double[] X { get { return state.x; } set { state.x = value; } }
-    [Storable]
-    private bool Xrep { get { return state.xrep; } set { state.xrep = value; } }
-    [Storable]
-    private bool Xupdated { get { return state.xupdated; } set { state.xupdated = value; } }
-    [Storable]
-    private double[,] Yk { get { return state.yk; } set { state.yk = value; } }
-    #endregion
-  }
-}
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/LbfgsUpdateResults.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/LbfgsUpdateResults.cs	(revision 8399)
+++ 	(revision )
@@ -1,93 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2012 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.Encodings.SymbolicExpressionTreeEncoding;
-using HeuristicLab.Operators;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.DataAnalysis;
-
-namespace HeuristicLab.Algorithms.DataAnalysis {
-  [StorableClass]
-  [Item(Name = "LBFGS UpdateResults", Description = "Sets the results (function value and gradients) for the next optimization step in the LM-BFGS algorithm.")]
-  public sealed class LbfgsUpdateResults : SingleSuccessorOperator {
-    private const string QualityGradientsParameterName = "QualityGradients";
-    private const string QualityParameterName = "Quality";
-    private const string StateParameterName = "State";
-    private const string ApproximateGradientsParameterName = "ApproximateGradients";
-
-    #region Parameter Properties
-    public ILookupParameter<BoolValue> ApproximateGradientsParameter {
-      get { return (ILookupParameter<BoolValue>)Parameters[ApproximateGradientsParameterName]; }
-    }
-    public ILookupParameter<RealVector> QualityGradientsParameter {
-      get { return (ILookupParameter<RealVector>)Parameters[QualityGradientsParameterName]; }
-    }
-    public ILookupParameter<DoubleValue> QualityParameter {
-      get { return (ILookupParameter<DoubleValue>)Parameters[QualityParameterName]; }
-    }
-    public ILookupParameter<LbfgsState> StateParameter {
-      get { return (ILookupParameter<LbfgsState>)Parameters[StateParameterName]; }
-    }
-    #endregion
-
-    #region Properties
-    private BoolValue ApproximateGradients { get { return ApproximateGradientsParameter.ActualValue; } }
-    private RealVector QualityGradients { get { return QualityGradientsParameter.ActualValue; } }
-    private DoubleValue Quality { get { return QualityParameter.ActualValue; } }
-    private LbfgsState State { get { return StateParameter.ActualValue; } }
-    #endregion
-
-    [StorableConstructor]
-    private LbfgsUpdateResults(bool deserializing) : base(deserializing) { }
-    private LbfgsUpdateResults(LbfgsUpdateResults original, Cloner cloner) : base(original, cloner) { }
-    public LbfgsUpdateResults()
-      : base() {
-      // in
-      Parameters.Add(new LookupParameter<RealVector>(QualityGradientsParameterName, "The gradients at the evaluated point of the function to optimize."));
-      Parameters.Add(new LookupParameter<DoubleValue>(QualityParameterName, "The value at the evaluated point of the function to optimize."));
-      Parameters.Add(new LookupParameter<BoolValue>(ApproximateGradientsParameterName,
-                                                    "Flag that indicates if gradients should be approximated."));
-      // in & out
-      Parameters.Add(new LookupParameter<LbfgsState>(StateParameterName, "The state of the LM-BFGS algorithm."));
-    }
-
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new LbfgsUpdateResults(this, cloner);
-    }
-
-    public override IOperation Apply() {
-      var state = State;
-      var f = Quality.Value;
-      state.State.f = f;
-      if (!ApproximateGradients.Value) {
-        var g = QualityGradients.ToArray();
-        state.State.g = g;
-      }
-      return base.Apply();
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/MeanConst.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/MeanConst.cs	(revision 8399)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/MeanConst.cs	(revision 8401)
@@ -1,3 +1,23 @@
-﻿
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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;
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/MeanLinear.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/MeanLinear.cs	(revision 8399)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/MeanLinear.cs	(revision 8401)
@@ -1,3 +1,22 @@
-﻿
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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;
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/MeanZero.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/MeanZero.cs	(revision 8399)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/MeanZero.cs	(revision 8401)
@@ -1,3 +1,22 @@
-﻿
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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;
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/Util.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/Util.cs	(revision 8399)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/Util.cs	(revision 8401)
@@ -1,3 +1,22 @@
-﻿
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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;
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj	(revision 8399)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis-3.4.csproj	(revision 8401)
@@ -113,7 +113,5 @@
       <RequiredTargetFramework>3.5</RequiredTargetFramework>
     </Reference>
-    <Reference Include="System.Data" />
     <Reference Include="System.Drawing" />
-    <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
@@ -122,10 +120,4 @@
     </Compile>
     <Compile Include="FixedDataAnalysisAlgorithm.cs" />
-    <Compile Include="GaussianProcess\Lbfgs.cs" />
-    <Compile Include="GaussianProcess\LbfgsInitializer.cs" />
-    <Compile Include="GaussianProcess\LbfgsState.cs" />
-    <Compile Include="GaussianProcess\LbfgsUpdateResults.cs" />
-    <Compile Include="GaussianProcess\LbfgsMakeStep.cs" />
-    <Compile Include="GaussianProcess\LbfgsAnalyzer.cs" />
     <Compile Include="GaussianProcess\GaussianProcessHyperparameterInitializer.cs" />
     <Compile Include="GaussianProcess\GaussianProcessRegressionSolutionCreator.cs" />
@@ -214,4 +206,9 @@
   </ItemGroup>
   <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Algorithms.GradientDescent\3.3\HeuristicLab.Algorithms.GradientDescent.csproj">
+      <Project>{1256B945-EEA9-4BE4-9880-76B5B113F089}</Project>
+      <Name>HeuristicLab.Algorithms.GradientDescent</Name>
+      <Private>False</Private>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Analysis\3.3\HeuristicLab.Analysis-3.3.csproj">
       <Project>{887425B4-4348-49ED-A457-B7D2C26DDBF9}</Project>
@@ -247,4 +244,5 @@
       <Project>{BB6D334A-4BB6-4674-9883-31A6EBB32CAB}</Project>
       <Name>HeuristicLab.Encodings.RealVectorEncoding-3.3</Name>
+      <Private>False</Private>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding\3.4\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj">
@@ -256,8 +254,5 @@
       <Project>{23DA7FF4-D5B8-41B6-AA96-F0561D24F3EE}</Project>
       <Name>HeuristicLab.Operators-3.3</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Optimization.Operators\3.3\HeuristicLab.Optimization.Operators-3.3.csproj">
-      <Project>{25087811-F74C-4128-BC86-8324271DA13E}</Project>
-      <Name>HeuristicLab.Optimization.Operators-3.3</Name>
+      <Private>False</Private>
     </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Optimization\3.3\HeuristicLab.Optimization-3.3.csproj">
@@ -304,13 +299,4 @@
       <Project>{3540E29E-4793-49E7-8EE2-FEA7F61C3994}</Project>
       <Name>HeuristicLab.Problems.Instances-3.3</Name>
-      <Private>False</Private>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Problems.TestFunctions\3.3\HeuristicLab.Problems.TestFunctions-3.3.csproj">
-      <Project>{88B9B0E3-344E-4196-82A3-0F9732506FE8}</Project>
-      <Name>HeuristicLab.Problems.TestFunctions-3.3</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\HeuristicLab.Random\3.3\HeuristicLab.Random-3.3.csproj">
-      <Project>{F4539FB6-4708-40C9-BE64-0A1390AEA197}</Project>
-      <Name>HeuristicLab.Random-3.3</Name>
       <Private>False</Private>
     </ProjectReference>
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/NeuralNetwork/NeuralNetworkRegression.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/NeuralNetwork/NeuralNetworkRegression.cs	(revision 8399)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/NeuralNetwork/NeuralNetworkRegression.cs	(revision 8401)
@@ -26,11 +26,8 @@
 using HeuristicLab.Core;
 using HeuristicLab.Data;
-using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
 using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Problems.DataAnalysis;
-using HeuristicLab.Problems.DataAnalysis.Symbolic;
-using HeuristicLab.Problems.DataAnalysis.Symbolic.Regression;
-using HeuristicLab.Parameters;
 
 namespace HeuristicLab.Algorithms.DataAnalysis {
Index: trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/Plugin.cs.frame
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/Plugin.cs.frame	(revision 8399)
+++ trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/Plugin.cs.frame	(revision 8401)
@@ -29,6 +29,6 @@
   [PluginFile("HeuristicLab.Algorithms.DataAnalysis-3.4.dll", PluginFileType.Assembly)]
   [PluginDependency("HeuristicLab.ALGLIB", "3.5.0")]
+  [PluginDependency("HeuristicLab.Algorithms.GradientDescent", "3.3")]
   [PluginDependency("HeuristicLab.Analysis", "3.3")]
-  [PluginDependency("HeuristicLab.LibSVM", "1.6.3")]
   [PluginDependency("HeuristicLab.Collections", "3.3")]
   [PluginDependency("HeuristicLab.Common", "3.3")]
@@ -36,6 +36,6 @@
   [PluginDependency("HeuristicLab.Core", "3.3")]
   [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.RealVectorEncoding", "3.3")]
   [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding", "3.4")]
-  [PluginDependency("HeuristicLab.Encodings.RealVectorEncoding", "3.3")]
   [PluginDependency("HeuristicLab.Operators", "3.3")]
   [PluginDependency("HeuristicLab.Optimization", "3.3")]
@@ -46,6 +46,5 @@
   [PluginDependency("HeuristicLab.Problems.DataAnalysis.Symbolic.Classification", "3.4")]
   [PluginDependency("HeuristicLab.Problems.DataAnalysis.Symbolic.Regression", "3.4")]
-  [PluginDependency("HeuristicLab.Problems.TestFunctions", "3.3")]
-  [PluginDependency("HeuristicLab.Random", "3.3")]
+  [PluginDependency("HeuristicLab.LibSVM", "1.6.3")]
   public class HeuristicLabAlgorithmsDataAnalysisPlugin : PluginBase {
   }
Index: trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent.csproj
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent.csproj	(revision 8399)
+++ trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/HeuristicLab.Algorithms.GradientDescent.csproj	(revision 8401)
@@ -18,5 +18,5 @@
     <DebugType>full</DebugType>
     <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
+    <OutputPath>..\..\bin\</OutputPath>
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
@@ -26,5 +26,5 @@
     <DebugType>pdbonly</DebugType>
     <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
+    <OutputPath>..\..\bin\</OutputPath>
     <DefineConstants>TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
@@ -39,5 +39,5 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
     <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x86\Debug\</OutputPath>
+    <OutputPath>..\..\bin\</OutputPath>
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <DebugType>full</DebugType>
@@ -54,5 +54,5 @@
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
-    <OutputPath>bin\x86\Release\</OutputPath>
+    <OutputPath>..\..\bin\</OutputPath>
     <DefineConstants>TRACE</DefineConstants>
     <Optimize>true</Optimize>
@@ -70,5 +70,5 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
     <DebugSymbols>true</DebugSymbols>
-    <OutputPath>bin\x64\Debug\</OutputPath>
+    <OutputPath>..\..\bin\</OutputPath>
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <DebugType>full</DebugType>
@@ -85,5 +85,5 @@
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
-    <OutputPath>bin\x64\Release\</OutputPath>
+    <OutputPath>..\..\bin\</OutputPath>
     <DefineConstants>TRACE</DefineConstants>
     <Optimize>true</Optimize>
@@ -102,66 +102,91 @@
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="ALGLIB-3.1.0">
-      <HintPath>..\..\..\..\Program Files\HeuristicLab 3.3\ALGLIB-3.1.0.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.ALGLIB-3.1.0">
-      <HintPath>..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.ALGLIB-3.1.0.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Analysis-3.3">
-      <HintPath>..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Analysis-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Collections-3.3">
-      <HintPath>..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Collections-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Common-3.3">
-      <HintPath>..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Core-3.3">
-      <HintPath>..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Data-3.3">
-      <HintPath>..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Data-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Encodings.RealVectorEncoding-3.3">
-      <HintPath>..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Encodings.RealVectorEncoding-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Operators-3.3">
-      <HintPath>..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Operators-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Optimization-3.3">
-      <HintPath>..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Optimization-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Optimization.Operators-3.3">
-      <HintPath>..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Optimization.Operators-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Parameters-3.3">
-      <HintPath>..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Parameters-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Persistence-3.3">
-      <HintPath>..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
-      <HintPath>..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Problems.TestFunctions-3.3">
-      <HintPath>..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.TestFunctions-3.3.dll</HintPath>
-    </Reference>
-    <Reference Include="HeuristicLab.Random-3.3">
-      <HintPath>..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Random-3.3.dll</HintPath>
+    <Reference Include="ALGLIB-3.5.0, Version=3.5.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
+      <Private>False</Private>
     </Reference>
     <Reference Include="System" />
     <Reference Include="System.Core" />
-    <Reference Include="System.Data" />
   </ItemGroup>
   <ItemGroup>
     <None Include="Plugin.cs.frame" />
-    <Compile Include="LevenbergMarquardt.cs" />
-    <Compile Include="LevenbergMarquardtMove.cs" />
+    <Compile Include="Lbfgs.cs" />
+    <Compile Include="LbfgsAnalyzer.cs" />
+    <Compile Include="LbfgsInitializer.cs" />
+    <Compile Include="LbfgsMakeStep.cs" />
+    <Compile Include="LbfgsState.cs" />
+    <Compile Include="LbfgsUpdateResults.cs" />
     <Compile Include="Plugin.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-    <None Include="Properties\AssemblyInfo.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
   </ItemGroup>
   <ItemGroup>
     <None Include="HeuristicLab.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Analysis\3.3\HeuristicLab.Analysis-3.3.csproj">
+      <Project>{887425B4-4348-49ED-A457-B7D2C26DDBF9}</Project>
+      <Name>HeuristicLab.Analysis-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <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.TestFunctions\3.3\HeuristicLab.Problems.TestFunctions-3.3.csproj">
+      <Project>{88B9B0E3-344E-4196-82A3-0F9732506FE8}</Project>
+      <Name>HeuristicLab.Problems.TestFunctions-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Random\3.3\HeuristicLab.Random-3.3.csproj">
+      <Project>{F4539FB6-4708-40C9-BE64-0A1390AEA197}</Project>
+      <Name>HeuristicLab.Random-3.3</Name>
+      <Private>False</Private>
+    </ProjectReference>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
@@ -173,5 +198,5 @@
 
 call PreBuildEvent.cmd
-SubWCRev "%25ProjectDir%25\" "%25ProjectDir%25\Plugin.cs.frame" "%25ProjectDir%25\Plugin.cs"</PreBuildEvent>
+</PreBuildEvent>
   </PropertyGroup>
   <PropertyGroup>
Index: trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/Lbfgs.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/Lbfgs.cs	(revision 8401)
+++ trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/Lbfgs.cs	(revision 8401)
@@ -0,0 +1,157 @@
+
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.TestFunctions;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.Algorithms.GradientDescent {
+  /// <summary>
+  /// Limited-Memory BFGS optimization algorithm.
+  /// </summary>
+  [Item("LM-BFGS", "The limited-memory BFGS (BroydenFletcherGoldfarbShanno) optimization algorithm.")]
+  [Creatable("Algorithms")]
+  [StorableClass]
+  public sealed class LbfgsAlgorithm : HeuristicOptimizationEngineAlgorithm, IStorableContent {
+    public override Type ProblemType {
+      get { return typeof(SingleObjectiveTestFunctionProblem); }
+    }
+
+    public new SingleObjectiveTestFunctionProblem Problem {
+      get { return (SingleObjectiveTestFunctionProblem)base.Problem; }
+      set { base.Problem = value; }
+    }
+
+    public string Filename { get; set; }
+
+    private const string MaxIterationsParameterName = "MaxIterations";
+    private const string ApproximateGradientsParameterName = "ApproximateGradients";
+    private const string SeedParameterName = "Seed";
+    private const string SetSeedRandomlyParameterName = "SetSeedRandomly";
+
+    #region parameter properties
+    public IValueParameter<IntValue> MaxIterationsParameter {
+      get { return (IValueParameter<IntValue>)Parameters[MaxIterationsParameterName]; }
+    }
+    public IValueParameter<IntValue> SeedParameter {
+      get { return (IValueParameter<IntValue>)Parameters[SeedParameterName]; }
+    }
+    public IValueParameter<BoolValue> SetSeedRandomlyParameter {
+      get { return (IValueParameter<BoolValue>)Parameters[SetSeedRandomlyParameterName]; }
+    }
+    #endregion
+    #region properties
+    public int MaxIterations {
+      set { MaxIterationsParameter.Value.Value = value; }
+      get { return MaxIterationsParameter.Value.Value; }
+    }
+    public int Seed { get { return SeedParameter.Value.Value; } set { SeedParameter.Value.Value = value; } }
+    public bool SetSeedRandomly { get { return SetSeedRandomlyParameter.Value.Value; } set { SetSeedRandomlyParameter.Value.Value = value; } }
+    #endregion
+
+    [StorableConstructor]
+    private LbfgsAlgorithm(bool deserializing) : base(deserializing) { }
+    private LbfgsAlgorithm(LbfgsAlgorithm original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public LbfgsAlgorithm()
+      : base() {
+      this.name = ItemName;
+      this.description = ItemDescription;
+
+      Problem = new SingleObjectiveTestFunctionProblem();
+
+      Parameters.Add(new ValueParameter<IntValue>(MaxIterationsParameterName, "The maximal number of iterations for.", new IntValue(20)));
+      Parameters.Add(new ValueParameter<IntValue>(SeedParameterName, "The random seed used to initialize the new pseudo random number generator.", new IntValue(0)));
+      Parameters.Add(new ValueParameter<BoolValue>(SetSeedRandomlyParameterName, "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true)));
+      Parameters.Add(new ValueParameter<BoolValue>(ApproximateGradientsParameterName, "Indicates that gradients should be approximated.", new BoolValue(true)));
+      Parameters[ApproximateGradientsParameterName].Hidden = true; // should not be changed
+
+      var randomCreator = new RandomCreator();
+      var solutionCreator = new Placeholder();
+      var bfgsInitializer = new LbfgsInitializer();
+      var makeStep = new LbfgsMakeStep();
+      var branch = new ConditionalBranch();
+      var evaluator = new Placeholder();
+      var updateResults = new LbfgsUpdateResults();
+      var analyzer = new LbfgsAnalyzer();
+      var finalAnalyzer = new LbfgsAnalyzer();
+
+      OperatorGraph.InitialOperator = randomCreator;
+
+      randomCreator.SeedParameter.ActualName = SeedParameterName;
+      randomCreator.SeedParameter.Value = null;
+      randomCreator.SetSeedRandomlyParameter.ActualName = SetSeedRandomlyParameterName;
+      randomCreator.SetSeedRandomlyParameter.Value = null;
+      randomCreator.Successor = solutionCreator;
+
+      solutionCreator.OperatorParameter.ActualName = Problem.SolutionCreatorParameter.Name;
+      solutionCreator.Successor = bfgsInitializer;
+
+      bfgsInitializer.IterationsParameter.ActualName = MaxIterationsParameterName;
+      bfgsInitializer.PointParameter.ActualName = Problem.SolutionCreator.RealVectorParameter.ActualName;
+      bfgsInitializer.ApproximateGradientsParameter.ActualName = ApproximateGradientsParameterName;
+      bfgsInitializer.Successor = makeStep;
+
+      makeStep.StateParameter.ActualName = bfgsInitializer.StateParameter.Name;
+      makeStep.PointParameter.ActualName = bfgsInitializer.PointParameter.ActualName;
+      makeStep.Successor = branch;
+
+      branch.ConditionParameter.ActualName = makeStep.TerminationCriterionParameter.Name;
+      branch.FalseBranch = evaluator;
+      branch.TrueBranch = finalAnalyzer;
+
+      evaluator.OperatorParameter.ActualName = Problem.EvaluatorParameter.Name;
+      evaluator.Successor = updateResults;
+
+      updateResults.StateParameter.ActualName = bfgsInitializer.StateParameter.Name;
+      updateResults.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.Name;
+      updateResults.ApproximateGradientsParameter.ActualName = ApproximateGradientsParameterName;
+      updateResults.Successor = analyzer;
+
+      analyzer.QualityParameter.ActualName = updateResults.QualityParameter.ActualName;
+      analyzer.PointParameter.ActualName = makeStep.PointParameter.ActualName;
+      analyzer.StateParameter.ActualName = bfgsInitializer.StateParameter.Name;
+      analyzer.Successor = makeStep;
+
+      finalAnalyzer.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.Name;
+      finalAnalyzer.PointParameter.ActualName = makeStep.PointParameter.ActualName;
+      finalAnalyzer.PointsTableParameter.ActualName = analyzer.PointsTableParameter.ActualName;
+      finalAnalyzer.QualityGradientsTableParameter.ActualName = analyzer.QualityGradientsTableParameter.ActualName;
+      finalAnalyzer.QualitiesTableParameter.ActualName = analyzer.QualitiesTableParameter.ActualName;
+    }
+
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new LbfgsAlgorithm(this, cloner);
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsAnalyzer.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsAnalyzer.cs	(revision 8401)
+++ trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsAnalyzer.cs	(revision 8401)
@@ -0,0 +1,168 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Analysis;
+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.Algorithms.GradientDescent {
+  [StorableClass]
+  [Item(Name = "LBFGS Analyzer", Description = "Analyzer to collect results for the LM-BFGS algorithm.")]
+  public sealed class LbfgsAnalyzer : SingleSuccessorOperator, IAnalyzer {
+    private const string PointParameterName = "Point";
+    private const string QualityGradientsParameterName = "QualityGradients";
+    private const string QualityParameterName = "Quality";
+    private const string ResultCollectionParameterName = "Results";
+    private const string QualitiesTableParameterName = "Qualities";
+    private const string PointsTableParameterName = "PointTable";
+    private const string QualityGradientsTableParameterName = "QualityGradientsTable";
+    private const string StateParameterName = "State";
+    private const string ApproximateGradientsParameterName = "ApproximateGradients";
+
+    #region Parameter Properties
+    public ILookupParameter<RealVector> QualityGradientsParameter {
+      get { return (ILookupParameter<RealVector>)Parameters[QualityGradientsParameterName]; }
+    }
+    public ILookupParameter<RealVector> PointParameter {
+      get { return (ILookupParameter<RealVector>)Parameters[PointParameterName]; }
+    }
+    public ILookupParameter<DoubleValue> QualityParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters[QualityParameterName]; }
+    }
+    public ILookupParameter<ResultCollection> ResultCollectionParameter {
+      get { return (ILookupParameter<ResultCollection>)Parameters[ResultCollectionParameterName]; }
+    }
+    public ILookupParameter<DataTable> QualitiesTableParameter {
+      get { return (ILookupParameter<DataTable>)Parameters[QualitiesTableParameterName]; }
+    }
+    public ILookupParameter<DataTable> PointsTableParameter {
+      get { return (ILookupParameter<DataTable>)Parameters[PointsTableParameterName]; }
+    }
+    public ILookupParameter<DataTable> QualityGradientsTableParameter {
+      get { return (ILookupParameter<DataTable>)Parameters[QualityGradientsTableParameterName]; }
+    }
+    public ILookupParameter<LbfgsState> StateParameter {
+      get { return (ILookupParameter<LbfgsState>)Parameters[StateParameterName]; }
+    }
+    public ILookupParameter<BoolValue> ApproximateGradientsParameter {
+      get { return (ILookupParameter<BoolValue>)Parameters[ApproximateGradientsParameterName]; }
+    }
+    #endregion
+
+    #region Properties
+    private RealVector QualityGradients { get { return QualityGradientsParameter.ActualValue; } }
+    private RealVector Point { get { return PointParameter.ActualValue; } }
+    private DoubleValue Quality { get { return QualityParameter.ActualValue; } }
+    private ResultCollection ResultCollection { get { return ResultCollectionParameter.ActualValue; } }
+    private BoolValue ApproximateGradients { get { return ApproximateGradientsParameter.ActualValue; } }
+
+    public bool EnabledByDefault {
+      get { return true; }
+    }
+
+    #endregion
+
+    [StorableConstructor]
+    private LbfgsAnalyzer(bool deserializing) : base(deserializing) { }
+    private LbfgsAnalyzer(LbfgsAnalyzer original, Cloner cloner) : base(original, cloner) { }
+    public LbfgsAnalyzer()
+      : base() {
+      // in
+      Parameters.Add(new LookupParameter<RealVector>(PointParameterName, "The current point of the function to optimize."));
+      Parameters.Add(new LookupParameter<RealVector>(QualityGradientsParameterName, "The current gradients of the function to optimize."));
+      Parameters.Add(new LookupParameter<DoubleValue>(QualityParameterName, "The current value of the function to optimize."));
+      Parameters.Add(new LookupParameter<DataTable>(QualitiesTableParameterName, "The table of all visited quality values."));
+      Parameters.Add(new LookupParameter<DataTable>(PointsTableParameterName, "The table of all visited points."));
+      Parameters.Add(new LookupParameter<DataTable>(QualityGradientsTableParameterName, "The table of all visited gradient values."));
+      Parameters.Add(new LookupParameter<LbfgsState>(StateParameterName, "The state of the LM-BFGS optimization algorithm."));
+      Parameters.Add(new LookupParameter<BoolValue>(ApproximateGradientsParameterName,
+                                              "Flag that indicates if gradients should be approximated."));
+
+      // in & out
+      Parameters.Add(new LookupParameter<ResultCollection>(ResultCollectionParameterName, "The result collection of the algorithm."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new LbfgsAnalyzer(this, cloner);
+    }
+
+    public override IOperation Apply() {
+      if (StateParameter.ActualValue.State.xupdated) {
+        var f = Quality.Value;
+        double[] g;
+        if (ApproximateGradients.Value) {
+          g = StateParameter.ActualValue.State.g;
+        } else {
+          g = QualityGradients.ToArray();
+        }
+        var x = Point.ToArray();
+        var resultCollection = ResultCollection;
+
+        // create and add tables on the first time
+        if (QualitiesTableParameter.ActualValue == null) {
+          QualitiesTableParameter.ActualValue = new DataTable(QualityParameter.ActualName);
+          PointsTableParameter.ActualValue = new DataTable(PointParameter.ActualName);
+          QualityGradientsTableParameter.ActualValue = new DataTable(QualityGradientsParameter.ActualName);
+
+          QualitiesTableParameter.ActualValue.Rows.Add(new DataRow(QualityParameter.ActualName));
+
+          resultCollection.Add(new Result(QualitiesTableParameter.ActualName,
+                                          QualitiesTableParameter.ActualValue));
+          resultCollection.Add(new Result(PointsTableParameter.ActualName,
+                                          PointsTableParameter.ActualValue));
+          resultCollection.Add(new Result(QualityGradientsTableParameter.ActualName,
+                                          QualityGradientsTableParameter.ActualValue));
+          resultCollection.Add(new Result(QualityParameter.ActualName, QualityParameter.ActualValue));
+        }
+
+        // update
+        var functionValueRow = QualitiesTableParameter.ActualValue.Rows[QualityParameter.ActualName];
+        resultCollection[QualityParameter.ActualName].Value = Quality;
+        functionValueRow.Values.Add(f);
+
+        AddValues(g, QualityGradientsTableParameter.ActualValue);
+        AddValues(x, PointsTableParameter.ActualValue);
+      }
+      return base.Apply();
+    }
+
+    private void AddValues(double[] x, DataTable dataTable) {
+      if (!dataTable.Rows.Any()) {
+        for (int i = 0; i < x.Length; i++) {
+          var newRow = new DataRow("x" + i);
+          newRow.Values.Add(x[i]);
+          dataTable.Rows.Add(newRow);
+        }
+      } else {
+        for (int i = 0; i < x.Length; i++) {
+          dataTable.Rows.ElementAt(i).Values.Add(x[i]);
+        }
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsInitializer.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsInitializer.cs	(revision 8401)
+++ trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsInitializer.cs	(revision 8401)
@@ -0,0 +1,101 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Operators;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Algorithms.GradientDescent {
+  [StorableClass]
+  [Item(Name = "LBFGS Initializer", Description = "Initializes the necessary data structures for the LM-BFGS algorithm.")]
+  public sealed class LbfgsInitializer : SingleSuccessorOperator {
+    private const string PointParameterName = "Point";
+    private const string StateParameterName = "State";
+    private const string IterationsParameterName = "Iterations";
+    private const string ApproximateGradientsParameterName = "ApproximateGradients";
+
+    #region Parameter Properties
+    // in
+    public ILookupParameter<IntValue> IterationsParameter {
+      get { return (ILookupParameter<IntValue>)Parameters[IterationsParameterName]; }
+    }
+    public ILookupParameter<RealVector> PointParameter {
+      get { return (ILookupParameter<RealVector>)Parameters[PointParameterName]; }
+    }
+    // out
+    public ILookupParameter<LbfgsState> StateParameter {
+      get { return (ILookupParameter<LbfgsState>)Parameters[StateParameterName]; }
+    }
+    public ILookupParameter<BoolValue> ApproximateGradientsParameter {
+      get { return (ILookupParameter<BoolValue>)Parameters[ApproximateGradientsParameterName]; }
+    }
+
+
+    #endregion
+
+    #region Properties
+    private RealVector Point { get { return PointParameter.ActualValue; } }
+    private IntValue Iterations { get { return IterationsParameter.ActualValue; } }
+    private BoolValue ApproximateGradients { get { return ApproximateGradientsParameter.ActualValue; } }
+    #endregion
+
+    [StorableConstructor]
+    private LbfgsInitializer(bool deserializing) : base(deserializing) { }
+    private LbfgsInitializer(LbfgsInitializer original, Cloner cloner) : base(original, cloner) { }
+    public LbfgsInitializer()
+      : base() {
+      // in
+      Parameters.Add(new LookupParameter<RealVector>(PointParameterName, "The initial point for the LM-BFGS algorithm."));
+      Parameters.Add(new LookupParameter<IntValue>(IterationsParameterName, "The maximal number of iterations for the LM-BFGS algorithm."));
+      Parameters.Add(new LookupParameter<BoolValue>(ApproximateGradientsParameterName,
+                                                    "Flag that indicates if gradients should be approximated."));
+      // out
+      Parameters.Add(new LookupParameter<LbfgsState>(StateParameterName, "The state of the LM-BFGS algorithm."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new LbfgsInitializer(this, cloner);
+    }
+
+    public override IOperation Apply() {
+      double[] initialPoint = Point.ToArray();
+      int n = initialPoint.Length;
+      alglib.minlbfgs.minlbfgsstate state = new alglib.minlbfgs.minlbfgsstate();
+      if (ApproximateGradients.Value) {
+        alglib.minlbfgs.minlbfgscreatef(n, Math.Min(n, 7), initialPoint, 1E-5, state);
+      } else {
+        alglib.minlbfgs.minlbfgscreate(n, Math.Min(n, 7), initialPoint, state);
+      }
+      alglib.minlbfgs.minlbfgssetcond(state, 0, 0, 0, Iterations.Value);
+      alglib.minlbfgs.minlbfgssetxrep(state, true);
+
+      PointParameter.ActualValue = new RealVector(initialPoint);
+      StateParameter.ActualValue = new LbfgsState(state);
+      return base.Apply();
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsMakeStep.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsMakeStep.cs	(revision 8401)
+++ trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsMakeStep.cs	(revision 8401)
@@ -0,0 +1,86 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Algorithms.GradientDescent {
+  [StorableClass]
+  [Item(Name = "LBFGS MakeStep", Description = "Makes a step in the LM-BFGS optimization algorithm.")]
+  public sealed class LbfgsMakeStep : SingleSuccessorOperator {
+    private const string TerminationCriterionParameterName = "TerminationCriterion";
+    private const string PointParameterName = "Point";
+    private const string StateParameterName = "State";
+
+    #region Parameter Properties
+    public ILookupParameter<LbfgsState> StateParameter {
+      get { return (ILookupParameter<LbfgsState>)Parameters[StateParameterName]; }
+    }
+    public ILookupParameter<BoolValue> TerminationCriterionParameter {
+      get { return (ILookupParameter<BoolValue>)Parameters[TerminationCriterionParameterName]; }
+    }
+    public ILookupParameter<RealVector> PointParameter {
+      get { return (ILookupParameter<RealVector>)Parameters[PointParameterName]; }
+    }
+    #endregion
+
+
+    #region Properties
+    private LbfgsState State { get { return StateParameter.ActualValue; } }
+    #endregion
+
+    [StorableConstructor]
+    private LbfgsMakeStep(bool deserializing) : base(deserializing) { }
+    private LbfgsMakeStep(LbfgsMakeStep original, Cloner cloner) : base(original, cloner) { }
+    public LbfgsMakeStep()
+      : base() {
+      // in & out
+      Parameters.Add(new LookupParameter<LbfgsState>(StateParameterName, "The state of the LM-BFGS algorithm."));
+      // out
+      Parameters.Add(new LookupParameter<BoolValue>(TerminationCriterionParameterName, "The termination criterion indicating that the LM-BFGS optimization algorithm should stop."));
+      Parameters.Add(new LookupParameter<RealVector>(PointParameterName, "The next point that should be evaluated in the LM-BFGS algorithm."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new LbfgsMakeStep(this, cloner);
+    }
+
+    public override IOperation Apply() {
+      var state = State;
+      bool @continue = alglib.minlbfgs.minlbfgsiteration(state.State);
+      TerminationCriterionParameter.ActualValue = new BoolValue(!@continue);
+      if (@continue) {
+        PointParameter.ActualValue = new RealVector(state.State.x);
+      } else {
+        double[] x = new double[state.State.x.Length];
+        alglib.minlbfgs.minlbfgsreport rep = new alglib.minlbfgs.minlbfgsreport();
+        alglib.minlbfgs.minlbfgsresults(state.State, ref x, rep);
+        PointParameter.ActualValue = new RealVector(x);
+      }
+      return base.Apply();
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsState.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsState.cs	(revision 8401)
+++ trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsState.cs	(revision 8401)
@@ -0,0 +1,296 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Algorithms.GradientDescent {
+  [StorableClass]
+  [Item("LbfgsState", "Internal state for the limited-memory BFGS optimization algorithm.")]
+  public sealed class LbfgsState : Item {
+    private alglib.minlbfgs.minlbfgsstate state;
+    public alglib.minlbfgs.minlbfgsstate State { get { return state; } }
+
+    [StorableConstructor]
+    private LbfgsState(bool deserializing)
+      : base(deserializing) {
+      state = new alglib.minlbfgs.minlbfgsstate();
+    }
+    private LbfgsState(LbfgsState original, Cloner cloner)
+      : base(original, cloner) {
+      this.state = new alglib.minlbfgs.minlbfgsstate();
+      this.state.autobuf = CopyArray(original.state.autobuf);
+      this.state.d = CopyArray(original.state.d);
+      this.state.denseh = CopyArray(original.state.denseh);
+      this.state.diagh = CopyArray(original.state.diagh);
+      this.state.diffstep = original.state.diffstep;
+      this.state.epsf = original.state.epsf;
+      this.state.epsg = original.state.epsg;
+      this.state.epsx = original.state.epsx;
+      this.state.f = original.state.f;
+      this.state.fbase = original.state.fbase;
+      this.state.fm1 = original.state.fm1;
+      this.state.fm2 = original.state.fm2;
+      this.state.fold = original.state.fold;
+      this.state.fp1 = original.state.fp1;
+      this.state.fp2 = original.state.fp1;
+      this.state.g = CopyArray(original.state.g);
+      this.state.gammak = original.state.gammak;
+      this.state.k = original.state.k;
+
+      this.state.lstate.brackt = original.state.lstate.brackt;
+      this.state.lstate.dg = original.state.lstate.dg;
+      this.state.lstate.dginit = original.state.lstate.dginit;
+      this.state.lstate.dgm = original.state.lstate.dgm;
+      this.state.lstate.dgtest = original.state.lstate.dgtest;
+      this.state.lstate.dgx = original.state.lstate.dgx;
+      this.state.lstate.dgxm = original.state.lstate.dgxm;
+      this.state.lstate.dgy = original.state.lstate.dgy;
+      this.state.lstate.dgym = original.state.lstate.dgym;
+      this.state.lstate.finit = original.state.lstate.finit;
+      this.state.lstate.fm = original.state.lstate.fm;
+      this.state.lstate.ftest1 = original.state.lstate.ftest1;
+      this.state.lstate.fx = original.state.lstate.fx;
+      this.state.lstate.fxm = original.state.lstate.fxm;
+      this.state.lstate.fy = original.state.lstate.fy;
+      this.state.lstate.fym = original.state.lstate.fym;
+      this.state.lstate.infoc = original.state.lstate.infoc;
+      this.state.lstate.stage1 = original.state.lstate.stage1;
+      this.state.lstate.stmax = original.state.lstate.stmax;
+      this.state.lstate.stmin = original.state.lstate.stmin;
+      this.state.lstate.stx = original.state.lstate.stx;
+      this.state.lstate.sty = original.state.lstate.sty;
+      this.state.lstate.width = original.state.lstate.width;
+      this.state.lstate.width1 = original.state.lstate.width1;
+      this.state.lstate.xtrapf = original.state.lstate.xtrapf;
+
+      this.state.m = original.state.m;
+      this.state.maxits = original.state.maxits;
+      this.state.mcstage = original.state.mcstage;
+      this.state.n = original.state.n;
+      this.state.needf = original.state.needf;
+      this.state.needfg = original.state.needfg;
+      this.state.nfev = original.state.nfev;
+      this.state.p = original.state.p;
+      this.state.prectype = original.state.prectype;
+      this.state.q = original.state.q;
+      this.state.repiterationscount = original.state.repiterationscount;
+      this.state.repnfev = original.state.repnfev;
+      this.state.repterminationtype = original.state.repterminationtype;
+      this.state.rho = CopyArray(original.state.rho);
+      this.state.rstate.ba = CopyArray(original.state.rstate.ba);
+      this.state.rstate.ca = CopyArray(original.state.rstate.ca);
+      this.state.rstate.ia = CopyArray(original.state.rstate.ia);
+      this.state.rstate.ra = CopyArray(original.state.rstate.ra);
+      this.state.rstate.stage = original.state.rstate.stage;
+
+      this.state.s = CopyArray(original.state.s);
+      this.state.sk = CopyArray(original.state.sk);
+      this.state.stp = original.state.stp;
+      this.state.stpmax = original.state.stpmax;
+      this.state.theta = CopyArray(original.state.theta);
+      this.state.trimthreshold = original.state.trimthreshold;
+      this.state.work = CopyArray(original.state.work);
+      this.state.x = CopyArray(original.state.x);
+      this.state.xrep = original.state.xrep;
+      this.state.xupdated = original.state.xupdated;
+      this.state.yk = CopyArray(original.state.yk);
+    }
+
+    public LbfgsState(alglib.minlbfgs.minlbfgsstate state)
+      : base() {
+      this.state = state;
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new LbfgsState(this, cloner);
+    }
+
+
+    private T[] CopyArray<T>(T[] a) {
+      var c = new T[a.Length];
+      Array.Copy(a, c, c.Length);
+      return c;
+    }
+    private T[,] CopyArray<T>(T[,] a) {
+      var c = new T[a.GetLength(0), a.GetLength(1)];
+      Array.Copy(a, c, c.Length);
+      return c;
+    }
+
+    #region persistence
+    [Storable]
+    private double[] Autobuf { get { return state.autobuf; } set { state.autobuf = value; } }
+    [Storable]
+    private double[] D { get { return state.d; } set { state.d = value; } }
+    [Storable]
+    private double[,] Denseh { get { return state.denseh; } set { state.denseh = value; } }
+    [Storable]
+    private double[] Diagh { get { return state.diagh; } set { state.diagh = value; } }
+    [Storable]
+    private double Diffstep { get { return state.diffstep; } set { state.diffstep = value; } }
+    [Storable]
+    private double Epsf { get { return state.epsf; } set { state.epsf = value; } }
+    [Storable]
+    private double Epsg { get { return state.epsg; } set { state.epsg = value; } }
+    [Storable]
+    private double Epsx { get { return state.epsx; } set { state.epsx = value; } }
+    [Storable]
+    private double F { get { return state.f; } set { state.f = value; } }
+    [Storable]
+    private double Fbase { get { return state.fbase; } set { state.fbase = value; } }
+    [Storable]
+    private double Fm1 { get { return state.fm1; } set { state.fm1 = value; } }
+    [Storable]
+    private double Fm2 { get { return state.fm2; } set { state.fm2 = value; } }
+    [Storable]
+    private double Fold { get { return state.fold; } set { state.fold = value; } }
+    [Storable]
+    private double Fp1 { get { return state.fp1; } set { state.fp1 = value; } }
+    [Storable]
+    private double Fp2 { get { return state.fp2; } set { state.fp2 = value; } }
+    [Storable]
+    private double[] G { get { return state.g; } set { state.g = value; } }
+    [Storable]
+    private double Gammak { get { return state.gammak; } set { state.gammak = value; } }
+    [Storable]
+    private int K { get { return state.k; } set { state.k = value; } }
+    [Storable]
+    private bool LstateBrackt { get { return state.lstate.brackt; } set { state.lstate.brackt = value; } }
+    [Storable]
+    private double LstateDg { get { return state.lstate.dg; } set { state.lstate.dg = value; } }
+    [Storable]
+    private double LstateDginit { get { return state.lstate.dginit; } set { state.lstate.dginit = value; } }
+    [Storable]
+    private double LstateDgm { get { return state.lstate.dgm; } set { state.lstate.dgm = value; } }
+    [Storable]
+    private double LstateDgtest { get { return state.lstate.dgtest; } set { state.lstate.dgtest = value; } }
+    [Storable]
+    private double LstateDgx { get { return state.lstate.dgx; } set { state.lstate.dgx = value; } }
+    [Storable]
+    private double LstateDgxm { get { return state.lstate.dgxm; } set { state.lstate.dgxm = value; } }
+    [Storable]
+    private double LstateDgy { get { return state.lstate.dgy; } set { state.lstate.dgy = value; } }
+    [Storable]
+    private double LstateDgym { get { return state.lstate.dgym; } set { state.lstate.dgym = value; } }
+    [Storable]
+    private double LstateFinit { get { return state.lstate.finit; } set { state.lstate.finit = value; } }
+    [Storable]
+    private double LstateFm { get { return state.lstate.fm; } set { state.lstate.fm = value; } }
+    [Storable]
+    private double LstateFtest1 { get { return state.lstate.ftest1; } set { state.lstate.ftest1 = value; } }
+    [Storable]
+    private double LstateFx { get { return state.lstate.fx; } set { state.lstate.fx = value; } }
+    [Storable]
+    private double LstateFxm { get { return state.lstate.fxm; } set { state.lstate.fxm = value; } }
+    [Storable]
+    private double LstateFy { get { return state.lstate.fy; } set { state.lstate.fy = value; } }
+    [Storable]
+    private double LstateFym { get { return state.lstate.fym; } set { state.lstate.fym = value; } }
+    [Storable]
+    private int LstateInfoc { get { return state.lstate.infoc; } set { state.lstate.infoc = value; } }
+    [Storable]
+    private bool LstateStage1 { get { return state.lstate.stage1; } set { state.lstate.stage1 = value; } }
+    [Storable]
+    private double LstateStmax { get { return state.lstate.stmax; } set { state.lstate.stmax = value; } }
+    [Storable]
+    private double LstateStmin { get { return state.lstate.stmin; } set { state.lstate.stmin = value; } }
+    [Storable]
+    private double LstateStx { get { return state.lstate.stx; } set { state.lstate.stx = value; } }
+    [Storable]
+    private double LstateSty { get { return state.lstate.sty; } set { state.lstate.sty = value; } }
+    [Storable]
+    private double LstateWidth { get { return state.lstate.width; } set { state.lstate.width = value; } }
+    [Storable]
+    private double LstateWidth1 { get { return state.lstate.width1; } set { state.lstate.width1 = value; } }
+    [Storable]
+    private double LstateXtrapf { get { return state.lstate.xtrapf; } set { state.lstate.xtrapf = value; } }
+
+    [Storable]
+    private int M { get { return state.m; } set { state.m = value; } }
+    [Storable]
+    private int MaxIts { get { return state.maxits; } set { state.maxits = value; } }
+    [Storable]
+    private int Mcstage { get { return state.mcstage; } set { state.mcstage = value; } }
+    [Storable]
+    private int N { get { return state.n; } set { state.n = value; } }
+    [Storable]
+    private bool Needf { get { return state.needf; } set { state.needf = value; } }
+    [Storable]
+    private bool Needfg { get { return state.needfg; } set { state.needfg = value; } }
+    [Storable]
+    private int Nfev { get { return state.nfev; } set { state.nfev = value; } }
+    [Storable]
+    private int P { get { return state.p; } set { state.p = value; } }
+    [Storable]
+    private int Prectype { get { return state.prectype; } set { state.prectype = value; } }
+    [Storable]
+    private int Q { get { return state.q; } set { state.q = value; } }
+    [Storable]
+    private int Repiterationscount { get { return state.repiterationscount; } set { state.repiterationscount = value; } }
+    [Storable]
+    private int Repnfev { get { return state.repnfev; } set { state.repnfev = value; } }
+    [Storable]
+    private int Repterminationtype { get { return state.repterminationtype; } set { state.repterminationtype = value; } }
+    [Storable]
+    private double[] Rho { get { return state.rho; } set { state.rho = value; } }
+    [Storable]
+    private bool[] RstateBa { get { return state.rstate.ba; } set { state.rstate.ba = value; } }
+    [Storable]
+    private IList<Tuple<double, double>> RStateCa {
+      get { return state.rstate.ca.Select(c => Tuple.Create(c.x, c.y)).ToList(); }
+      set { state.rstate.ca = value.Select(t => new alglib.complex(t.Item1, t.Item2)).ToArray(); }
+    }
+    [Storable]
+    private int[] RstateIa { get { return state.rstate.ia; } set { state.rstate.ia = value; } }
+    [Storable]
+    private double[] RstateRa { get { return state.rstate.ra; } set { state.rstate.ra = value; } }
+    [Storable]
+    private int RstateStage { get { return state.rstate.stage; } set { state.p = value; } }
+    [Storable]
+    private double[] S { get { return state.s; } set { state.s = value; } }
+    [Storable]
+    private double[,] Sk { get { return state.sk; } set { state.sk = value; } }
+    [Storable]
+    private double Stp { get { return state.stp; } set { state.stp = value; } }
+    [Storable]
+    private double Stpmax { get { return state.stpmax; } set { state.stpmax = value; } }
+    [Storable]
+    private double[] Theta { get { return state.theta; } set { state.theta = value; } }
+    [Storable]
+    private double Trimthreshold { get { return state.trimthreshold; } set { state.trimthreshold = value; } }
+    [Storable]
+    private double[] Work { get { return state.work; } set { state.work = value; } }
+    [Storable]
+    private double[] X { get { return state.x; } set { state.x = value; } }
+    [Storable]
+    private bool Xrep { get { return state.xrep; } set { state.xrep = value; } }
+    [Storable]
+    private bool Xupdated { get { return state.xupdated; } set { state.xupdated = value; } }
+    [Storable]
+    private double[,] Yk { get { return state.yk; } set { state.yk = value; } }
+    #endregion
+  }
+}
Index: trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsUpdateResults.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsUpdateResults.cs	(revision 8401)
+++ trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LbfgsUpdateResults.cs	(revision 8401)
@@ -0,0 +1,91 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Algorithms.GradientDescent {
+  [StorableClass]
+  [Item(Name = "LBFGS UpdateResults", Description = "Sets the results (function value and gradients) for the next optimization step in the LM-BFGS algorithm.")]
+  public sealed class LbfgsUpdateResults : SingleSuccessorOperator {
+    private const string QualityGradientsParameterName = "QualityGradients";
+    private const string QualityParameterName = "Quality";
+    private const string StateParameterName = "State";
+    private const string ApproximateGradientsParameterName = "ApproximateGradients";
+
+    #region Parameter Properties
+    public ILookupParameter<BoolValue> ApproximateGradientsParameter {
+      get { return (ILookupParameter<BoolValue>)Parameters[ApproximateGradientsParameterName]; }
+    }
+    public ILookupParameter<RealVector> QualityGradientsParameter {
+      get { return (ILookupParameter<RealVector>)Parameters[QualityGradientsParameterName]; }
+    }
+    public ILookupParameter<DoubleValue> QualityParameter {
+      get { return (ILookupParameter<DoubleValue>)Parameters[QualityParameterName]; }
+    }
+    public ILookupParameter<LbfgsState> StateParameter {
+      get { return (ILookupParameter<LbfgsState>)Parameters[StateParameterName]; }
+    }
+    #endregion
+
+    #region Properties
+    private BoolValue ApproximateGradients { get { return ApproximateGradientsParameter.ActualValue; } }
+    private RealVector QualityGradients { get { return QualityGradientsParameter.ActualValue; } }
+    private DoubleValue Quality { get { return QualityParameter.ActualValue; } }
+    private LbfgsState State { get { return StateParameter.ActualValue; } }
+    #endregion
+
+    [StorableConstructor]
+    private LbfgsUpdateResults(bool deserializing) : base(deserializing) { }
+    private LbfgsUpdateResults(LbfgsUpdateResults original, Cloner cloner) : base(original, cloner) { }
+    public LbfgsUpdateResults()
+      : base() {
+      // in
+      Parameters.Add(new LookupParameter<RealVector>(QualityGradientsParameterName, "The gradients at the evaluated point of the function to optimize."));
+      Parameters.Add(new LookupParameter<DoubleValue>(QualityParameterName, "The value at the evaluated point of the function to optimize."));
+      Parameters.Add(new LookupParameter<BoolValue>(ApproximateGradientsParameterName,
+                                                    "Flag that indicates if gradients should be approximated."));
+      // in & out
+      Parameters.Add(new LookupParameter<LbfgsState>(StateParameterName, "The state of the LM-BFGS algorithm."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new LbfgsUpdateResults(this, cloner);
+    }
+
+    public override IOperation Apply() {
+      var state = State;
+      var f = Quality.Value;
+      state.State.f = f;
+      if (!ApproximateGradients.Value) {
+        var g = QualityGradients.ToArray();
+        state.State.g = g;
+      }
+      return base.Apply();
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LevenbergMarquardt.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LevenbergMarquardt.cs	(revision 8399)
+++ 	(revision )
@@ -1,135 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using HeuristicLab.Operators;
-using HeuristicLab.Optimization;
-using HeuristicLab.Optimization.Operators;
-using HeuristicLab.Parameters;
-using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
-using HeuristicLab.Problems.TestFunctions;
-using HeuristicLab.Random;
-
-namespace HeuristicLab.Algorithms.GradientDescent {
-  /// <summary>
-  /// Linear regression data analysis algorithm.
-  /// </summary>
-  [Item("Levenberg Marquardt", "Levenberg Marquardt real vector optimization algorithm.")]
-  [Creatable("Algorithms")]
-  [StorableClass]
-  public sealed class LevenbergMarquardt : EngineAlgorithm, IStorableContent {
-    public string Filename { get; set; }
-
-    public override Type ProblemType {
-      get { return typeof(SingleObjectiveTestFunctionProblem); }
-    }
-    public new SingleObjectiveTestFunctionProblem Problem {
-      get { return (SingleObjectiveTestFunctionProblem)base.Problem; }
-      set { base.Problem = value; }
-    }
-
-    private ValueParameter<IntValue> SeedParameter {
-      get { return (ValueParameter<IntValue>)Parameters["Seed"]; }
-    }
-    private ValueParameter<BoolValue> SetSeedRandomlyParameter {
-      get { return (ValueParameter<BoolValue>)Parameters["SetSeedRandomly"]; }
-    }
-
-    public IntValue Seed {
-      get { return SeedParameter.Value; }
-      set { SeedParameter.Value = value; }
-    }
-    public BoolValue SetSeedRandomly {
-      get { return SetSeedRandomlyParameter.Value; }
-      set { SetSeedRandomlyParameter.Value = value; }
-    }
-
-    private RandomCreator RandomCreator {
-      get { return (RandomCreator)OperatorGraph.InitialOperator; }
-    }
-    private SolutionsCreator SolutionsCreator {
-      get { return (SolutionsCreator)RandomCreator.Successor; }
-    }
-
-    #region storing and cloning
-    [StorableConstructor]
-    private LevenbergMarquardt(bool deserializing) : base(deserializing) { }
-    private LevenbergMarquardt(LevenbergMarquardt original, Cloner cloner)
-      : base(original, cloner) {
-      Initialize();
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new LevenbergMarquardt(this, cloner);
-    }
-    #endregion
-
-    public LevenbergMarquardt()
-      : base() {
-      Parameters.Add(new ValueParameter<IntValue>("Seed", "The random seed used to initialize the new pseudo random number generator.", new IntValue(0)));
-      Parameters.Add(new ValueParameter<BoolValue>("SetSeedRandomly", "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true)));
-
-
-      RandomCreator randomCreator = new RandomCreator();
-      SolutionsCreator solutionsCreator = new SolutionsCreator();
-      UniformSubScopesProcessor subscopesProcessor = new UniformSubScopesProcessor();
-      LevenbergMarquardtMove moveCreator = new LevenbergMarquardtMove();
-      OperatorGraph.InitialOperator = randomCreator;
-
-      randomCreator.RandomParameter.ActualName = "Random";
-      randomCreator.SeedParameter.ActualName = SeedParameter.Name;
-      randomCreator.SeedParameter.Value = null;
-      randomCreator.SetSeedRandomlyParameter.ActualName = SetSeedRandomlyParameter.Name;
-      randomCreator.SetSeedRandomlyParameter.Value = null;
-      randomCreator.Successor = solutionsCreator;
-
-      solutionsCreator.NumberOfSolutionsParameter.Value = new IntValue(1);
-      solutionsCreator.Successor = subscopesProcessor;
-
-      subscopesProcessor.Operator = moveCreator;
-    }
-
-    public override void Prepare() {
-      if (Problem != null) base.Prepare();
-    }
-
-    protected override void Problem_Reset(object sender, EventArgs e) {
-      base.Problem_Reset(sender, e);
-    }
-
-    protected override void OnProblemChanged() {
-      Problem.Reset += new EventHandler(Problem_Reset);
-      base.OnProblemChanged();
-    }
-
-    protected override void Problem_SolutionCreatorChanged(object sender, EventArgs e) {
-      SolutionsCreator.NumberOfSolutionsParameter.Value = new IntValue(1);
-      base.Problem_SolutionCreatorChanged(sender, e);
-    }
-
-
-    private void Initialize() {
-
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LevenbergMarquardtMove.cs
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/LevenbergMarquardtMove.cs	(revision 8399)
+++ 	(revision )
@@ -1,121 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2011 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;
-using HeuristicLab.Problems.TestFunctions;
-using HeuristicLab.Analysis;
-
-namespace HeuristicLab.Algorithms.GradientDescent {
-  public class LevenbergMarquardtMove : SingleSuccessorOperator {
-    private const string EvaluatorParameterName = "Evaluator";
-    private const string ResultsParameterName = "Results";
-    private const string RealVectorParameterName = "RealVector";
-    private const string QualityParameterName = "Quality";
-
-    private const string QualityResultsName = "Quality";
-
-
-    public ILookupParameter<ISingleObjectiveTestFunctionProblemEvaluator> EvaluatorParameter {
-      get { return (ILookupParameter<ISingleObjectiveTestFunctionProblemEvaluator>)Parameters[EvaluatorParameterName]; }
-    }
-    public ILookupParameter<RealVector> RealVectorParameter {
-      get { return (ILookupParameter<RealVector>)Parameters[RealVectorParameterName]; }
-    }
-    public ILookupParameter<ResultCollection> ResultParameter {
-      get { return (ILookupParameter<ResultCollection>)Parameters[ResultsParameterName]; }
-    }
-    public ILookupParameter<DoubleValue> QualityParameter {
-      get { return (ILookupParameter<DoubleValue>)Parameters[QualityParameterName]; }
-    }
-
-    [StorableConstructor]
-    protected LevenbergMarquardtMove(bool deserializing) : base(deserializing) { }
-    protected LevenbergMarquardtMove(LevenbergMarquardtMove original, Cloner cloner)
-      : base(original, cloner) {
-    }
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new LevenbergMarquardtMove(this, cloner);
-    }
-
-    public LevenbergMarquardtMove()
-      : base() {
-      Parameters.Add(new LookupParameter<ISingleObjectiveTestFunctionProblemEvaluator>(EvaluatorParameterName, ""));
-      Parameters.Add(new LookupParameter<RealVector>(RealVectorParameterName, ""));
-      Parameters.Add(new LookupParameter<ResultCollection>(ResultsParameterName, ""));
-      Parameters.Add(new LookupParameter<DoubleValue>(QualityParameterName, ""));
-    }
-
-    public override IOperation Apply() {
-      double epsg = 0;
-      double epsf = 0;
-      double epsx = 0;
-      int maxits = 0;
-      double diffstep = .1;
-
-      double[] solution = RealVectorParameter.ActualValue.ToArray();
-
-      alglib.minlmstate state;
-      alglib.minlmreport report;
-      
-      alglib.minlmcreatev(solution.Length, solution, diffstep, out state);
-      alglib.minlmsetcond(state, epsg, epsf, epsx, maxits);
-      alglib.minlmsetxrep(state, true);
-      alglib.minlmoptimize(state, CreateCallBack(EvaluatorParameter.ActualValue), CreateReportProgress(ResultParameter.ActualValue), null);
-      alglib.minlmresults(state, out solution, out report);
-
-      RealVectorParameter.ActualValue = new RealVector(solution);
-      return base.Apply();
-    }
-
-    private alglib.ndimensional_fvec CreateCallBack(ISingleObjectiveTestFunctionProblemEvaluator evaluator) {
-      return (double[] arg, double[] fi, object obj) => {
-        RealVector r = new RealVector(arg);
-        RealVectorParameter.ActualValue = r;
-
-        IExecutionContext context = (IExecutionContext)ExecutionContext.CreateChildOperation(evaluator);
-        evaluator.Execute(context, CancellationToken);
-        QualityParameter.ExecutionContext = context;
-        fi[0] = QualityParameter.ActualValue.Value;
-      };
-    }
-
-    private alglib.ndimensional_rep CreateReportProgress(ResultCollection results) {
-      return (double[] arg, double func, object obj) => {
-        if (!results.ContainsKey(QualityResultsName)) {
-          DataTable table = new DataTable(QualityResultsName);
-          table.Rows.Add(new DataRow("Quality"));
-          results.Add(new Result(QualityResultsName, table));
-        }
-
-        DataTable resultsTable = (DataTable)results[QualityResultsName].Value;
-        resultsTable.Rows["Quality"].Values.Add(func);
-      };
-    }
-  }
-}
Index: trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/Plugin.cs.frame
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/Plugin.cs.frame	(revision 8399)
+++ trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/Plugin.cs.frame	(revision 8401)
@@ -1,5 +1,5 @@
 ﻿#region License Information
 /* HeuristicLab
- * Copyright (C) 2002-2011 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ * Copyright (C) 2002-2012 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
  *
  * This file is part of HeuristicLab.
@@ -25,4 +25,17 @@
   [Plugin("HeuristicLab.Algorithms.GradientDescent", "3.3.0.$WCREV$")]
   [PluginFile("HeuristicLab.Algorithms.GradientDescent-3.3.dll", PluginFileType.Assembly)]
+  [PluginDependency("HeuristicLab.ALGLIB", "3.5.0")]
+  [PluginDependency("HeuristicLab.Analysis", "3.3.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.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.TestFunctions", "3.3")]
+  [PluginDependency("HeuristicLab.Random", "3.3")]
   public class HeuristicLabAlgorithmsGradientDescentPlugin : PluginBase {
   }
Index: trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/Properties/AssemblyInfo.cs.frame
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/Properties/AssemblyInfo.cs.frame	(revision 8401)
+++ trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/Properties/AssemblyInfo.cs.frame	(revision 8401)
@@ -0,0 +1,57 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2012 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.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.Algorithms.GradientDescent")]
+[assembly: AssemblyDescription("Provides gradient descent optimization algorithms for HeuristicLab")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("HEAL")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2012 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("7c14407e-6980-465b-ba3a-4a916d48989b")]
+
+// 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.0")]
+[assembly: AssemblyFileVersion("3.3.3.$WCREV$")]
Index: trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/Properties/AssemblyInfo.frame
===================================================================
--- trunk/sources/HeuristicLab.Algorithms.GradientDescent/3.3/Properties/AssemblyInfo.frame	(revision 8399)
+++ 	(revision )
@@ -1,57 +1,0 @@
-﻿#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2011 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.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.Algorithms.GradientDescent")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("HEAL")]
-[assembly: AssemblyProduct("HeuristicLab")]
-[assembly: AssemblyCopyright("(c) 2002-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("7c14407e-6980-465b-ba3a-4a916d48989b")]
-
-// 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.0")]
-[assembly: AssemblyFileVersion("3.3.0.$WCREV$")]
