Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/11/17 08:15:19 (7 years ago)
Author:
gkronber
Message:

#2796 worked on MCTS for symbreg

Location:
branches/MCTS-SymbReg-2796/Tests
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/MCTS-SymbReg-2796/Tests/HeuristicLab.Algorithms.DataAnalysis-3.4/MctsSymbolicRegressionTest.cs

    r15414 r15416  
    77using HeuristicLab.Problems.DataAnalysis;
    88using HeuristicLab.Problems.Instances.DataAnalysis;
     9using HeuristicLab.Random;
    910using Microsoft.VisualStudio.TestTools.UnitTesting;
    1011
     
    550551      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.NguyenInstanceProvider(seed: 1234);
    551552      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("F7 ")));
    552       TestMctsWithoutConstants(regProblem, nVarRefs: 10, iterations: 1000000, allowExp: false, allowLog: true, allowInv: false);
    553     }
     553      TestMctsWithoutConstants(regProblem, nVarRefs: 10, iterations: 100000, allowExp: false, allowLog: true, allowInv: false);
     554    }
     555
     556    [TestMethod]
     557    [TestCategory("Algorithms.DataAnalysis")]
     558    [TestProperty("Time", "short")]
     559    public void MctsSymbReg_NoConstants_Poly10_Part1() {
     560      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.VariousInstanceProvider(seed: 1234);
     561      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Poly-10")));
     562
     563      //  Y = X1*X2 + X3*X4 + X5*X6 + X1*X7*X9 + X3*X6*X10
     564      //  Y' = X1*X2 + X3*X4 + X5*X6
     565      // simplify problem by changing target
     566      var ds = ((Dataset)regProblem.Dataset).ToModifiable();
     567      var ys = ds.GetDoubleValues("Y").ToArray();
     568      var x1 = ds.GetDoubleValues("X1").ToArray();
     569      var x2 = ds.GetDoubleValues("X2").ToArray();
     570      var x3 = ds.GetDoubleValues("X3").ToArray();
     571      var x4 = ds.GetDoubleValues("X4").ToArray();
     572      var x5 = ds.GetDoubleValues("X5").ToArray();
     573      var x6 = ds.GetDoubleValues("X6").ToArray();
     574      var x7 = ds.GetDoubleValues("X7").ToArray();
     575      var x8 = ds.GetDoubleValues("X8").ToArray();
     576      var x9 = ds.GetDoubleValues("X9").ToArray();
     577      var x10 = ds.GetDoubleValues("X10").ToArray();
     578      for (int i = 0; i < ys.Length; i++) {
     579        ys[i] -= x1[i] * x7[i] * x9[i];
     580        ys[i] -= x3[i] * x6[i] * x10[i];
     581      }
     582      ds.ReplaceVariable("Y", ys.ToList());
     583
     584      var modifiedProblemData = new RegressionProblemData(ds, regProblem.AllowedInputVariables, regProblem.TargetVariable);
     585
     586
     587      TestMctsWithoutConstants(modifiedProblemData, nVarRefs: 15, iterations: 100000, allowExp: false, allowLog: false, allowInv: false);
     588    }
     589
     590    [TestMethod]
     591    [TestCategory("Algorithms.DataAnalysis")]
     592    [TestProperty("Time", "short")]
     593    public void MctsSymbReg_NoConstants_Poly10_Part2() {
     594      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.VariousInstanceProvider(seed: 1234);
     595      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Poly-10")));
     596
     597      //  Y = X1*X2 + X3*X4 + X5*X6 + X1*X7*X9 + X3*X6*X10
     598      //  Y' = X1*X7*X9 + X3*X6*X10
     599      // simplify problem by changing target
     600      var ds = ((Dataset)regProblem.Dataset).ToModifiable();
     601      var ys = ds.GetDoubleValues("Y").ToArray();
     602      var x1 = ds.GetDoubleValues("X1").ToArray();
     603      var x2 = ds.GetDoubleValues("X2").ToArray();
     604      var x3 = ds.GetDoubleValues("X3").ToArray();
     605      var x4 = ds.GetDoubleValues("X4").ToArray();
     606      var x5 = ds.GetDoubleValues("X5").ToArray();
     607      var x6 = ds.GetDoubleValues("X6").ToArray();
     608      var x7 = ds.GetDoubleValues("X7").ToArray();
     609      var x8 = ds.GetDoubleValues("X8").ToArray();
     610      var x9 = ds.GetDoubleValues("X9").ToArray();
     611      var x10 = ds.GetDoubleValues("X10").ToArray();
     612      for (int i = 0; i < ys.Length; i++) {
     613        ys[i] -= x1[i] * x2[i];
     614        ys[i] -= x3[i] * x4[i];
     615        ys[i] -= x5[i] * x6[i];
     616      }
     617      ds.ReplaceVariable("Y", ys.ToList());
     618
     619      var modifiedProblemData = new RegressionProblemData(ds, regProblem.AllowedInputVariables, regProblem.TargetVariable);
     620
     621
     622      TestMctsWithoutConstants(modifiedProblemData, nVarRefs: 15, iterations: 100000, allowExp: false, allowLog: false, allowInv: false);
     623    }
     624
     625    [TestMethod]
     626    [TestCategory("Algorithms.DataAnalysis")]
     627    [TestProperty("Time", "short")]
     628    public void MctsSymbReg_NoConstants_Poly10_Part3() {
     629      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.VariousInstanceProvider(seed: 1234);
     630      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Poly-10")));
     631
     632      //  Y = X1*X2 + X3*X4 + X5*X6 + X1*X7*X9 + X3*X6*X10
     633      //  Y' = X1*X2 + X1*X7*X9
     634      // simplify problem by changing target
     635      var ds = ((Dataset)regProblem.Dataset).ToModifiable();
     636      var ys = ds.GetDoubleValues("Y").ToArray();
     637      var x1 = ds.GetDoubleValues("X1").ToArray();
     638      var x2 = ds.GetDoubleValues("X2").ToArray();
     639      var x3 = ds.GetDoubleValues("X3").ToArray();
     640      var x4 = ds.GetDoubleValues("X4").ToArray();
     641      var x5 = ds.GetDoubleValues("X5").ToArray();
     642      var x6 = ds.GetDoubleValues("X6").ToArray();
     643      var x7 = ds.GetDoubleValues("X7").ToArray();
     644      var x8 = ds.GetDoubleValues("X8").ToArray();
     645      var x9 = ds.GetDoubleValues("X9").ToArray();
     646      var x10 = ds.GetDoubleValues("X10").ToArray();
     647      for (int i = 0; i < ys.Length; i++) {
     648        ys[i] -= x3[i] * x4[i];
     649        ys[i] -= x5[i] * x6[i];
     650        ys[i] -= x3[i] * x6[i] * x10[i];
     651      }
     652      ds.ReplaceVariable("Y", ys.ToList());
     653
     654      var modifiedProblemData = new RegressionProblemData(ds, regProblem.AllowedInputVariables, regProblem.TargetVariable);
     655
     656
     657      TestMctsWithoutConstants(modifiedProblemData, nVarRefs: 15, iterations: 100000, allowExp: false, allowLog: false, allowInv: false);
     658    }
     659
     660    [TestMethod]
     661    [TestCategory("Algorithms.DataAnalysis")]
     662    [TestProperty("Time", "short")]
     663    public void MctsSymbReg_NoConstants_Poly10_Part4() {
     664      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.VariousInstanceProvider(seed: 1234);
     665      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Poly-10")));
     666
     667      //  Y = X1*X2 + X3*X4 + X5*X6 + X1*X7*X9 + X3*X6*X10
     668      //  Y' = X3*X4 + X5*X6 + X3*X6*X10
     669      // simplify problem by changing target
     670      var ds = ((Dataset)regProblem.Dataset).ToModifiable();
     671      var ys = ds.GetDoubleValues("Y").ToArray();
     672      var x1 = ds.GetDoubleValues("X1").ToArray();
     673      var x2 = ds.GetDoubleValues("X2").ToArray();
     674      var x3 = ds.GetDoubleValues("X3").ToArray();
     675      var x4 = ds.GetDoubleValues("X4").ToArray();
     676      var x5 = ds.GetDoubleValues("X5").ToArray();
     677      var x6 = ds.GetDoubleValues("X6").ToArray();
     678      var x7 = ds.GetDoubleValues("X7").ToArray();
     679      var x8 = ds.GetDoubleValues("X8").ToArray();
     680      var x9 = ds.GetDoubleValues("X9").ToArray();
     681      var x10 = ds.GetDoubleValues("X10").ToArray();
     682      for (int i = 0; i < ys.Length; i++) {
     683        ys[i] -= x1[i] * x2[i];
     684        ys[i] -= x1[i] * x7[i] * x9[i];
     685      }
     686      ds.ReplaceVariable("Y", ys.ToList());
     687      var modifiedProblemData = new RegressionProblemData(ds, regProblem.AllowedInputVariables, regProblem.TargetVariable);
     688
     689
     690      TestMctsWithoutConstants(modifiedProblemData, nVarRefs: 15, iterations: 100000, allowExp: false, allowLog: false, allowInv: false);
     691    }
     692
     693    [TestMethod]
     694    [TestCategory("Algorithms.DataAnalysis")]
     695    [TestProperty("Time", "short")]
     696    public void MctsSymbReg_NoConstants_Poly10_Part5() {
     697      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.VariousInstanceProvider(seed: 1234);
     698      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Poly-10")));
     699
     700      //  Y = X1*X2 + X3*X4 + X5*X6 + X1*X7*X9 + X3*X6*X10
     701      //  Y' = X1*X2 + X3*X4 + X5*X6 + X1*X7*X9
     702      // simplify problem by changing target
     703      var ds = ((Dataset)regProblem.Dataset).ToModifiable();
     704      var ys = ds.GetDoubleValues("Y").ToArray();
     705      var x1 = ds.GetDoubleValues("X1").ToArray();
     706      var x2 = ds.GetDoubleValues("X2").ToArray();
     707      var x3 = ds.GetDoubleValues("X3").ToArray();
     708      var x4 = ds.GetDoubleValues("X4").ToArray();
     709      var x5 = ds.GetDoubleValues("X5").ToArray();
     710      var x6 = ds.GetDoubleValues("X6").ToArray();
     711      var x7 = ds.GetDoubleValues("X7").ToArray();
     712      var x8 = ds.GetDoubleValues("X8").ToArray();
     713      var x9 = ds.GetDoubleValues("X9").ToArray();
     714      var x10 = ds.GetDoubleValues("X10").ToArray();
     715      for (int i = 0; i < ys.Length; i++) {
     716        ys[i] -= x3[i] * x6[i] * x10[i];
     717      }
     718      ds.ReplaceVariable("Y", ys.ToList());
     719      var modifiedProblemData = new RegressionProblemData(ds, regProblem.AllowedInputVariables, regProblem.TargetVariable);
     720
     721
     722      TestMctsWithoutConstants(modifiedProblemData, nVarRefs: 15, iterations: 100000, allowExp: false, allowLog: false, allowInv: false);
     723    }
     724
     725    [TestMethod]
     726    [TestCategory("Algorithms.DataAnalysis")]
     727    [TestProperty("Time", "short")]
     728    public void MctsSymbReg_NoConstants_Poly10_Part6() {
     729      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.VariousInstanceProvider(seed: 1234);
     730      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Poly-10")));
     731
     732      //  Y = X1*X2 + X3*X4 + X5*X6 + X1*X7*X9 + X3*X6*X10
     733      //  Y' = X1*X2 + X3*X4 + X5*X6 + X3*X6*X10
     734      // simplify problem by changing target
     735      var ds = ((Dataset)regProblem.Dataset).ToModifiable();
     736      var ys = ds.GetDoubleValues("Y").ToArray();
     737      var x1 = ds.GetDoubleValues("X1").ToArray();
     738      var x2 = ds.GetDoubleValues("X2").ToArray();
     739      var x3 = ds.GetDoubleValues("X3").ToArray();
     740      var x4 = ds.GetDoubleValues("X4").ToArray();
     741      var x5 = ds.GetDoubleValues("X5").ToArray();
     742      var x6 = ds.GetDoubleValues("X6").ToArray();
     743      var x7 = ds.GetDoubleValues("X7").ToArray();
     744      var x8 = ds.GetDoubleValues("X8").ToArray();
     745      var x9 = ds.GetDoubleValues("X9").ToArray();
     746      var x10 = ds.GetDoubleValues("X10").ToArray();
     747      for (int i = 0; i < ys.Length; i++) {
     748        ys[i] -= x1[i] * x7[i] * x9[i];
     749      }
     750      ds.ReplaceVariable("Y", ys.ToList());
     751      var modifiedProblemData = new RegressionProblemData(ds, regProblem.AllowedInputVariables, regProblem.TargetVariable);
     752
     753
     754      TestMctsWithoutConstants(modifiedProblemData, nVarRefs: 9, iterations: 100000, allowExp: false, allowLog: false, allowInv: false);
     755    }
     756
    554757
    555758    [TestMethod]
     
    559762      var provider = new HeuristicLab.Problems.Instances.DataAnalysis.VariousInstanceProvider(seed: 1234);
    560763      var regProblem = provider.LoadData(provider.GetDataDescriptors().Single(x => x.Name.Contains("Poly-10")));
    561       TestMctsWithoutConstants(regProblem, nVarRefs: 15, iterations: 1000000, allowExp: false, allowLog: false, allowInv: false);
     764      TestMctsWithoutConstants(regProblem, nVarRefs: 15, iterations: 200000, allowExp: false, allowLog: false, allowInv: false);
     765    }
     766
     767    [TestMethod]
     768    [TestCategory("Algorithms.DataAnalysis")]
     769    [TestProperty("Time", "short")]
     770    public void MctsSymbReg_NoConstants_TwoVars() {
     771
     772      // y = x1 + x2 + x1*x2 + x1*x2*x2 + x1*x1*x2
     773      var rand = new FastRandom(1234);
     774      var x1 = Enumerable.Range(0, 100).Select(_ => rand.NextDouble()).ToList();
     775      var x2 = Enumerable.Range(0, 100).Select(_ => rand.NextDouble()).ToList();
     776      var ys = x1.Zip(x2, (x1i, x2i) => x1i + x2i + x1i * x2i + x1i * x2i * x2i + x1i * x1i * x2i).ToList();
     777
     778      var ds = new Dataset(new string[] { "a", "b", "y" }, new[] { x1, x2, ys });
     779
     780      var problemData = new RegressionProblemData(ds, new string[] { "a", "b" }, "y");
     781
     782
     783      TestMctsWithoutConstants(problemData, nVarRefs: 10, iterations: 10000, allowExp: false, allowLog: false, allowInv: false);
     784    }
     785
     786    [TestMethod]
     787    [TestCategory("Algorithms.DataAnalysis")]
     788    [TestProperty("Time", "short")]
     789    public void MctsSymbReg_NoConstants_Misleading() {
     790
     791      // y = a + baaaaa (the effect of the second term should be very small)
     792      // the alg will quickly find that a has big effect and will search below a
     793      // since we prevent a + a... the algorithm must find the correct expression via a + b...
     794      // however b has a small effect so the branch might not be identified as relevant
     795
     796      var rand = new FastRandom(1234);
     797      var @as = Enumerable.Range(0, 100).Select(_ => rand.NextDouble()).ToList();
     798      var bs = Enumerable.Range(0, 100).Select(_ => rand.NextDouble()).ToList();
     799      var cs = Enumerable.Range(0, 100).Select(_ => rand.NextDouble() *1.0e-3).ToList();
     800      var ds = Enumerable.Range(0, 100).Select(_ => rand.NextDouble() ).ToList();
     801      var es = Enumerable.Range(0, 100).Select(_ => rand.NextDouble() ).ToList();
     802      var ys = new double[@as.Count];
     803      for(int i=0;i<ys.Length;i++)
     804        ys[i] = @as[i] + bs[i] + @as[i]*bs[i]*cs[i];
     805
     806      var dataset = new Dataset(new string[] { "a", "b", "c", "d", "e", "y" }, new[] { @as, bs, cs, ds, es, ys.ToList() });
     807
     808      var problemData = new RegressionProblemData(dataset, new string[] { "a", "b","c","d","e" }, "y");
     809
     810
     811      TestMctsWithoutConstants(problemData, nVarRefs: 10, iterations: 10000, allowExp: false, allowLog: false, allowInv: false);
    562812    }
    563813    #endregion
     
    8221072      mctsSymbReg.ConstantOptimizationIterations = -1;
    8231073
     1074      // random policy
     1075      // var epsPolicy = new EpsilonGreedy();
     1076      // epsPolicy.Eps = 1.0;
     1077      // mctsSymbReg.Policy = epsPolicy;
     1078
     1079      // UCB tuned
     1080      // var ucbTuned = new UcbTuned();
     1081      // ucbTuned.C = 1.5;
     1082      // mctsSymbReg.Policy = ucbTuned;
     1083
     1084
    8241085      #endregion
    8251086      RunAlgorithm(mctsSymbReg);
  • branches/MCTS-SymbReg-2796/Tests/Test.csproj

    r15403 r15416  
    6363      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Problems.Instances.DataAnalysis-3.3.dll</HintPath>
    6464    </Reference>
     65    <Reference Include="HeuristicLab.Random-3.3, Version=3.3.0.0, Culture=neutral, PublicKeyToken=ba48961d6f65dcec, processorArchitecture=MSIL">
     66      <SpecificVersion>False</SpecificVersion>
     67      <HintPath>..\..\..\trunk\sources\bin\HeuristicLab.Random-3.3.dll</HintPath>
     68    </Reference>
    6569    <Reference Include="System" />
    6670  </ItemGroup>
Note: See TracChangeset for help on using the changeset viewer.