using System; using System.Linq; using HeuristicLab.Algorithms.Bandits.BanditPolicies; using HeuristicLab.Algorithms.Bandits.GrammarPolicies; using HeuristicLab.Algorithms.GeneticProgramming; using HeuristicLab.Algorithms.GrammaticalOptimization; using HeuristicLab.Problems.GrammaticalOptimization.SymbReg; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace HeuristicLab.Problems.GrammaticalOptimization.Test { // tests for the brige to the HL symb-reg instances [TestClass] public class TestSymbRegInstances { [TestMethod] public void TestGetDataDescriptors() { var problem = new SymbolicRegressionProblem(new Random(), "Tower"); Assert.IsNotNull(problem); } [TestMethod] public void TestConstantOptimization() { double r2; var problem = new SymbolicRegressionProblem(new Random(), "Tower"); Assert.AreEqual(problem.Evaluate("a*b"), problem.OptimizeConstantsAndEvaluate("a*b")); Assert.AreEqual(problem.OptimizeConstantsAndEvaluate("a*b"), problem.Evaluate("a*b")); Assert.AreEqual(problem.OptimizeConstantsAndEvaluate("0*a*b"), problem.Evaluate("a*b"), 1E-6); Assert.AreEqual(problem.OptimizeConstantsAndEvaluate("0*a*b+1"), problem.Evaluate("a*b"), 1E-6); Assert.IsTrue(problem.OptimizeConstantsAndEvaluate("0*a+b") >= problem.Evaluate("a+b")); Assert.AreEqual(problem.OptimizeConstantsAndEvaluate("0*a+0*b"), problem.Evaluate("a+b"), 1E-6); Assert.IsTrue(problem.OptimizeConstantsAndEvaluate("0*a+1*b") >= problem.Evaluate("a+b")); } [TestMethod] [Timeout(1000 * 60 * 60 * 8)] // 8 hours public void TestSequentialSolverForTower() { var problem = new SymbolicRegressionProblem(new Random(), "Tower"); var random = new Random(31415); var solver = new SequentialSearch(problem, 50, random, 0, new GenericFunctionApproximationGrammarPolicy(problem, true)); solver.FoundNewBestSolution += (s, d) => { Console.WriteLine("{0:F3} {1}", d, s); }; solver.Run(100000); } } }