source: branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/LinearScalingGrammar.cs @ 18093

Last change on this file since 18093 was 18093, checked in by chaider, 6 months ago

#3041

  • Renaming Constant Symbol to Num, behaves like before
  • Adding new Symbol RealConstant (Constant), this symbol behaves now like a real constant, won't be changed by parameter optimization or manipulators
  • Refactored classes part1
File size: 4.7 KB
Line 
1#region License Information
2
3/* HeuristicLab
4 * Copyright (C) Heuristic and Evolutionary Algorithms Laboratory (HEAL)
5 *
6 * This file is part of HeuristicLab.
7 *
8 * HeuristicLab is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * HeuristicLab is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
20 */
21
22#endregion
23using System.Collections.Generic;
24using System.Linq;
25using HEAL.Attic;
26using HeuristicLab.Common;
27using HeuristicLab.Core;
28using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
29
30namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
31  [StorableType("5A2300A0-D0FC-4F2D-B910-F86384FE9052")]
32  [Item("LinearScalingGrammar", "Represents a grammar which includes linear scaling parts implicitly.")]
33  public class LinearScalingGrammar : DataAnalysisGrammar, ISymbolicDataAnalysisGrammar {
34    public LinearScalingGrammar() : base(ItemAttribute.GetName(typeof(LinearScalingGrammar)),
35      ItemAttribute.GetDescription(typeof(LinearScalingGrammar))) {
36      Initialize();
37    }
38
39    [StorableConstructor]
40    public LinearScalingGrammar(StorableConstructorFlag _) : base(_) { }
41
42    protected LinearScalingGrammar(LinearScalingGrammar original, Cloner cloner) : base(original, cloner) { }
43    public LinearScalingGrammar(string name, string description) : base(name, description) { }
44
45    public override IDeepCloneable Clone(Cloner cloner) {
46      return new LinearScalingGrammar(this, cloner);
47    }
48
49    private void Initialize() {
50      #region Symbols
51
52      var add = new Addition();
53      var sub = new Subtraction();
54      var mul = new Multiplication();
55      var div = new Division();
56      var sin = new Sine();
57      var cos = new Cosine();
58      var tan = new Tangent();
59      var tanh = new HyperbolicTangent();
60      var log = new Logarithm();
61      var exp = new Exponential();
62      var square = new Square();
63      var sqrt = new SquareRoot();
64      var cube = new Cube();
65      var cbrt = new CubeRoot();
66      var abs = new Absolute();
67      var aq = new AnalyticQuotient();
68      var constant = new Num();
69      constant.MinValue = -20;
70      constant.MaxValue = 20;
71      var number = new RealConstant();
72      number.MinValue = -20;
73      number.MaxValue = 20;
74      var variableSymbol = new Variable();
75
76      #endregion
77
78      //Special symbols
79      var offset = new Addition { Name = "Offset" };
80      var scaling = new Multiplication { Name = "Scaling" };
81      //all other symbols
82      var allSymbols = new List<Symbol> {
83        add, sub, mul, div, constant, number, variableSymbol, sin, cos, tan, log, square, sqrt, cube, cbrt, exp,
84        tanh, aq, abs
85      };
86
87      var bivariateFuncs = new List<Symbol> { add, sub, mul, div, aq };
88      var univariateFuncs = new List<Symbol> { sin, cos, tan, tanh, exp, log, abs, square, cube, sqrt, cbrt };
89      var realValueSymbols = new List<Symbol> {
90         add, sub, mul, div, sin, cos, tan, tanh, exp, log, aq, abs, square, cube, sqrt, cbrt,
91         variableSymbol, constant, number
92        };
93
94
95      //Add special symbols
96      AddSymbol(offset);
97      AddSymbol(scaling);
98      //Add all other symbols
99      foreach (var symb in allSymbols) AddSymbol(symb);
100
101      #region define subtree count for special symbols
102
103      foreach (var symb in bivariateFuncs) SetSubtreeCount(symb, 2, 2);
104
105      foreach (var symb in univariateFuncs) SetSubtreeCount(symb, 1, 1);
106
107      SetSubtreeCount(offset, 2, 2);
108      SetSubtreeCount(scaling, 2, 2);
109
110      #endregion
111
112      #region child symbols config
113
114      AddAllowedChildSymbol(StartSymbol, offset);
115
116      //Define childs for offset
117      AddAllowedChildSymbol(offset, scaling, 0);
118      AddAllowedChildSymbol(offset, constant, 1);
119
120      //Define childs for scaling
121      foreach (var symb in allSymbols) AddAllowedChildSymbol(scaling, symb, 0);
122      AddAllowedChildSymbol(scaling, constant, 1);
123
124      //Define childs for realvalue symbols
125      foreach (var symb in realValueSymbols) {
126        foreach (var c in realValueSymbols) AddAllowedChildSymbol(symb, c);
127      }
128
129      #endregion
130
131      Symbols.First(s => s is Cube).Enabled = false;
132      Symbols.First(s => s is CubeRoot).Enabled = false;
133      Symbols.First(s => s is Absolute).Enabled = false;
134    }
135  }
136}
Note: See TracBrowser for help on using the repository browser.