Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/05/11 08:22:36 (13 years ago)
Author:
gkronber
Message:

#1081 implemented multi-variate symbolic expression tree interpreter for time series prognosis.

Location:
branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4
Files:
1 deleted
11 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis-3.4.csproj

    r7100 r7120  
    111111  <ItemGroup>
    112112    <Compile Include="Interfaces\ISymbolicTimeSeriesPrognosisInterpreterOperator.cs" />
    113     <Compile Include="Interfaces\ISymbolicTimeSeriesPrognogisInterpreter.cs" />
    114113    <Compile Include="Interfaces\ISymbolicTimeSeriesPrognosisEvaluator.cs" />
    115114    <Compile Include="Interfaces\ISymbolicTimeSeriesPrognosisModel.cs" />
     
    122121    <Compile Include="SingleObjective\SymbolicTimeSeriesPrognosisSingleObjectiveProblem.cs" />
    123122    <Compile Include="SingleObjective\SymbolicTimeSeriesPrognosisSingleObjectiveTrainingBestSolutionAnalyzer.cs" />
    124     <Compile Include="SymbolicTimeSeriesPrognosisInterpreter.cs" />
    125123    <Compile Include="SymbolicTimeSeriesPrognosisModel.cs" />
    126124    <Compile Include="SymbolicTimeSeriesPrognosisSolution.cs" />
     
    139137      <Name>HeuristicLab.Collections-3.3</Name>
    140138    </ProjectReference>
     139    <ProjectReference Include="..\..\HeuristicLab.Common.Resources\3.3\HeuristicLab.Common.Resources-3.3.csproj">
     140      <Project>{0E27A536-1C4A-4624-A65E-DC4F4F23E3E1}</Project>
     141      <Name>HeuristicLab.Common.Resources-3.3</Name>
     142    </ProjectReference>
    141143    <ProjectReference Include="..\..\HeuristicLab.Common\3.3\HeuristicLab.Common-3.3.csproj">
    142144      <Project>{A9AD58B9-3EF9-4CC1-97E5-8D909039FF5C}</Project>
     
    182184      <Project>{DF87C13E-A889-46FF-8153-66DCAA8C5674}</Project>
    183185      <Name>HeuristicLab.Problems.DataAnalysis-3.4</Name>
     186    </ProjectReference>
     187    <ProjectReference Include="..\..\HeuristicLab.Random\3.3\HeuristicLab.Random-3.3.csproj">
     188      <Project>{F4539FB6-4708-40C9-BE64-0A1390AEA197}</Project>
     189      <Name>HeuristicLab.Random-3.3</Name>
    184190    </ProjectReference>
    185191  </ItemGroup>
  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/Interfaces/ISymbolicTimeSeriesPrognosisEvaluator.cs

    r6802 r7120  
    2020#endregion
    2121
     22using HeuristicLab.Core;
     23using HeuristicLab.Data;
    2224
    2325namespace HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis {
    2426  public interface ISymbolicTimeSeriesPrognosisEvaluator : ISymbolicDataAnalysisEvaluator<ITimeSeriesPrognosisProblemData> {
     27    IValueLookupParameter<IntValue> HorizonParameter { get; }
    2528  }
    2629}
  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/Interfaces/ISymbolicTimeSeriesPrognosisInterpreterOperator.cs

    r7100 r7120  
    2424namespace HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis {
    2525  public interface ISymbolicTimeSeriesPrognosisInterpreterOperator : IOperator {
    26     ILookupParameter<ISymbolicTimeSeriesPrognosisInterpreter> SymbolicTimeSeriesPrognosisInterpreterParameter { get; }
     26    ILookupParameter<ISymbolicTimeSeriesPrognosisExpressionTreeInterpreter> SymbolicTimeSeriesPrognosisInterpreterParameter { get; }
    2727  }
    2828}
  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/Interfaces/ISymbolicTimeSeriesPrognosisModel.cs

    r6802 r7120  
    2222using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    2323namespace HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis {
    24   public interface ISymbolicTimeSeriesPrognosisModel : ITimeSeriesPrognosisModel, ISymbolicDataAnalysisModel {
     24  public interface ISymbolicTimeSeriesPrognosisModel : ITimeSeriesPrognosisModel {
     25    ISymbolicExpressionTree SymbolicExpressionTree { get; }
     26    ISymbolicTimeSeriesPrognosisExpressionTreeInterpreter Interpreter { get; }
    2527  }
    2628}
  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SingleObjective/SymbolicTimeSeriesPrognosisSingleObjectiveEvaluator.cs

    r6802 r7120  
    2222
    2323using HeuristicLab.Common;
     24using HeuristicLab.Core;
     25using HeuristicLab.Data;
     26using HeuristicLab.Parameters;
    2427using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2528namespace HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis {
    2629  public abstract class SymbolicTimeSeriesPrognosisSingleObjectiveEvaluator : SymbolicDataAnalysisSingleObjectiveEvaluator<ITimeSeriesPrognosisProblemData>, ISymbolicTimeSeriesPrognosisSingleObjectiveEvaluator {
     30    private const string HorizonParameterName = "Horizon";
     31
     32    public IValueLookupParameter<IntValue> HorizonParameter {
     33      get { return (IValueLookupParameter<IntValue>)Parameters[HorizonParameterName]; }
     34    }
     35
    2736    [StorableConstructor]
    2837    protected SymbolicTimeSeriesPrognosisSingleObjectiveEvaluator(bool deserializing) : base(deserializing) { }
     
    3140    }
    3241
    33     protected SymbolicTimeSeriesPrognosisSingleObjectiveEvaluator() : base() { }
     42    protected SymbolicTimeSeriesPrognosisSingleObjectiveEvaluator()
     43      : base() {
     44      Parameters.Add(new ValueLookupParameter<IntValue>(HorizonParameterName, "The time interval for which the prognosis should be calculated.", new IntValue(1)));
     45    }
    3446  }
    3547}
  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SingleObjective/SymbolicTimeSeriesPrognosisSingleObjectiveMeanSquaredErrorEvaluator.cs

    r7100 r7120  
    2020#endregion
    2121
     22using System;
    2223using System.Collections.Generic;
     24using System.Linq;
    2325using HeuristicLab.Common;
    2426using HeuristicLab.Core;
     
    4850      IEnumerable<int> rows = GenerateRowsToEvaluate();
    4951
    50       double quality = Calculate(SymbolicTimeSeriesPrognosisInterpreterParameter.ActualValue, solution, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, ProblemDataParameter.ActualValue, rows);
     52      double quality = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue,
     53        solution,
     54        EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper,
     55        ProblemDataParameter.ActualValue,
     56        rows, HorizonParameter.ActualValue.Value);
    5157      QualityParameter.ActualValue = new DoubleValue(quality);
    5258
     
    5460    }
    5561
    56     public static double Calculate(ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, ITimeSeriesPrognosisProblemData problemData, IEnumerable<int> rows) {
    57       IEnumerable<double> estimatedValues = interpreter.GetSymbolicExpressionTreeValues(solution, problemData.Dataset, rows);
    58       OnlineMeanAndVarianceCalculator meanCalculator = new OnlineMeanAndVarianceCalculator();
     62    public static double Calculate(ISymbolicTimeSeriesPrognosisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, ITimeSeriesPrognosisProblemData problemData, IEnumerable<int> rows, int horizon) {
     63      var allPredictedContinuations = interpreter.GetSymbolicExpressionTreeValues(solution, problemData.Dataset, problemData.TargetVariables.ToArray(), rows, horizon);
     64      var meanCalculator = new OnlineMeanAndVarianceCalculator();
     65      var allPredictedContinuationsEnumerator = allPredictedContinuations.GetEnumerator();
    5966      foreach (var targetVariable in problemData.TargetVariables) {
    60         IEnumerable<double> originalValues = problemData.Dataset.GetDoubleValues(targetVariable, rows);
    61         IEnumerable<double> boundedEstimationValues = estimatedValues.LimitToRange(lowerEstimationLimit,
    62                                                                                    upperEstimationLimit);
    63         OnlineCalculatorError errorState;
    64         meanCalculator.Add(OnlineMeanSquaredErrorCalculator.Calculate(originalValues, boundedEstimationValues, out errorState));
    65         if (errorState != OnlineCalculatorError.None) return double.NaN;
     67        if (!allPredictedContinuationsEnumerator.MoveNext()) throw new InvalidOperationException();
     68        var actualContinuations = from r in rows
     69                                  select problemData.Dataset.GetDoubleValues(targetVariable, Enumerable.Range(r, horizon));
     70        var actualContinuationsEnumerator = actualContinuations.GetEnumerator();
     71        var predictedContinuationsEnumerator = allPredictedContinuationsEnumerator.Current.GetEnumerator();
     72        while (actualContinuationsEnumerator.MoveNext() & predictedContinuationsEnumerator.MoveNext()) {
     73          OnlineCalculatorError errorState;
     74          meanCalculator.Add(OnlineMeanSquaredErrorCalculator.Calculate(predictedContinuationsEnumerator.Current.LimitToRange(lowerEstimationLimit, upperEstimationLimit),
     75                                                                        actualContinuationsEnumerator.Current, out errorState));
     76          if (errorState != OnlineCalculatorError.None) return double.NaN;
     77        }
    6678      }
    6779      return meanCalculator.Mean;
     
    6981
    7082    public override double Evaluate(IExecutionContext context, ISymbolicExpressionTree tree, ITimeSeriesPrognosisProblemData problemData, IEnumerable<int> rows) {
    71       SymbolicTimeSeriesPrognosisInterpreterParameter.ExecutionContext = context;
     83      SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = context;
    7284      EstimationLimitsParameter.ExecutionContext = context;
     85      HorizonParameter.ExecutionContext = context;
    7386
    74       double mse = Calculate(SymbolicTimeSeriesPrognosisInterpreterParameter.ActualValue, tree, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, problemData, rows);
     87      double mse = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, tree, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, problemData, rows, HorizonParameter.ActualValue.Value);
    7588
    76 
    77       SymbolicTimeSeriesPrognosisInterpreterParameter.ExecutionContext = null;
     89      HorizonParameter.ExecutionContext = null;
     90      SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = null;
    7891      EstimationLimitsParameter.ExecutionContext = null;
    7992
  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SingleObjective/SymbolicTimeSeriesPrognosisSingleObjectivePearsonRSquaredEvaluator.cs

    r7100 r7120  
    2020#endregion
    2121
     22using System;
    2223using System.Collections.Generic;
     24using System.Linq;
    2325using HeuristicLab.Common;
    2426using HeuristicLab.Core;
     
    4850      IEnumerable<int> rows = GenerateRowsToEvaluate();
    4951
    50       double quality = Calculate(SymbolicTimeSeriesPrognosisInterpreterParameter.ActualValue, solution, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, ProblemDataParameter.ActualValue, rows);
     52      double quality = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, solution,
     53        EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper,
     54        ProblemDataParameter.ActualValue,
     55        rows, HorizonParameter.ActualValue.Value);
    5156      QualityParameter.ActualValue = new DoubleValue(quality);
    5257
     
    5459    }
    5560
    56     public static double Calculate(ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, ITimeSeriesPrognosisProblemData problemData, IEnumerable<int> rows) {
    57       IEnumerable<double> estimatedValues = interpreter.GetSymbolicExpressionTreeValues(solution, problemData.Dataset, rows);
     61    public static double Calculate(ISymbolicTimeSeriesPrognosisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, ITimeSeriesPrognosisProblemData problemData, IEnumerable<int> rows, int horizon) {
     62      var allPredictedContinuations =
     63        interpreter.GetSymbolicExpressionTreeValues(solution, problemData.Dataset, problemData.TargetVariables.ToArray(),
     64                                                    rows, horizon).ToArray();
     65
    5866      var meanCalculator = new OnlineMeanAndVarianceCalculator();
     67      int i = 0;
    5968      foreach (var targetVariable in problemData.TargetVariables) {
    60         IEnumerable<double> originalValues = problemData.Dataset.GetDoubleValues(targetVariable, rows);
     69        var actualContinuations = from r in rows
     70                                  select problemData.Dataset.GetDoubleValues(targetVariable, Enumerable.Range(r, horizon));
     71        var startValues = problemData.Dataset.GetDoubleValues(targetVariable, rows.Select(r => r - 1));
    6172        OnlineCalculatorError errorState;
    62         meanCalculator.Add(OnlinePearsonsRSquaredCalculator.Calculate(estimatedValues, originalValues, out errorState));
    63         if (errorState != OnlineCalculatorError.None) return 0.0;
     73        meanCalculator.Add(OnlineTheilsUStatisticCalculator.Calculate(
     74          startValues,
     75          allPredictedContinuations.Select(v => v.ElementAt(i)),
     76          actualContinuations, out errorState));
     77        if (errorState != OnlineCalculatorError.None) return double.NaN;
     78        i++;
    6479      }
    6580      return meanCalculator.Mean;
     
    6782
    6883    public override double Evaluate(IExecutionContext context, ISymbolicExpressionTree tree, ITimeSeriesPrognosisProblemData problemData, IEnumerable<int> rows) {
    69       SymbolicTimeSeriesPrognosisInterpreterParameter.ExecutionContext = context;
     84      SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = context;
    7085      EstimationLimitsParameter.ExecutionContext = context;
     86      HorizonParameter.ExecutionContext = context;
    7187
    72       double r2 = Calculate(SymbolicTimeSeriesPrognosisInterpreterParameter.ActualValue, tree, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, problemData, rows);
     88      double r2 = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, tree, EstimationLimitsParameter.ActualValue.Lower, EstimationLimitsParameter.ActualValue.Upper, problemData, rows, HorizonParameter.ActualValue.Value);
    7389
    74       SymbolicTimeSeriesPrognosisInterpreterParameter.ExecutionContext = null;
     90      HorizonParameter.ExecutionContext = null;
     91      SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = null;
    7592      EstimationLimitsParameter.ExecutionContext = null;
    7693
  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SingleObjective/SymbolicTimeSeriesPrognosisSingleObjectiveProblem.cs

    r7100 r7120  
    3131  [Creatable("Problems")]
    3232  public class SymbolicTimeSeriesPrognosisSingleObjectiveProblem : SymbolicDataAnalysisSingleObjectiveProblem<ITimeSeriesPrognosisProblemData, ISymbolicTimeSeriesPrognosisSingleObjectiveEvaluator, ISymbolicDataAnalysisSolutionCreator>, ITimeSeriesPrognosisProblem {
    33     private const double PunishmentFactor = 10;
    3433    private const int InitialMaximumTreeDepth = 8;
    3534    private const int InitialMaximumTreeLength = 25;
  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SingleObjective/SymbolicTimeSeriesPrognosisSingleObjectiveTrainingBestSolutionAnalyzer.cs

    r7100 r7120  
    2020#endregion
    2121
     22using System.Linq;
    2223using HeuristicLab.Common;
    2324using HeuristicLab.Core;
     
    3435  [StorableClass]
    3536  public sealed class SymbolicTimeSeriesPrognosisSingleObjectiveTrainingBestSolutionAnalyzer : SymbolicDataAnalysisSingleObjectiveTrainingBestSolutionAnalyzer<ISymbolicTimeSeriesPrognosisSolution>,
    36   ISymbolicTimeSeriesPrognosisInterpreterOperator, ISymbolicDataAnalysisBoundedOperator {
     37  ISymbolicDataAnalysisInterpreterOperator, ISymbolicDataAnalysisBoundedOperator {
    3738    private const string ProblemDataParameterName = "ProblemData";
    38     private const string SymbolicTimeSeriesPrognosisInterpreterParameterName = "SymbolicTimeSeriesPrognosisInterpreter";
     39    private const string SymbolicDataAnalysisTreeInterpreterParameterName = "SymbolicDataAnalysisTreeInterpreter";
    3940    private const string EstimationLimitsParameterName = "EstimationLimits";
    4041    private const string ApplyLinearScalingParameterName = "ApplyLinearScaling";
     
    4344      get { return (ILookupParameter<ITimeSeriesPrognosisProblemData>)Parameters[ProblemDataParameterName]; }
    4445    }
    45     public ILookupParameter<ISymbolicTimeSeriesPrognosisInterpreter> SymbolicTimeSeriesPrognosisInterpreterParameter {
    46       get { return (ILookupParameter<ISymbolicTimeSeriesPrognosisInterpreter>)Parameters[SymbolicTimeSeriesPrognosisInterpreterParameterName]; }
     46    public ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter> SymbolicDataAnalysisTreeInterpreterParameter {
     47      get { return (ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>)Parameters[SymbolicDataAnalysisTreeInterpreterParameterName]; }
    4748    }
    4849    public IValueLookupParameter<DoubleLimit> EstimationLimitsParameter {
     
    6667      : base() {
    6768      Parameters.Add(new LookupParameter<ITimeSeriesPrognosisProblemData>(ProblemDataParameterName, "The problem data for the symbolic regression solution."));
    68       Parameters.Add(new LookupParameter<ISymbolicTimeSeriesPrognosisInterpreter>(SymbolicTimeSeriesPrognosisInterpreterParameterName, "The symbolic time series prognosis interpreter for the symbolic expression tree."));
     69      Parameters.Add(new LookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>(SymbolicDataAnalysisTreeInterpreterParameterName, "The symbolic time series prognosis interpreter for the symbolic expression tree."));
    6970      Parameters.Add(new ValueLookupParameter<DoubleLimit>(EstimationLimitsParameterName, "The lower and upper limit for the estimated values produced by the symbolic regression model."));
    7071      Parameters.Add(new ValueParameter<BoolValue>(ApplyLinearScalingParameterName, "Flag that indicates if the produced symbolic regression solution should be linearly scaled.", new BoolValue(true)));
     
    7576
    7677    protected override ISymbolicTimeSeriesPrognosisSolution CreateSolution(ISymbolicExpressionTree bestTree, double bestQuality) {
    77       var model = new SymbolicTimeSeriesPrognosisModel((ISymbolicExpressionTree)bestTree.Clone(), SymbolicTimeSeriesPrognosisInterpreterParameter.ActualValue);
     78      var model = new SymbolicTimeSeriesPrognosisModel((ISymbolicExpressionTree)bestTree.Clone(), SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, ProblemDataParameter.ActualValue.TargetVariables.ToArray());
    7879      if (ApplyLinearScaling.Value)
    7980        SymbolicTimeSeriesPrognosisModel.Scale(model, ProblemDataParameter.ActualValue);
  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SymbolicTimeSeriesPrognosisInterpreter.cs

    r7100 r7120  
    3333  [StorableClass]
    3434  [Item("SymbolicTimeSeriesPrognosisInterpreter", "Interpreter for symbolic expression trees including automatically defined functions.")]
    35   public sealed class SymbolicTimeSeriesPrognosisInterpreter : ParameterizedNamedItem, ISymbolicTimeSeriesPrognosisInterpreter {
     35  public sealed class SymbolicTimeSeriesPrognosisInterpreter : ParameterizedNamedItem, ISymbolicTimeSeriesPrognosisExpressionTreeInterpreter {
    3636    private const string CheckExpressionsWithIntervalArithmeticParameterName = "CheckExpressionsWithIntervalArithmetic";
    3737    #region private classes
  • branches/HeuristicLab.TimeSeries/HeuristicLab.Problems.DataAnalysis.Symbolic.TimeSeriesPrognosis/3.4/SymbolicTimeSeriesPrognosisModel.cs

    r7100 r7120  
    2121
    2222using System.Collections.Generic;
     23using System.Drawing;
    2324using System.Linq;
    2425using HeuristicLab.Common;
     
    3334  [StorableClass]
    3435  [Item(Name = "Symbolic Time-Series Prognosis Model", Description = "Represents a symbolic time series prognosis model.")]
    35   public class SymbolicTimeSeriesPrognosisModel : SymbolicDataAnalysisModel, ISymbolicTimeSeriesPrognosisModel {
    36     public new ISymbolicTimeSeriesPrognosisInterpreter Interpreter {
    37       get { return (ISymbolicTimeSeriesPrognosisInterpreter)base.Interpreter; }
     36  public class SymbolicTimeSeriesPrognosisModel : NamedItem, ISymbolicTimeSeriesPrognosisModel {
     37    public override Image ItemImage {
     38      get { return HeuristicLab.Common.Resources.VSImageLibrary.Function; }
    3839    }
     40
     41    #region properties
     42
     43    [Storable]
     44    private ISymbolicExpressionTree symbolicExpressionTree;
     45    public ISymbolicExpressionTree SymbolicExpressionTree {
     46      get { return symbolicExpressionTree; }
     47    }
     48
     49    [Storable]
     50    private ISymbolicTimeSeriesPrognosisExpressionTreeInterpreter interpreter;
     51    public ISymbolicTimeSeriesPrognosisExpressionTreeInterpreter Interpreter {
     52      get { return interpreter; }
     53    }
     54
     55    #endregion
     56
     57    [Storable]
     58    private string[] targetVariables;
     59
    3960
    4061    [StorableConstructor]
     
    4263    protected SymbolicTimeSeriesPrognosisModel(SymbolicTimeSeriesPrognosisModel original, Cloner cloner)
    4364      : base(original, cloner) {
     65      this.symbolicExpressionTree = cloner.Clone(original.symbolicExpressionTree);
     66      this.interpreter = cloner.Clone(original.interpreter);
    4467    }
    45     public SymbolicTimeSeriesPrognosisModel(ISymbolicExpressionTree tree, ISymbolicTimeSeriesPrognosisInterpreter interpreter)
    46       : base(tree, interpreter) {
     68    public SymbolicTimeSeriesPrognosisModel(ISymbolicExpressionTree tree, ISymbolicTimeSeriesPrognosisExpressionTreeInterpreter interpreter, IEnumerable<string> targetVariables)
     69      : base() {
     70      this.name = ItemName;
     71      this.description = ItemDescription;
     72      this.symbolicExpressionTree = tree;
     73      this.interpreter = interpreter; this.targetVariables = targetVariables.ToArray();
    4774    }
    4875
     
    5279
    5380    public IEnumerable<IEnumerable<IEnumerable<double>>> GetPrognosedValues(Dataset dataset, IEnumerable<int> rows, int horizon) {
    54       return Interpreter.GetSymbolicExpressionTreeValues(SymbolicExpressionTree, dataset, rows, horizon);
     81      return Interpreter.GetSymbolicExpressionTreeValues(SymbolicExpressionTree, dataset, targetVariables, rows, horizon);
    5582    }
    5683
     
    6895      int i = 0;
    6996      int horizon = 1;
    70       var estimatedValues = model.Interpreter.GetSymbolicExpressionTreeValues(model.SymbolicExpressionTree, dataset, rows, horizon)
     97      var estimatedValues = model.Interpreter.GetSymbolicExpressionTreeValues(model.SymbolicExpressionTree, dataset, problemData.TargetVariables.ToArray(), rows, horizon)
    7198        .ToArray();
    7299      foreach (var targetVariable in targetVariables) {
Note: See TracChangeset for help on using the changeset viewer.