Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/14/22 12:06:18 (3 years ago)
Author:
mkommend
Message:

#3136: Ommited parameter optimization of variable weights in the template part of the tree.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/SingleObjective/StructuredSymbolicRegressionSingleObjectiveProblem.cs

    r18194 r18197  
    2121
    2222using System;
     23using System.Collections.Generic;
    2324using System.Linq;
    2425using HEAL.Attic;
     
    279280        throw new ArgumentException("No structure template defined!");
    280281
    281       var tree = BuildTreeFromIndividual(templateTree, individual, updateNumericParameters: StructureTemplate.ContainsNumericParameters);
     282      var tree = BuildTreeFromIndividual(templateTree, individual, containsNumericParameters: StructureTemplate.ContainsNumericParameters);
    282283      individual[SymbolicExpressionTreeName] = tree;
    283284
    284285      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);
    286288      } else if (ApplyLinearScaling) {
    287289        LinearScaling.AdjustLinearScalingParams(ProblemData, tree, Interpreter);
    288290      }
    289291
    290       UpdateIndividualFromTree(tree, individual, updateNumericParameters: StructureTemplate.ContainsNumericParameters);
     292      UpdateIndividualFromTree(tree, individual, containsNumericParameters: StructureTemplate.ContainsNumericParameters);
    291293
    292294      //calculate NMSE
     
    317319    }
    318320
    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) {
    320335      var resolvedTree = (ISymbolicExpressionTree)template.Clone();
    321336
    322337      //set numeric parameter values
    323       if (updateNumericParameters) {
     338      if (containsNumericParameters) {
    324339        var realVector = individual.RealVector(NumericParametersEncoding);
    325340        var numberTreeNodes = resolvedTree.IterateNodesPrefix().OfType<NumberTreeNode>().ToArray();
     
    345360    }
    346361
    347     private static void UpdateIndividualFromTree(ISymbolicExpressionTree tree, Individual individual, bool updateNumericParameters) {
     362    private static void UpdateIndividualFromTree(ISymbolicExpressionTree tree, Individual individual, bool containsNumericParameters) {
    348363      var clonedTree = (ISymbolicExpressionTree)tree.Clone();
    349364
     
    357372        var rootNode = (SymbolicExpressionTreeTopLevelNode)new ProgramRootSymbol().CreateTreeNode();
    358373        rootNode.SetGrammar(grammar);
    359 
    360374        var startNode = (SymbolicExpressionTreeTopLevelNode)new StartSymbol().CreateTreeNode();
    361375        startNode.SetGrammar(grammar);
     
    368382
    369383      //set numeric parameter values
    370       if (updateNumericParameters) {
     384      if (containsNumericParameters) {
    371385        var realVector = individual.RealVector(NumericParametersEncoding);
    372386        var numberTreeNodes = clonedTree.IterateNodesPrefix().OfType<NumberTreeNode>().ToArray();
Note: See TracChangeset for help on using the changeset viewer.