Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/04/12 16:23:35 (12 years ago)
Author:
gkronber
Message:

#1847: bug fixes and improvements discussed with andreas

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/GP-MoveOperators/HeuristicLab.Problems.DataAnalysis.Symbolic.Regression/3.4/ReplaceBranchMoveMaker.cs

    r8207 r8214  
    8686
    8787    private ISymbolicExpressionTreeNode Scale(ISymbolicExpressionTreeNode node, double alpha, double beta) {
    88       var constAlpha = (ConstantTreeNode)constant.CreateTreeNode();
    89       var constBeta = (ConstantTreeNode)constant.CreateTreeNode();
    90       constAlpha.Value = alpha;
    91       constBeta.Value = beta;
    92       var sum = add.CreateTreeNode();
    93       var prod = mul.CreateTreeNode();
    94       prod.AddSubtree(node); prod.AddSubtree(constBeta);
    95       sum.AddSubtree(prod); sum.AddSubtree(constAlpha);
    96       return sum;
     88      var constNode = node as ConstantTreeNode;
     89      if (constNode != null) {
     90        constNode.Value = constNode.Value * beta + alpha;
     91        return constNode;
     92      }
     93      var varNode = node as VariableTreeNode;
     94      if (varNode != null) {
     95        varNode.Weight = varNode.Weight * beta;
     96        var constAlpha = (ConstantTreeNode)constant.CreateTreeNode();
     97        constAlpha.Value = alpha;
     98        var sum = add.CreateTreeNode();
     99        sum.AddSubtree(varNode); sum.AddSubtree(constAlpha);
     100        return sum;
     101      }
     102      if (node.Symbol is Addition && node.GetSubtree(0).Symbol is Multiplication &&
     103        node.GetSubtree(1).Symbol is Constant && node.GetSubtree(0).GetSubtree(1).Symbol is Constant) {
     104        var constAlpha = node.GetSubtree(1) as ConstantTreeNode;
     105        var constBeta = node.GetSubtree(0).GetSubtree(1) as ConstantTreeNode;
     106        constAlpha.Value = beta * constAlpha.Value + alpha;
     107        constBeta.Value = constBeta.Value * beta;
     108        return node;
     109      } else {
     110        var constAlpha = (ConstantTreeNode)constant.CreateTreeNode();
     111        var constBeta = (ConstantTreeNode)constant.CreateTreeNode();
     112        constAlpha.Value = alpha;
     113        constBeta.Value = beta;
     114        var sum = add.CreateTreeNode();
     115        var prod = mul.CreateTreeNode();
     116        prod.AddSubtree(node);
     117        prod.AddSubtree(constBeta);
     118        sum.AddSubtree(prod);
     119        sum.AddSubtree(constAlpha);
     120        return sum;
     121      }
    97122    }
    98123  }
Note: See TracChangeset for help on using the changeset viewer.