Free cookie consent management tool by TermsFeed Policy Generator

source: branches/2886_SymRegGrammarEnumeration/Test/GrammarEnumerationTest.cs @ 16026

Last change on this file since 16026 was 16026, checked in by bburlacu, 6 years ago

#2886:

  • replace functionally-overlapping classes Production and SymbolString with a single class SymbolList
  • refactor methods from Grammar class as methods and properties of SymbolList
  • add parameter for the number of constant optimization iterations
  • refactor code
File size: 43.2 KB
Line 
1using System;
2using System.Collections;
3using System.Collections.Generic;
4using System.Linq;
5using HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration;
6using HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration.GrammarEnumeration;
7using HeuristicLab.Common;
8using HeuristicLab.Core;
9using HeuristicLab.Problems.DataAnalysis;
10using HeuristicLab.Problems.Instances.DataAnalysis;
11using HeuristicLab.Random;
12using Microsoft.VisualStudio.TestTools.UnitTesting;
13
14namespace HeuristicLab.Algorithms.DataAnalysis.MctsSymbolicRegression {
15  [TestClass]
16  public class MctsSymbolicRegressionTest {
17    private const int Seed = 1234;
18    private IRandom rand;
19
20    private const double SuccessThreshold = 0.9999999;
21
22    private GrammarEnumerationAlgorithm alg;
23    private RegressionProblem problem;
24
25    [TestInitialize]
26    public void InitTest() {
27      rand = new FastRandom(Seed);
28
29      alg = new GrammarEnumerationAlgorithm();
30      problem = new RegressionProblem();
31      alg.Problem = problem;
32      alg.GuiUpdateInterval = int.MaxValue;
33      foreach (IGrammarEnumerationAnalyzer grammarEnumerationAnalyzer in alg.Analyzers) {
34        alg.Analyzers.SetItemCheckedState(grammarEnumerationAnalyzer, grammarEnumerationAnalyzer is RSquaredEvaluator);
35      }
36      alg.SearchDataStructure = StorageType.PriorityQueue;
37    }
38
39    [TestCleanup]
40    public void Cleanup() {
41      if (alg.BestTrainingSentence != null) {
42        Console.WriteLine("Training: " + alg.Grammar.ToInfixString(alg.BestTrainingSentence));
43      }
44    }
45
46    private void EvaluateGrammarEnumeration() {
47      // Evaluate results
48      var eps = 1.0 - SuccessThreshold;
49
50      // Check if algorithm terminated correctly
51      Assert.IsTrue(alg.Results.ContainsKey("Best solution (Training)"), "No training solution returned!");
52
53      // Check resultss
54      Assert.AreEqual(1.0, ((IRegressionSolution)alg.Results["Best solution (Training)"].Value).TestRSquared, eps, "Test quality too low!");
55    }
56
57    [TestMethod]
58    [TestProperty("Goal", "structure search")]
59    public void NoConstants_Nguyen1() {
60      // x³ + x² + x
61      alg.OptimizeConstants = false;
62      alg.MaxComplexity = 6;
63      alg.Problem.ProblemData = new NguyenFunctionOne(Seed).GenerateRegressionData();
64
65      alg.Start();
66
67      TerminalSymbol constSymbol = alg.Grammar.Const;
68      TerminalSymbol varSymbol = alg.Grammar.VarTerminals.First();
69      TerminalSymbol mulSymbol = alg.Grammar.Multiplication;
70      TerminalSymbol addSymbol = alg.Grammar.Addition;
71
72      SymbolList targetSolution = new SymbolList(new[] {
73        constSymbol, varSymbol, varSymbol, varSymbol, mulSymbol, mulSymbol, mulSymbol,
74        constSymbol, varSymbol, varSymbol, mulSymbol, mulSymbol, addSymbol,
75        constSymbol, varSymbol, mulSymbol, addSymbol,
76        constSymbol, addSymbol
77      });
78
79      int targetSolutionHash = alg.Grammar.Hasher.CalcHashCode(targetSolution);
80      int actualSolutionHash = alg.Grammar.Hasher.CalcHashCode(alg.BestTrainingSentence);
81
82      Assert.IsTrue(alg.DistinctSentencesComplexity.ContainsKey(targetSolutionHash), "Actual solution was not generated!");
83
84      Assert.AreEqual(targetSolutionHash, actualSolutionHash, "Actual solution was not recognized as best one.");
85
86      // Evaluate
87      EvaluateGrammarEnumeration();
88    }
89
90    // Too "large" target model for now...
91    //[TestMethod]
92    [TestProperty("Goal", "structure search")]
93    public void NoConstants_Nguyen2() {
94      // x^4 + x³ + x² + x
95      alg.MaxComplexity = 11;
96      alg.Problem.ProblemData = new NguyenFunctionTwo(Seed).GenerateRegressionData();
97
98      alg.Start();
99      EvaluateGrammarEnumeration();
100    }
101
102    // Too "large" target model for now...
103    //[TestMethod]
104    [TestProperty("Goal", "structure search")]
105    public void NoConstants_Nguyen3() {
106      // x^5 + x^4 + x^3 + x^2 + x
107      alg.MaxComplexity = 32;
108      alg.Problem.ProblemData = new NguyenFunctionThree(Seed).GenerateRegressionData();
109
110      alg.Start();
111
112      EvaluateGrammarEnumeration();
113    }
114
115    [TestMethod]
116    [TestProperty("Goal", "structure search")]
117    public void NoConstants_Nguyen6() {
118      // sin(x) + sin(x + x²)
119      alg.OptimizeConstants = false;
120      alg.MaxComplexity = 4;
121      alg.Problem.ProblemData = new NguyenFunctionSix(Seed).GenerateRegressionData();
122
123      alg.Start();
124
125      TerminalSymbol constSymbol = alg.Grammar.Const;
126      TerminalSymbol varSymbol = alg.Grammar.VarTerminals.First();
127      TerminalSymbol mulSymbol = alg.Grammar.Multiplication;
128      TerminalSymbol addSymbol = alg.Grammar.Addition;
129      TerminalSymbol sinSymbol = alg.Grammar.Sin;
130
131      // c * sin(c x + c) + c * sin(c * x * x + c * x) + c
132      SymbolList targetSolution = new SymbolList(new[] {
133        varSymbol, constSymbol, mulSymbol, constSymbol, addSymbol, sinSymbol, constSymbol, mulSymbol,
134        varSymbol, varSymbol, mulSymbol, constSymbol, mulSymbol, varSymbol, constSymbol, mulSymbol, addSymbol, constSymbol, addSymbol, sinSymbol, constSymbol, mulSymbol, addSymbol,
135        constSymbol, addSymbol
136      });
137
138      int targetSolutionHash = alg.Grammar.Hasher.CalcHashCode(targetSolution);
139      int actualSolutionHash = alg.Grammar.Hasher.CalcHashCode(alg.BestTrainingSentence);
140
141      Assert.IsTrue(alg.DistinctSentencesComplexity.ContainsKey(targetSolutionHash), "Actual solution was not generated!");
142      Assert.AreEqual(targetSolutionHash, actualSolutionHash, "Actual solution was not recognized as best one.");
143
144      EvaluateGrammarEnumeration();
145    }
146
147    [TestMethod]
148    [TestProperty("Goal", "structure search")]
149    public void NoConstants_Nguyen9() {
150      // sin(x) + sin(y²)   
151      alg.OptimizeConstants = false;
152      alg.MaxComplexity = 3;
153      alg.Problem.ProblemData = new NguyenFunctionNine(Seed).GenerateRegressionData();
154
155      alg.Start();
156
157      TerminalSymbol xSymbol = alg.Grammar.VarTerminals.First(v => v.StringRepresentation == "X");
158      TerminalSymbol ySymbol = alg.Grammar.VarTerminals.First(v => v.StringRepresentation == "Y");
159      TerminalSymbol constSymbol = alg.Grammar.Const;
160      TerminalSymbol mulSymbol = alg.Grammar.Multiplication;
161      TerminalSymbol addSymbol = alg.Grammar.Addition;
162      TerminalSymbol sinSymbol = alg.Grammar.Sin;
163
164      // c*sin(c*x + c) + c*sin(c*y*y + c) + c
165      SymbolList targetSolution = new SymbolList(new[] {
166        xSymbol, constSymbol, mulSymbol, constSymbol, addSymbol, sinSymbol, constSymbol, mulSymbol,
167        ySymbol, ySymbol, mulSymbol, constSymbol, mulSymbol, constSymbol, addSymbol, sinSymbol, constSymbol, mulSymbol, addSymbol,
168        constSymbol, addSymbol
169      });
170
171      int targetSolutionHash = alg.Grammar.Hasher.CalcHashCode(targetSolution);
172      int actualSolutionHash = alg.Grammar.Hasher.CalcHashCode(alg.BestTrainingSentence);
173
174      Assert.IsTrue(alg.DistinctSentencesComplexity.ContainsKey(targetSolutionHash), "Actual solution was not generated!");
175      Assert.AreEqual(targetSolutionHash, actualSolutionHash, "Actual solution was not recognized as best one.");
176
177      EvaluateGrammarEnumeration();
178    }
179
180    // Too much variables for now...
181    //[TestMethod]
182    [TestProperty("Goal", "structure search")]
183    public void MctsSymbReg_NoConstants_Poly10() {
184      alg.MaxComplexity = 10;
185      alg.Problem.ProblemData = new PolyTen(Seed).GenerateRegressionData();
186
187      alg.Start();
188      EvaluateGrammarEnumeration();
189    }
190
191    [TestMethod]
192    [TestProperty("Goal", "structure search")]
193    public void NoConstants_Inverse() {
194      // x / (log(x)*x + x)
195      alg.OptimizeConstants = false;
196      alg.MaxComplexity = 4;
197
198      var x = Enumerable.Range(0, 100).Select(_ => rand.NextDouble() + 1.1).ToList();
199      var y = x.Select(xi => xi / (Math.Log(xi) * xi + xi)).ToList();
200      alg.Problem.ProblemData = new RegressionProblemData(new Dataset(new List<string>() { "x", "y" }, new List<IList>() { x, y }), "x".ToEnumerable(), "y");
201
202      alg.Start();
203      EvaluateGrammarEnumeration();
204    }
205
206    [TestMethod]
207    [TestProperty("Goal", "structure search + const op")]
208    public void Constants_Nguyen7() {
209      // log(x+1) + log(x*x + 1)
210      alg.MaxComplexity = 4;
211      alg.OptimizeConstants = true;
212      alg.Problem.ProblemData = new NguyenFunctionSeven().GenerateRegressionData();
213
214      alg.Start();
215
216      TerminalSymbol constSymbol = alg.Grammar.Const;
217      TerminalSymbol varSymbol = alg.Grammar.VarTerminals.First();
218      TerminalSymbol mulSymbol = alg.Grammar.Multiplication;
219      TerminalSymbol addSymbol = alg.Grammar.Addition;
220      TerminalSymbol logSymbol = alg.Grammar.Log;
221
222      SymbolList targetSolution = new SymbolList(new[] {
223        varSymbol, constSymbol, mulSymbol, constSymbol, addSymbol, logSymbol, constSymbol, mulSymbol,
224        varSymbol, varSymbol, mulSymbol, constSymbol, mulSymbol, constSymbol, addSymbol, logSymbol, constSymbol, mulSymbol, addSymbol,
225        constSymbol, addSymbol
226      });
227
228      int targetSolutionHash = alg.Grammar.Hasher.CalcHashCode(targetSolution);
229      int actualSolutionHash = alg.Grammar.Hasher.CalcHashCode(alg.BestTrainingSentence);
230
231      Assert.IsTrue(alg.DistinctSentencesComplexity.ContainsKey(targetSolutionHash), "Actual solution was not generated!");
232      Assert.AreEqual(targetSolutionHash, actualSolutionHash, "Actual solution was not recognized as best one.");
233
234      // Evaluate
235      EvaluateGrammarEnumeration();
236    }
237
238    [TestMethod]
239    [TestProperty("Goal", "structure search + const op")]
240    public void Constants_Nguyen12() {
241      // x*x*x*x - x*x*x + y*y/2 -y
242      alg.MaxComplexity = 10;
243      alg.OptimizeConstants = true;
244      alg.Problem.ProblemData = new NguyenFunctionTwelve().GenerateRegressionData();
245
246      alg.Start();
247
248      // Evaluate
249      EvaluateGrammarEnumeration();
250    }
251
252    [TestMethod]
253    [TestProperty("Goal", "sinnus const op")]
254    public void Constants_Keijzer3() {
255      // 0.3*x*sin(2*pi*x)
256      alg.MaxComplexity = 2;
257      alg.Problem.ProblemData = new KeijzerFunctionThree().GenerateRegressionData();
258
259      alg.Start();
260
261      TerminalSymbol constSymbol = alg.Grammar.Const;
262      TerminalSymbol varSymbol = alg.Grammar.VarTerminals.First();
263      TerminalSymbol mulSymbol = alg.Grammar.Multiplication;
264      TerminalSymbol addSymbol = alg.Grammar.Addition;
265
266      SymbolList targetSolution = new SymbolList(new[] {
267        constSymbol, varSymbol, mulSymbol, constSymbol, addSymbol, alg.Grammar.Sin,
268        varSymbol, mulSymbol,
269        constSymbol, mulSymbol,
270        constSymbol, addSymbol
271      });
272
273      int targetSolutionHash = alg.Grammar.Hasher.CalcHashCode(targetSolution);
274      int actualSolutionHash = alg.Grammar.Hasher.CalcHashCode(alg.BestTrainingSentence);
275
276      Assert.IsTrue(alg.DistinctSentencesComplexity.ContainsKey(targetSolutionHash), "Actual solution was not generated!");
277      Assert.AreEqual(targetSolutionHash, actualSolutionHash, "Actual solution was not recognized as best one.");
278
279      // Evaluate
280      EvaluateGrammarEnumeration();
281    }
282
283    [TestMethod]
284    [TestProperty("Goal", "structure search + const op")]
285    public void Constants_Keijzer5() {
286      // (30*x*z) / ((x - 10)*y*y)
287      alg.MaxComplexity = 5;
288      alg.OptimizeConstants = true;
289      alg.Problem.ProblemData = new KeijzerFunctionFive().GenerateRegressionData();
290
291      alg.Start();
292
293      TerminalSymbol constSymbol = alg.Grammar.Const;
294      TerminalSymbol xSymbol = alg.Grammar.VarTerminals.First(s => s.StringRepresentation == "X");
295      TerminalSymbol ySymbol = alg.Grammar.VarTerminals.First(s => s.StringRepresentation == "Y");
296      TerminalSymbol zSymbol = alg.Grammar.VarTerminals.First(s => s.StringRepresentation == "Z");
297      TerminalSymbol mulSymbol = alg.Grammar.Multiplication;
298      TerminalSymbol addSymbol = alg.Grammar.Addition;
299      TerminalSymbol invSymbol = alg.Grammar.Inv;
300
301      // 30 * x * z * 1/(x*y*y - 10*y*y)
302      // --> x z * c *     x y * y * c *  y y * c * + c + inv c +
303      SymbolList targetSolution = new SymbolList(new[] {
304        xSymbol, zSymbol, mulSymbol, constSymbol, mulSymbol,
305        xSymbol, ySymbol, mulSymbol, ySymbol, mulSymbol, constSymbol, mulSymbol,
306        ySymbol, ySymbol, mulSymbol, constSymbol, mulSymbol, addSymbol, constSymbol, addSymbol, invSymbol,
307        constSymbol, addSymbol
308      });
309
310      int targetSolutionHash = alg.Grammar.Hasher.CalcHashCode(targetSolution);
311      int actualSolutionHash = alg.Grammar.Hasher.CalcHashCode(alg.BestTrainingSentence);
312
313      Assert.IsTrue(alg.DistinctSentencesComplexity.ContainsKey(targetSolutionHash), "Actual solution was not generated!");
314
315      Assert.AreEqual(targetSolutionHash, actualSolutionHash, "Actual solution was not recognized as best one.");
316
317      // Evaluate
318      EvaluateGrammarEnumeration();
319    }
320
321
322    [TestMethod]
323    [TestProperty("Goal", "structure search + const op")]
324    public void Constants_Keijzer12() {
325      // x*x*x*x - x*x*x + y*y/2 - y
326      alg.MaxComplexity = 10;
327      alg.Problem.ProblemData = new KeijzerFunctionTwelve().GenerateRegressionData();
328
329      alg.Start();
330
331      TerminalSymbol constSymbol = alg.Grammar.Const;
332      TerminalSymbol xSymbol = alg.Grammar.VarTerminals.First();
333      TerminalSymbol ySymbol = alg.Grammar.VarTerminals.Last();
334      TerminalSymbol mulSymbol = alg.Grammar.Multiplication;
335      TerminalSymbol addSymbol = alg.Grammar.Addition;
336
337      SymbolList targetSolution = new SymbolList(new[] {
338        xSymbol, xSymbol, mulSymbol, xSymbol, mulSymbol, xSymbol, mulSymbol, constSymbol, mulSymbol,
339        xSymbol, xSymbol, mulSymbol, xSymbol, mulSymbol, constSymbol, mulSymbol, addSymbol,
340        ySymbol, ySymbol, mulSymbol, constSymbol, mulSymbol, addSymbol,
341        ySymbol, constSymbol, mulSymbol, addSymbol,
342        constSymbol, addSymbol
343      });
344
345      var x = alg.Grammar.ToInfixString(targetSolution);
346
347      int targetSolutionHash = alg.Grammar.Hasher.CalcHashCode(targetSolution);
348      int actualSolutionHash = alg.Grammar.Hasher.CalcHashCode(alg.BestTrainingSentence);
349
350      Assert.IsTrue(alg.DistinctSentencesComplexity.ContainsKey(targetSolutionHash), "Actual solution was not generated!");
351      Assert.AreEqual(targetSolutionHash, actualSolutionHash, "Actual solution was not recognized as best one.");
352
353      // Evaluate
354      EvaluateGrammarEnumeration();
355    }
356
357    [TestMethod]
358    [TestProperty("Goal", "structure search + const op")]
359    public void Constants_Keijzer14() {
360      // 8 / (2 + x*x + y*y)
361      alg.MaxComplexity = 4;
362      alg.OptimizeConstants = true;
363      alg.Problem.ProblemData = new KeijzerFunctionFourteen().GenerateRegressionData();
364
365      alg.Start();
366
367      TerminalSymbol constSymbol = alg.Grammar.Const;
368      TerminalSymbol xSymbol = alg.Grammar.VarTerminals.First();
369      TerminalSymbol ySymbol = alg.Grammar.VarTerminals.Last();
370      TerminalSymbol mulSymbol = alg.Grammar.Multiplication;
371      TerminalSymbol addSymbol = alg.Grammar.Addition;
372      TerminalSymbol divSymbol = alg.Grammar.Inv;
373
374
375      // x x mul c mul y y mul c mul add const add inv const mul const add
376      SymbolList targetSolution = new SymbolList(new[] {
377        xSymbol, xSymbol, mulSymbol, constSymbol, mulSymbol,
378        ySymbol, ySymbol, mulSymbol, constSymbol, mulSymbol, addSymbol,
379        constSymbol, addSymbol, divSymbol,
380        constSymbol, mulSymbol,
381        constSymbol, addSymbol
382      });
383
384      int targetSolutionHash = alg.Grammar.Hasher.CalcHashCode(targetSolution);
385      int actualSolutionHash = alg.Grammar.Hasher.CalcHashCode(alg.BestTrainingSentence);
386
387      Assert.IsTrue(alg.DistinctSentencesComplexity.ContainsKey(targetSolutionHash), "Actual solution was not generated!");
388      Assert.AreEqual(targetSolutionHash, actualSolutionHash, "Actual solution was not recognized as best one.");
389
390      // Evaluate
391      EvaluateGrammarEnumeration();
392    }
393
394
395    [TestMethod]
396    [TestProperty("Goal", "structure search + const op")]
397    public void Constants_Keijzer15() {
398      // x*x*x / 5 + y*y*y / 2 - y - x
399      alg.MaxComplexity = 8;
400      alg.OptimizeConstants = true;
401      alg.Problem.ProblemData = new KeijzerFunctionFifteen().GenerateRegressionData();
402
403      alg.Start();
404
405      TerminalSymbol constSymbol = alg.Grammar.Const;
406      TerminalSymbol xSymbol = alg.Grammar.VarTerminals.First();
407      TerminalSymbol ySymbol = alg.Grammar.VarTerminals.Last();
408      TerminalSymbol mulSymbol = alg.Grammar.Multiplication;
409      TerminalSymbol addSymbol = alg.Grammar.Addition;
410
411      // x x * x * const * y y * y * const * + y const * + x const * const +
412      SymbolList targetSolution = new SymbolList(new[] {
413        xSymbol, xSymbol, mulSymbol, xSymbol, mulSymbol, constSymbol, mulSymbol,
414        ySymbol, ySymbol, mulSymbol, ySymbol, mulSymbol, constSymbol, mulSymbol, addSymbol,
415        ySymbol, constSymbol, mulSymbol, addSymbol,
416        xSymbol, constSymbol, mulSymbol, addSymbol,
417        constSymbol, addSymbol
418      });
419
420      int targetSolutionHash = alg.Grammar.Hasher.CalcHashCode(targetSolution);
421      int actualSolutionHash = alg.Grammar.Hasher.CalcHashCode(alg.BestTrainingSentence);
422
423      Assert.IsTrue(alg.DistinctSentencesComplexity.ContainsKey(targetSolutionHash), "Actual solution was not generated!");
424      Assert.AreEqual(targetSolutionHash, actualSolutionHash, "Actual solution was not recognized as best one.");
425
426      // Evaluate
427      EvaluateGrammarEnumeration();
428    }
429
430    [TestMethod]
431    [TestProperty("Goal", "Poly-10 derivatives")]
432    public void MctsSymbReg_NoConstants_Poly10_Part1() {
433      alg.MaxComplexity = 12;
434      alg.OptimizeConstants = false;
435      var regProblem = new PolyTen(123).GenerateRegressionData();
436
437      //  Y = X1*X2 + X3*X4 + X5*X6 + X1*X7*X9 + X3*X6*X10
438      //  Y' = X1*X2 + X3*X4 + X5*X6
439      // simplify problem by changing target
440      var ds = ((Dataset)regProblem.Dataset).ToModifiable();
441      var ys = ds.GetDoubleValues("Y").ToArray();
442      var x1 = ds.GetDoubleValues("X1").ToArray();
443      var x2 = ds.GetDoubleValues("X2").ToArray();
444      var x3 = ds.GetDoubleValues("X3").ToArray();
445      var x4 = ds.GetDoubleValues("X4").ToArray();
446      var x5 = ds.GetDoubleValues("X5").ToArray();
447      var x6 = ds.GetDoubleValues("X6").ToArray();
448      var x7 = ds.GetDoubleValues("X7").ToArray();
449      var x8 = ds.GetDoubleValues("X8").ToArray();
450      var x9 = ds.GetDoubleValues("X9").ToArray();
451      var x10 = ds.GetDoubleValues("X10").ToArray();
452      for (int i = 0; i < ys.Length; i++) {
453        //ys[i] -= x1[i] * x7[i] * x9[i];
454        //ys[i] -= x3[i] * x6[i] * x10[i];
455      }
456      ds.ReplaceVariable("Y", ys.ToList());
457
458      alg.Problem.ProblemData = new RegressionProblemData(ds, regProblem.AllowedInputVariables, regProblem.TargetVariable);
459
460      alg.Start();
461
462      EvaluateGrammarEnumeration();
463    }
464
465
466
467
468#if false
469
470    [TestMethod]
471    [TestProperty("Goal", "structure search")]
472    public void MctsSymbReg_NoConstants_15() {
473      alg.MaxTreeSize = 5;
474      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.KeijzerInstanceProvider(Seed);
475      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("15")));
476      alg.Problem.ProblemData = regProblem;
477
478      alg.Start();
479      EvaluateGrammarEnumeration();
480    }
481
482
483    [TestMethod]
484    [TestCategory("Algorithms.DataAnalysis")]
485    [TestProperty("Time", "short")]
486    public void MctsSymbReg_NoConstants_Nguyen7() {
487      // log(x + 1) + log(x² + 1)
488      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.NguyenInstanceProvider(Seed);
489      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("F7 ")));
490      TestGrammarEnumeration(regProblem);
491    }
492
493    [TestMethod]
494    [TestCategory("Algorithms.DataAnalysis")]
495    [TestProperty("Time", "short")]
496    public void MctsSymbReg_NoConstants_Poly10_Part1() {
497      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.VariousInstanceProvider(Seed);
498      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Poly-10")));
499
500      //  Y = X1*X2 + X3*X4 + X5*X6 + X1*X7*X9 + X3*X6*X10
501      //  Y' = X1*X2 + X3*X4 + X5*X6
502      // simplify problem by changing target
503      var ds = ((Dataset)regProblem.Dataset).ToModifiable();
504      var ys = ds.GetDoubleValues("Y").ToArray();
505      var x1 = ds.GetDoubleValues("X1").ToArray();
506      var x2 = ds.GetDoubleValues("X2").ToArray();
507      var x3 = ds.GetDoubleValues("X3").ToArray();
508      var x4 = ds.GetDoubleValues("X4").ToArray();
509      var x5 = ds.GetDoubleValues("X5").ToArray();
510      var x6 = ds.GetDoubleValues("X6").ToArray();
511      var x7 = ds.GetDoubleValues("X7").ToArray();
512      var x8 = ds.GetDoubleValues("X8").ToArray();
513      var x9 = ds.GetDoubleValues("X9").ToArray();
514      var x10 = ds.GetDoubleValues("X10").ToArray();
515      for (int i = 0; i < ys.Length; i++) {
516        ys[i] -= x1[i] * x7[i] * x9[i];
517        ys[i] -= x3[i] * x6[i] * x10[i];
518      }
519      ds.ReplaceVariable("Y", ys.ToList());
520
521      var modifiedProblemData = new RegressionProblemData(ds, regProblem.AllowedInputVariables, regProblem.TargetVariable);
522
523      TestGrammarEnumeration(modifiedProblemData);
524    }
525
526    [TestMethod]
527    [TestCategory("Algorithms.DataAnalysis")]
528    [TestProperty("Time", "short")]
529    public void MctsSymbReg_NoConstants_Poly10_Part2() {
530      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.VariousInstanceProvider(Seed);
531      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Poly-10")));
532
533      //  Y = X1*X2 + X3*X4 + X5*X6 + X1*X7*X9 + X3*X6*X10
534      //  Y' = X1*X7*X9 + X3*X6*X10
535      // simplify problem by changing target
536      var ds = ((Dataset)regProblem.Dataset).ToModifiable();
537      var ys = ds.GetDoubleValues("Y").ToArray();
538      var x1 = ds.GetDoubleValues("X1").ToArray();
539      var x2 = ds.GetDoubleValues("X2").ToArray();                                           
540      var x3 = ds.GetDoubleValues("X3").ToArray();
541      var x4 = ds.GetDoubleValues("X4").ToArray();
542      var x5 = ds.GetDoubleValues("X5").ToArray();
543      var x6 = ds.GetDoubleValues("X6").ToArray();
544      var x7 = ds.GetDoubleValues("X7").ToArray();
545      var x8 = ds.GetDoubleValues("X8").ToArray();
546      var x9 = ds.GetDoubleValues("X9").ToArray();
547      var x10 = ds.GetDoubleValues("X10").ToArray();
548      for (int i = 0; i < ys.Length; i++) {
549        ys[i] -= x1[i] * x2[i];
550        ys[i] -= x3[i] * x4[i];
551        ys[i] -= x5[i] * x6[i];
552      }
553      ds.ReplaceVariable("Y", ys.ToList());
554
555      var modifiedProblemData = new RegressionProblemData(ds, regProblem.AllowedInputVariables, regProblem.TargetVariable);
556
557      TestGrammarEnumeration(modifiedProblemData);
558    }
559
560    [TestMethod]
561    [TestCategory("Algorithms.DataAnalysis")]
562    [TestProperty("Time", "short")]
563    public void MctsSymbReg_NoConstants_Poly10_Part3() {
564      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.VariousInstanceProvider(Seed);
565      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Poly-10")));
566
567      //  Y = X1*X2 + X3*X4 + X5*X6 + X1*X7*X9 + X3*X6*X10
568      //  Y' = X1*X2 + X1*X7*X9
569      // simplify problem by changing target
570      var ds = ((Dataset)regProblem.Dataset).ToModifiable();
571      var ys = ds.GetDoubleValues("Y").ToArray();
572      var x1 = ds.GetDoubleValues("X1").ToArray();
573      var x2 = ds.GetDoubleValues("X2").ToArray();
574      var x3 = ds.GetDoubleValues("X3").ToArray();
575      var x4 = ds.GetDoubleValues("X4").ToArray();
576      var x5 = ds.GetDoubleValues("X5").ToArray();
577      var x6 = ds.GetDoubleValues("X6").ToArray();
578      var x7 = ds.GetDoubleValues("X7").ToArray();
579      var x8 = ds.GetDoubleValues("X8").ToArray();
580      var x9 = ds.GetDoubleValues("X9").ToArray();
581      var x10 = ds.GetDoubleValues("X10").ToArray();
582      for (int i = 0; i < ys.Length; i++) {
583        ys[i] -= x3[i] * x4[i];
584        ys[i] -= x5[i] * x6[i];
585        ys[i] -= x3[i] * x6[i] * x10[i];
586      }
587      ds.ReplaceVariable("Y", ys.ToList());
588
589      var modifiedProblemData = new RegressionProblemData(ds, regProblem.AllowedInputVariables, regProblem.TargetVariable);
590
591      TestGrammarEnumeration(modifiedProblemData);
592    }
593
594    [TestMethod]
595    [TestCategory("Algorithms.DataAnalysis")]
596    [TestProperty("Time", "short")]
597    public void MctsSymbReg_NoConstants_Poly10_Part4() {
598      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.VariousInstanceProvider(Seed);
599      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Poly-10")));
600
601      //  Y = X1*X2 + X3*X4 + X5*X6 + X1*X7*X9 + X3*X6*X10
602      //  Y' = X3*X4 + X5*X6 + X3*X6*X10
603      // simplify problem by changing target
604      var ds = ((Dataset)regProblem.Dataset).ToModifiable();
605      var ys = ds.GetDoubleValues("Y").ToArray();
606      var x1 = ds.GetDoubleValues("X1").ToArray();
607      var x2 = ds.GetDoubleValues("X2").ToArray();
608      var x3 = ds.GetDoubleValues("X3").ToArray();
609      var x4 = ds.GetDoubleValues("X4").ToArray();
610      var x5 = ds.GetDoubleValues("X5").ToArray();
611      var x6 = ds.GetDoubleValues("X6").ToArray();
612      var x7 = ds.GetDoubleValues("X7").ToArray();
613      var x8 = ds.GetDoubleValues("X8").ToArray();
614      var x9 = ds.GetDoubleValues("X9").ToArray();
615      var x10 = ds.GetDoubleValues("X10").ToArray();
616      for (int i = 0; i < ys.Length; i++) {
617        ys[i] -= x1[i] * x2[i];
618        ys[i] -= x1[i] * x7[i] * x9[i];
619      }
620      ds.ReplaceVariable("Y", ys.ToList());
621      var modifiedProblemData = new RegressionProblemData(ds, regProblem.AllowedInputVariables, regProblem.TargetVariable);
622
623
624      TestGrammarEnumeration(modifiedProblemData);
625    }
626
627    [TestMethod]
628    [TestCategory("Algorithms.DataAnalysis")]
629    [TestProperty("Time", "short")]
630    public void MctsSymbReg_NoConstants_Poly10_Part5() {
631      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.VariousInstanceProvider(Seed);
632      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Poly-10")));
633
634      //  Y = X1*X2 + X3*X4 + X5*X6 + X1*X7*X9 + X3*X6*X10
635      //  Y' = X1*X2 + X3*X4 + X5*X6 + X1*X7*X9
636      // simplify problem by changing target
637      var ds = ((Dataset)regProblem.Dataset).ToModifiable();
638      var ys = ds.GetDoubleValues("Y").ToArray();
639      var x1 = ds.GetDoubleValues("X1").ToArray();
640      var x2 = ds.GetDoubleValues("X2").ToArray();
641      var x3 = ds.GetDoubleValues("X3").ToArray();
642      var x4 = ds.GetDoubleValues("X4").ToArray();
643      var x5 = ds.GetDoubleValues("X5").ToArray();
644      var x6 = ds.GetDoubleValues("X6").ToArray();
645      var x7 = ds.GetDoubleValues("X7").ToArray();
646      var x8 = ds.GetDoubleValues("X8").ToArray();
647      var x9 = ds.GetDoubleValues("X9").ToArray();
648      var x10 = ds.GetDoubleValues("X10").ToArray();
649      for (int i = 0; i < ys.Length; i++) {
650        ys[i] -= x3[i] * x6[i] * x10[i];
651      }
652      ds.ReplaceVariable("Y", ys.ToList());
653      var modifiedProblemData = new RegressionProblemData(ds, regProblem.AllowedInputVariables, regProblem.TargetVariable);
654
655
656      TestGrammarEnumeration(modifiedProblemData);
657    }
658
659    [TestMethod]
660    [TestCategory("Algorithms.DataAnalysis")]
661    [TestProperty("Time", "short")]
662    public void MctsSymbReg_NoConstants_Poly10_Part6() {
663      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.VariousInstanceProvider(Seed);
664      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Poly-10")));
665
666      //  Y = X1*X2 + X3*X4 + X5*X6 + X1*X7*X9 + X3*X6*X10
667      //  Y' = X1*X2 + X3*X4 + X5*X6 + X3*X6*X10
668      // simplify problem by changing target
669      var ds = ((Dataset)regProblem.Dataset).ToModifiable();
670      var ys = ds.GetDoubleValues("Y").ToArray();
671      var x1 = ds.GetDoubleValues("X1").ToArray();
672      var x2 = ds.GetDoubleValues("X2").ToArray();
673      var x3 = ds.GetDoubleValues("X3").ToArray();
674      var x4 = ds.GetDoubleValues("X4").ToArray();
675      var x5 = ds.GetDoubleValues("X5").ToArray();
676      var x6 = ds.GetDoubleValues("X6").ToArray();
677      var x7 = ds.GetDoubleValues("X7").ToArray();
678      var x8 = ds.GetDoubleValues("X8").ToArray();
679      var x9 = ds.GetDoubleValues("X9").ToArray();
680      var x10 = ds.GetDoubleValues("X10").ToArray();
681      for (int i = 0; i < ys.Length; i++) {
682        ys[i] -= x1[i] * x7[i] * x9[i];
683      }
684      ds.ReplaceVariable("Y", ys.ToList());
685      var modifiedProblemData = new RegressionProblemData(ds, regProblem.AllowedInputVariables, regProblem.TargetVariable);
686
687      TestGrammarEnumeration(modifiedProblemData);
688    }
689
690
691    [TestMethod]
692    [TestCategory("Algorithms.DataAnalysis")]
693    [TestProperty("Time", "long")]
694    public void MctsSymbReg_NoConstants_Poly10_250rows() {
695      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.VariousInstanceProvider(Seed);
696      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Poly-10")));
697      regProblem.TrainingPartition.Start = 0;
698      regProblem.TrainingPartition.End = regProblem.Dataset.Rows;
699      regProblem.TestPartition.Start = 0;
700      regProblem.TestPartition.End = 2;
701      TestGrammarEnumeration(regProblem);
702    }
703
704    [TestMethod]
705    [TestCategory("Algorithms.DataAnalysis")]
706    [TestProperty("Time", "long")]
707    public void MctsSymbReg_NoConstants_Poly10_10000rows() {
708      // as poly-10 but more rows
709      var x1 = Enumerable.Range(0, 10000).Select(_ => rand.NextDouble()).ToList();
710      var x2 = Enumerable.Range(0, 10000).Select(_ => rand.NextDouble()).ToList();
711      var x3 = Enumerable.Range(0, 10000).Select(_ => rand.NextDouble()).ToList();
712      var x4 = Enumerable.Range(0, 10000).Select(_ => rand.NextDouble()).ToList();
713      var x5 = Enumerable.Range(0, 10000).Select(_ => rand.NextDouble()).ToList();
714      var x6 = Enumerable.Range(0, 10000).Select(_ => rand.NextDouble()).ToList();
715      var x7 = Enumerable.Range(0, 10000).Select(_ => rand.NextDouble()).ToList();
716      var x8 = Enumerable.Range(0, 10000).Select(_ => rand.NextDouble()).ToList();
717      var x9 = Enumerable.Range(0, 10000).Select(_ => rand.NextDouble()).ToList();
718      var x10 = Enumerable.Range(0, 10000).Select(_ => rand.NextDouble()).ToList();
719      var ys = new List<double>();
720      for (int i = 0; i < x1.Count; i++) {
721        ys.Add(x1[i] * x2[i] + x3[i] * x4[i] + x5[i] * x6[i] + x1[i] * x7[i] * x9[i] + x3[i] * x6[i] * x10[i]);
722      }
723
724      var ds = new Dataset(new string[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "y" },
725        new[] { x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, ys });
726
727
728      var problemData = new RegressionProblemData(ds, new string[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" }, "y");
729
730      problemData.TrainingPartition.Start = 0;
731      problemData.TrainingPartition.End = problemData.Dataset.Rows;
732      problemData.TestPartition.Start = 0;
733      problemData.TestPartition.End = 2; // must not be empty
734
735
736      TestGrammarEnumeration(problemData);
737    }
738
739    [TestMethod]
740    [TestCategory("Algorithms.DataAnalysis")]
741    [TestProperty("Time", "short")]
742    public void MctsSymbReg_NoConstants_TwoVars() {
743
744      // y = x1 + x2 + x1*x2 + x1*x2*x2 + x1*x1*x2
745      var x1 = Enumerable.Range(0, 100).Select(_ => rand.NextDouble()).ToList();
746      var x2 = Enumerable.Range(0, 100).Select(_ => rand.NextDouble()).ToList();
747      var ys = x1.Zip(x2, (x1i, x2i) => x1i + x2i + x1i * x2i + x1i * x2i * x2i + x1i * x1i * x2i).ToList();
748
749      var ds = new Dataset(new string[] { "a", "b", "y" }, new[] { x1, x2, ys });
750      var problemData = new RegressionProblemData(ds, new string[] { "a", "b" }, "y");
751
752      TestGrammarEnumeration(problemData);
753    }
754
755    [TestMethod]
756    [TestCategory("Algorithms.DataAnalysis")]
757    [TestProperty("Time", "short")]
758    public void MctsSymbReg_NoConstants_Misleading() {
759
760      // y = a + baaaaa (the effect of the second term should be very small)
761      // the alg will quickly find that a has big effect and will search below a
762      // since we prevent a + a... the algorithm must find the correct expression via a + b...
763      // however b has a small effect so the branch might not be identified as relevant
764      var @as = Enumerable.Range(0, 100).Select(_ => rand.NextDouble()).ToList();
765      var bs = Enumerable.Range(0, 100).Select(_ => rand.NextDouble()).ToList();
766      var cs = Enumerable.Range(0, 100).Select(_ => rand.NextDouble() * 1.0e-3).ToList();
767      var ds = Enumerable.Range(0, 100).Select(_ => rand.NextDouble()).ToList();
768      var es = Enumerable.Range(0, 100).Select(_ => rand.NextDouble()).ToList();
769      var ys = new double[@as.Count];
770      for (int i = 0; i < ys.Length; i++)
771        ys[i] = @as[i] + bs[i] + @as[i] * bs[i] * cs[i];
772
773      var dataset = new Dataset(new string[] { "a", "b", "c", "d", "e", "y" }, new[] { @as, bs, cs, ds, es, ys.ToList() });
774
775      var problemData = new RegressionProblemData(dataset, new string[] { "a", "b", "c", "d", "e" }, "y");
776
777      TestGrammarEnumeration(problemData);
778    }
779
780    [TestMethod]
781    [TestCategory("Algorithms.DataAnalysis")]
782    [TestProperty("Time", "short")]
783    public void MctsSymbRegKeijzer7() {
784      // ln(x)
785      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.KeijzerInstanceProvider(Seed);
786      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Keijzer 7 f(")));
787      // some Keijzer problem instances have very large test partitions (here we are not concerened about test performance)
788      if (regProblem.TestPartition.End - regProblem.TestPartition.Start > 1000) regProblem.TestPartition.End = regProblem.TestPartition.Start + 1000;
789      TestGrammarEnumeration(regProblem);
790    }
791
792   
793    [TestMethod]
794    [TestCategory("Algorithms.DataAnalysis")]
795    [TestProperty("Time", "short")]
796    public void MctsSymbRegBenchmarkNguyen5() {
797      // sin(x²)cos(x) - 1
798      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.NguyenInstanceProvider();
799      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("F5 ")));
800      TestGrammarEnumeration(regProblem);
801    }
802
803    [TestMethod]
804    [TestCategory("Algorithms.DataAnalysis")]
805    [TestProperty("Time", "short")]
806    public void MctsSymbRegBenchmarkNguyen6() {
807      // sin(x) + sin(x + x²)
808      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.NguyenInstanceProvider();
809      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("F6 ")));
810      TestGrammarEnumeration(regProblem);
811    }
812   
813    [TestMethod]
814    [TestCategory("Algorithms.DataAnalysis")]
815    [TestProperty("Time", "short")]
816    public void MctsSymbRegBenchmarkNguyen7() {
817      //  log(x + 1) + log(x² + 1)
818      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.NguyenInstanceProvider(Seed);
819      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("F7 ")));
820      TestGrammarEnumeration(regProblem);
821    }
822    [TestMethod]
823    [TestCategory("Algorithms.DataAnalysis")]
824    [TestProperty("Time", "short")]
825    public void MctsSymbRegBenchmarkNguyen8() {
826      // Sqrt(x)
827      // = x ^ 0.5
828      // = exp(0.5 * log(x))
829      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.NguyenInstanceProvider(Seed);
830      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("F8 ")));
831      TestGrammarEnumeration(regProblem);
832    }
833   
834    // [TestMethod]
835    [TestCategory("Algorithms.DataAnalysis")]
836    [TestProperty("Time", "short")]
837    public void MctsSymbRegBenchmarkNguyen9() {
838      //  sin(x) + sin(y²)
839      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.NguyenInstanceProvider();
840      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("F9 ")));
841      TestGrammarEnumeration(regProblem);
842    }
843
844    // [TestMethod]
845    [TestCategory("Algorithms.DataAnalysis")]
846    [TestProperty("Time", "short")]
847    public void MctsSymbRegBenchmarkNguyen10() {
848      // 2sin(x)cos(y)
849      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.NguyenInstanceProvider();
850      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("F10 ")));
851      TestGrammarEnumeration(regProblem);
852    }
853   
854    [TestMethod]
855    [TestCategory("Algorithms.DataAnalysis")]
856    [TestProperty("Time", "short")]
857    public void MctsSymbRegBenchmarkNguyen11() {
858      // x ^ y  , x > 0, y > 0   
859      // = exp(y * log(x))
860      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.NguyenInstanceProvider(Seed);
861      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("F11 ")));
862      TestGrammarEnumeration(regProblem);
863    }
864    [TestMethod]
865    [TestCategory("Algorithms.DataAnalysis")]
866    [TestProperty("Time", "short")]
867    public void MctsSymbRegBenchmarkNguyen12() {
868      // x^4 - x³ + y²/2 - y
869      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.NguyenInstanceProvider(Seed);
870      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("F12 ")));
871      TestGrammarEnumeration(regProblem);
872    }
873
874    [TestMethod]
875    [TestCategory("Algorithms.DataAnalysis")]
876    [TestProperty("Time", "long")]
877    public void MctsSymbRegBenchmarkKeijzer5() {
878      // (30 * x * z) / ((x - 10)  * y²)
879      // = 30 x z / (xy² - y²)
880      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.KeijzerInstanceProvider(Seed);
881      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Keijzer 5 f(")));
882      // some Keijzer problem instances have very large test partitions (here we are not concerened about test performance)
883      if (regProblem.TestPartition.End - regProblem.TestPartition.Start > 1000) regProblem.TestPartition.End = regProblem.TestPartition.Start + 1000;
884      TestGrammarEnumeration(regProblem);
885    }
886
887    [TestMethod]
888    [TestCategory("Algorithms.DataAnalysis")]
889    [TestProperty("Time", "short")]
890    public void MctsSymbRegBenchmarkKeijzer6() {
891      // Keijzer 6 f(x) = Sum(1 / i) From 1 to X  , x \in [0..120]
892      // we can only approximate this
893      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.KeijzerInstanceProvider(Seed);
894      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Keijzer 6 f(")));
895      // some Keijzer problem instances have very large test partitions (here we are not concerened about test performance)
896      if (regProblem.TestPartition.End - regProblem.TestPartition.Start > 1000) regProblem.TestPartition.End = regProblem.TestPartition.Start + 1000;
897      TestGrammarEnumeration(regProblem);
898    }
899
900    [TestMethod]
901    [TestCategory("Algorithms.DataAnalysis")]
902    [TestProperty("Time", "short")]
903    public void MctsSymbRegBenchmarkKeijzer8() {
904      // sqrt(x)
905      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.KeijzerInstanceProvider(Seed);
906      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Keijzer 8 f(")));
907      // some Keijzer problem instances have very large test partitions (here we are not concerened about test performance)
908      if (regProblem.TestPartition.End - regProblem.TestPartition.Start > 1000) regProblem.TestPartition.End = regProblem.TestPartition.Start + 1000;
909      TestGrammarEnumeration(regProblem);
910    }
911
912    [TestMethod]
913    [TestCategory("Algorithms.DataAnalysis")]
914    [TestProperty("Time", "short")]
915    public void MctsSymbRegBenchmarkKeijzer9() {
916      // arcsinh(x)  i.e. ln(x + sqrt(x² + 1))
917      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.KeijzerInstanceProvider(Seed);
918      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Keijzer 9 f(")));
919      // some Keijzer problem instances have very large test partitions (here we are not concerened about test performance)
920      if (regProblem.TestPartition.End - regProblem.TestPartition.Start > 1000) regProblem.TestPartition.End = regProblem.TestPartition.Start + 1000;
921      TestGrammarEnumeration(regProblem);
922    }
923
924    [TestMethod]
925    [TestCategory("Algorithms.DataAnalysis")]
926    [TestProperty("Time", "short")]
927    public void MctsSymbRegBenchmarkKeijzer11() {
928      // xy + sin( (x-1) (y-1) )
929      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.KeijzerInstanceProvider();
930      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Keijzer 11 f(")));
931      // some Keijzer problem instances have very large test partitions (here we are not concerened about test performance)
932      if (regProblem.TestPartition.End - regProblem.TestPartition.Start > 1000) regProblem.TestPartition.End = regProblem.TestPartition.Start + 1000;
933      TestGrammarEnumeration(regProblem);
934    }
935
936    [TestMethod]
937    [TestCategory("Algorithms.DataAnalysis")]
938    [TestProperty("Time", "short")]
939    public void MctsSymbRegBenchmarkKeijzer12() {
940      // x^4 - x³ + y² / 2 - y,  same as Nguyen 12             
941      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.KeijzerInstanceProvider(Seed);
942      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Keijzer 12 f(")));
943      // some Keijzer problem instances have very large test partitions (here we are not concerened about test performance)
944      if (regProblem.TestPartition.End - regProblem.TestPartition.Start > 1000) regProblem.TestPartition.End = regProblem.TestPartition.Start + 1000;
945      TestGrammarEnumeration(regProblem);
946    }
947
948    [TestMethod]
949    [TestCategory("Algorithms.DataAnalysis")]
950    [TestProperty("Time", "short")]
951    public void MctsSymbRegBenchmarkKeijzer14() {
952      // 8 / (2 + x² + y²)
953      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.KeijzerInstanceProvider(Seed);
954      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Keijzer 14 f(")));
955      // some Keijzer problem instances have very large test partitions (here we are not concerened about test performance)
956      if (regProblem.TestPartition.End - regProblem.TestPartition.Start > 1000) regProblem.TestPartition.End = regProblem.TestPartition.Start + 1000;
957      TestGrammarEnumeration(regProblem);
958    }
959
960    [TestMethod]
961    [TestCategory("Algorithms.DataAnalysis")]
962    [TestProperty("Time", "short")]
963    public void MctsSymbRegBenchmarkKeijzer15() {
964      // x³ / 5 + y³ / 2 - y - x
965      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.KeijzerInstanceProvider(Seed);
966      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Keijzer 15 f(")));
967      // some Keijzer problem instances have very large test partitions (here we are not concerened about test performance)
968      if (regProblem.TestPartition.End - regProblem.TestPartition.Start > 1000) regProblem.TestPartition.End = regProblem.TestPartition.Start + 1000;
969      TestGrammarEnumeration(regProblem);
970    }
971#endif
972  }
973}
Note: See TracBrowser for help on using the repository browser.