Changeset 12014 for branches/HeuristicLab.Problems.GrammaticalOptimization/Test/TestCanonicalExpressions.cs
- Timestamp:
- 02/16/15 09:14:38 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Problems.GrammaticalOptimization/Test/TestCanonicalExpressions.cs
r11972 r12014 5 5 using System.Threading.Tasks; 6 6 using HeuristicLab.Algorithms.Bandits; 7 using HeuristicLab.Algorithms.Bandits.GrammarPolicies; 8 using HeuristicLab.Algorithms.GrammaticalOptimization; 9 using HeuristicLab.Problems.GrammaticalOptimization.SymbReg; 7 10 using Microsoft.VisualStudio.TestTools.UnitTesting; 8 11 … … 64 67 Assert.AreEqual("a*b+b*c", extender.CanonicalRepresentation("b*(c-a)")); 65 68 Assert.AreEqual("a*b+a*d+b*c+c*d", extender.CanonicalRepresentation("(b-d)*(c-a)")); 69 Assert.AreEqual("|/(a+b)", extender.CanonicalRepresentation("c%c%(a+b)")); 66 70 } 67 71 [TestMethod] 68 72 public void TestDivisionExpansion() { 69 73 var extender = new ExpressionExtender(); 70 Assert.AreEqual("a* 1/c+b*1/c", extender.CanonicalRepresentation("(b+a)%c"));71 Assert.AreEqual("a* 1/c*1/d+b*1/c*1/d", extender.CanonicalRepresentation("(b+a)%(d*c)"));72 Assert.AreEqual("a* 1/(c+d)+b*1/(c+d)", extender.CanonicalRepresentation("(b-a)%(d-c)"));73 Assert.AreEqual("a*b* 1/(c+d)", extender.CanonicalRepresentation("(b*a)%(d-c)"));74 Assert.AreEqual("a*|/c+b*|/c", extender.CanonicalRepresentation("(b+a)%c")); 75 Assert.AreEqual("a*|/c*|/d+b*|/c*|/d", extender.CanonicalRepresentation("(b+a)%(d*c)")); 76 Assert.AreEqual("a*|/(c+d)+b*|/(c+d)", extender.CanonicalRepresentation("(b-a)%(d-c)")); 77 Assert.AreEqual("a*b*|/(c+d)", extender.CanonicalRepresentation("(b*a)%(d-c)")); 74 78 75 Assert.AreEqual("a*b* 1/(a+b)*1/(c+d)", extender.CanonicalRepresentation("(b*a)%(d-c)%(a+b)"));76 Assert.AreEqual("a*b* 1/(a*1/e+b*1/e)*1/(c+d)", extender.CanonicalRepresentation("((b*a)%(d-c))%((a+b)%e)"));79 Assert.AreEqual("a*b*|/(a+b)*|/(c+d)", extender.CanonicalRepresentation("(b*a)%(d-c)%(a+b)")); 80 Assert.AreEqual("a*b*|/(c+d)*|/(a*|/e+b*|/e)", extender.CanonicalRepresentation("((b*a)%(d-c))%((a+b)%e)")); 77 81 // a*b*e%(c+d)%(a+b) 78 82 } … … 80 84 public void TestDivisionCancellation() { 81 85 var extender = new ExpressionExtender(); 82 Assert.AreEqual(" 1", extender.CanonicalRepresentation("a%a"));86 Assert.AreEqual("|", extender.CanonicalRepresentation("a%a")); 83 87 Assert.AreEqual("a", extender.CanonicalRepresentation("a*a%a")); 84 Assert.AreEqual(" 1/a", extender.CanonicalRepresentation("(a%a)%a"));85 Assert.AreEqual(" 1/a", extender.CanonicalRepresentation("a%a%a"));88 Assert.AreEqual("|/a", extender.CanonicalRepresentation("(a%a)%a")); 89 Assert.AreEqual("|/a", extender.CanonicalRepresentation("a%a%a")); 86 90 Assert.AreEqual("a", extender.CanonicalRepresentation("a%(a%a)")); 87 Assert.AreEqual("1", extender.CanonicalRepresentation("(a+b)%(b+a)")); 88 Assert.AreEqual("1/a+1/b", extender.CanonicalRepresentation("(a+b)%(a*b)")); 89 Assert.AreEqual("a*1/(a*c*1/b+e*1/d*1/f)+b*1/(a*c*1/b+e*1/d*1/f)", extender.CanonicalRepresentation("(a+b)%(a%b*c+e%f%d)")); 91 Assert.AreEqual("|", extender.CanonicalRepresentation("(a+b)%(b+a)")); 92 Assert.AreEqual("|/a+|/b", extender.CanonicalRepresentation("(a+b)%(a*b)")); 93 Assert.AreEqual("a*|/(a*c*|/b+e*|/d*|/f)+b*|/(a*c*|/b+e*|/d*|/f)", extender.CanonicalRepresentation("(a+b)%(a%b*c+e%f%d)")); 94 Assert.AreEqual("|", extender.CanonicalRepresentation("(a%a%a+b%b%b)%(a%a*a%a%a+b%b*b%b%b)")); 95 Assert.AreEqual("|", extender.CanonicalRepresentation("(a%(a%a)+b%(b%b))%(a+b)")); 96 } 97 98 [TestMethod] 99 public void TestRandomExpressions() { 100 // samples sentences for the Tower dataset with the random MCTS policy 101 // and evaluates the original and the extended expression 102 // the results must be the same 103 104 var problem = new SymbolicRegressionProblem(new Random(), "Tower"); 105 var random = new Random(31415); 106 var solver = new SequentialSearch(problem, 30, random, 0, new RandomPolicy(problem, true)); 107 108 var extender = new ExpressionExtender(); 109 110 solver.SolutionEvaluated += (sentence, quality) => { 111 var canonicalSentence = extender.CanonicalRepresentation(sentence); 112 113 Assert.AreEqual(problem.SimpleEvaluate(sentence), problem.SimpleEvaluate(canonicalSentence), 1E-4, string.Format("{0} <> {1}", sentence, canonicalSentence)); 114 }; 115 116 solver.Run(10000); 90 117 } 91 118 }
Note: See TracChangeset
for help on using the changeset viewer.