Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/25/13 17:04:27 (11 years ago)
Author:
bburlacu
Message:

#2021:

  • Derived the LinearInstruction class from Instruction.
  • Added missing symbols to the linear interpreter
  • Changed description for the linear interpreter
  • Added more helpful exception message when a symbol is not supported.
  • Added evaluation test for the linear interpreter
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.DataAnalysis.Symbolic.LinearInterpreter/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/SymbolicDataAnalysisExpressionTreeInterpreterTest.cs

    r9735 r9758  
    149149    [TestMethod]
    150150    public void SymbolicDataAnalysisExpressionTreeInterpreterEvaluateTest() {
     151      var interpreter = new SymbolicDataAnalysisExpressionTreeInterpreter();
    151152      Dataset ds = new Dataset(new string[] { "Y", "A", "B" }, new double[,] {
    152153        { 1.0, 1.0, 1.0 },
     
    164165      });
    165166
    166       var interpreter = new SymbolicDataAnalysisExpressionTreeInterpreter();
    167167      EvaluateTerminals(interpreter, ds);
    168168      EvaluateOperations(interpreter, ds);
     169      EvaluateTimeSymbols(interpreter, ds);
    169170      EvaluateAdf(interpreter, ds);
     171    }
     172
     173    [TestMethod]
     174    public void SymbolicDataAnalysisExpressionTreeLinearInterpreterEvaluateTest() {
     175      var interpreter = new SymbolicDataAnalysisExpressionTreeInterpreter();
     176      Dataset ds = new Dataset(new string[] { "Y", "A", "B" }, new double[,] {
     177        { 1.0, 1.0, 1.0 },
     178        { 2.0, 2.0, 2.0 },
     179        { 3.0, 1.0, 2.0 },
     180        { 4.0, 1.0, 1.0 },
     181        { 5.0, 2.0, 2.0 },
     182        { 6.0, 1.0, 2.0 },
     183        { 7.0, 1.0, 1.0 },
     184        { 8.0, 2.0, 2.0 },
     185        { 9.0, 1.0, 2.0 },
     186        { 10.0, 1.0, 1.0 },
     187        { 11.0, 2.0, 2.0 },
     188        { 12.0, 1.0, 2.0 }
     189      });
     190      //time symbols and ADFs not supported by the linear interpreter
     191      EvaluateTerminals(interpreter, ds);
     192      EvaluateOperations(interpreter, ds);
    170193    }
    171194
     
    190213      EvaluateTerminals(interpreter, ds);
    191214      EvaluateOperations(interpreter, ds);
     215    }
     216
     217    private void EvaluateTimeSymbols(ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, Dataset ds) {
     218      // integral
     219      Evaluate(interpreter, ds, "(integral -1.0 (variable 1.0 a)) ", 1, ds.GetDoubleValue("A", 0) + ds.GetDoubleValue("A", 1));
     220      Evaluate(interpreter, ds, "(integral -1.0 (lagVariable 1.0 a 1)) ", 1, ds.GetDoubleValue("A", 1) + ds.GetDoubleValue("A", 2));
     221      Evaluate(interpreter, ds, "(integral -2.0 (variable 1.0 a)) ", 2, ds.GetDoubleValue("A", 0) + ds.GetDoubleValue("A", 1) + ds.GetDoubleValue("A", 2));
     222      Evaluate(interpreter, ds, "(integral -1.0 (* (variable 1.0 a) (variable 1.0 b)))", 1, ds.GetDoubleValue("A", 0) * ds.GetDoubleValue("B", 0) + ds.GetDoubleValue("A", 1) * ds.GetDoubleValue("B", 1));
     223      Evaluate(interpreter, ds, "(integral -2.0 3.0)", 1, 9.0);
     224
     225      // derivative
     226      // (f_0 + 2 * f_1 - 2 * f_3 - f_4) / 8; // h = 1
     227      Evaluate(interpreter, ds, "(diff (variable 1.0 a)) ", 5, (ds.GetDoubleValue("A", 5) + 2 * ds.GetDoubleValue("A", 4) - 2 * ds.GetDoubleValue("A", 2) - ds.GetDoubleValue("A", 1)) / 8.0);
     228      Evaluate(interpreter, ds, "(diff (variable 1.0 b)) ", 5, (ds.GetDoubleValue("B", 5) + 2 * ds.GetDoubleValue("B", 4) - 2 * ds.GetDoubleValue("B", 2) - ds.GetDoubleValue("B", 1)) / 8.0);
     229      Evaluate(interpreter, ds, "(diff (* (variable 1.0 a) (variable 1.0 b)))", 5, +
     230        (ds.GetDoubleValue("A", 5) * ds.GetDoubleValue("B", 5) +
     231        2 * ds.GetDoubleValue("A", 4) * ds.GetDoubleValue("B", 4) -
     232        2 * ds.GetDoubleValue("A", 2) * ds.GetDoubleValue("B", 2) -
     233        ds.GetDoubleValue("A", 1) * ds.GetDoubleValue("B", 1)) / 8.0);
     234      Evaluate(interpreter, ds, "(diff -2.0 3.0)", 5, 0.0);
     235
     236      // timelag
     237      Evaluate(interpreter, ds, "(lag -1.0 (lagVariable 1.0 a 2)) ", 1, ds.GetDoubleValue("A", 2));
     238      Evaluate(interpreter, ds, "(lag -2.0 (lagVariable 1.0 a 2)) ", 2, ds.GetDoubleValue("A", 2));
     239      Evaluate(interpreter, ds, "(lag -1.0 (* (lagVariable 1.0 a 1) (lagVariable 1.0 b 2)))", 1, ds.GetDoubleValue("A", 1) * ds.GetDoubleValue("B", 2));
     240      Evaluate(interpreter, ds, "(lag -2.0 3.0)", 1, 3.0);
    192241    }
    193242
     
    358407      Evaluate(interpreter, ds, "(lagVariable 1.0 a 1) ", 0, ds.GetDoubleValue("A", 1));
    359408
    360       // integral
    361       Evaluate(interpreter, ds, "(integral -1.0 (variable 1.0 a)) ", 1, ds.GetDoubleValue("A", 0) + ds.GetDoubleValue("A", 1));
    362       Evaluate(interpreter, ds, "(integral -1.0 (lagVariable 1.0 a 1)) ", 1, ds.GetDoubleValue("A", 1) + ds.GetDoubleValue("A", 2));
    363       Evaluate(interpreter, ds, "(integral -2.0 (variable 1.0 a)) ", 2, ds.GetDoubleValue("A", 0) + ds.GetDoubleValue("A", 1) + ds.GetDoubleValue("A", 2));
    364       Evaluate(interpreter, ds, "(integral -1.0 (* (variable 1.0 a) (variable 1.0 b)))", 1, ds.GetDoubleValue("A", 0) * ds.GetDoubleValue("B", 0) + ds.GetDoubleValue("A", 1) * ds.GetDoubleValue("B", 1));
    365       Evaluate(interpreter, ds, "(integral -2.0 3.0)", 1, 9.0);
    366 
    367       // derivative
    368       // (f_0 + 2 * f_1 - 2 * f_3 - f_4) / 8; // h = 1
    369       Evaluate(interpreter, ds, "(diff (variable 1.0 a)) ", 5, (ds.GetDoubleValue("A", 5) + 2 * ds.GetDoubleValue("A", 4) - 2 * ds.GetDoubleValue("A", 2) - ds.GetDoubleValue("A", 1)) / 8.0);
    370       Evaluate(interpreter, ds, "(diff (variable 1.0 b)) ", 5, (ds.GetDoubleValue("B", 5) + 2 * ds.GetDoubleValue("B", 4) - 2 * ds.GetDoubleValue("B", 2) - ds.GetDoubleValue("B", 1)) / 8.0);
    371       Evaluate(interpreter, ds, "(diff (* (variable 1.0 a) (variable 1.0 b)))", 5, +
    372         (ds.GetDoubleValue("A", 5) * ds.GetDoubleValue("B", 5) +
    373         2 * ds.GetDoubleValue("A", 4) * ds.GetDoubleValue("B", 4) -
    374         2 * ds.GetDoubleValue("A", 2) * ds.GetDoubleValue("B", 2) -
    375         ds.GetDoubleValue("A", 1) * ds.GetDoubleValue("B", 1)) / 8.0);
    376       Evaluate(interpreter, ds, "(diff -2.0 3.0)", 5, 0.0);
    377 
    378       // timelag
    379       Evaluate(interpreter, ds, "(lag -1.0 (lagVariable 1.0 a 2)) ", 1, ds.GetDoubleValue("A", 2));
    380       Evaluate(interpreter, ds, "(lag -2.0 (lagVariable 1.0 a 2)) ", 2, ds.GetDoubleValue("A", 2));
    381       Evaluate(interpreter, ds, "(lag -1.0 (* (lagVariable 1.0 a 1) (lagVariable 1.0 b 2)))", 1, ds.GetDoubleValue("A", 1) * ds.GetDoubleValue("B", 2));
    382       Evaluate(interpreter, ds, "(lag -2.0 3.0)", 1, 3.0);
    383 
    384409      {
    385410        // special functions
     
    434459          Evaluate(interpreter, ds, "(expint " + x + ")", 0, alglib.exponentialintegralei(x));
    435460        };
    436 
    437 
    438461
    439462        foreach (var e in new[] { -2.0, -1.0, 0.0, 1.0, 2.0 }) {
Note: See TracChangeset for help on using the changeset viewer.