Changeset 18197 for branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/StructuredSymbolicRegressionSingleObjectiveProblem.cs
- Timestamp:
- 01/14/22 12:06:18 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/StructuredSymbolicRegressionSingleObjectiveProblem.cs
r18194 r18197 21 21 22 22 using System; 23 using System.Collections.Generic; 23 24 using System.Linq; 24 25 using HEAL.Attic; … … 279 280 throw new ArgumentException("No structure template defined!"); 280 281 281 var tree = BuildTreeFromIndividual(templateTree, individual, updateNumericParameters: StructureTemplate.ContainsNumericParameters);282 var tree = BuildTreeFromIndividual(templateTree, individual, containsNumericParameters: StructureTemplate.ContainsNumericParameters); 282 283 individual[SymbolicExpressionTreeName] = tree; 283 284 284 285 if (OptimizeParameters) { 285 ParameterOptimization.OptimizeTreeParameters(ProblemData, tree, interpreter: Interpreter); 286 var excludeNodes = GetTemplateTreeNodes(tree.Root).OfType<IVariableTreeNode>(); 287 ParameterOptimization.OptimizeTreeParameters(ProblemData, tree, interpreter: Interpreter, excludeNodes: excludeNodes); 286 288 } else if (ApplyLinearScaling) { 287 289 LinearScaling.AdjustLinearScalingParams(ProblemData, tree, Interpreter); 288 290 } 289 291 290 UpdateIndividualFromTree(tree, individual, updateNumericParameters: StructureTemplate.ContainsNumericParameters);292 UpdateIndividualFromTree(tree, individual, containsNumericParameters: StructureTemplate.ContainsNumericParameters); 291 293 292 294 //calculate NMSE … … 317 319 } 318 320 319 private static ISymbolicExpressionTree BuildTreeFromIndividual(ISymbolicExpressionTree template, Individual individual, bool updateNumericParameters) { 321 private static IEnumerable<ISymbolicExpressionTreeNode> GetTemplateTreeNodes(ISymbolicExpressionTreeNode rootNode) { 322 yield return rootNode; 323 foreach (var node in rootNode.Subtrees) { 324 if (node is SubFunctionTreeNode) { 325 yield return node; 326 continue; 327 } 328 329 foreach (var subNode in GetTemplateTreeNodes(node)) 330 yield return subNode; 331 } 332 } 333 334 private static ISymbolicExpressionTree BuildTreeFromIndividual(ISymbolicExpressionTree template, Individual individual, bool containsNumericParameters) { 320 335 var resolvedTree = (ISymbolicExpressionTree)template.Clone(); 321 336 322 337 //set numeric parameter values 323 if ( updateNumericParameters) {338 if (containsNumericParameters) { 324 339 var realVector = individual.RealVector(NumericParametersEncoding); 325 340 var numberTreeNodes = resolvedTree.IterateNodesPrefix().OfType<NumberTreeNode>().ToArray(); … … 345 360 } 346 361 347 private static void UpdateIndividualFromTree(ISymbolicExpressionTree tree, Individual individual, bool updateNumericParameters) {362 private static void UpdateIndividualFromTree(ISymbolicExpressionTree tree, Individual individual, bool containsNumericParameters) { 348 363 var clonedTree = (ISymbolicExpressionTree)tree.Clone(); 349 364 … … 357 372 var rootNode = (SymbolicExpressionTreeTopLevelNode)new ProgramRootSymbol().CreateTreeNode(); 358 373 rootNode.SetGrammar(grammar); 359 360 374 var startNode = (SymbolicExpressionTreeTopLevelNode)new StartSymbol().CreateTreeNode(); 361 375 startNode.SetGrammar(grammar); … … 368 382 369 383 //set numeric parameter values 370 if ( updateNumericParameters) {384 if (containsNumericParameters) { 371 385 var realVector = individual.RealVector(NumericParametersEncoding); 372 386 var numberTreeNodes = clonedTree.IterateNodesPrefix().OfType<NumberTreeNode>().ToArray();
Note: See TracChangeset
for help on using the changeset viewer.