Changeset 17844 for branches/3087_Ceres_Integration/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/SymbolicDataAnalysisExpressionTreeInterpreterTest.cs
- Timestamp:
- 02/24/21 22:22:21 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3087_Ceres_Integration/HeuristicLab.Tests/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4/SymbolicDataAnalysisExpressionTreeInterpreterTest.cs
r17180 r17844 119 119 public void LinearInterpreterTestArithmeticGrammarPerformance() { 120 120 TestArithmeticGrammarPerformance(new SymbolicDataAnalysisExpressionTreeLinearInterpreter(), 12.5e6); 121 } 122 123 [TestMethod] 124 [TestCategory("Problems.DataAnalysis.Symbolic")] 125 [TestProperty("Time", "long")] 126 public void NativeInterpreterTestTypeCoherentGrammarPerformance() { 127 TestTypeCoherentGrammarPerformance(new NativeInterpreter(), 12.5e6); 128 } 129 [TestMethod] 130 [TestCategory("Problems.DataAnalysis.Symbolic")] 131 [TestProperty("Time", "long")] 132 public void NativeInterpreterTestFullGrammarPerformance() { 133 TestFullGrammarPerformance(new NativeInterpreter(), 12.5e6); 134 } 135 [TestMethod] 136 [TestCategory("Problems.DataAnalysis.Symbolic")] 137 [TestProperty("Time", "long")] 138 public void NativeInterpreterTestArithmeticGrammarPerformance() { 139 TestArithmeticGrammarPerformance(new NativeInterpreter(), 12.5e6); 140 } 141 142 [TestMethod] 143 [TestCategory("Problems.DataAnalysis.Symbolic")] 144 [TestProperty("Time", "long")] 145 public void NativeInterpreterTestCeres() { 146 var parser = new InfixExpressionParser(); 147 var random = new FastRandom(1234); 148 const int nRows = 20; 149 150 var x1 = Enumerable.Range(0, nRows).Select(_ => UniformDistributedRandom.NextDouble(random, -1, 1)).ToArray(); 151 var x2 = Enumerable.Range(0, nRows).Select(_ => UniformDistributedRandom.NextDouble(random, -1, 1)).ToArray(); 152 var x3 = Enumerable.Range(0, nRows).Select(_ => UniformDistributedRandom.NextDouble(random, -1, 1)).ToArray(); 153 154 var optimalAlpha = new double[] { -2, -3, -5 }; 155 var y = Enumerable.Range(0, nRows).Select(i => 156 Math.Exp(x1[i] * optimalAlpha[0]) + 157 Math.Exp(x2[i] * optimalAlpha[1]) + 158 Math.Exp(x3[i] * optimalAlpha[2])).ToArray(); 159 160 var initialAlpha = Enumerable.Range(0, 3).Select(_ => UniformDistributedRandom.NextDouble(random, -1, 1)).ToArray(); 161 var ds = new Dataset(new[] { "x1", "x2", "x3", "y" }, new[] { x1, x2, x3, y }); 162 163 var expr = "EXP(x1) + EXP(x2) + EXP(x3)"; 164 var tree = parser.Parse(expr); 165 var rows = Enumerable.Range(0, nRows).ToArray(); 166 var options = new SolverOptions { 167 Minimizer = (int)MinimizerType.TRUST_REGION, 168 Iterations = 20, 169 TrustRegionStrategy = (int)TrustRegionStrategyType.LEVENBERG_MARQUARDT, 170 LinearSolver = (int)LinearSolverType.DENSE_QR 171 }; 172 173 var nodesToOptimize = new HashSet<ISymbolicExpressionTreeNode>(tree.IterateNodesPrefix().Where(x => x is VariableTreeNode)); 174 int idx = 0; 175 foreach(var node in nodesToOptimize) { 176 (node as VariableTreeNode).Weight = initialAlpha[idx++]; 177 Console.WriteLine((node as VariableTreeNode).Weight); 178 179 } 180 181 var summary = new OptimizationSummary(); 182 var parameters = ParameterOptimizer.OptimizeTree(tree, ds, rows, "y", nodesToOptimize, options, ref summary); 183 184 Console.Write("Optimized parameters: "); 185 foreach (var t in parameters) { 186 Console.Write(t.Value + " "); 187 } 188 Console.WriteLine(); 189 190 Console.WriteLine("Optimization summary:"); 191 Console.WriteLine("Initial cost: " + summary.InitialCost); 192 Console.WriteLine("Final cost: " + summary.FinalCost); 193 Console.WriteLine("Successful steps: " + summary.SuccessfulSteps); 194 Console.WriteLine("Unsuccessful steps: " + summary.UnsuccessfulSteps); 195 Console.WriteLine("Residual evaluations: " + summary.ResidualEvaluations); 196 Console.WriteLine("Jacobian evaluations: " + summary.JacobianEvaluations); 197 } 198 199 [TestMethod] 200 [TestCategory("Problems.DataAnalysis.Symbolic")] 201 [TestProperty("Time", "long")] 202 public void NativeInterpreterTestCeresVariableProjection() { 203 var parser = new InfixExpressionParser(); 204 var random = new FastRandom(1234); 205 const int nRows = 20; 206 207 var x1 = Enumerable.Range(0, nRows).Select(_ => UniformDistributedRandom.NextDouble(random, -1, 1)).ToArray(); 208 var x2 = Enumerable.Range(0, nRows).Select(_ => UniformDistributedRandom.NextDouble(random, -1, 1)).ToArray(); 209 var x3 = Enumerable.Range(0, nRows).Select(_ => UniformDistributedRandom.NextDouble(random, -1, 1)).ToArray(); 210 211 var optimalAlpha = new double[] { -2, -3, -5 }; 212 var y = Enumerable.Range(0, nRows).Select(i => 213 Math.Exp(x1[i] * optimalAlpha[0]) + 214 Math.Exp(x2[i] * optimalAlpha[1]) + 215 Math.Exp(x3[i] * optimalAlpha[2])).ToArray(); 216 217 var initialAlpha = Enumerable.Range(0, 3).Select(_ => UniformDistributedRandom.NextDouble(random, -1, 1)).ToArray(); 218 var ds = new Dataset(new[] { "x1", "x2", "x3", "y" }, new[] { x1, x2, x3, y }); 219 220 var expr = new[] { "EXP(x1)", "EXP(x2)", "EXP(x3)" }; 221 var trees = expr.Select(x => parser.Parse(x)).ToArray(); 222 var rows = Enumerable.Range(0, nRows).ToArray(); 223 var options = new SolverOptions { 224 Minimizer = (int)MinimizerType.TRUST_REGION, 225 Iterations = 100, 226 TrustRegionStrategy = (int)TrustRegionStrategyType.LEVENBERG_MARQUARDT, 227 LinearSolver = (int)LinearSolverType.DENSE_QR 228 }; 229 230 var summary = new OptimizationSummary(); 231 232 var nodesToOptimize = new HashSet<ISymbolicExpressionTreeNode>(trees.SelectMany(t => t.IterateNodesPrefix().Where(x => x is VariableTreeNode))); 233 int idx = 0; 234 Console.Write("Initial parameters: "); 235 foreach (var node in nodesToOptimize) { 236 (node as VariableTreeNode).Weight = initialAlpha[idx++]; 237 Console.Write((node as VariableTreeNode).Weight + " "); 238 } 239 Console.WriteLine(); 240 241 var coeff = new double[trees.Length + 1]; 242 var parameters = ParameterOptimizer.OptimizeTree(trees, ds, rows, "y", nodesToOptimize, options, coeff, ref summary); 243 Console.Write("Optimized parameters: "); 244 foreach (var t in parameters) { 245 Console.Write(t.Value + " "); 246 } 247 Console.WriteLine(); 248 249 Console.Write("Coefficients: "); 250 foreach (var v in coeff) Console.Write(v + " "); 251 Console.WriteLine(); 252 253 Console.WriteLine("Optimization summary:"); 254 Console.WriteLine("Initial cost: " + summary.InitialCost); 255 Console.WriteLine("Final cost: " + summary.FinalCost); 256 Console.WriteLine("Successful steps: " + summary.SuccessfulSteps); 257 Console.WriteLine("Unsuccessful steps: " + summary.UnsuccessfulSteps); 258 Console.WriteLine("Residual evaluations: " + summary.ResidualEvaluations); 259 Console.WriteLine("Jacobian evaluations: " + summary.JacobianEvaluations); 121 260 } 122 261
Note: See TracChangeset
for help on using the changeset viewer.