Changeset 15404 for branches/MCTS-SymbReg-2796
- Timestamp:
- 10/05/17 10:03:32 (7 years ago)
- Location:
- branches/MCTS-SymbReg-2796
- Files:
-
- 1 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/MCTS-SymbReg-2796/HeuristicLab.Algorithms.DataAnalysis/3.4/HeuristicLab.Algorithms.DataAnalysis.MCTSSymbReg.csproj
r15360 r15404 112 112 <Compile Include="MctsSymbolicRegression\Policies\Ucb.cs" /> 113 113 <Compile Include="MctsSymbolicRegression\Policies\UcbTuned.cs" /> 114 <Compile Include="MctsSymbolicRegression\ExprHash.cs" /> 114 115 <Compile Include="MctsSymbolicRegression\SymbolicExpressionGenerator.cs" /> 115 116 <Compile Include="MctsSymbolicRegression\Tree.cs" /> -
branches/MCTS-SymbReg-2796/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/CodeGenerator.cs
r14185 r15404 23 23 24 24 namespace HeuristicLab.Algorithms.DataAnalysis.MctsSymbolicRegression { 25 internalclass CodeGenerator {25 public class CodeGenerator { 26 26 27 27 public const int MaxCodeLength = 10000; -
branches/MCTS-SymbReg-2796/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/ConstraintHandler.cs
r15403 r15404 324 324 325 325 326 /* DISABLED FOR TESTING CONSTRAINTS 326 327 // starting a new term is only allowed if we can add a term with at least the number of variables of the prev term 327 328 if (followState == Automaton.StateTermStart && !IsNewTermAllowed()) return false; … … 329 330 if (currentState == Automaton.StateFactorStart && !IsAllowedAsNextFactorType(followState)) return false; 330 331 if (followState == Automaton.StateTermEnd && prevTerm != null && CompareTerms(prevTerm, curTerm) > 0) return false; 332 */ 331 333 332 334 // all of these states add at least one variable … … 341 343 } 342 344 345 /* DISABLED FOR TESTING CONSTRAINTS 343 346 if (currentState == Automaton.StateVariableFactorStart && !IsAllowedAsNextVariableFactor(followState)) return false; 344 347 else if (currentState == Automaton.StateExpFStart && !IsAllowedAsNextInExp(followState)) return false; … … 353 356 else if (followState == Automaton.StateLogTEnd && !IsTermCompleteInPoly()) return false; 354 357 355 else if (nVars > maxVariables) return false; 358 else 359 */ 360 if (nVars > maxVariables) return false; 356 361 else return true; 357 362 } -
branches/MCTS-SymbReg-2796/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/MctsSymbolicRegressionStatic.cs
r15403 r15404 54 54 // 55 55 56 // TODO NEXT: check if transformation of y is correct and works 57 // TODO: transform target y to zero-mean and remove linear scaling parameters 58 // TODO: include offset for variables as parameter 59 // TODO: why does LM optimization converge so slowly with exp(x), log(x), and 1/x allowed? 60 // TODO: support e(-x) and possibly (1/-x) 61 // TODO: is it OK to initialize all constants to 1? 56 // TODO: Constraint handling is too restrictive! E.g. for Poly-10, if MCTS identifies the term x3*x4 first it is 57 // not possible to add the term x1*x2 later on. The same is true for individual terms after x2 it is not 58 // possible to multiply x1. It is easy to get stuck. Why do we actually need the current way of constraint handling? 59 // It would probably be easier to use some kind of hashing to identify equivalent expressions in the tree. 60 // TODO: check if transformation of y is correct and works (Obj 2) 61 // TODO: The algorithm is not invariant to location and scale of variables. 62 // Include offset for variables as parameter (for Objective 2) 63 // TODO: why does LM optimization converge so slowly with exp(x), log(x), and 1/x allowed (Obj 2)? 64 // TODO: support e(-x) and possibly (1/-x) (Obj 1) 65 // TODO: is it OK to initialize all constants to 1 (Obj 2)? 62 66 #region static API 63 67 -
branches/MCTS-SymbReg-2796/HeuristicLab.Algorithms.DataAnalysis/3.4/MctsSymbolicRegression/OpCodes.cs
r14185 r15404 21 21 22 22 namespace HeuristicLab.Algorithms.DataAnalysis.MctsSymbolicRegression { 23 internalenum OpCodes : byte {23 public enum OpCodes : byte { 24 24 Nop, 25 25 LoadConst0, -
branches/MCTS-SymbReg-2796/Tests/HeuristicLab.Algorithms.DataAnalysis-3.4/MctsSymbolicRegressionTest.cs
r15403 r15404 2 2 using System.Linq; 3 3 using System.Threading; 4 using HeuristicLab.Algorithms.DataAnalysis.MctsSymbolicRegression;5 4 using HeuristicLab.Algorithms.DataAnalysis.MctsSymbolicRegression.Policies; 6 5 using HeuristicLab.Data; … … 10 9 using Microsoft.VisualStudio.TestTools.UnitTesting; 11 10 12 namespace HeuristicLab.Algorithms.DataAnalysis {11 namespace HeuristicLab.Algorithms.DataAnalysis.MctsSymbolicRegression { 13 12 [TestClass()] 14 13 public class MctsSymbolicRegressionTest { 14 #region expression hashing 15 [TestMethod] 16 [TestCategory("Algorithms.DataAnalysis")] 17 [TestProperty("Time", "short")] 18 public void ExprHashTest() { 19 int nParams; 20 byte[] code; 21 22 { 23 // addition of variables 24 var codeGen = new CodeGenerator(); 25 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 1); 26 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 2); 27 codeGen.Emit1(OpCodes.Add); 28 codeGen.Emit1(OpCodes.Exit); 29 codeGen.GetCode(out code, out nParams); 30 var h1 = ExprHash.GetHash(code, nParams); 31 32 codeGen = new CodeGenerator(); 33 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 2); 34 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 1); 35 codeGen.Emit1(OpCodes.Add); 36 codeGen.Emit1(OpCodes.Exit); 37 codeGen.GetCode(out code, out nParams); 38 var h2 = ExprHash.GetHash(code, nParams); 39 40 Assert.AreEqual(h1, h2); 41 } 42 43 { 44 // multiplication of variables 45 var codeGen = new CodeGenerator(); 46 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 1); 47 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 2); 48 codeGen.Emit1(OpCodes.Mul); 49 codeGen.Emit1(OpCodes.Exit); 50 codeGen.GetCode(out code, out nParams); 51 var h1 = ExprHash.GetHash(code, nParams); 52 53 codeGen = new CodeGenerator(); 54 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 2); 55 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 1); 56 codeGen.Emit1(OpCodes.Mul); 57 codeGen.Emit1(OpCodes.Exit); 58 codeGen.GetCode(out code, out nParams); 59 var h2 = ExprHash.GetHash(code, nParams); 60 61 Assert.AreEqual(h1, h2); 62 } 63 64 { 65 // distributivity 66 var codeGen = new CodeGenerator(); 67 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 1); 68 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 2); 69 codeGen.Emit1(OpCodes.Add); 70 codeGen.Emit2(OpCodes.LoadVar, 3); 71 codeGen.Emit1(OpCodes.Mul); 72 codeGen.Emit1(OpCodes.Exit); 73 codeGen.GetCode(out code, out nParams); 74 var h1 = ExprHash.GetHash(code, nParams); 75 76 codeGen = new CodeGenerator(); 77 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 2); 78 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 3); 79 codeGen.Emit1(OpCodes.Mul); 80 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 1); 81 codeGen.Emit2(OpCodes.LoadVar, 3); 82 codeGen.Emit1(OpCodes.Mul); 83 codeGen.Emit1(OpCodes.Add); 84 codeGen.Emit1(OpCodes.Exit); 85 codeGen.GetCode(out code, out nParams); 86 var h2 = ExprHash.GetHash(code, nParams); 87 88 Assert.AreEqual(h1, h2); 89 } 90 91 92 { 93 // div 94 var codeGen = new CodeGenerator(); 95 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 1); 96 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 2); 97 codeGen.Emit1(MctsSymbolicRegression.OpCodes.Mul); 98 codeGen.Emit1(OpCodes.Inv); 99 codeGen.Emit1(OpCodes.Exit); 100 codeGen.GetCode(out code, out nParams); 101 var h1 = ExprHash.GetHash(code, nParams); 102 103 codeGen = new CodeGenerator(); 104 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 1); 105 codeGen.Emit1(OpCodes.Inv); 106 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 2); 107 codeGen.Emit1(OpCodes.Inv); 108 codeGen.Emit1(MctsSymbolicRegression.OpCodes.Mul); 109 codeGen.Emit1(OpCodes.Exit); 110 codeGen.GetCode(out code, out nParams); 111 var h2 = ExprHash.GetHash(code, nParams); 112 113 Assert.AreEqual(h1, h2); 114 } 115 { 116 // exp 117 var codeGen = new CodeGenerator(); 118 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 1); 119 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 2); 120 codeGen.Emit1(MctsSymbolicRegression.OpCodes.Add); 121 codeGen.Emit1(OpCodes.Exp); 122 codeGen.Emit1(OpCodes.Exit); 123 codeGen.GetCode(out code, out nParams); 124 var h1 = ExprHash.GetHash(code, nParams); 125 126 codeGen = new CodeGenerator(); 127 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 1); 128 codeGen.Emit1(OpCodes.Exp); 129 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 2); 130 codeGen.Emit1(OpCodes.Exp); 131 codeGen.Emit1(MctsSymbolicRegression.OpCodes.Mul); 132 codeGen.GetCode(out code, out nParams); 133 codeGen.Emit1(OpCodes.Exit); 134 var h2 = ExprHash.GetHash(code, nParams); 135 136 Assert.AreEqual(h1, h2); 137 } 138 { 139 // log 140 var codeGen = new CodeGenerator(); 141 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 1); 142 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 2); 143 codeGen.Emit1(MctsSymbolicRegression.OpCodes.Mul); 144 codeGen.Emit1(OpCodes.Log); 145 codeGen.Emit1(OpCodes.Exit); 146 codeGen.GetCode(out code, out nParams); 147 var h1 = ExprHash.GetHash(code, nParams); 148 149 codeGen = new CodeGenerator(); 150 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 1); 151 codeGen.Emit1(OpCodes.Log); 152 codeGen.Emit2(MctsSymbolicRegression.OpCodes.LoadVar, 2); 153 codeGen.Emit1(OpCodes.Log); 154 codeGen.Emit1(MctsSymbolicRegression.OpCodes.Add); 155 codeGen.Emit1(OpCodes.Exit); 156 codeGen.GetCode(out code, out nParams); 157 var h2 = ExprHash.GetHash(code, nParams); 158 159 Assert.AreEqual(h1, h2); 160 } 161 } 162 #endregion 163 15 164 #region number of solutions 16 165 // the algorithm should visits each solution only once
Note: See TracChangeset
for help on using the changeset viewer.