Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/21/10 15:21:34 (14 years ago)
Author:
gkronber
Message:

Refactored symbolic expression tree encoding and problem classes for symbolic regression. #937 , #938

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.DataAnalysis/3.3/Symbolic/SymbolicSimplifier.cs

    r3442 r3462  
    2525using HeuristicLab.Common;
    2626using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    27 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.GeneralSymbols;
     27using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding.Symbols;
    2828using HeuristicLab.Problems.DataAnalysis.Symbolic.Symbols;
    2929using System.Diagnostics;
     
    3838  /// </summary>
    3939  public class SymbolicSimplifier {
     40    private Addition addSymbol = new Addition();
     41    private Multiplication mulSymbol = new Multiplication();
     42    private Division divSymbol = new Division();
     43    private Constant constSymbol = new Constant();
     44    private Variable varSymbol = new Variable();
     45
    4046    public SymbolicExpressionTree Simplify(SymbolicExpressionTree originalTree) {
    4147      var clone = (SymbolicExpressionTreeNode)originalTree.Root.Clone();
     
    194200        return a;
    195201      } else {
    196         var div = (new Division()).CreateTreeNode();
     202        var div = divSymbol.CreateTreeNode();
    197203        div.SubTrees.Add(a);
    198204        div.SubTrees.Add(b);
     
    215221      } else if (IsAddition(a) && IsAddition(b)) {
    216222        // merge additions
    217         var add = (new Addition()).CreateTreeNode();
     223        var add = addSymbol.CreateTreeNode();
    218224        for (int i = 0; i < a.SubTrees.Count - 1; i++) add.AddSubTree(a.SubTrees[i]);
    219225        for (int i = 0; i < b.SubTrees.Count - 1; i++) add.AddSubTree(b.SubTrees[i]);
     
    232238        return MakeAddition(b, a);
    233239      } else if (IsAddition(a) && IsConstant(b)) {
    234         var add = (new Addition()).CreateTreeNode();
     240        var add = addSymbol.CreateTreeNode();
    235241        for (int i = 0; i < a.SubTrees.Count - 1; i++) add.AddSubTree(a.SubTrees[i]);
    236242        if (IsConstant(a.SubTrees.Last()))
     
    242248        return add;
    243249      } else if (IsAddition(a)) {
    244         var add = (new Addition()).CreateTreeNode();
     250        var add = addSymbol.CreateTreeNode();
    245251        add.AddSubTree(b);
    246252        foreach (var subTree in a.SubTrees) {
     
    250256        return add;
    251257      } else {
    252         var add = (new Addition()).CreateTreeNode();
     258        var add = addSymbol.CreateTreeNode();
    253259        add.SubTrees.Add(a);
    254260        add.SubTrees.Add(b);
     
    296302        return MakeDivision(MakeMultiplication(b.SubTrees[0], a), b.SubTrees[1]);
    297303      } else if (IsMultiplication(a) && IsMultiplication(b)) {
    298         var mul = (new Multiplication()).CreateTreeNode();
     304        var mul = mulSymbol.CreateTreeNode();
    299305        for (int i = 0; i < a.SubTrees.Count - 1; i++) mul.AddSubTree(a.SubTrees[i]);
    300306        for (int i = 0; i < b.SubTrees.Count - 1; i++) mul.AddSubTree(b.SubTrees[i]);
     
    302308        return mul;
    303309      } else if (IsMultiplication(a)) {
    304         var mul = (new Multiplication()).CreateTreeNode();
     310        var mul = mulSymbol.CreateTreeNode();
    305311        for (int i = 0; i < a.SubTrees.Count - 1; i++) mul.AddSubTree(a.SubTrees[i]);
    306312        mul.AddSubTree(MakeMultiplication(a.SubTrees.Last(), b));
    307313        return mul;
    308314      } else if (IsMultiplication(b)) {
    309         var mul = (new Multiplication()).CreateTreeNode();
     315        var mul = mulSymbol.CreateTreeNode();
    310316        for (int i = 0; i < b.SubTrees.Count - 1; i++) mul.AddSubTree(b.SubTrees[i]);
    311317        mul.AddSubTree(MakeMultiplication(b.SubTrees.Last(), a));
    312318        return mul;
    313319      } else {
    314         var mul = (new Multiplication()).CreateTreeNode();
     320        var mul = mulSymbol.CreateTreeNode();
    315321        mul.SubTrees.Add(a);
    316322        mul.SubTrees.Add(b);
     
    346352
    347353    private SymbolicExpressionTreeNode MakeConstant(double value) {
    348       ConstantTreeNode constantTreeNode = (ConstantTreeNode)(new Constant().CreateTreeNode());
     354      ConstantTreeNode constantTreeNode = (ConstantTreeNode)(constSymbol.CreateTreeNode());
    349355      constantTreeNode.Value = value;
    350356      return (SymbolicExpressionTreeNode)constantTreeNode;
     
    352358
    353359    private SymbolicExpressionTreeNode MakeVariable(double weight, string name) {
    354       var tree = (VariableTreeNode)(new Variable().CreateTreeNode());
     360      var tree = (VariableTreeNode)varSymbol.CreateTreeNode();
    355361      tree.Weight = weight;
    356362      tree.VariableName = name;
Note: See TracChangeset for help on using the changeset viewer.