Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj	(revision 12207)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Views-3.4.csproj	(revision 12208)
@@ -47,4 +47,5 @@
     <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
     <Prefer32Bit>false</Prefer32Bit>
+    <UseVSHostingProcess>false</UseVSHostingProcess>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/EnumerableExtensions.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/EnumerableExtensions.cs	(revision 12207)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/EnumerableExtensions.cs	(revision 12208)
@@ -20,8 +20,8 @@
 #endregion
 
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using HeuristicLab.Core;
-using System;
 
 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
@@ -55,6 +55,5 @@
         if (agg > r) return list[i];
       }
-      // should never happen
-      throw new InvalidOperationException();
+      return list[random.Next(list.Count)];
     }
   }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj	(revision 12207)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.csproj	(revision 12208)
@@ -48,4 +48,5 @@
     <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
     <Prefer32Bit>false</Prefer32Bit>
+    <UseVSHostingProcess>false</UseVSHostingProcess>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Tests/HeuristicLab.EvolutionTracking.Tests.csproj
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Tests/HeuristicLab.EvolutionTracking.Tests.csproj	(revision 12207)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Tests/HeuristicLab.EvolutionTracking.Tests.csproj	(revision 12208)
@@ -26,4 +26,5 @@
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
+    <UseVSHostingProcess>false</UseVSHostingProcess>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs	(revision 12207)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphChart.cs	(revision 12208)
@@ -66,4 +66,6 @@
       }
       set {
+        if (value == null || value == SelectedGraphNode)
+          return;
         SelectedVisualNode = GetMappedNode(value);
         UpdateSelectedVisualNode();
@@ -90,5 +92,5 @@
     protected VisualGenealogyGraphNode SelectedVisualNode { get; set; }
 
-    private VisualGenealogyGraphNode GetMappedNode(IGenealogyGraphNode node) {
+    public VisualGenealogyGraphNode GetMappedNode(IGenealogyGraphNode node) {
       VisualGenealogyGraphNode v;
       nodeMap.TryGetValue(node, out v);
@@ -96,5 +98,5 @@
     }
 
-    private VisualGenealogyGraphArc GetMappedArc(IGenealogyGraphNode source, IGenealogyGraphNode target) {
+    public VisualGenealogyGraphArc GetMappedArc(IGenealogyGraphNode source, IGenealogyGraphNode target) {
       VisualGenealogyGraphNode visualSource, visualTarget;
       nodeMap.TryGetValue(source, out visualSource);
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.Designer.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.Designer.cs	(revision 12207)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/GenealogyGraphView.Designer.cs	(revision 12208)
@@ -26,11 +26,11 @@
     private void InitializeComponent() {
       this.splitContainer = new System.Windows.Forms.SplitContainer();
-      this.genealogyGraphChart = new HeuristicLab.EvolutionTracking.Views.GenealogyGraphChart();
       this.viewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost();
       this.groupBox = new System.Windows.Forms.GroupBox();
+      this.openNew_CheckBox = new System.Windows.Forms.CheckBox();
       this.lockGraph_checkBox = new System.Windows.Forms.CheckBox();
       this.simpleLineages_checkBox = new System.Windows.Forms.CheckBox();
       this.trace_checkBox = new System.Windows.Forms.CheckBox();
-      this.openNew_CheckBox = new System.Windows.Forms.CheckBox();
+      this.genealogyGraphChart = new HeuristicLab.EvolutionTracking.Views.GenealogyGraphChart();
       ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
       this.splitContainer.Panel1.SuspendLayout();
@@ -59,21 +59,4 @@
       this.splitContainer.TabIndex = 0;
       // 
-      // genealogyGraphChart
-      // 
-      this.genealogyGraphChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
-            | System.Windows.Forms.AnchorStyles.Left) 
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.genealogyGraphChart.BackColor = System.Drawing.SystemColors.Control;
-      this.genealogyGraphChart.GenealogyGraph = null;
-      this.genealogyGraphChart.Location = new System.Drawing.Point(0, 0);
-      this.genealogyGraphChart.LockGenealogy = false;
-      this.genealogyGraphChart.Name = "genealogyGraphChart";
-      this.genealogyGraphChart.ScaleOnResize = true;
-      this.genealogyGraphChart.SimpleLineages = false;
-      this.genealogyGraphChart.Size = new System.Drawing.Size(689, 738);
-      this.genealogyGraphChart.TabIndex = 0;
-      this.genealogyGraphChart.TraceFragments = false;
-      this.genealogyGraphChart.UpdateEnabled = true;
-      // 
       // viewHost
       // 
@@ -101,8 +84,18 @@
       this.groupBox.Location = new System.Drawing.Point(3, 4);
       this.groupBox.Name = "groupBox";
-      this.groupBox.Size = new System.Drawing.Size(411, 44);
+      this.groupBox.Size = new System.Drawing.Size(602, 44);
       this.groupBox.TabIndex = 1;
       this.groupBox.TabStop = false;
       this.groupBox.Text = "Genealogy Options";
+      // 
+      // openNew_CheckBox
+      // 
+      this.openNew_CheckBox.AutoSize = true;
+      this.openNew_CheckBox.Location = new System.Drawing.Point(485, 19);
+      this.openNew_CheckBox.Name = "openNew_CheckBox";
+      this.openNew_CheckBox.Size = new System.Drawing.Size(111, 17);
+      this.openNew_CheckBox.TabIndex = 1;
+      this.openNew_CheckBox.Text = "Open in new view";
+      this.openNew_CheckBox.UseVisualStyleBackColor = true;
       // 
       // lockGraph_checkBox
@@ -142,13 +135,21 @@
       this.trace_checkBox.CheckedChanged += new System.EventHandler(this.trace_checkBox_CheckedChanged);
       // 
-      // openNew_CheckBox
+      // genealogyGraphChart
       // 
-      this.openNew_CheckBox.AutoSize = true;
-      this.openNew_CheckBox.Location = new System.Drawing.Point(237, 20);
-      this.openNew_CheckBox.Name = "openNew_CheckBox";
-      this.openNew_CheckBox.Size = new System.Drawing.Size(111, 17);
-      this.openNew_CheckBox.TabIndex = 1;
-      this.openNew_CheckBox.Text = "Open in new view";
-      this.openNew_CheckBox.UseVisualStyleBackColor = true;
+      this.genealogyGraphChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.genealogyGraphChart.BackColor = System.Drawing.SystemColors.Control;
+      this.genealogyGraphChart.GenealogyGraph = null;
+      this.genealogyGraphChart.Location = new System.Drawing.Point(0, 0);
+      this.genealogyGraphChart.LockGenealogy = false;
+      this.genealogyGraphChart.Name = "genealogyGraphChart";
+      this.genealogyGraphChart.ScaleOnResize = true;
+      this.genealogyGraphChart.SelectedGraphNode = null;
+      this.genealogyGraphChart.SimpleLineages = false;
+      this.genealogyGraphChart.Size = new System.Drawing.Size(689, 738);
+      this.genealogyGraphChart.TabIndex = 0;
+      this.genealogyGraphChart.TraceFragments = false;
+      this.genealogyGraphChart.UpdateEnabled = true;
       // 
       // GenealogyGraphView
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/HeuristicLab.EvolutionTracking.Views-3.4.csproj
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/HeuristicLab.EvolutionTracking.Views-3.4.csproj	(revision 12207)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.EvolutionTracking.Views/3.4/HeuristicLab.EvolutionTracking.Views-3.4.csproj	(revision 12208)
@@ -24,4 +24,5 @@
     <WarningLevel>4</WarningLevel>
     <Prefer32Bit>false</Prefer32Bit>
+    <UseVSHostingProcess>false</UseVSHostingProcess>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
@@ -128,4 +129,5 @@
   <ItemGroup>
     <None Include="HeuristicLab.snk" />
+    <None Include="Plugin.cs.frame" />
   </ItemGroup>
   <ItemGroup>
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj	(revision 12207)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Views-3.4.csproj	(revision 12208)
@@ -47,4 +47,5 @@
     <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
     <Prefer32Bit>false</Prefer32Bit>
+    <UseVSHostingProcess>false</UseVSHostingProcess>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
@@ -103,7 +104,7 @@
       <Private>False</Private>
     </Reference>
-    <Reference Include="EPPlus-3.1.3, Version=3.1.3.0, Culture=neutral, PublicKeyToken=ea159fdaa78159a1, processorArchitecture=MSIL">
+    <Reference Include="EPPlus-4.0.3, Version=4.0.3.0, Culture=neutral, PublicKeyToken=ea159fdaa78159a1, processorArchitecture=MSIL">
       <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\..\..\trunk\sources\bin\EPPlus-3.1.3.dll</HintPath>
+      <HintPath>..\..\..\..\trunk\sources\bin\EPPlus-4.0.3.dll</HintPath>
       <Private>False</Private>
     </Reference>
@@ -366,4 +367,7 @@
       <LastGenOutput>Resources.Designer.cs</LastGenOutput>
       <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Tracking\SymbolicDataAnalysisGenealogyGraphView.resx">
+      <DependentUpon>SymbolicDataAnalysisGenealogyGraphView.cs</DependentUpon>
     </EmbeddedResource>
   </ItemGroup>
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.Designer.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.Designer.cs	(revision 12207)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.Designer.cs	(revision 12208)
@@ -46,4 +46,6 @@
     private void InitializeComponent() {
       this.groupBox1 = new System.Windows.Forms.GroupBox();
+      this.nodeWeightLabel = new System.Windows.Forms.Label();
+      this.nodeWeightLabelLabel = new System.Windows.Forms.Label();
       this.navigateRightButton = new System.Windows.Forms.Button();
       this.navigateLeftButton = new System.Windows.Forms.Button();
@@ -76,4 +78,6 @@
       // groupBox1
       // 
+      this.groupBox1.Controls.Add(this.nodeWeightLabel);
+      this.groupBox1.Controls.Add(this.nodeWeightLabelLabel);
       this.groupBox1.Controls.Add(this.navigateRightButton);
       this.groupBox1.Controls.Add(this.navigateLeftButton);
@@ -84,15 +88,32 @@
       this.groupBox1.Controls.Add(this.nodeQualityLabel);
       this.groupBox1.Controls.Add(this.nodeQualityLabelLabel);
-      this.groupBox1.Location = new System.Drawing.Point(420, 4);
+      this.groupBox1.Location = new System.Drawing.Point(624, 4);
       this.groupBox1.Name = "groupBox1";
-      this.groupBox1.Size = new System.Drawing.Size(624, 44);
+      this.groupBox1.Size = new System.Drawing.Size(617, 44);
       this.groupBox1.TabIndex = 2;
       this.groupBox1.TabStop = false;
       this.groupBox1.Text = "Current Node";
       // 
+      // nodeWeightLabel
+      // 
+      this.nodeWeightLabel.AutoSize = true;
+      this.nodeWeightLabel.Location = new System.Drawing.Point(285, 20);
+      this.nodeWeightLabel.Name = "nodeWeightLabel";
+      this.nodeWeightLabel.Size = new System.Drawing.Size(0, 13);
+      this.nodeWeightLabel.TabIndex = 8;
+      // 
+      // nodeWeightLabelLabel
+      // 
+      this.nodeWeightLabelLabel.AutoSize = true;
+      this.nodeWeightLabelLabel.Location = new System.Drawing.Point(241, 20);
+      this.nodeWeightLabelLabel.Name = "nodeWeightLabelLabel";
+      this.nodeWeightLabelLabel.Size = new System.Drawing.Size(44, 13);
+      this.nodeWeightLabelLabel.TabIndex = 7;
+      this.nodeWeightLabelLabel.Text = "Weight:";
+      // 
       // navigateRightButton
       // 
       this.navigateRightButton.Image = global::HeuristicLab.Problems.DataAnalysis.Symbolic.Views.Properties.Resources.LargeLeftDiagonal_235;
-      this.navigateRightButton.Location = new System.Drawing.Point(309, 15);
+      this.navigateRightButton.Location = new System.Drawing.Point(589, 14);
       this.navigateRightButton.Name = "navigateRightButton";
       this.navigateRightButton.Size = new System.Drawing.Size(22, 22);
@@ -104,5 +125,5 @@
       // 
       this.navigateLeftButton.Image = global::HeuristicLab.Problems.DataAnalysis.Symbolic.Views.Properties.Resources.LargeRightDiagonal_238;
-      this.navigateLeftButton.Location = new System.Drawing.Point(281, 15);
+      this.navigateLeftButton.Location = new System.Drawing.Point(561, 14);
       this.navigateLeftButton.Name = "navigateLeftButton";
       this.navigateLeftButton.Size = new System.Drawing.Size(22, 22);
@@ -114,5 +135,5 @@
       // 
       this.nodeDegreeLabel.AutoSize = true;
-      this.nodeDegreeLabel.Location = new System.Drawing.Point(235, 20);
+      this.nodeDegreeLabel.Location = new System.Drawing.Point(205, 20);
       this.nodeDegreeLabel.Name = "nodeDegreeLabel";
       this.nodeDegreeLabel.Size = new System.Drawing.Size(0, 13);
@@ -122,5 +143,5 @@
       // 
       this.nodeDegreeLabelLabel.AutoSize = true;
-      this.nodeDegreeLabelLabel.Location = new System.Drawing.Point(192, 20);
+      this.nodeDegreeLabelLabel.Location = new System.Drawing.Point(154, 20);
       this.nodeDegreeLabelLabel.Name = "nodeDegreeLabelLabel";
       this.nodeDegreeLabelLabel.Size = new System.Drawing.Size(45, 13);
@@ -131,5 +152,5 @@
       // 
       this.nodeRankLabel.AutoSize = true;
-      this.nodeRankLabel.Location = new System.Drawing.Point(138, 20);
+      this.nodeRankLabel.Location = new System.Drawing.Point(123, 20);
       this.nodeRankLabel.Name = "nodeRankLabel";
       this.nodeRankLabel.Size = new System.Drawing.Size(0, 13);
@@ -139,5 +160,5 @@
       // 
       this.nodeRankLabelLabel.AutoSize = true;
-      this.nodeRankLabelLabel.Location = new System.Drawing.Point(96, 20);
+      this.nodeRankLabelLabel.Location = new System.Drawing.Point(81, 20);
       this.nodeRankLabelLabel.Name = "nodeRankLabelLabel";
       this.nodeRankLabelLabel.Size = new System.Drawing.Size(36, 13);
@@ -192,4 +213,6 @@
     private System.Windows.Forms.Button navigateRightButton;
     private System.Windows.Forms.Button navigateLeftButton;
+    private System.Windows.Forms.Label nodeWeightLabelLabel;
+    private System.Windows.Forms.Label nodeWeightLabel;
   }
 }
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.cs	(revision 12207)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic.Views/3.4/Tracking/SymbolicDataAnalysisGenealogyGraphView.cs	(revision 12208)
@@ -92,4 +92,5 @@
       nodeRankLabel.Text = String.Format("{0:0.0}", graphNode.Rank);
       nodeDegreeLabel.Text = String.Format("{0} / {1}", graphNode.InDegree, graphNode.OutDegree);
+      nodeWeightLabel.Text = String.Format("{0:0.00}", graphNode.Weight);
 
       if (openNew_CheckBox.Checked) {
@@ -143,5 +144,22 @@
               genealogyGraphChart.UpdateEnabled = true;
               genealogyGraphChart.EnforceUpdate();
-              MainFormManager.MainForm.ShowContent(traceGraph); // display the fragment graph on the screen
+              if (openNew_CheckBox.Checked)
+                MainFormManager.MainForm.ShowContent(traceGraph); // display the fragment graph on the screen
+
+              var max = traceGraph.Vertices.Max(x => x.Weight);
+
+              genealogyGraphChart.UpdateEnabled = false;
+              foreach (var traceNode in traceGraph.Vertices) {
+                var g = Content.GetByContent(traceNode.Data);
+                g.Weight = traceNode.Weight;
+                var v = genealogyGraphChart.GetMappedNode(g);
+                if (v != null) {
+                  int i = (int)Math.Round(g.Weight * (ColorGradient.Colors.Count - 1) / max);
+
+                  v.Brush = new SolidBrush(ColorGradient.Colors[i]);
+                }
+              }
+              genealogyGraphChart.UpdateEnabled = true;
+              genealogyGraphChart.EnforceUpdate();
             }
           } else {
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj	(revision 12207)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj	(revision 12208)
@@ -47,4 +47,5 @@
     <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
     <Prefer32Bit>false</Prefer32Bit>
+    <UseVSHostingProcess>false</UseVSHostingProcess>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionPruningOperator.cs
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionPruningOperator.cs	(revision 12207)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionPruningOperator.cs	(revision 12208)
@@ -109,5 +109,5 @@
       : base(original, cloner) { }
 
-    protected SymbolicDataAnalysisExpressionPruningOperator() {
+    protected SymbolicDataAnalysisExpressionPruningOperator(ISymbolicDataAnalysisSolutionImpactValuesCalculator impactValuesCalculator) {
       #region add parameters
       Parameters.Add(new LookupParameter<IDataAnalysisProblemData>(ProblemDataParameterName));
@@ -122,13 +122,14 @@
       Parameters.Add(new LookupParameter<ISymbolicExpressionTree>(SymbolicExpressionTreeParameterName));
       Parameters.Add(new LookupParameter<DoubleValue>(QualityParameterName));
+      Parameters.Add(new ValueParameter<ISymbolicDataAnalysisSolutionImpactValuesCalculator>(ImpactValuesCalculatorParameterName, impactValuesCalculator));
       #endregion
     }
 
-    protected abstract ISymbolicDataAnalysisModel CreateModel();
+    protected abstract ISymbolicDataAnalysisModel CreateModel(ISymbolicExpressionTree tree, ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, IDataAnalysisProblemData problemData, DoubleLimit estimationLimits);
 
     protected abstract double Evaluate(IDataAnalysisModel model);
 
     public override IOperation Apply() {
-      var model = CreateModel();
+      var model = CreateModel(SymbolicExpressionTree, Interpreter, ProblemData, EstimationLimits);
       var nodes = SymbolicExpressionTree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPrefix().ToList();
       var rows = Enumerable.Range(FitnessCalculationPartition.Start, FitnessCalculationPartition.Size);
@@ -169,5 +170,36 @@
     }
 
-    private static void ReplaceWithConstant(ISymbolicExpressionTreeNode original, ISymbolicExpressionTreeNode replacement) {
+    public ISymbolicExpressionTree Prune(ISymbolicExpressionTree tree, ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, IDataAnalysisProblemData problemData, DoubleLimit estimationLimits) {
+      var model = CreateModel((ISymbolicExpressionTree)tree.Clone(), Interpreter, ProblemData, EstimationLimits);
+      var nodes = SymbolicExpressionTree.Root.GetSubtree(0).GetSubtree(0).IterateNodesPrefix().ToList();
+      var rows = Enumerable.Range(FitnessCalculationPartition.Start, FitnessCalculationPartition.Size);
+
+      double quality = Evaluate(model);
+
+      for (int i = 0; i < nodes.Count; ++i) {
+        var node = nodes[i];
+        if (node is ConstantTreeNode) continue;
+
+        double impactValue, replacementValue;
+        ImpactValuesCalculator.CalculateImpactAndReplacementValues(model, node, ProblemData, rows, out impactValue, out replacementValue, quality);
+
+        if (PruneOnlyZeroImpactNodes) {
+          if (!impactValue.IsAlmost(0.0)) continue;
+        } else if (NodeImpactThreshold < impactValue) {
+          continue;
+        }
+
+        var constantNode = (ConstantTreeNode)node.Grammar.GetSymbol("Constant").CreateTreeNode();
+        constantNode.Value = replacementValue;
+
+        ReplaceWithConstant(node, constantNode);
+        i += node.GetLength() - 1; // skip subtrees under the node that was folded
+
+        quality -= impactValue;
+      }
+      return model.SymbolicExpressionTree;
+    }
+
+    protected static void ReplaceWithConstant(ISymbolicExpressionTreeNode original, ISymbolicExpressionTreeNode replacement) {
       var parent = original.Parent;
       var i = parent.IndexOfSubtree(original);
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj	(revision 12207)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.TravelingSalesman.Views/3.3/HeuristicLab.Problems.TravelingSalesman.Views-3.3.csproj	(revision 12208)
@@ -47,4 +47,5 @@
     <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
     <Prefer32Bit>false</Prefer32Bit>
+    <UseVSHostingProcess>false</UseVSHostingProcess>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
Index: /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj
===================================================================
--- /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj	(revision 12207)
+++ /branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.TravelingSalesman/3.3/HeuristicLab.Problems.TravelingSalesman-3.3.csproj	(revision 12208)
@@ -49,4 +49,5 @@
     <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
     <Prefer32Bit>false</Prefer32Bit>
+    <UseVSHostingProcess>false</UseVSHostingProcess>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
