- Timestamp:
- 10/11/17 08:15:19 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/MCTS-SymbReg-2796/Tests/HeuristicLab.Algorithms.DataAnalysis-3.4/MctsSymbolicRegressionTest.cs
r15414 r15416 7 7 using HeuristicLab.Problems.DataAnalysis; 8 8 using HeuristicLab.Problems.Instances.DataAnalysis; 9 using HeuristicLab.Random; 9 10 using Microsoft.VisualStudio.TestTools.UnitTesting; 10 11 … … 550 551 var provider = new HeuristicLab.Problems.Instances.DataAnalysis.NguyenInstanceProvider(seed: 1234); 551 552 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 554 757 555 758 [TestMethod] … … 559 762 var provider = new HeuristicLab.Problems.Instances.DataAnalysis.VariousInstanceProvider(seed: 1234); 560 763 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); 562 812 } 563 813 #endregion … … 822 1072 mctsSymbReg.ConstantOptimizationIterations = -1; 823 1073 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 824 1085 #endregion 825 1086 RunAlgorithm(mctsSymbReg);
Note: See TracChangeset
for help on using the changeset viewer.