Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/EngineAlgorithmView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/EngineAlgorithmView.Designer.cs	(revision 2863)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/EngineAlgorithmView.Designer.cs	(revision 2864)
@@ -49,4 +49,5 @@
       this.engineTextBox = new System.Windows.Forms.TextBox();
       this.setEngineButton = new System.Windows.Forms.Button();
+      this.createUserDefinedAlgorithmButton = new System.Windows.Forms.Button();
       this.tabControl.SuspendLayout();
       this.parametersTabPage.SuspendLayout();
@@ -58,10 +59,10 @@
       // 
       this.tabControl.Location = new System.Drawing.Point(0, 149);
-      this.tabControl.Size = new System.Drawing.Size(490, 174);
+      this.tabControl.Size = new System.Drawing.Size(656, 278);
       this.tabControl.TabIndex = 7;
       // 
       // parametersTabPage
       // 
-      this.parametersTabPage.Size = new System.Drawing.Size(482, 148);
+      this.parametersTabPage.Size = new System.Drawing.Size(648, 252);
       // 
       // problemTabPage
@@ -71,5 +72,5 @@
       // parameterCollectionView
       // 
-      this.parameterCollectionView.Size = new System.Drawing.Size(470, 136);
+      this.parameterCollectionView.Size = new System.Drawing.Size(636, 240);
       // 
       // problemViewHost
@@ -79,20 +80,25 @@
       // startButton
       // 
+      this.startButton.Location = new System.Drawing.Point(0, 433);
       this.startButton.TabIndex = 8;
       // 
       // stopButton
       // 
+      this.stopButton.Location = new System.Drawing.Point(30, 433);
       this.stopButton.TabIndex = 9;
       // 
       // resetButton
       // 
+      this.resetButton.Location = new System.Drawing.Point(60, 433);
       this.resetButton.TabIndex = 10;
       // 
       // executionTimeLabel
       // 
+      this.executionTimeLabel.Location = new System.Drawing.Point(430, 440);
       this.executionTimeLabel.TabIndex = 11;
       // 
       // executionTimeTextBox
       // 
+      this.executionTimeTextBox.Location = new System.Drawing.Point(519, 437);
       this.executionTimeTextBox.TabIndex = 12;
       // 
@@ -101,4 +107,9 @@
       this.errorProvider.SetIconAlignment(this.nameTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
       this.errorProvider.SetIconPadding(this.nameTextBox, 2);
+      this.nameTextBox.Size = new System.Drawing.Size(584, 20);
+      // 
+      // descriptionTextBox
+      // 
+      this.descriptionTextBox.Size = new System.Drawing.Size(584, 87);
       // 
       // engineLabel
@@ -118,5 +129,5 @@
       this.engineTextBox.Name = "engineTextBox";
       this.engineTextBox.ReadOnly = true;
-      this.engineTextBox.Size = new System.Drawing.Size(388, 20);
+      this.engineTextBox.Size = new System.Drawing.Size(554, 20);
       this.engineTextBox.TabIndex = 6;
       this.engineTextBox.DoubleClick += new System.EventHandler(this.engineTextBox_DoubleClick);
@@ -126,10 +137,23 @@
       this.setEngineButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
       this.setEngineButton.Image = HeuristicLab.Common.Resources.VS2008ImageLibrary.Add;
-      this.setEngineButton.Location = new System.Drawing.Point(466, 119);
+      this.setEngineButton.Location = new System.Drawing.Point(632, 119);
       this.setEngineButton.Name = "setEngineButton";
       this.setEngineButton.Size = new System.Drawing.Size(24, 24);
       this.setEngineButton.TabIndex = 5;
+      this.toolTip.SetToolTip(this.setEngineButton, "Set Engine");
       this.setEngineButton.UseVisualStyleBackColor = true;
       this.setEngineButton.Click += new System.EventHandler(this.setEngineButton_Click);
+      // 
+      // createUserDefinedAlgorithmButton
+      // 
+      this.createUserDefinedAlgorithmButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+      this.createUserDefinedAlgorithmButton.Location = new System.Drawing.Point(90, 433);
+      this.createUserDefinedAlgorithmButton.Name = "createUserDefinedAlgorithmButton";
+      this.createUserDefinedAlgorithmButton.Size = new System.Drawing.Size(161, 24);
+      this.createUserDefinedAlgorithmButton.TabIndex = 13;
+      this.createUserDefinedAlgorithmButton.Text = "&Create User Defined Algorithm";
+      this.toolTip.SetToolTip(this.createUserDefinedAlgorithmButton, "Create User Defined Algorithm from this Algorithm");
+      this.createUserDefinedAlgorithmButton.UseVisualStyleBackColor = true;
+      this.createUserDefinedAlgorithmButton.Click += new System.EventHandler(this.createUserDefinedAlgorithmButton_Click);
       // 
       // EngineAlgorithmView
@@ -140,5 +164,8 @@
       this.Controls.Add(this.engineTextBox);
       this.Controls.Add(this.engineLabel);
+      this.Controls.Add(this.createUserDefinedAlgorithmButton);
       this.Name = "EngineAlgorithmView";
+      this.Size = new System.Drawing.Size(656, 457);
+      this.Controls.SetChildIndex(this.createUserDefinedAlgorithmButton, 0);
       this.Controls.SetChildIndex(this.engineLabel, 0);
       this.Controls.SetChildIndex(this.engineTextBox, 0);
@@ -168,4 +195,5 @@
     protected System.Windows.Forms.TextBox engineTextBox;
     protected System.Windows.Forms.Button setEngineButton;
+    protected System.Windows.Forms.Button createUserDefinedAlgorithmButton;
 
 
Index: trunk/sources/HeuristicLab.Optimization.Views/3.3/EngineAlgorithmView.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization.Views/3.3/EngineAlgorithmView.cs	(revision 2863)
+++ trunk/sources/HeuristicLab.Optimization.Views/3.3/EngineAlgorithmView.cs	(revision 2864)
@@ -98,4 +98,8 @@
         MainFormManager.CreateDefaultView(Content.Engine).Show();
     }
+
+    protected void createUserDefinedAlgorithmButton_Click(object sender, EventArgs e) {
+      MainFormManager.CreateDefaultView(Content.CreateUserDefinedAlgorithm()).Show();
+    }
   }
 }
Index: trunk/sources/HeuristicLab.Optimization/3.3/Algorithm.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/Algorithm.cs	(revision 2863)
+++ trunk/sources/HeuristicLab.Optimization/3.3/Algorithm.cs	(revision 2864)
@@ -51,4 +51,5 @@
           if (problem != null) RegisterProblemEvents();
           OnProblemChanged();
+          Prepare();
         }
       }
Index: trunk/sources/HeuristicLab.Optimization/3.3/EngineAlgorithm.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/EngineAlgorithm.cs	(revision 2863)
+++ trunk/sources/HeuristicLab.Optimization/3.3/EngineAlgorithm.cs	(revision 2864)
@@ -116,4 +116,15 @@
     }
 
+    public UserDefinedAlgorithm CreateUserDefinedAlgorithm() {
+      UserDefinedAlgorithm algorithm = new UserDefinedAlgorithm(Name, Description);
+      Cloner cloner = new Cloner();
+      foreach (IParameter param in Parameters)
+        algorithm.Parameters.Add((IParameter)cloner.Clone(param));
+      algorithm.Problem = (IProblem)cloner.Clone(Problem);
+      algorithm.Engine = (IEngine)cloner.Clone(engine);
+      algorithm.OperatorGraph = (OperatorGraph)cloner.Clone(operatorGraph);
+      return algorithm;
+    }
+
     protected override void OnCanceledChanged() {
       if (Canceled && (engine != null))
Index: trunk/sources/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 2863)
+++ trunk/sources/HeuristicLab.Optimization/3.3/HeuristicLab.Optimization-3.3.csproj	(revision 2864)
@@ -52,19 +52,18 @@
     <None Include="HeuristicLabOptimizationPlugin.cs.frame" />
     <Compile Include="Algorithm.cs" />
-    <Compile Include="IManipulationOperator.cs" />
-    <Compile Include="ICrossoverOperator.cs" />
-    <Compile Include="IStochasticSolutionCreator.cs" />
-    <Compile Include="IStochasticOperator.cs" />
-    <Compile Include="ISolutionCreator.cs" />
+    <Compile Include="Interfaces\IAlgorithm.cs" />
+    <Compile Include="Interfaces\ICrossoverOperator.cs" />
+    <Compile Include="Interfaces\IEvaluator.cs" />
+    <Compile Include="Interfaces\IManipulationOperator.cs" />
+    <Compile Include="Interfaces\IProblem.cs" />
+    <Compile Include="Interfaces\ISingleObjectiveEvaluator.cs" />
+    <Compile Include="Interfaces\ISingleObjectiveProblem.cs" />
+    <Compile Include="Interfaces\ISolutionCreator.cs" />
+    <Compile Include="Interfaces\IStochasticOperator.cs" />
     <Compile Include="SingleObjectiveProblem.cs" />
-    <Compile Include="ISingleObjectiveProblem.cs" />
-    <Compile Include="IEvaluator.cs" />
-    <Compile Include="ISingleObjectiveEvaluator.cs" />
     <Compile Include="SingleObjectiveEvaluator.cs" />
     <Compile Include="UserDefinedAlgorithm.cs" />
     <Compile Include="EngineAlgorithm.cs" />
-    <Compile Include="IAlgorithm.cs" />
     <Compile Include="HeuristicLabOptimizationPlugin.cs" />
-    <Compile Include="IProblem.cs" />
     <Compile Include="Problem.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
Index: trunk/sources/HeuristicLab.Optimization/3.3/IAlgorithm.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/IAlgorithm.cs	(revision 2863)
+++ 	(revision )
@@ -1,48 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using System;
-using HeuristicLab.Common;
-using HeuristicLab.Core;
-
-namespace HeuristicLab.Optimization {
-  /// <summary>
-  /// Interface to represent an algorithm.
-  /// </summary>
-  public interface IAlgorithm : IParameterizedNamedItem {
-    Type ProblemType { get; }
-    IProblem Problem { get; set; }
-    TimeSpan ExecutionTime { get; }
-    bool Running { get; }
-    bool Finished { get; }
-
-    void Prepare();
-    void Start();
-    void Stop();
-
-    event EventHandler ProblemChanged;
-    event EventHandler ExecutionTimeChanged;
-    event EventHandler Prepared;
-    event EventHandler Started;
-    event EventHandler Stopped;
-    event EventHandler<EventArgs<Exception>> ExceptionOccurred;
-  }
-}
Index: trunk/sources/HeuristicLab.Optimization/3.3/ICrossoverOperator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/ICrossoverOperator.cs	(revision 2863)
+++ 	(revision )
@@ -1,30 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-
-namespace HeuristicLab.Optimization {
-  /// <summary>
-  /// An interface which represents an operator for crossing solutions.
-  /// </summary>
-  public interface ICrossoverOperator : IStochasticOperator { }
-}
Index: trunk/sources/HeuristicLab.Optimization/3.3/IEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/IEvaluator.cs	(revision 2863)
+++ 	(revision )
@@ -1,30 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-
-namespace HeuristicLab.Optimization {
-  /// <summary>
-  /// An interface which represents an evaluation operator for optimization problems.
-  /// </summary>
-  public interface IEvaluator : IOperator { }
-}
Index: trunk/sources/HeuristicLab.Optimization/3.3/IManipulationOperator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/IManipulationOperator.cs	(revision 2863)
+++ 	(revision )
@@ -1,30 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-
-namespace HeuristicLab.Optimization {
-  /// <summary>
-  /// An interface which represents an operator for manipulating solutions.
-  /// </summary>
-  public interface IManipulationOperator : IStochasticOperator { }
-}
Index: trunk/sources/HeuristicLab.Optimization/3.3/IProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/IProblem.cs	(revision 2863)
+++ 	(revision )
@@ -1,38 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using System;
-using HeuristicLab.Common;
-
-namespace HeuristicLab.Optimization {
-  /// <summary>
-  /// Interface to represent an optimization problem.
-  /// </summary>
-  public interface IProblem : IParameterizedNamedItem {
-    ISolutionCreator SolutionCreator { get; set; }
-    IEvaluator Evaluator { get; set; }
-
-    event EventHandler SolutionCreatorChanged;
-    event EventHandler EvaluatorChanged;
-    event EventHandler<EventArgs<Type>> OperatorsChanged;
-  }
-}
Index: trunk/sources/HeuristicLab.Optimization/3.3/ISingleObjectiveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/ISingleObjectiveEvaluator.cs	(revision 2863)
+++ 	(revision )
@@ -1,32 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-
-namespace HeuristicLab.Optimization {
-  /// <summary>
-  /// An interface which represents an evaluation operator for single-objective optimization problems.
-  /// </summary>
-  public interface ISingleObjectiveEvaluator : IEvaluator {
-    ILookupParameter<DoubleData> QualityParameter { get; }
-  }
-}
Index: trunk/sources/HeuristicLab.Optimization/3.3/ISingleObjectiveProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/ISingleObjectiveProblem.cs	(revision 2863)
+++ 	(revision )
@@ -1,36 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-using System;
-
-namespace HeuristicLab.Optimization {
-  /// <summary>
-  /// An interface to represent a single-objective optimization problem.
-  /// </summary>
-  public interface ISingleObjectiveProblem : IProblem {
-    BoolData Maximization { get; set; }
-    new ISingleObjectiveEvaluator Evaluator { get; set; }
-
-    event EventHandler MaximizationChanged;
-  }
-}
Index: trunk/sources/HeuristicLab.Optimization/3.3/ISolutionCreator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/ISolutionCreator.cs	(revision 2863)
+++ 	(revision )
@@ -1,30 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-
-namespace HeuristicLab.Optimization {
-  /// <summary>
-  /// An interface which represents an operator for creating new solutions.
-  /// </summary>
-  public interface ISolutionCreator : IOperator { }
-}
Index: trunk/sources/HeuristicLab.Optimization/3.3/IStochasticOperator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/IStochasticOperator.cs	(revision 2863)
+++ 	(revision )
@@ -1,32 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-
-namespace HeuristicLab.Optimization {
-  /// <summary>
-  /// An interface which represents a stochastic operator.
-  /// </summary>
-  public interface IStochasticOperator : IOperator {
-    ILookupParameter<IRandom> RandomParameter { get; }
-  }
-}
Index: trunk/sources/HeuristicLab.Optimization/3.3/IStochasticSolutionCreator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/IStochasticSolutionCreator.cs	(revision 2863)
+++ 	(revision )
@@ -1,30 +1,0 @@
-#region License Information
-/* HeuristicLab
- * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
- *
- * This file is part of HeuristicLab.
- *
- * HeuristicLab is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * HeuristicLab is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
- */
-#endregion
-
-using HeuristicLab.Core;
-using HeuristicLab.Data;
-
-namespace HeuristicLab.Optimization {
-  /// <summary>
-  /// An interface which represents an operator for creating new solutions.
-  /// </summary>
-  public interface IStochasticSolutionCreator : IStochasticOperator, ISolutionCreator { }
-}
Index: trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IAlgorithm.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IAlgorithm.cs	(revision 2864)
+++ trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IAlgorithm.cs	(revision 2864)
@@ -0,0 +1,48 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+
+namespace HeuristicLab.Optimization {
+  /// <summary>
+  /// Interface to represent an algorithm.
+  /// </summary>
+  public interface IAlgorithm : IParameterizedNamedItem {
+    Type ProblemType { get; }
+    IProblem Problem { get; set; }
+    TimeSpan ExecutionTime { get; }
+    bool Running { get; }
+    bool Finished { get; }
+
+    void Prepare();
+    void Start();
+    void Stop();
+
+    event EventHandler ProblemChanged;
+    event EventHandler ExecutionTimeChanged;
+    event EventHandler Prepared;
+    event EventHandler Started;
+    event EventHandler Stopped;
+    event EventHandler<EventArgs<Exception>> ExceptionOccurred;
+  }
+}
Index: trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/ICrossoverOperator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/ICrossoverOperator.cs	(revision 2864)
+++ trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/ICrossoverOperator.cs	(revision 2864)
@@ -0,0 +1,30 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Optimization {
+  /// <summary>
+  /// An interface which represents an operator for crossing solutions.
+  /// </summary>
+  public interface ICrossoverOperator : IOperator { }
+}
Index: trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IEvaluator.cs	(revision 2864)
+++ trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IEvaluator.cs	(revision 2864)
@@ -0,0 +1,30 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Optimization {
+  /// <summary>
+  /// An interface which represents an evaluation operator for optimization problems.
+  /// </summary>
+  public interface IEvaluator : IOperator { }
+}
Index: trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IManipulationOperator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IManipulationOperator.cs	(revision 2864)
+++ trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IManipulationOperator.cs	(revision 2864)
@@ -0,0 +1,30 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Optimization {
+  /// <summary>
+  /// An interface which represents an operator for manipulating solutions.
+  /// </summary>
+  public interface IManipulationOperator : IOperator { }
+}
Index: trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IProblem.cs	(revision 2864)
+++ trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IProblem.cs	(revision 2864)
@@ -0,0 +1,38 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+using System;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Optimization {
+  /// <summary>
+  /// Interface to represent an optimization problem.
+  /// </summary>
+  public interface IProblem : IParameterizedNamedItem {
+    ISolutionCreator SolutionCreator { get; }
+    IEvaluator Evaluator { get; }
+    OperatorSet Operators { get; }
+
+    event EventHandler SolutionCreatorChanged;
+    event EventHandler EvaluatorChanged;
+  }
+}
Index: trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/ISingleObjectiveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/ISingleObjectiveEvaluator.cs	(revision 2864)
+++ trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/ISingleObjectiveEvaluator.cs	(revision 2864)
@@ -0,0 +1,32 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Optimization {
+  /// <summary>
+  /// An interface which represents an evaluation operator for single-objective optimization problems.
+  /// </summary>
+  public interface ISingleObjectiveEvaluator : IEvaluator {
+    ILookupParameter<DoubleData> QualityParameter { get; }
+  }
+}
Index: trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/ISingleObjectiveProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/ISingleObjectiveProblem.cs	(revision 2864)
+++ trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/ISingleObjectiveProblem.cs	(revision 2864)
@@ -0,0 +1,36 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using System;
+
+namespace HeuristicLab.Optimization {
+  /// <summary>
+  /// An interface to represent a single-objective optimization problem.
+  /// </summary>
+  public interface ISingleObjectiveProblem : IProblem {
+    BoolData Maximization { get; set; }
+    new ISingleObjectiveEvaluator Evaluator { get; set; }
+
+    event EventHandler MaximizationChanged;
+  }
+}
Index: trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/ISolutionCreator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/ISolutionCreator.cs	(revision 2864)
+++ trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/ISolutionCreator.cs	(revision 2864)
@@ -0,0 +1,30 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Optimization {
+  /// <summary>
+  /// An interface which represents an operator for creating new solutions.
+  /// </summary>
+  public interface ISolutionCreator : IOperator { }
+}
Index: trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IStochasticOperator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IStochasticOperator.cs	(revision 2864)
+++ trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IStochasticOperator.cs	(revision 2864)
@@ -0,0 +1,32 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Optimization {
+  /// <summary>
+  /// An interface which represents a stochastic operator.
+  /// </summary>
+  public interface IStochasticOperator : IOperator {
+    ILookupParameter<IRandom> RandomParameter { get; }
+  }
+}
Index: trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IStochasticSolutionCreator.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IStochasticSolutionCreator.cs	(revision 2864)
+++ trunk/sources/HeuristicLab.Optimization/3.3/Interfaces/IStochasticSolutionCreator.cs	(revision 2864)
@@ -0,0 +1,30 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+
+namespace HeuristicLab.Optimization {
+  /// <summary>
+  /// An interface which represents an operator for creating new solutions.
+  /// </summary>
+  public interface IStochasticSolutionCreator : IStochasticOperator, ISolutionCreator { }
+}
Index: trunk/sources/HeuristicLab.Optimization/3.3/Problem.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/Problem.cs	(revision 2863)
+++ trunk/sources/HeuristicLab.Optimization/3.3/Problem.cs	(revision 2864)
@@ -51,4 +51,8 @@
       get { return EvaluatorParameter.Value; }
       set { EvaluatorParameter.Value = value; }
+    }
+    private OperatorSet operators;
+    public OperatorSet Operators {
+      get { return operators; }
     }
 
Index: trunk/sources/HeuristicLab.Optimization/3.3/UserDefinedAlgorithm.cs
===================================================================
--- trunk/sources/HeuristicLab.Optimization/3.3/UserDefinedAlgorithm.cs	(revision 2863)
+++ trunk/sources/HeuristicLab.Optimization/3.3/UserDefinedAlgorithm.cs	(revision 2864)
@@ -50,4 +50,6 @@
 
     public UserDefinedAlgorithm() : base() { }
+    public UserDefinedAlgorithm(string name) : base(name) { }
+    public UserDefinedAlgorithm(string name, string description) : base(name, description) { }
 
     public event EventHandler OperatorGraphChanged;
Index: trunk/sources/HeuristicLab.SGA/3.3/SGA.cs
===================================================================
--- trunk/sources/HeuristicLab.SGA/3.3/SGA.cs	(revision 2863)
+++ trunk/sources/HeuristicLab.SGA/3.3/SGA.cs	(revision 2864)
@@ -47,8 +47,4 @@
       get { return (ISingleObjectiveProblem)base.Problem; }
       set { base.Problem = value; }
-    }
-
-    public new IScope GlobalScope {
-      get { return base.GlobalScope; }
     }
 
@@ -106,5 +102,5 @@
 
     protected override void OnProblemChanged() {
-      if (Problem.SolutionCreator is IStochasticSolutionCreator) ((IStochasticSolutionCreator)Problem.SolutionCreator).RandomParameter.ActualName = "Random";
+      if (Problem.SolutionCreator is IStochasticOperator) ((IStochasticOperator)Problem.SolutionCreator).RandomParameter.ActualName = "Random";
       populationCreator.SolutionCreatorParameter.Value = Problem.SolutionCreator;
       populationCreator.SolutionEvaluatorParameter.Value = Problem.Evaluator;
@@ -115,5 +111,5 @@
     }
     protected override void Problem_SolutionCreatorChanged(object sender, EventArgs e) {
-      if (Problem.SolutionCreator is IStochasticSolutionCreator) ((IStochasticSolutionCreator)Problem.SolutionCreator).RandomParameter.ActualName = "Random";
+      if (Problem.SolutionCreator is IStochasticOperator) ((IStochasticOperator)Problem.SolutionCreator).RandomParameter.ActualName = "Random";
       populationCreator.SolutionCreatorParameter.Value = Problem.SolutionCreator;
       base.Problem_SolutionCreatorChanged(sender, e);
