Index: /branches/GeneralizedQAP/HeuristicLab 3.3.sln
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab 3.3.sln	(revision 6899)
+++ /branches/GeneralizedQAP/HeuristicLab 3.3.sln	(revision 6900)
@@ -4,4 +4,5 @@
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{96396439-A764-4022-A8D2-BE021449B8D1}"
 	ProjectSection(SolutionItems) = preProject
+		Build.cmd = Build.cmd
 		ConfigMerger.exe = ConfigMerger.exe
 		..\documentation\License\gpl-3.0.txt = ..\documentation\License\gpl-3.0.txt
@@ -1456,10 +1457,14 @@
 		{B62872C1-6752-4758-9823-751A2D28C388}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{B62872C1-6752-4758-9823-751A2D28C388}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{B62872C1-6752-4758-9823-751A2D28C388}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{B62872C1-6752-4758-9823-751A2D28C388}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{B62872C1-6752-4758-9823-751A2D28C388}.Debug|x64.ActiveCfg = Debug|x64
+		{B62872C1-6752-4758-9823-751A2D28C388}.Debug|x64.Build.0 = Debug|x64
+		{B62872C1-6752-4758-9823-751A2D28C388}.Debug|x86.ActiveCfg = Debug|x86
+		{B62872C1-6752-4758-9823-751A2D28C388}.Debug|x86.Build.0 = Debug|x86
 		{B62872C1-6752-4758-9823-751A2D28C388}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{B62872C1-6752-4758-9823-751A2D28C388}.Release|Any CPU.Build.0 = Release|Any CPU
-		{B62872C1-6752-4758-9823-751A2D28C388}.Release|x64.ActiveCfg = Release|Any CPU
-		{B62872C1-6752-4758-9823-751A2D28C388}.Release|x86.ActiveCfg = Release|Any CPU
+		{B62872C1-6752-4758-9823-751A2D28C388}.Release|x64.ActiveCfg = Release|x64
+		{B62872C1-6752-4758-9823-751A2D28C388}.Release|x64.Build.0 = Release|x64
+		{B62872C1-6752-4758-9823-751A2D28C388}.Release|x86.ActiveCfg = Release|x86
+		{B62872C1-6752-4758-9823-751A2D28C388}.Release|x86.Build.0 = Release|x86
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
Index: /branches/GeneralizedQAP/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/FullTreeCreator.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/FullTreeCreator.cs	(revision 6900)
+++ /branches/GeneralizedQAP/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/FullTreeCreator.cs	(revision 6900)
@@ -0,0 +1,176 @@
+﻿#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 System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
+  [StorableClass]
+  [Item("FullTreeCreator", "An operator that creates new symbolic expression trees using the 'Full' method")]
+  public class FullTreeCreator : SymbolicExpressionTreeCreator,
+                                 ISymbolicExpressionTreeSizeConstraintOperator,
+                                 ISymbolicExpressionTreeGrammarBasedOperator {
+    private const string MaximumSymbolicExpressionTreeLengthParameterName = "MaximumSymbolicExpressionTreeLength";
+    private const string MaximumSymbolicExpressionTreeDepthParameterName = "MaximumSymbolicExpressionTreeDepth";
+    private const string SymbolicExpressionTreeGrammarParameterName = "SymbolicExpressionTreeGrammar";
+    private const string ClonedSymbolicExpressionTreeGrammarParameterName = "ClonedSymbolicExpressionTreeGrammar";
+
+    #region Parameter Properties
+    public IValueLookupParameter<IntValue> MaximumSymbolicExpressionTreeLengthParameter {
+      get { return (IValueLookupParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeLengthParameterName]; }
+    }
+
+    public IValueLookupParameter<IntValue> MaximumSymbolicExpressionTreeDepthParameter {
+      get { return (IValueLookupParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeDepthParameterName]; }
+    }
+
+    public IValueLookupParameter<ISymbolicExpressionGrammar> SymbolicExpressionTreeGrammarParameter {
+      get { return (IValueLookupParameter<ISymbolicExpressionGrammar>)Parameters[SymbolicExpressionTreeGrammarParameterName]; }
+    }
+
+    public ILookupParameter<ISymbolicExpressionGrammar> ClonedSymbolicExpressionTreeGrammarParameter {
+      get { return (ILookupParameter<ISymbolicExpressionGrammar>)Parameters[ClonedSymbolicExpressionTreeGrammarParameterName]; }
+    }
+
+    #endregion
+    #region Properties
+    public IntValue MaximumSymbolicExpressionTreeDepth {
+      get { return MaximumSymbolicExpressionTreeDepthParameter.ActualValue; }
+    }
+
+    public ISymbolicExpressionGrammar SymbolicExpressionTreeGrammar {
+      get { return ClonedSymbolicExpressionTreeGrammarParameter.ActualValue; }
+    }
+
+    #endregion
+
+    [StorableConstructor]
+    protected FullTreeCreator(bool deserializing) : base(deserializing) { }
+    protected FullTreeCreator(FullTreeCreator original, Cloner cloner) : base(original, cloner) { }
+
+    public FullTreeCreator()
+      : base() {
+      Parameters.Add(new ValueLookupParameter<IntValue>(MaximumSymbolicExpressionTreeLengthParameterName, "The maximal length (number of nodes) of the symbolic expression tree."));
+      Parameters.Add(new ValueLookupParameter<IntValue>(MaximumSymbolicExpressionTreeDepthParameterName, "The maximal depth of the symbolic expression tree (a tree with one node has depth = 0)."));
+      Parameters.Add(new ValueLookupParameter<ISymbolicExpressionGrammar>(SymbolicExpressionTreeGrammarParameterName, "The tree grammar that defines the correct syntax of symbolic expression trees that should be created."));
+      Parameters.Add(new LookupParameter<ISymbolicExpressionGrammar>(ClonedSymbolicExpressionTreeGrammarParameterName, "An immutable clone of the concrete grammar that is actually used to create and manipulate trees."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new FullTreeCreator(this, cloner);
+    }
+
+    public override IOperation Apply() {
+      if (ClonedSymbolicExpressionTreeGrammarParameter.ActualValue == null) {
+        SymbolicExpressionTreeGrammarParameter.ActualValue.ReadOnly = true;
+        IScope globalScope = ExecutionContext.Scope;
+        while (globalScope.Parent != null)
+          globalScope = globalScope.Parent;
+
+        globalScope.Variables.Add(new Variable(ClonedSymbolicExpressionTreeGrammarParameterName, (ISymbolicExpressionGrammar)SymbolicExpressionTreeGrammarParameter.ActualValue.Clone()));
+      }
+      return base.Apply();
+    }
+
+    protected override ISymbolicExpressionTree Create(IRandom random) {
+      return Create(random, SymbolicExpressionTreeGrammar, MaximumSymbolicExpressionTreeDepth.Value);
+    }
+
+    /// <summary>
+    /// Create a symbolic expression tree using the 'Full' method.
+    /// Function symbols are used for all nodes situated on a level above the maximum tree depth. 
+    /// Nodes on the last tree level will have Terminal symbols.
+    /// </summary>
+    /// <param name="random">Random generator</param>
+    /// <param name="grammar">Available tree grammar</param>
+    /// <param name="maxTreeDepth">Maximum tree depth</param>
+    /// <returns></returns>
+    public static ISymbolicExpressionTree Create(IRandom random, ISymbolicExpressionGrammar grammar, int maxTreeDepth) {
+      var tree = new SymbolicExpressionTree();
+      var rootNode = (SymbolicExpressionTreeTopLevelNode)grammar.ProgramRootSymbol.CreateTreeNode();
+      if (rootNode.HasLocalParameters) rootNode.ResetLocalParameters(random);
+      rootNode.SetGrammar(new SymbolicExpressionTreeGrammar(grammar));
+
+      var startNode = (SymbolicExpressionTreeTopLevelNode)grammar.StartSymbol.CreateTreeNode();
+      startNode.SetGrammar(new SymbolicExpressionTreeGrammar(grammar));
+      if (startNode.HasLocalParameters) startNode.ResetLocalParameters(random);
+
+      rootNode.AddSubtree(startNode);
+
+      Grow(random, startNode, maxTreeDepth - 2);
+      tree.Root = rootNode;
+      return tree;
+    }
+
+    public static void Grow(IRandom random, ISymbolicExpressionTreeNode seedNode, int maxDepth) {
+      // make sure it is possible to create a trees smaller than maxDepth
+      if (seedNode.Grammar.GetMinimumExpressionDepth(seedNode.Symbol) > maxDepth)
+        throw new ArgumentException("Cannot create trees of depth " + maxDepth + " or smaller because of grammar constraints.", "maxDepth");
+
+      var possibleSymbols = seedNode.Grammar.GetAllowedChildSymbols(seedNode.Symbol).Where(s => s.InitialFrequency > 0.0 && seedNode.Grammar.GetMaximumSubtreeCount(s) > 0).ToList();
+
+      int arity = seedNode.Grammar.GetMaximumSubtreeCount(seedNode.Symbol);
+      // Throw an exception if the seedNode happens to be a terminal, since in this case we cannot grow a tree.
+      if (arity <= 0)
+        throw new ArgumentException("Cannot grow tree. Seed node shouldn't have arity zero."); 
+
+      for (var i = 0; i != arity; ++i) {
+        var selectedSymbol = possibleSymbols.SelectRandom(random);
+        var tree = selectedSymbol.CreateTreeNode();
+        if (tree.HasLocalParameters) tree.ResetLocalParameters(random);
+        seedNode.AddSubtree(tree);
+      }
+
+      // Only iterate over the non-terminal nodes (those which have arity > 0)
+      // Start from depth 2 since the first two levels are formed by the rootNode and the seedNode
+      foreach (var subTree in seedNode.Subtrees.Where(subTree => subTree.Grammar.GetMaximumSubtreeCount(subTree.Symbol) != 0)) 
+        RecursiveGrowFull(random, subTree, 2, maxDepth);
+    }
+
+    public static void RecursiveGrowFull(IRandom random, ISymbolicExpressionTreeNode root, int currentDepth, int maxDepth) {
+      var arity = root.Grammar.GetMaximumSubtreeCount(root.Symbol);
+      // In the 'Full' grow method, we cannot have terminals on the intermediate tree levels.
+      if (arity <= 0)
+        throw new ArgumentException("Cannot grow node of arity zero. Expected a function node.");
+
+      var possibleSymbols = currentDepth < maxDepth ?
+        root.Grammar.GetAllowedChildSymbols(root.Symbol).Where(s => s.InitialFrequency > 0.0 && root.Grammar.GetMaximumSubtreeCount(s) > 0).ToList() :
+        root.Grammar.GetAllowedChildSymbols(root.Symbol).Where(s => s.InitialFrequency > 0.0 && root.Grammar.GetMaximumSubtreeCount(s) == 0).ToList();
+
+      for (var i = 0; i != arity; ++i) {
+        var selectedSymbol = possibleSymbols.SelectRandom(random);
+        var tree = selectedSymbol.CreateTreeNode();
+        if (tree.HasLocalParameters) tree.ResetLocalParameters(random);
+        root.AddSubtree(tree);
+      }
+
+      foreach (var subTree in root.Subtrees.Where(subTree => subTree.Grammar.GetMaximumSubtreeCount(subTree.Symbol) != 0))
+        RecursiveGrowFull(random, subTree, currentDepth + 1, maxDepth);
+    }
+  }
+}
Index: /branches/GeneralizedQAP/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/GrowTreeCreator.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/GrowTreeCreator.cs	(revision 6900)
+++ /branches/GeneralizedQAP/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/GrowTreeCreator.cs	(revision 6900)
@@ -0,0 +1,181 @@
+﻿#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 System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
+  [StorableClass]
+  [Item("GrowTreeCreator", "An operator that creates new symbolic expression trees using the 'Grow' method")]
+  public class GrowTreeCreator : SymbolicExpressionTreeCreator,
+                                 ISymbolicExpressionTreeSizeConstraintOperator,
+                                 ISymbolicExpressionTreeGrammarBasedOperator {
+    private const string MaximumSymbolicExpressionTreeLengthParameterName = "MaximumSymbolicExpressionTreeLength";
+    private const string MaximumSymbolicExpressionTreeDepthParameterName = "MaximumSymbolicExpressionTreeDepth";
+    private const string SymbolicExpressionTreeGrammarParameterName = "SymbolicExpressionTreeGrammar";
+    private const string ClonedSymbolicExpressionTreeGrammarParameterName = "ClonedSymbolicExpressionTreeGrammar";
+
+    #region Parameter Properties
+    public IValueLookupParameter<IntValue> MaximumSymbolicExpressionTreeLengthParameter {
+      get { return (IValueLookupParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeLengthParameterName]; }
+    }
+
+    public IValueLookupParameter<IntValue> MaximumSymbolicExpressionTreeDepthParameter {
+      get { return (IValueLookupParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeDepthParameterName]; }
+    }
+
+    public IValueLookupParameter<ISymbolicExpressionGrammar> SymbolicExpressionTreeGrammarParameter {
+      get { return (IValueLookupParameter<ISymbolicExpressionGrammar>)Parameters[SymbolicExpressionTreeGrammarParameterName]; }
+    }
+
+    public ILookupParameter<ISymbolicExpressionGrammar> ClonedSymbolicExpressionTreeGrammarParameter {
+      get { return (ILookupParameter<ISymbolicExpressionGrammar>)Parameters[ClonedSymbolicExpressionTreeGrammarParameterName]; }
+    }
+
+    #endregion
+    #region Properties
+    public IntValue MaximumSymbolicExpressionTreeDepth {
+      get { return MaximumSymbolicExpressionTreeDepthParameter.ActualValue; }
+    }
+
+    public ISymbolicExpressionGrammar SymbolicExpressionTreeGrammar {
+      get { return ClonedSymbolicExpressionTreeGrammarParameter.ActualValue; }
+    }
+
+    #endregion
+
+    [StorableConstructor]
+    protected GrowTreeCreator(bool deserializing) : base(deserializing) { }
+    protected GrowTreeCreator(GrowTreeCreator original, Cloner cloner) : base(original, cloner) { }
+
+    public GrowTreeCreator()
+      : base() {
+      Parameters.Add(new ValueLookupParameter<IntValue>(MaximumSymbolicExpressionTreeLengthParameterName, "The maximal length (number of nodes) of the symbolic expression tree."));
+      Parameters.Add(new ValueLookupParameter<IntValue>(MaximumSymbolicExpressionTreeDepthParameterName, "The maximal depth of the symbolic expression tree (a tree with one node has depth = 0)."));
+      Parameters.Add(new ValueLookupParameter<ISymbolicExpressionGrammar>(SymbolicExpressionTreeGrammarParameterName, "The tree grammar that defines the correct syntax of symbolic expression trees that should be created."));
+      Parameters.Add(new LookupParameter<ISymbolicExpressionGrammar>(ClonedSymbolicExpressionTreeGrammarParameterName, "An immutable clone of the concrete grammar that is actually used to create and manipulate trees."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new GrowTreeCreator(this, cloner);
+    }
+
+    public override IOperation Apply() {
+      if (ClonedSymbolicExpressionTreeGrammarParameter.ActualValue == null) {
+        SymbolicExpressionTreeGrammarParameter.ActualValue.ReadOnly = true;
+        IScope globalScope = ExecutionContext.Scope;
+        while (globalScope.Parent != null)
+          globalScope = globalScope.Parent;
+
+        globalScope.Variables.Add(new Variable(ClonedSymbolicExpressionTreeGrammarParameterName, (ISymbolicExpressionGrammar)SymbolicExpressionTreeGrammarParameter.ActualValue.Clone()));
+      }
+      return base.Apply();
+    }
+
+    protected override ISymbolicExpressionTree Create(IRandom random) {
+      return Create(random, SymbolicExpressionTreeGrammar, MaximumSymbolicExpressionTreeDepth.Value);
+    }
+
+    /// <summary>
+    /// Create a symbolic expression tree using the 'Grow' method.
+    /// All symbols are allowed for nodes, so the resulting trees can be of any shape and size. 
+    /// </summary>
+    /// <param name="random">Random generator</param>
+    /// <param name="grammar">Available tree grammar</param>
+    /// <param name="maxTreeDepth">Maximum tree depth</param>
+    /// <returns></returns>
+    public static ISymbolicExpressionTree Create(IRandom random, ISymbolicExpressionGrammar grammar, int maxTreeDepth) {
+      var tree = new SymbolicExpressionTree();
+      var rootNode = (SymbolicExpressionTreeTopLevelNode)grammar.ProgramRootSymbol.CreateTreeNode();
+      rootNode.SetGrammar(new SymbolicExpressionTreeGrammar(grammar));
+      if (rootNode.HasLocalParameters) rootNode.ResetLocalParameters(random);
+
+      var startNode = (SymbolicExpressionTreeTopLevelNode)grammar.StartSymbol.CreateTreeNode();
+      startNode.SetGrammar(new SymbolicExpressionTreeGrammar(grammar));
+      if (startNode.HasLocalParameters) startNode.ResetLocalParameters(random);
+
+      rootNode.AddSubtree(startNode);
+
+      Grow(random, startNode, maxTreeDepth - 2);
+      tree.Root = rootNode;
+      return tree;
+    }
+
+    public static void Grow(IRandom random, ISymbolicExpressionTreeNode seedNode, int maxDepth) {
+      // make sure it is possible to create a trees smaller than maxDepth
+      if (seedNode.Grammar.GetMinimumExpressionDepth(seedNode.Symbol) > maxDepth)
+        throw new ArgumentException("Cannot create trees of depth " + maxDepth + " or smaller because of grammar constraints.", "maxDepth");
+
+      var arity = SampleArity(random, seedNode);
+      // throw an exception if the seedNode happens to be a terminal, since in this case we cannot grow a tree
+      if (arity <= 0) 
+        throw new ArgumentException("Cannot grow tree. Seed node shouldn't have arity zero."); 
+
+      var possibleSymbols = seedNode.Grammar.GetAllowedChildSymbols(seedNode.Symbol).Where(s => s.InitialFrequency > 0.0).ToList();
+
+      for (var i = 0; i != arity; ++i) {
+        var selectedSymbol = possibleSymbols.SelectRandom(random);
+        var tree = selectedSymbol.CreateTreeNode();
+        if (tree.HasLocalParameters) tree.ResetLocalParameters(random);
+        seedNode.AddSubtree(tree);
+      }
+
+      // Only iterate over the non-terminal nodes (those which have arity > 0)
+      // Start from depth 2 since the first two levels are formed by the rootNode and the seedNode
+      foreach (var subTree in seedNode.Subtrees.Where(subTree => subTree.Grammar.GetMaximumSubtreeCount(subTree.Symbol) != 0))
+        RecursiveGrow(random, subTree, 2, maxDepth);
+    }
+
+    public static void RecursiveGrow(IRandom random, ISymbolicExpressionTreeNode root, int currentDepth, int maxDepth) {
+      var arity = SampleArity(random, root);
+      if (arity <= 0)
+        throw new ArgumentException("Cannot grow node of arity zero. Expected a function node.");
+
+      var possibleSymbols = currentDepth < maxDepth ?
+        root.Grammar.GetAllowedChildSymbols(root.Symbol).Where(s => s.InitialFrequency > 0.0).ToList() :
+        root.Grammar.GetAllowedChildSymbols(root.Symbol).Where(s => s.InitialFrequency > 0.0 && root.Grammar.GetMaximumSubtreeCount(s) == 0).ToList();
+
+      for (var i = 0; i != arity; ++i) {
+        var selectedSymbol = possibleSymbols.SelectRandom(random);
+        var tree = selectedSymbol.CreateTreeNode();
+        if (tree.HasLocalParameters) tree.ResetLocalParameters(random);
+        root.AddSubtree(tree);
+      }
+
+      foreach (var subTree in root.Subtrees.Where(subTree => subTree.Grammar.GetMaximumSubtreeCount(subTree.Symbol) != 0))
+        RecursiveGrow(random, subTree, currentDepth + 1, maxDepth);
+    }
+
+    private static int SampleArity(IRandom random, ISymbolicExpressionTreeNode node) {
+      var minArity = node.Grammar.GetMinimumSubtreeCount(node.Symbol);
+      var maxArity = node.Grammar.GetMaximumSubtreeCount(node.Symbol);
+
+      return random.Next(minArity, maxArity + 1);
+    }
+  }
+}
Index: /branches/GeneralizedQAP/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/RampedHalfAndHalfTreeCreator.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/RampedHalfAndHalfTreeCreator.cs	(revision 6900)
+++ /branches/GeneralizedQAP/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/RampedHalfAndHalfTreeCreator.cs	(revision 6900)
@@ -0,0 +1,142 @@
+﻿#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 System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
+  [StorableClass]
+  [Item("RampedHalfAndHalfTreeCreator", "An operator that creates new symbolic expression trees in an alternate way: half the trees are created usign the 'Grow' method while the other half are created using the 'Full' method")]
+  public class RampedHalfAndHalfTreeCreator : SymbolicExpressionTreeCreator,
+                                 ISymbolicExpressionTreeSizeConstraintOperator,
+                                 ISymbolicExpressionTreeGrammarBasedOperator {
+    private const string MaximumSymbolicExpressionTreeLengthParameterName = "MaximumSymbolicExpressionTreeLength";
+    private const string MaximumSymbolicExpressionTreeDepthParameterName = "MaximumSymbolicExpressionTreeDepth";
+    private const string SymbolicExpressionTreeGrammarParameterName = "SymbolicExpressionTreeGrammar";
+    private const string ClonedSymbolicExpressionTreeGrammarParameterName = "ClonedSymbolicExpressionTreeGrammar";
+
+    #region Parameter Properties
+    public IValueLookupParameter<IntValue> MaximumSymbolicExpressionTreeLengthParameter {
+      get { return (IValueLookupParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeLengthParameterName]; }
+    }
+
+    public IValueLookupParameter<IntValue> MaximumSymbolicExpressionTreeDepthParameter {
+      get { return (IValueLookupParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeDepthParameterName]; }
+    }
+
+    public IValueLookupParameter<ISymbolicExpressionGrammar> SymbolicExpressionTreeGrammarParameter {
+      get {
+        return
+            (IValueLookupParameter<ISymbolicExpressionGrammar>)
+            Parameters[SymbolicExpressionTreeGrammarParameterName];
+      }
+    }
+
+    public ILookupParameter<ISymbolicExpressionGrammar> ClonedSymbolicExpressionTreeGrammarParameter {
+      get {
+        return
+            (ILookupParameter<ISymbolicExpressionGrammar>)
+            Parameters[ClonedSymbolicExpressionTreeGrammarParameterName];
+      }
+    }
+
+    #endregion
+    #region Properties
+    public IntValue MaximumSymbolicExpressionTreeDepth {
+      get { return MaximumSymbolicExpressionTreeDepthParameter.ActualValue; }
+    }
+
+    public ISymbolicExpressionGrammar SymbolicExpressionTreeGrammar {
+      get { return ClonedSymbolicExpressionTreeGrammarParameter.ActualValue; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    protected RampedHalfAndHalfTreeCreator(bool deserializing) : base(deserializing) { }
+    protected RampedHalfAndHalfTreeCreator(RampedHalfAndHalfTreeCreator original, Cloner cloner) : base(original, cloner) { }
+
+    public RampedHalfAndHalfTreeCreator()
+      : base() {
+      Parameters.Add(new ValueLookupParameter<IntValue>(MaximumSymbolicExpressionTreeLengthParameterName, "The maximal length (number of nodes) of the symbolic expression tree."));
+      Parameters.Add(new ValueLookupParameter<IntValue>(MaximumSymbolicExpressionTreeDepthParameterName, "The maximal depth of the symbolic expression tree (a tree with one node has depth = 0)."));
+      Parameters.Add(new ValueLookupParameter<ISymbolicExpressionGrammar>(SymbolicExpressionTreeGrammarParameterName, "The tree grammar that defines the correct syntax of symbolic expression trees that should be created."));
+      Parameters.Add(new LookupParameter<ISymbolicExpressionGrammar>(ClonedSymbolicExpressionTreeGrammarParameterName, "An immutable clone of the concrete grammar that is actually used to create and manipulate trees."));
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new RampedHalfAndHalfTreeCreator(this, cloner);
+    }
+
+    public override IOperation Apply() {
+      if (ClonedSymbolicExpressionTreeGrammarParameter.ActualValue == null) {
+        SymbolicExpressionTreeGrammarParameter.ActualValue.ReadOnly = true;
+        IScope globalScope = ExecutionContext.Scope;
+        while (globalScope.Parent != null)
+          globalScope = globalScope.Parent;
+
+        globalScope.Variables.Add(new Variable(ClonedSymbolicExpressionTreeGrammarParameterName, (ISymbolicExpressionGrammar)SymbolicExpressionTreeGrammarParameter.ActualValue.Clone()));
+      }
+      return base.Apply();
+    }
+
+    protected override ISymbolicExpressionTree Create(IRandom random) {
+      return Create(random, SymbolicExpressionTreeGrammar, MaximumSymbolicExpressionTreeDepth.Value);
+    }
+
+    /// <summary>
+    /// Create a symbolic expression tree using 'RampedHalfAndHalf' strategy.
+    /// Half the trees are created with the 'Grow' method, and the other half are created with the 'Full' method.
+    /// </summary>
+    /// <param name="random">Random generator</param>
+    /// <param name="grammar">Available tree grammar</param>
+    /// <param name="maxTreeDepth">Maximum tree depth</param>
+    /// <returns></returns>
+    public static ISymbolicExpressionTree Create(IRandom random, ISymbolicExpressionGrammar grammar, int maxTreeDepth) {
+      var tree = new SymbolicExpressionTree();
+      var rootNode = (SymbolicExpressionTreeTopLevelNode)grammar.ProgramRootSymbol.CreateTreeNode();
+      if (rootNode.HasLocalParameters) rootNode.ResetLocalParameters(random);
+      rootNode.SetGrammar(new SymbolicExpressionTreeGrammar(grammar));
+
+      var startNode = (SymbolicExpressionTreeTopLevelNode)grammar.StartSymbol.CreateTreeNode();
+      startNode.SetGrammar(new SymbolicExpressionTreeGrammar(grammar));
+      if (startNode.HasLocalParameters) startNode.ResetLocalParameters(random);
+
+      rootNode.AddSubtree(startNode);
+
+      double p = random.NextDouble();
+
+      if (p < 0.5)
+        GrowTreeCreator.Grow(random, startNode, maxTreeDepth - 2);
+      else
+        FullTreeCreator.Grow(random, startNode, maxTreeDepth - 2);
+
+      tree.Root = rootNode;
+      return tree;
+    }
+  }
+}
Index: /branches/GeneralizedQAP/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj	(revision 6899)
+++ /branches/GeneralizedQAP/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj	(revision 6900)
@@ -123,4 +123,11 @@
     <Compile Include="Compiler\Instruction.cs" />
     <Compile Include="Compiler\SymbolicExpressionTreeCompiler.cs" />
+    <Compile Include="Creators\FullTreeCreator.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Creators\GrowTreeCreator.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="Creators\RampedHalfAndHalfTreeCreator.cs" />
     <Compile Include="Interfaces\IReadOnlySymbol.cs" />
     <Compile Include="Interfaces\ISymbolicExpressionGrammar.cs" />
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj	(revision 6899)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj	(revision 6900)
@@ -121,5 +121,8 @@
     <Compile Include="Analyzers\SymbolicDataAnalysisVariableFrequencyAnalyzer.cs" />
     <Compile Include="Analyzers\SymbolicDataAnalysisAlleleFrequencyAnalyzer.cs" />
+    <Compile Include="SymbolicDataAnalysisExpressionFullTreeCreator.cs" />
     <Compile Include="Plugin.cs" />
+    <Compile Include="SymbolicDataAnalysisExpressionGrowTreeCreator.cs" />
+    <Compile Include="SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator.cs" />
     <Compile Include="SymbolicDataAnalysisExpressionTreeILEmittingInterpreter.cs" />
     <Compile Include="Formatters\SymbolicDataAnalysisExpressionLatexFormatter.cs" />
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionFullTreeCreator.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionFullTreeCreator.cs	(revision 6900)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionFullTreeCreator.cs	(revision 6900)
@@ -0,0 +1,36 @@
+#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 HeuristicLab.Common;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
+  [StorableClass]
+  public class SymbolicDataAnalysisExpressionFullTreeCreator : FullTreeCreator, ISymbolicDataAnalysisSolutionCreator {
+    [StorableConstructor]
+    protected SymbolicDataAnalysisExpressionFullTreeCreator(bool deserializing) : base(deserializing) { }
+    protected SymbolicDataAnalysisExpressionFullTreeCreator(SymbolicDataAnalysisExpressionFullTreeCreator original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicDataAnalysisExpressionFullTreeCreator(this, cloner); }
+
+    public SymbolicDataAnalysisExpressionFullTreeCreator() : base() { }
+  }
+}
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionGrowTreeCreator.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionGrowTreeCreator.cs	(revision 6900)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionGrowTreeCreator.cs	(revision 6900)
@@ -0,0 +1,36 @@
+#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 HeuristicLab.Common;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
+  [StorableClass]
+  public class SymbolicDataAnalysisExpressionGrowTreeCreator : GrowTreeCreator, ISymbolicDataAnalysisSolutionCreator {
+    [StorableConstructor]
+    protected SymbolicDataAnalysisExpressionGrowTreeCreator(bool deserializing) : base(deserializing) { }
+    protected SymbolicDataAnalysisExpressionGrowTreeCreator(SymbolicDataAnalysisExpressionGrowTreeCreator original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicDataAnalysisExpressionGrowTreeCreator(this, cloner); }
+
+    public SymbolicDataAnalysisExpressionGrowTreeCreator() : base() { }
+  }
+}
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator.cs	(revision 6900)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator.cs	(revision 6900)
@@ -0,0 +1,36 @@
+#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 HeuristicLab.Common;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
+  [StorableClass]
+  public class SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator : RampedHalfAndHalfTreeCreator, ISymbolicDataAnalysisSolutionCreator {
+    [StorableConstructor]
+    protected SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator(bool deserializing) : base(deserializing) { }
+    protected SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator(SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) { return new SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator(this, cloner); }
+
+    public SymbolicDataAnalysisExpressionRampedHalfAndHalfTreeCreator() : base() { }
+  }
+}
Index: /branches/GeneralizedQAP/HeuristicLab.Problems.QuadraticAssignment/3.3/app.config
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Problems.QuadraticAssignment/3.3/app.config	(revision 6899)
+++ /branches/GeneralizedQAP/HeuristicLab.Problems.QuadraticAssignment/3.3/app.config	(revision 6900)
@@ -31,5 +31,5 @@
           binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IQAP"
           behaviorConfiguration="ProblemInstancesLargeMessages"
-          contract="QAPServiceReference.IQAP" name="BasicHttpBinding_IQAP" />
+          contract="QAPInstanceService.IQAP" name="BasicHttpBinding_IQAP" />
     </client>
   </system.serviceModel>
Index: /branches/GeneralizedQAP/HeuristicLab.Random/3.3/MersenneTwister.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Random/3.3/MersenneTwister.cs	(revision 6899)
+++ /branches/GeneralizedQAP/HeuristicLab.Random/3.3/MersenneTwister.cs	(revision 6900)
@@ -75,5 +75,5 @@
     /// </summary>
     public MersenneTwister() {
-      if (!init) seed((uint)DateTime.Now.Ticks);
+      if (!init) Seed((uint)DateTime.Now.Ticks);
       init = true;
     }
@@ -84,5 +84,5 @@
     /// <param name="s">The seed with which to initialize the random number generator.</param>
     public MersenneTwister(uint s) {
-      seed(s);
+      Seed(s);
       init = true;
     }
@@ -92,5 +92,5 @@
     /// <param name="array">The seed array with which to initialize the random number generator.</param>
     public MersenneTwister(uint[] array) {
-      seed(array);
+      Seed(array);
       init = true;
     }
@@ -110,5 +110,5 @@
     public void Reset() {
       lock (locker)
-        seed((uint)DateTime.Now.Ticks);
+        Seed((uint)DateTime.Now.Ticks);
     }
     /// <summary>
@@ -118,5 +118,5 @@
     public void Reset(int s) {
       lock (locker)
-        seed((uint)s);
+        Seed((uint)s);
     }
 
@@ -176,5 +176,5 @@
     /// </summary>
     /// <param name="s">A starting seed.</param>
-    public void seed(uint s) {
+    public void Seed(uint s) {
       state[0] = s & 0xFFFFFFFFU;
       for (int i = 1; i < n; ++i) {
@@ -188,6 +188,6 @@
     /// </summary>
     /// <param name="array">A starting seed array.</param>
-    public void seed(uint[] array) {
-      seed(19650218U);
+    public void Seed(uint[] array) {
+      Seed(19650218U);
       int i = 1, j = 0;
       for (int k = ((n > array.Length) ? n : array.Length); k > 0; --k) {
Index: /branches/GeneralizedQAP/HeuristicLab.Tests/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4/FullTreeCreatorTest.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Tests/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4/FullTreeCreatorTest.cs	(revision 6900)
+++ /branches/GeneralizedQAP/HeuristicLab.Tests/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4/FullTreeCreatorTest.cs	(revision 6900)
@@ -0,0 +1,77 @@
+#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 System.Collections.Generic;
+using System.Diagnostics;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Random;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding_3._4.Tests {
+  [TestClass]
+  public class FullTreeCreatorTest {
+    private const int POPULATION_SIZE = 10000;
+    private const int MAX_TREE_DEPTH = 10;
+    private TestContext testContextInstance;
+
+    /// <summary>
+    ///Gets or sets the test context which provides
+    ///information about and functionality for the current test run.
+    ///</summary>
+    public TestContext TestContext {
+      get {
+        return testContextInstance;
+      }
+      set {
+        testContextInstance = value;
+      }
+    }
+
+    [TestMethod()]
+    public void FullTreeCreatorDistributionsTest() {
+      var randomTrees = new List<ISymbolicExpressionTree>();
+      var grammar = Grammars.CreateSimpleArithmeticGrammar();
+      var random = new MersenneTwister(31415);
+      var stopwatch = new Stopwatch();
+      stopwatch.Start();
+      for (int i = 0; i != POPULATION_SIZE; i++) {
+        randomTrees.Add(FullTreeCreator.Create(random, grammar, MAX_TREE_DEPTH));
+      }
+      stopwatch.Stop();
+
+      foreach (var tree in randomTrees) {
+        Util.IsValid(tree);
+        Assert.IsTrue(tree.Depth == MAX_TREE_DEPTH);
+      }
+      double msPerRandomTreeCreation = stopwatch.ElapsedMilliseconds / (double)POPULATION_SIZE;
+
+      Console.WriteLine("FullTreeCreator: " + Environment.NewLine +
+        msPerRandomTreeCreation + " ms per random tree (~" + Math.Round(1000.0 / (msPerRandomTreeCreation)) + "random trees / s)" + Environment.NewLine +
+        Util.GetSizeDistributionString(randomTrees, 105, 5) + Environment.NewLine +
+        Util.GetFunctionDistributionString(randomTrees) + Environment.NewLine +
+        Util.GetNumberOfSubtreesDistributionString(randomTrees) + Environment.NewLine +
+        Util.GetTerminalDistributionString(randomTrees) + Environment.NewLine
+        );
+      Assert.IsTrue(Math.Round(1000.0 / (msPerRandomTreeCreation)) > 300); // must achieve more than 500 random trees / s
+    }
+  }
+}
Index: /branches/GeneralizedQAP/HeuristicLab.Tests/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4/GrowTreeCreatorTest.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Tests/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4/GrowTreeCreatorTest.cs	(revision 6900)
+++ /branches/GeneralizedQAP/HeuristicLab.Tests/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4/GrowTreeCreatorTest.cs	(revision 6900)
@@ -0,0 +1,76 @@
+#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 System.Collections.Generic;
+using System.Diagnostics;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Random;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding_3._4.Tests {
+  [TestClass]
+  public class GrowTreeCreatorTest {
+    private const int POPULATION_SIZE = 10000;
+    private const int MAX_TREE_DEPTH = 10;
+    private TestContext testContextInstance;
+
+    /// <summary>
+    ///Gets or sets the test context which provides
+    ///information about and functionality for the current test run.
+    ///</summary>
+    public TestContext TestContext {
+      get {
+        return testContextInstance;
+      }
+      set {
+        testContextInstance = value;
+      }
+    }
+
+    [TestMethod()]
+    public void GrowTreeCreatorDistributionsTest() {
+      var randomTrees = new List<ISymbolicExpressionTree>();
+      var grammar = Grammars.CreateSimpleArithmeticGrammar();
+      var random = new MersenneTwister(31415);
+      var stopwatch = new Stopwatch();
+      stopwatch.Start();
+      for (int i = 0; i != POPULATION_SIZE; i++) {
+        randomTrees.Add(GrowTreeCreator.Create(random, grammar, MAX_TREE_DEPTH));
+      }
+      stopwatch.Stop();
+
+      foreach (var tree in randomTrees) {
+        Util.IsValid(tree);
+      }
+      double msPerRandomTreeCreation = stopwatch.ElapsedMilliseconds / (double)POPULATION_SIZE;
+
+      Console.WriteLine("GrowTreeCreator: " + Environment.NewLine +
+        msPerRandomTreeCreation + " ms per random tree (~" + Math.Round(1000.0 / (msPerRandomTreeCreation)) + "random trees / s)" + Environment.NewLine +
+        Util.GetSizeDistributionString(randomTrees, 105, 5) + Environment.NewLine +
+        Util.GetFunctionDistributionString(randomTrees) + Environment.NewLine +
+        Util.GetNumberOfSubtreesDistributionString(randomTrees) + Environment.NewLine +
+        Util.GetTerminalDistributionString(randomTrees) + Environment.NewLine
+        );
+      Assert.IsTrue(Math.Round(1000.0 / (msPerRandomTreeCreation)) > 300); // must achieve more than 500 random trees / s
+    }
+  }
+}
Index: /branches/GeneralizedQAP/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis-3.4/StatisticCalculatorsTest.cs
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis-3.4/StatisticCalculatorsTest.cs	(revision 6899)
+++ /branches/GeneralizedQAP/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis-3.4/StatisticCalculatorsTest.cs	(revision 6900)
@@ -22,4 +22,5 @@
 using System.Collections.Generic;
 using System.Linq;
+using HeuristicLab.Common;
 using HeuristicLab.Problems.DataAnalysis;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
@@ -60,5 +61,5 @@
       {
         for (int col = 0; col < cols; col++) {
-          double scale = random.NextDouble() * 1E7;
+          double scale = random.NextDouble();
           IEnumerable<double> x = from rows in Enumerable.Range(0, n)
                                   select testData[rows, col] * scale;
@@ -77,6 +78,6 @@
           double variance = calculator.Variance;
 
-          Assert.AreEqual(mean_alglib.ToString(), mean.ToString());
-          Assert.AreEqual(variance_alglib.ToString(), variance.ToString());
+          Assert.IsTrue(mean_alglib.IsAlmost(mean));
+          Assert.IsTrue(variance_alglib.IsAlmost(variance));
         }
       }
@@ -108,5 +109,5 @@
             double r2 = r2Calculator.RSquared;
 
-            Assert.AreEqual(r2_alglib.ToString(), r2.ToString());
+            Assert.IsTrue(r2_alglib.IsAlmost(r2));
           }
         }
Index: /branches/GeneralizedQAP/HeuristicLab.Tests/HeuristicLab.Tests.csproj
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab.Tests/HeuristicLab.Tests.csproj	(revision 6899)
+++ /branches/GeneralizedQAP/HeuristicLab.Tests/HeuristicLab.Tests.csproj	(revision 6900)
@@ -38,4 +38,66 @@
   <PropertyGroup>
     <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x64\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\HeuristicLab.Tests.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Release\HeuristicLab.Tests.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\x86\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Debug\HeuristicLab.Tests.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
+    <CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <CodeAnalysisLogFile>bin\Release\HeuristicLab.Tests.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
+    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
+    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
+    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
   </PropertyGroup>
   <ItemGroup>
@@ -171,5 +233,7 @@
     <Compile Include="HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4\ArgumentDuplicaterTest.cs" />
     <Compile Include="HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4\ChangeNodeTypeManipulationTest.cs" />
+    <Compile Include="HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4\FullTreeCreatorTest.cs" />
     <Compile Include="HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4\Grammars.cs" />
+    <Compile Include="HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4\GrowTreeCreatorTest.cs" />
     <Compile Include="HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4\ProbabilisticTreeCreaterTest.cs" />
     <Compile Include="HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4\ReplaceBranchManipulationTest.cs" />
Index: /branches/GeneralizedQAP/HeuristicLab/3.3/CustomPostBuildTemplate_UpdateLocalInstallation.cmd
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab/3.3/CustomPostBuildTemplate_UpdateLocalInstallation.cmd	(revision 6899)
+++ /branches/GeneralizedQAP/HeuristicLab/3.3/CustomPostBuildTemplate_UpdateLocalInstallation.cmd	(revision 6900)
@@ -1,10 +1,5 @@
 set target=C:\Program Files\HeuristicLab 3.3
 
-copy "HeuristicLab 3.3.exe" "%target%"
-copy "HeuristicLab 3.3.exe.config" "%target%"
-copy HeuristicLab.PluginInfrastructure-3.3.dll "%target%"
-
-FOR /F "skip=1 tokens=1-2 delims=: usebackq" %%G IN ("%ProjectDir%\Files.txt") DO copy "%Outdir%\%%H" "%target%" >nul
-
+FOR /F "skip=1 tokens=1 delims= usebackq" %%G IN ("%ProjectDir%\Files.txt") DO copy "%Outdir%\%%G" "%target%" >nul
 
 echo "Platform: %Platform%, architecture: %PROCESSOR_ARCHITECTURE%"
Index: /branches/GeneralizedQAP/HeuristicLab/3.3/Files.txt
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab/3.3/Files.txt	(revision 6899)
+++ /branches/GeneralizedQAP/HeuristicLab/3.3/Files.txt	(revision 6900)
@@ -1,135 +1,7 @@
 ﻿; This line is skipped. DO NOT TOUCH THIS line!
-; List of project directories and file names separated by ':' that are part of the installation
+; List of files that are to be copied to the installation directory
 
-HeuristicLab.PluginInfrastructure\3.3:ICSharpCode.SharpZipLib.dll
-HeuristicLab.PluginInfrastructure\3.3:ICSharpCode.SharpZipLib License.txt
-HeuristicLab.Algorithms.DataAnalysis\3.3:HeuristicLab.Algorithms.DataAnalysis-3.3.dll
-HeuristicLab.Algorithms.DataAnalysis\3.4:HeuristicLab.Algorithms.DataAnalysis-3.4.dll
-HeuristicLab.Algorithms.DataAnalysis.Views\3.3:HeuristicLab.Algorithms.DataAnalysis.Views-3.3.dll
-HeuristicLab.Algorithms.DataAnalysis.Views\3.4:HeuristicLab.Algorithms.DataAnalysis.Views-3.4.dll
-HeuristicLab.Algorithms.EvolutionStrategy\3.3:HeuristicLab.Algorithms.EvolutionStrategy-3.3.dll
-HeuristicLab.Algorithms.GeneticAlgorithm\3.3:HeuristicLab.Algorithms.GeneticAlgorithm-3.3.dll
-HeuristicLab.Algorithms.LocalSearch\3.3:HeuristicLab.Algorithms.LocalSearch-3.3.dll
-HeuristicLab.Algorithms.NSGA2\3.3:HeuristicLab.Algorithms.NSGA2-3.3.dll
-HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm\3.3:HeuristicLab.Algorithms.OffspringSelectionGeneticAlgorithm-3.3.dll
-HeuristicLab.Algorithms.ParticleSwarmOptimization\3.3:HeuristicLab.Algorithms.ParticleSwarmOptimization-3.3.dll
-HeuristicLab.Algorithms.SimulatedAnnealing\3.3:HeuristicLab.Algorithms.SimulatedAnnealing-3.3.dll
-HeuristicLab.Algorithms.TabuSearch\3.3:HeuristicLab.Algorithms.TabuSearch-3.3.dll
-HeuristicLab.Algorithms.VariableNeighborhoodSearch\3.3:HeuristicLab.Algorithms.VariableNeighborhoodSearch-3.3.dll
-HeuristicLab.Analysis\3.3:HeuristicLab.Analysis-3.3.dll
-HeuristicLab.Analysis.Views\3.3:HeuristicLab.Analysis.Views-3.3.dll
-HeuristicLab.Clients.Common\3.3:HeuristicLab.Clients.Common-3.3.dll
-HeuristicLab.CodeEditor\3.3:HeuristicLab.CodeEditor-3.3.dll
-HeuristicLab.Collections\3.3:HeuristicLab.Collections-3.3.dll
-HeuristicLab.Common\3.3:HeuristicLab.Common-3.3.dll
-HeuristicLab.Common.Resources\3.3:HeuristicLab.Common.Resources-3.3.dll
-HeuristicLab.Core\3.3:HeuristicLab.Core-3.3.dll
-HeuristicLab.Core.Views\3.3:HeuristicLab.Core.Views-3.3.dll
-HeuristicLab.Data\3.3:HeuristicLab.Data-3.3.dll
-HeuristicLab.Data.Views\3.3:HeuristicLab.Data.Views-3.3.dll
-HeuristicLab.DebugEngine\3.3:HeuristicLab.DebugEngine-3.3.dll
-HeuristicLab.Encodings.BinaryVectorEncoding\3.3:HeuristicLab.Encodings.BinaryVectorEncoding-3.3.dll
-HeuristicLab.Encodings.IntegerVectorEncoding\3.3:HeuristicLab.Encodings.IntegerVectorEncoding-3.3.dll
-HeuristicLab.Encodings.PermutationEncoding\3.3:HeuristicLab.Encodings.PermutationEncoding-3.3.dll
-HeuristicLab.Encodings.PermutationEncoding.Views\3.3:HeuristicLab.Encodings.PermutationEncoding.Views-3.3.dll
-HeuristicLab.Encodings.RealVectorEncoding\3.3:HeuristicLab.Encodings.RealVectorEncoding-3.3.dll
-HeuristicLab.Encodings.SymbolicExpressionTreeEncoding\3.3:HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.3.dll
-HeuristicLab.Encodings.SymbolicExpressionTreeEncoding\3.4:HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll
-HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views\3.3:HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.3.dll
-HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views\3.4:HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.dll
-HeuristicLab.MainForm\3.3:HeuristicLab.MainForm-3.3.dll
-HeuristicLab.MainForm.WindowsForms\3.3:HeuristicLab.MainForm.WindowsForms-3.3.dll
-HeuristicLab.Operators\3.3:HeuristicLab.Operators-3.3.dll
-HeuristicLab.Operators.Views\3.3:HeuristicLab.Operators.Views-3.3.dll
-HeuristicLab.Operators.Views.GraphVisualization\3.3:HeuristicLab.Operators.Views.GraphVisualization-3.3.dll
-HeuristicLab.Operators.Views.GraphVisualization.Views\3.3:HeuristicLab.Operators.Views.GraphVisualization.Views-3.3.dll
-HeuristicLab.Operators.Programmable\3.3:HeuristicLab.Operators.Programmable-3.3.dll
-HeuristicLab.Optimization\3.3:HeuristicLab.Optimization-3.3.dll
-HeuristicLab.Optimization.Operators\3.3:HeuristicLab.Optimization.Operators-3.3.dll
-HeuristicLab.Optimization.Views\3.3:HeuristicLab.Optimization.Views-3.3.dll
-HeuristicLab.Optimizer\3.3:HeuristicLab.Optimizer-3.3.dll
-HeuristicLab.ParallelEngine\3.3:HeuristicLab.ParallelEngine-3.3.dll
-HeuristicLab.Parameters\3.3:HeuristicLab.Parameters-3.3.dll
-HeuristicLab.Parameters.Views\3.3:HeuristicLab.Parameters.Views-3.3.dll
-HeuristicLab.Persistence\3.3:HeuristicLab.Persistence-3.3.dll
-HeuristicLab.Persistence.GUI\3.3:HeuristicLab.Persistence.GUI-3.3.dll
-HeuristicLab.Problems.ArtificialAnt\3.3:HeuristicLab.Problems.ArtificialAnt-3.3.dll
-HeuristicLab.Problems.ArtificialAnt\3.4:HeuristicLab.Problems.ArtificialAnt-3.4.dll
-HeuristicLab.Problems.ArtificialAnt.Views\3.3:HeuristicLab.Problems.ArtificialAnt.Views-3.3.dll
-HeuristicLab.Problems.ArtificialAnt.Views\3.4:HeuristicLab.Problems.ArtificialAnt.Views-3.4.dll
-HeuristicLab.Problems.DataAnalysis\3.3:HeuristicLab.Problems.DataAnalysis-3.3.dll
-HeuristicLab.Problems.DataAnalysis\3.4:HeuristicLab.Problems.DataAnalysis-3.4.dll
-HeuristicLab.Problems.DataAnalysis.Classification\3.3:HeuristicLab.Problems.DataAnalysis.Classification-3.3.dll
-HeuristicLab.Problems.DataAnalysis.Classification.Views\3.3:HeuristicLab.Problems.DataAnalysis.Classification.Views-3.3.dll
-HeuristicLab.Problems.DataAnalysis.Regression\3.3:HeuristicLab.Problems.DataAnalysis.Regression-3.3.dll
-HeuristicLab.Problems.DataAnalysis.Symbolic\3.4:HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.dll
-HeuristicLab.Problems.DataAnalysis.Symbolic.Views\3.4:HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.dll
-HeuristicLab.Problems.DataAnalysis.Symbolic.Classification\3.4:HeuristicLab.Problems.DataAnalysis.Symbolic.Classification-3.4.dll
-HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views\3.4:HeuristicLab.Problems.DataAnalysis.Symbolic.Classification.Views-3.4.dll
-HeuristicLab.Problems.DataAnalysis.Symbolic.Regression\3.4:HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.dll
-HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views\3.4:HeuristicLab.Problems.DataAnalysis.Symbolic.Regression.Views-3.4.dll
-HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis\3.4:HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.dll
-HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views\3.4:HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis.Views-3.4.dll
-HeuristicLab.Problems.DataAnalysis.Views\3.3:HeuristicLab.Problems.DataAnalysis.Views-3.3.dll
-HeuristicLab.Problems.DataAnalysis.Views\3.4:HeuristicLab.Problems.DataAnalysis.Views-3.4.dll
-HeuristicLab.Problems.ExternalEvaluation\3.3:HeuristicLab.Problems.ExternalEvaluation-3.3.dll
-HeuristicLab.Problems.ExternalEvaluation.Views\3.3:HeuristicLab.Problems.ExternalEvaluation.Views-3.3.dll
-HeuristicLab.Problems.ExternalEvaluation.GP\3.3:HeuristicLab.Problems.ExternalEvaluation.GP-3.3.dll
-HeuristicLab.Problems.ExternalEvaluation.GP\3.4:HeuristicLab.Problems.ExternalEvaluation.GP-3.4.dll
-HeuristicLab.Problems.ExternalEvaluation.GP.Views\3.3:HeuristicLab.Problems.ExternalEvaluation.GP.Views-3.3.dll
-HeuristicLab.Problems.GeneralizedQuadraticAssignment\3.3:HeuristicLab.Problems.GeneralizedQuadraticAssignment-3.3.dll
-HeuristicLab.Problems.Knapsack\3.3:HeuristicLab.Problems.Knapsack-3.3.dll
-HeuristicLab.Problems.Knapsack.Views\3.3:HeuristicLab.Problems.Knapsack.Views-3.3.dll
-HeuristicLab.Problems.OneMax\3.3:HeuristicLab.Problems.OneMax-3.3.dll
-HeuristicLab.Problems.OneMax.Views\3.3:HeuristicLab.Problems.OneMax.Views-3.3.dll
-HeuristicLab.Problems.QuadraticAssignment\3.3:HeuristicLab.Problems.QuadraticAssignment-3.3.dll
-HeuristicLab.Problems.QuadraticAssignment.Algorithms\3.3:HeuristicLab.Problems.QuadraticAssignment.Algorithms-3.3.dll
-HeuristicLab.Problems.QuadraticAssignment.Views\3.3:HeuristicLab.Problems.QuadraticAssignment.Views-3.3.dll
-HeuristicLab.Problems.TestFunctions\3.3:HeuristicLab.Problems.TestFunctions-3.3.dll
-HeuristicLab.Problems.TestFunctions.Views\3.3:HeuristicLab.Problems.TestFunctions.Views-3.3.dll
-HeuristicLab.Problems.TravelingSalesman\3.3:HeuristicLab.Problems.TravelingSalesman-3.3.dll
-HeuristicLab.Problems.TravelingSalesman.Views\3.3:HeuristicLab.Problems.TravelingSalesman.Views-3.3.dll
-HeuristicLab.Problems.VehicleRouting\3.3:HeuristicLab.Problems.VehicleRouting-3.3.dll
-HeuristicLab.Problems.VehicleRouting.Views\3.3:HeuristicLab.Problems.VehicleRouting.Views-3.3.dll
-HeuristicLab.Random\3.3:HeuristicLab.Random-3.3.dll
-HeuristicLab.Selection\3.3:HeuristicLab.Selection-3.3.dll
-HeuristicLab.SequentialEngine\3.3:HeuristicLab.SequentialEngine-3.3.dll
-HeuristicLab.Tracing\3.3:HeuristicLab.Tracing-3.3.dll
-HeuristicLab.Tracing\3.3:HeuristicLab.log4net.xml
-HeuristicLab.Visualization.ChartControlsExtensions\3.3:HeuristicLab.Visualization.ChartControlsExtensions-3.3.dll
-
-;External Libraries
-HeuristicLab.ExtLibs\HeuristicLab.ALGLIB\3.1.0\ALGLIB-3.1.0:ALGLIB-3.1.0.dll
-HeuristicLab.ExtLibs\HeuristicLab.ALGLIB\3.1.0\HeuristicLab.ALGLIB-3.1.0:HeuristicLab.ALGLIB-3.1.0.dll
-HeuristicLab.ExtLibs\HeuristicLab.ALGLIB\3.1.0\HeuristicLab.ALGLIB-3.1.0:ALGLIB License-3.1.0.txt
-HeuristicLab.ExtLibs\HeuristicLab.LibSVM\1.6.3\HeuristicLab.LibSVM-1.6.3:HeuristicLab.LibSVM-1.6.3.dll
-HeuristicLab.ExtLibs\HeuristicLab.LibSVM\1.6.3\HeuristicLab.LibSVM-1.6.3:LibSVM-1.6.3.dll
-HeuristicLab.ExtLibs\HeuristicLab.LibSVM\1.6.3\HeuristicLab.LibSVM-1.6.3:SVM.NET-1.6.3 License.txt
-
-HeuristicLab.ExtLibs\HeuristicLab.log4net\1.2.10.0:HeuristicLab.log4net-1.2.10.0.dll
-HeuristicLab.ExtLibs\HeuristicLab.log4net\1.2.10.0:log4net.dll
-HeuristicLab.ExtLibs\HeuristicLab.log4net\1.2.10.0:log4net License.txt
-
-HeuristicLab.ExtLibs\HeuristicLab.Netron\3.0.2672.12446\Netron.Diagramming.Core-3.0.2672.12446:Netron.Diagramming.Core-3.0.2672.12446.dll
-HeuristicLab.ExtLibs\HeuristicLab.Netron\3.0.2672.12446\HeuristicLab.Netron-3.0.2672.12446:HeuristicLab.Netron-3.0.2672.12446.dll
-HeuristicLab.ExtLibs\HeuristicLab.Netron\3.0.2672.12446\HeuristicLab.Netron-3.0.2672.12446:Netron.Diagramming.Core License.txt
-
-HeuristicLab.ExtLibs\HeuristicLab.ProtobufCS\0.9.1\HeuristicLab.ProtobufCS:HeuristicLab.ProtobufCS-0.9.1.dll
-HeuristicLab.ExtLibs\HeuristicLab.ProtobufCS\0.9.1\HeuristicLab.ProtobufCS:Google.ProtocolBuffers-0.9.1.dll
-HeuristicLab.ExtLibs\HeuristicLab.ProtobufCS\0.9.1\HeuristicLab.ProtobufCS:Google.ProtocolBuffers-license-0.9.1.txt
-
-HeuristicLab.ExtLibs\HeuristicLab.SharpDevelop\3.1.1.5327:HeuristicLab.SharpDevelop-3.1.1.5327.dll
-HeuristicLab.ExtLibs\HeuristicLab.SharpDevelop\3.1.1.5327:ICSharpCode.NRefactory.dll
-HeuristicLab.ExtLibs\HeuristicLab.SharpDevelop\3.1.1.5327:ICSharpCode.SharpDevelop.Dom.dll
-HeuristicLab.ExtLibs\HeuristicLab.SharpDevelop\3.1.1.5327:ICSharpCode.TextEditor.dll
-HeuristicLab.ExtLibs\HeuristicLab.SharpDevelop\3.1.1.5327:Mono.Cecil.dll
-HeuristicLab.ExtLibs\HeuristicLab.SharpDevelop\3.1.1.5327:Mono Cecil License.txt
-HeuristicLab.ExtLibs\HeuristicLab.SharpDevelop\3.1.1.5327:SharpDevelop License.txt
-
-HeuristicLab.ExtLibs\HeuristicLab.WinFormsUI\2.3.1\WinFormsUI-2.3.1:WeifenLuo.WinFormsUI.Docking-2.3.1.dll
-HeuristicLab.ExtLibs\HeuristicLab.WinFormsUI\2.3.1\HeuristicLab.WinFormsUI-2.3.1:HeuristicLab.WinFormsUI-2.3.1.dll
-HeuristicLab.ExtLibs\HeuristicLab.WinFormsUI\2.3.1\HeuristicLab.WinFormsUI-2.3.1:WeifenLuo.WinFormsUI.Docking License.txt
-
-HeuristicLab.ExtLibs\HeuristicLab.DayView\1.0:HeuristicLab.DayView-1.0.dll
-HeuristicLab.ExtLibs\HeuristicLab.DayView\1.0:Calendar.DayView.dll
-HeuristicLab.ExtLibs\HeuristicLab.DayView\1.0:DayView License.txt
+HeuristicLab 3.3.exe
+HeuristicLab 3.3.exe.config
+*.dll
+*.txt
Index: /branches/GeneralizedQAP/HeuristicLab/3.3/MergeConfigs.cmd
===================================================================
--- /branches/GeneralizedQAP/HeuristicLab/3.3/MergeConfigs.cmd	(revision 6899)
+++ /branches/GeneralizedQAP/HeuristicLab/3.3/MergeConfigs.cmd	(revision 6900)
@@ -1,5 +1,3 @@
-ConfigMerger "%Outdir%HeuristicLab.PluginInfrastructure-3.3.dll.config" "HeuristicLab 3.3.exe.config"
-ConfigMerger "%Outdir%HeuristicLab.Clients.Common-3.3.dll.config" "HeuristicLab 3.3.exe.config"
-ConfigMerger "%Outdir%HeuristicLab.Optimizer-3.3.dll.config" "HeuristicLab 3.3.exe.config"
-ConfigMerger "%Outdir%HeuristicLab.Persistence-3.3.dll.config" "HeuristicLab 3.3.exe.config"
-ConfigMerger "%Outdir%HeuristicLab.Tracing-3.3.dll.config" "HeuristicLab 3.3.exe.config"
+FOR /F "tokens=*" %%A IN ('dir /B "%Outdir%*.dll.config"') DO (
+  ConfigMerger "%%A" "HeuristicLab 3.3.exe.config"
+)
