Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/16/15 09:14:38 (9 years ago)
Author:
gkronber
Message:

#2283: worked on transformation of arithmetic expressions to canonical form

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Problems.GrammaticalOptimization/Test/TestCanonicalExpressions.cs

    r11972 r12014  
    55using System.Threading.Tasks;
    66using HeuristicLab.Algorithms.Bandits;
     7using HeuristicLab.Algorithms.Bandits.GrammarPolicies;
     8using HeuristicLab.Algorithms.GrammaticalOptimization;
     9using HeuristicLab.Problems.GrammaticalOptimization.SymbReg;
    710using Microsoft.VisualStudio.TestTools.UnitTesting;
    811
     
    6467      Assert.AreEqual("a*b+b*c", extender.CanonicalRepresentation("b*(c-a)"));
    6568      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)"));
    6670    }
    6771    [TestMethod]
    6872    public void TestDivisionExpansion() {
    6973      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)"));
    7478
    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)"));
    7781      // a*b*e%(c+d)%(a+b)
    7882    }
     
    8084    public void TestDivisionCancellation() {
    8185      var extender = new ExpressionExtender();
    82       Assert.AreEqual("1", extender.CanonicalRepresentation("a%a"));
     86      Assert.AreEqual("|", extender.CanonicalRepresentation("a%a"));
    8387      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"));
    8690      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);
    90117    }
    91118  }
Note: See TracChangeset for help on using the changeset viewer.