Index: /branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj
===================================================================
--- /branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj	(revision 18083)
+++ /branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression-3.4.csproj	(revision 18084)
@@ -258,4 +258,8 @@
       <Private>False</Private>
     </ProjectReference>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.Instances.DataAnalysis\3.3\HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj">
+      <Project>{94C7714E-29D4-4D6D-B213-2C18D627AB75}</Project>
+      <Name>HeuristicLab.Problems.Instances.DataAnalysis-3.3</Name>
+    </ProjectReference>
     <ProjectReference Include="..\..\HeuristicLab.Problems.Instances\3.3\HeuristicLab.Problems.Instances-3.3.csproj">
       <Project>{3540E29E-4793-49E7-8EE2-FEA7F61C3994}</Project>
Index: /branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/StructuredSymbolicRegressionSingleObjectiveProblem.cs
===================================================================
--- /branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/StructuredSymbolicRegressionSingleObjectiveProblem.cs	(revision 18083)
+++ /branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/StructuredSymbolicRegressionSingleObjectiveProblem.cs	(revision 18084)
@@ -13,4 +13,6 @@
 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
 using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Problems.Instances.DataAnalysis.Regression.Asadzadeh;
+using HeuristicLab.Problems.Instances.DataAnalysis;
 
 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Regression {
@@ -74,6 +76,11 @@
     #region Constructors & Cloning
     public StructuredSymbolicRegressionSingleObjectiveProblem() {
-      var problemData = new ShapeConstrainedRegressionProblemData();
-      var targetInterval = problemData.VariableRanges.GetInterval(problemData.TargetVariable);
+      var provider = new AsadzadehProvider();
+      var descriptor = new Asadzadeh1();
+      var problemData = provider.LoadData(descriptor);
+      var shapeConstraintProblemData = new ShapeConstrainedRegressionProblemData(problemData);
+
+
+      var targetInterval = shapeConstraintProblemData.VariableRanges.GetInterval(shapeConstraintProblemData.TargetVariable);
       var estimationWidth = targetInterval.Width * 10;
 
@@ -93,5 +100,5 @@
       Parameters.Add(new ValueParameter<IRegressionProblemData>(
         ProblemDataParameterName,
-        problemData));
+        shapeConstraintProblemData));
       ProblemDataParameter.ValueChanged += ProblemDataParameterValueChanged;
 
@@ -119,8 +126,12 @@
       Operators.Add(new SymbolicDataAnalysisVariableFrequencyAnalyzer());
       Operators.Add(new MinAverageMaxSymbolicExpressionTreeLengthAnalyzer());
-      //TODO change to value lookup
-      //Operators.Add(new SymbolicExpressionTreeLengthAnalyzer());
       Operators.Add(new SymbolicExpressionSymbolFrequencyAnalyzer());
 
+      StructureTemplate.Template = 
+        "(" +
+          "(210000 / (210000 + h)) * ((sigma_y * t * t) / (wR * Rt * t)) + " +
+          "PlasticHardening(_) - Elasticity(_)" +
+        ")" +
+        " * C(_)";
     }
 
Index: /branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/DerivativeCalculator.cs
===================================================================
--- /branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/DerivativeCalculator.cs	(revision 18083)
+++ /branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/DerivativeCalculator.cs	(revision 18084)
@@ -197,4 +197,7 @@
         var tanh = (ISymbolicExpressionTreeNode)branch.Clone();
         return Product(fxp, Subtract(CreateConstant(1.0), Square(tanh)));
+      }
+      if (branch.Symbol is SubFunctionSymbol) {
+        return Derive(branch.GetSubtree(0), variableName);
       }
       throw new NotSupportedException(string.Format("Symbol {0} is not supported.", branch.Symbol));
@@ -282,5 +285,6 @@
           !(n.Symbol is Cosine) &&
           !(n.Symbol is Tangent) &&
-          !(n.Symbol is StartSymbol)
+          !(n.Symbol is StartSymbol) &&
+          !(n.Symbol is SubFunctionSymbol)
         select n).Any();
       return !containsUnknownSymbol;
Index: /branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/IntervalArithBoundsEstimator.cs
===================================================================
--- /branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/IntervalArithBoundsEstimator.cs	(revision 18083)
+++ /branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/IntervalArithBoundsEstimator.cs	(revision 18084)
@@ -247,4 +247,8 @@
 
             break;
+          }
+        case OpCodes.SubFunction: {
+            result = Evaluate(instructions, ref instructionCounter, nodeIntervals, variableIntervals);
+          break;
           }
         default:
@@ -342,5 +346,6 @@
           !(n.Symbol is Power) &&
           !(n.Symbol is Absolute) &&
-          !(n.Symbol is AnalyticQuotient)
+          !(n.Symbol is AnalyticQuotient) &&
+          !(n.Symbol is SubFunctionSymbol)
         select n).Any();
       return !containsUnknownSymbols;
Index: /branches/3136_Structural_GP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj
===================================================================
--- /branches/3136_Structural_GP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj	(revision 18083)
+++ /branches/3136_Structural_GP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/HeuristicLab.Problems.Instances.DataAnalysis-3.3.csproj	(revision 18084)
@@ -155,4 +155,6 @@
     <Compile Include="Regression\ArtificialRegressionDataDescriptor.cs" />
     <Compile Include="Regression\ArtificialRegressionInstanceProvider.cs" />
+    <Compile Include="Regression\Asadzadeh\Asadzadeh1.cs" />
+    <Compile Include="Regression\Asadzadeh\AsadzadehProvider.cs" />
     <Compile Include="Regression\CSV\RegressionCSVInstanceProvider.cs" />
     <Compile Include="Regression\FeatureSelection\FeatureSelectionRegressionProblemData.cs" />
Index: /branches/3136_Structural_GP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Asadzadeh/Asadzadeh1.cs
===================================================================
--- /branches/3136_Structural_GP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Asadzadeh/Asadzadeh1.cs	(revision 18084)
+++ /branches/3136_Structural_GP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Asadzadeh/Asadzadeh1.cs	(revision 18084)
@@ -0,0 +1,52 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using HeuristicLab.Random;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis {
+  public sealed class Asadzadeh1 : ArtificialRegressionDataDescriptor {
+    public override string Name => "Asadzadeh1";
+
+    public override string Description => "Asadzadeh1";
+
+    protected override string TargetVariable => "F";
+    protected override string[] VariableNames => new string[] { "h", "sigma_y", "t", "Rt", "wR", "F" };
+    protected override string[] AllowedInputVariables => new string[] { "h", "sigma_y", "t", "Rt", "wR" };
+
+    protected override int TrainingPartitionStart => 0;
+    protected override int TrainingPartitionEnd => 500;
+    protected override int TestPartitionStart => 500;
+    protected override int TestPartitionEnd => 1000;
+
+    protected override List<List<double>> GenerateValues() {
+      var rand = new MersenneTwister((uint)DateTime.Now.Ticks);
+
+      List<double> h = ValueGenerator.GenerateUniformDistributedValues(rand.Next(), TestPartitionEnd, 0.1, 5).ToList();
+      List<double> sigmaY = ValueGenerator.GenerateUniformDistributedValues(rand.Next(), TestPartitionEnd, 250, 1000).ToList();
+      List<double> t = ValueGenerator.GenerateUniformDistributedValues(rand.Next(), TestPartitionEnd, 0.5, 5).ToList();
+      List<double> Rt = ValueGenerator.GenerateUniformDistributedValues(rand.Next(), TestPartitionEnd, 1, 100).ToList();
+      List<double> wR = ValueGenerator.GenerateUniformDistributedValues(rand.Next(), TestPartitionEnd, 0.5, 1.5).ToList();
+      List<double> F = new List<double>();
+
+      for (int i = TrainingPartitionStart; i < TestPartitionEnd; ++i) {
+        F.Add(Calc(h[i], sigmaY[i], t[i], Rt[i], wR[i]));
+      }
+
+      return new List<List<double>> { h, sigmaY, t, Rt, wR, F };
+    }
+
+    private static double Calc(double h, double sigmaY, double t, double Rt, double wR) {
+      var E = 210000;
+      var R = Rt * t;
+      var w = wR * R;
+      var e = E / (E + h);
+      var yieldStrength = (sigmaY * (t * t)) / w;
+      var plasticHardening = (h * t * t * t) / (3 * R * w);
+      var elasticity = (4 * sigmaY * sigmaY * sigmaY * R * R) / (3 * w * E * E);
+      var C = 1 + 4 * (t / w);
+      return e * (yieldStrength + plasticHardening - elasticity) * C;
+    }
+  }
+}
Index: /branches/3136_Structural_GP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Asadzadeh/AsadzadehProvider.cs
===================================================================
--- /branches/3136_Structural_GP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Asadzadeh/AsadzadehProvider.cs	(revision 18084)
+++ /branches/3136_Structural_GP/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Asadzadeh/AsadzadehProvider.cs	(revision 18084)
@@ -0,0 +1,21 @@
+﻿using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HeuristicLab.Problems.Instances.DataAnalysis.Regression.Asadzadeh {
+  public class AsadzadehProvider : ArtificialRegressionInstanceProvider {
+    public override string Name => "Asadzadeh";
+
+    public override string Description => "Asadzadeh";
+
+    public override Uri WebLink => new Uri("https://www.google.com/");
+
+    public override string ReferencePublication => "";
+
+    public override IEnumerable<IDataDescriptor> GetDataDescriptors() {
+      return new IDataDescriptor[] { new Asadzadeh1() };
+    }
+  }
+}
