Index: branches/DynamicVehicleRouting/HeuristicLab.PDPSimulation/3.3/Operators/LinearPriorityDispatchingMetaOptEvaluator.cs
===================================================================
--- branches/DynamicVehicleRouting/HeuristicLab.PDPSimulation/3.3/Operators/LinearPriorityDispatchingMetaOptEvaluator.cs	(revision 8808)
+++ branches/DynamicVehicleRouting/HeuristicLab.PDPSimulation/3.3/Operators/LinearPriorityDispatchingMetaOptEvaluator.cs	(revision 8808)
@@ -0,0 +1,45 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Data;
+using HeuristicLab.Common;
+using System.Threading;
+using System.Threading.Tasks;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Encodings.RealVectorEncoding;
+using System.Diagnostics;
+
+namespace HeuristicLab.PDPSimulation.Operators {
+  [Item("LinearPriorityDispatchingMetaOptEvaluator", "Metaoptimization of the priority dispatching parameters for the PDP simulation.")]
+  [StorableClass]
+  public class LinearPriorityDispatchingMetaOptEvaluator : PriorityDispatchingMetaOptEvaluator {
+    public IValueLookupParameter<DoubleArray> VectorParameter {
+      get { return (IValueLookupParameter<DoubleArray>)Parameters["Vector"]; }
+    }
+
+    public LinearPriorityDispatchingMetaOptEvaluator() {
+      Parameters.Add(new ValueLookupParameter<DoubleArray>("Vector", "The priority dispatching parameters."));
+    }
+
+    [StorableConstructor]
+    protected LinearPriorityDispatchingMetaOptEvaluator(bool deserializing) : base(deserializing) { }
+    protected LinearPriorityDispatchingMetaOptEvaluator(LinearPriorityDispatchingMetaOptEvaluator original, Cloner cloner) : base(original, cloner) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new LinearPriorityDispatchingMetaOptEvaluator(this, cloner);
+    }
+
+    protected override void Parameterize(PriorityDispatching dispatching) {
+      DoubleArray vector = VectorParameter.ActualValue;
+
+      LinearPriorityDispatching linearDispatching = dispatching as LinearPriorityDispatching;
+      linearDispatching.WeightsParameter.Value = new RealVector(vector.ToArray());
+    }
+  }
+}
Index: branches/DynamicVehicleRouting/HeuristicLab.PDPSimulation/3.3/Operators/PriorityDispatchingMetaOptEvaluator.cs
===================================================================
--- branches/DynamicVehicleRouting/HeuristicLab.PDPSimulation/3.3/Operators/PriorityDispatchingMetaOptEvaluator.cs	(revision 8784)
+++ branches/DynamicVehicleRouting/HeuristicLab.PDPSimulation/3.3/Operators/PriorityDispatchingMetaOptEvaluator.cs	(revision 8808)
@@ -19,11 +19,7 @@
   [Item("PriorityDispatchingMetaOptEvaluator", "Metaoptimization of the priority dispatching parameters for the PDP simulation.")]
   [StorableClass]
-  public class PriorityDispatchingMetaOptEvaluator : SingleSuccessorOperator, ISingleObjectiveEvaluator {
+  public abstract class PriorityDispatchingMetaOptEvaluator : SingleSuccessorOperator, ISingleObjectiveEvaluator {
     public ILookupParameter<DoubleValue> QualityParameter {
       get { return (ILookupParameter<DoubleValue>)Parameters["Quality"]; }
-    }
-
-    public IValueLookupParameter<DoubleArray> VectorParameter {
-      get { return (IValueLookupParameter<DoubleArray>)Parameters["Vector"]; }
     }
 
@@ -38,5 +34,4 @@
     public PriorityDispatchingMetaOptEvaluator() {
       Parameters.Add(new LookupParameter<DoubleValue>("Quality", "Result of the evaluation of a solution."));
-      Parameters.Add(new ValueLookupParameter<DoubleArray>("Vector", "The priority dispatching parameters."));
       Parameters.Add(new ValueParameter<ItemList<PickupDeliverySimulation>>("Simulation", "The PDP simulation"));
       Parameters.Add(new ValueParameter<IntValue>("Repetitions", "The number of repetitions", new IntValue(1)));
@@ -47,7 +42,5 @@
     protected PriorityDispatchingMetaOptEvaluator(PriorityDispatchingMetaOptEvaluator original, Cloner cloner) : base(original, cloner) { }
 
-    public override IDeepCloneable Clone(Cloner cloner) {
-      return new PriorityDispatchingMetaOptEvaluator(this, cloner);
-    }
+    protected abstract void Parameterize(PriorityDispatching dispatching);
 
     public override IOperation Apply() {
@@ -56,6 +49,4 @@
       ItemList<PickupDeliverySimulation> simulations = SimulationParameter.Value;
       int repetitions = 0;
-
-      DoubleArray vector = VectorParameter.ActualValue;
 
       object locker = new object();
@@ -67,5 +58,5 @@
         PickupDeliverySimulation simulation = originalSimulation.Clone() as PickupDeliverySimulation;
         PriorityDispatching dispatching = simulation.OptimizationParameter.Value as PriorityDispatching;
-        dispatching.WeightsParameter.Value = new RealVector(vector.ToArray());
+        Parameterize(dispatching);
        
         EventWaitHandle waitHandle = new EventWaitHandle(false, EventResetMode.ManualReset);
Index: branches/DynamicVehicleRouting/HeuristicLab.PDPSimulation/3.3/Operators/TreePriorityDispatchingMetaOptEvaluator.cs
===================================================================
--- branches/DynamicVehicleRouting/HeuristicLab.PDPSimulation/3.3/Operators/TreePriorityDispatchingMetaOptEvaluator.cs	(revision 8808)
+++ branches/DynamicVehicleRouting/HeuristicLab.PDPSimulation/3.3/Operators/TreePriorityDispatchingMetaOptEvaluator.cs	(revision 8808)
@@ -0,0 +1,54 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Operators;
+using HeuristicLab.Optimization;
+using HeuristicLab.Parameters;
+using HeuristicLab.Data;
+using HeuristicLab.Common;
+using System.Threading;
+using System.Threading.Tasks;
+using HeuristicLab.Encodings.PermutationEncoding;
+using HeuristicLab.Encodings.RealVectorEncoding;
+using System.Diagnostics;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Problems.DataAnalysis.Symbolic;
+
+namespace HeuristicLab.PDPSimulation.Operators {
+  [Item("TreePriorityDispatchingMetaOptEvaluator", "Metaoptimization of the priority dispatching parameters for the PDP simulation.")]
+  [StorableClass]
+  public class TreePriorityDispatchingMetaOptEvaluator : PriorityDispatchingMetaOptEvaluator {
+    public IValueLookupParameter<ISymbolicExpressionTree> SymbolicExpressionTreeParameter {
+      get { return (IValueLookupParameter<ISymbolicExpressionTree>)Parameters["SymbolicExpressionTree"]; }
+    }
+
+    public IValueLookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter> SymbolicDataAnalysisTreeInterpreterParameter {
+      get { return (IValueLookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>)Parameters["SymbolicExpressionTreeInterpreter"]; }
+    }
+
+    public TreePriorityDispatchingMetaOptEvaluator() {
+      Parameters.Add(new ValueLookupParameter<ISymbolicExpressionTree>("SymbolicExpressionTree", "The symbolic data analysis solution encoded as a symbolic expression tree."));
+      Parameters.Add(new ValueLookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>("SymbolicExpressionTreeInterpreter", "The interpreter that should be used to calculate the output values of the symbolic data analysis tree.")); 
+    }
+
+    [StorableConstructor]
+    protected TreePriorityDispatchingMetaOptEvaluator(bool deserializing) : base(deserializing) { }
+    protected TreePriorityDispatchingMetaOptEvaluator(TreePriorityDispatchingMetaOptEvaluator original, Cloner cloner) : base(original, cloner) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new TreePriorityDispatchingMetaOptEvaluator(this, cloner);
+    }
+
+    protected override void Parameterize(PriorityDispatching dispatching) {
+      var tree = SymbolicExpressionTreeParameter.ActualValue;
+      var interpreter = SymbolicDataAnalysisTreeInterpreterParameter.ActualValue;
+
+      TreePriorityDispatching treeDispatching = dispatching as TreePriorityDispatching;
+      treeDispatching.SymbolicExpressionTreeParameter.Value = tree;
+      treeDispatching.SymbolicDataAnalysisTreeInterpreterParameter.Value = interpreter;
+    }
+  }
+}
