Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/09/19 11:13:11 (5 years ago)
Author:
gkronber
Message:

#2994: worked on ConstrainedNLS

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2994-AutoDiffForIntervals/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/IntervalEvaluatorAutoDiffTest.cs

    r17319 r17325  
    6161      var eval = new IntervalEvaluator();
    6262      var parser = new InfixExpressionParser();
     63      var intervals = new Dictionary<string, Interval>() {
     64        { "x", new Interval(1, 2) },
     65        { "unit", new Interval(0, 1) },
     66        { "neg", new Interval(-1, 0) },
     67      };
    6368      var t = parser.Parse("sqr(x)");
    6469      var paramNodes = t.IterateNodesPostfix().Where(n => n.SubtreeCount == 0).ToArray();
    65       var intervals = new Dictionary<string, Interval>() {
    66         { "x", new Interval(1, 2) },
    67         { "y", new Interval(0, 1) }
    68       };
    69       var r = eval.Evaluate(t, intervals, paramNodes, out double[] lg, out double[] ug);
    70       // TODO
    71       // Assert.AreEqual(XXX, r.LowerBound);
    72       // Assert.AreEqual(XXX, r.UpperBound);
    73       //
    74       // Assert.AreEqual(XXX, lg[0]); // x
    75       // Assert.AreEqual(XXX, ug[0]);
    76       //
    77       // for  { "x", new Interval(1, 2) },
    78       //   { "y", new Interval(0, 1) },
    79       //
    80       // 0 <> -2,50012500572888E-05 for y in SQR(LOG('y'))
    81       // 0 <> 2, 49987500573946E-05 for x in SQR(LOG('x'))
     70      var r = eval.Evaluate(t, intervals, paramNodes, out double[] lg, out double[] ug);
     71      Assert.AreEqual(1, r.LowerBound);
     72      Assert.AreEqual(4, r.UpperBound);
     73
     74      Assert.AreEqual(2.0, lg[0]); // x
     75      Assert.AreEqual(8.0, ug[0]);
     76
     77      t = parser.Parse("sqr(log(unit))");
     78      paramNodes = t.IterateNodesPostfix().Where(n => n.SubtreeCount == 0).ToArray();
     79      r = eval.Evaluate(t, intervals, paramNodes, out lg, out ug);
     80      Assert.AreEqual(0.0, r.LowerBound);
     81      Assert.AreEqual(double.PositiveInfinity, r.UpperBound);
     82
     83      Assert.AreEqual(0.0, lg[0]); // x
     84      Assert.AreEqual(double.NaN, ug[0]);
     85
    8286    }
    8387
     
    126130      var eval = new IntervalEvaluator();
    127131      var parser = new InfixExpressionParser();
     132      var intervals = new Dictionary<string, Interval>() {
     133        { "x", new Interval(3, 4) },
     134        { "z", new Interval(1, 2) }
     135      };
    128136      var t = parser.Parse("cos(x)");
    129137      var paramNodes = t.IterateNodesPostfix().Where(n => n.SubtreeCount == 0).ToArray();
    130       var intervals = new Dictionary<string, Interval>() {
    131         { "x", new Interval(3, 4) },
    132       };
    133138      var r = eval.Evaluate(t, intervals, paramNodes, out double[] lg, out double[] ug);
    134139      Assert.AreEqual(-1, r.LowerBound); //  3..4 crosses pi and cos(pi) == -1
     
    137142      Assert.AreEqual(0, lg[0]); // x
    138143      Assert.AreEqual(-4 * Math.Sin(4), ug[0]);
     144
     145      t = parser.Parse("LOG(COS('z'))");
     146      paramNodes = t.IterateNodesPostfix().Where(n => n.SubtreeCount == 0).ToArray();
     147      r = eval.Evaluate(t, intervals, paramNodes, out  lg, out  ug);
     148      Assert.AreEqual(double.NaN, r.LowerBound);
     149      Assert.AreEqual(Math.Log(Math.Cos(1)), r.UpperBound);
     150
     151      Assert.AreEqual(-2 * Math.Sin(2) / Math.Cos(2), lg[0], 1e-5); // x
     152      Assert.AreEqual(-1 * Math.Sin(1) / Math.Cos(1), ug[0], 1e-5);
     153     
    139154    }
    140155
     
    182197      r = eval.Evaluate(t, intervals, paramNodes, out lg, out ug);
    183198
    184       Assert.AreEqual(0.5 * Math.Sqrt(1e-10), lg[0], 1e-6); // z          --> lim x -> 0 (sqrt(x)) = 0
     199      Assert.AreEqual(0.5 * Math.Sqrt(1e-10), lg[0], 1e-5); // --> lim x -> 0 (sqrt(x)) = 0
    185200      Assert.AreEqual(0.5, ug[0], 1e-5);
     201
     202      t = parser.Parse("sqrt(y - z)"); // 1..2 - 0..1
     203      paramNodes = t.IterateNodesPostfix().Where(n => n.SubtreeCount == 0).ToArray();
     204      r = eval.Evaluate(t, intervals, paramNodes, out lg, out ug);
     205      Assert.AreEqual(0, r.LowerBound);
     206      Assert.AreEqual(Math.Sqrt(2), r.UpperBound);
     207
     208      Assert.AreEqual(double.PositiveInfinity, lg[0], 1e-5); // y
     209      Assert.AreEqual(1/ Math.Sqrt(2)  , ug[0], 1e-5);
     210      Assert.AreEqual(double.NegativeInfinity, lg[1], 1e-5); // z
     211      Assert.AreEqual(0.0   , ug[1], 1e-5);
    186212    }
    187213
Note: See TracChangeset for help on using the changeset viewer.