Changeset 17463 for branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars
- Timestamp:
- 03/02/20 15:04:46 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/TypeCoherentVectorExpressionGrammar.cs
r17460 r17463 35 35 private const string TrigonometricFunctionsName = "Trigonometric Functions"; 36 36 private const string ExponentialFunctionsName = "Exponential and Logarithmic Functions"; 37 private const string PowerFunctionsName = "Power Functions"; 38 private const string TerminalsName = "Terminals"; 39 private const string VectorAggregationName = "Aggregations"; 40 private const string ScalarSymbolsName = "Scalar Symbols"; 41 42 private const string VectorArithmeticFunctionsName = "Vector Arithmetic Functions"; 43 private const string VectorTrigonometricFunctionsName = "Vector Trigonometric Functions"; 44 private const string VectorExponentialFunctionsName = "Vector Exponential and Logarithmic Functions"; 45 private const string VectorPowerFunctionsName = "Vector Power Functions"; 46 private const string VectorTerminalsName = "Vector Terminals"; 47 private const string VectorSymbolsName = "Vector Symbols"; 48 37 49 private const string RealValuedSymbolsName = "Real Valued Symbols"; 38 private const string TerminalsName = "Terminals";39 private const string PowerFunctionsName = "Power Functions";40 private const string ConditionsName = "Conditions";41 private const string ComparisonsName = "Comparisons";42 private const string BooleanOperatorsName = "Boolean Operators";43 private const string ConditionalSymbolsName = "ConditionalSymbols";44 private const string SpecialFunctionsName = "Special Functions";45 private const string TimeSeriesSymbolsName = "Time Series Symbols";46 50 47 51 [StorableConstructor] … … 57 61 58 62 private void Initialize() { 59 #region s ymbol declaration63 #region scalar symbol declaration 60 64 var add = new Addition(); 61 65 var sub = new Subtraction(); 62 66 var mul = new Multiplication(); 63 67 var div = new Division(); 64 var mean = new Average(); 68 65 69 var sin = new Sine(); 66 70 var cos = new Cosine(); 67 71 var tan = new Tangent(); 72 73 var exp = new Exponential(); 68 74 var log = new Logarithm(); 69 var pow = new Power(); 75 70 76 var square = new Square(); 71 var root = new Root();72 77 var sqrt = new SquareRoot(); 73 78 var cube = new Cube(); 74 79 var cubeRoot = new CubeRoot(); 75 var exp = new Exponential(); 76 var abs = new Absolute(); 77 78 var airyA = new AiryA(); 79 var airyB = new AiryB(); 80 var bessel = new Bessel(); 81 var cosineIntegral = new CosineIntegral(); 82 var dawson = new Dawson(); 83 var erf = new Erf(); 84 var expIntegralEi = new ExponentialIntegralEi(); 85 var fresnelCosineIntegral = new FresnelCosineIntegral(); 86 var fresnelSineIntegral = new FresnelSineIntegral(); 87 var gamma = new Gamma(); 88 var hypCosineIntegral = new HyperbolicCosineIntegral(); 89 var tanh = new HyperbolicTangent(); 90 var hypSineIntegral = new HyperbolicSineIntegral(); 91 var norm = new Norm(); 92 var psi = new Psi(); 93 var sineIntegral = new SineIntegral(); 94 var analyticalQuotient = new AnalyticQuotient(); 95 96 var @if = new IfThenElse(); 97 var gt = new GreaterThan(); 98 var lt = new LessThan(); 99 var and = new And(); 100 var or = new Or(); 101 var not = new Not(); 102 var xor = new Xor(); 103 var variableCondition = new VariableCondition(); 104 105 var timeLag = new TimeLag(); 106 var integral = new Integral(); 107 var derivative = new Derivative(); 108 109 var constant = new Constant(); 110 constant.MinValue = -20; 111 constant.MaxValue = 20; 112 var variableSymbol = new Variable(); 80 var power = new Power(); 81 var root = new Root(); 82 83 var constant = new Constant { MinValue = -20, MaxValue = 20 }; 84 var variable = new Variable(); 113 85 var binFactorVariable = new BinaryFactorVariable(); 114 86 var factorVariable = new FactorVariable(); 115 var laggedVariable = new LaggedVariable(); 116 var autoregressiveVariable = new AutoregressiveTargetVariable(); 87 88 var sum = new Sum(); 89 var mean = new Average { Name = "Mean" }; 90 var sd = new StandardDeviation(); 91 #endregion 92 93 #region vector symbol declaration 94 var vectoradd = new Addition() { Name = "Vector Addition" }; 95 var vectorsub = new Subtraction() { Name = "Vector Subtraction" }; 96 var vectormul = new Multiplication() { Name = "Vector Multiplication" }; 97 var vectordiv = new Division() { Name = "Vector Division" }; 98 99 var vectorsin = new Sine() { Name = "Vector Sine" }; 100 var vectorcos = new Cosine() { Name = "Vector Cosine" }; 101 var vectortan = new Tangent() { Name = "Vector Tangent" }; 102 103 var vectorexp = new Exponential() { Name = "Vector Exponential" }; 104 var vectorlog = new Logarithm() { Name = "Vector Logarithm" }; 105 106 var vectorsquare = new Square() { Name = "Vector Square" }; 107 var vectorsqrt = new SquareRoot() { Name = "Vector SquareRoot" }; 108 var vectorcube = new Cube() { Name = "Vector Cube" }; 109 var vectorcubeRoot = new CubeRoot() { Name = "Vector CubeRoot" }; 110 var vectorpower = new Power() { Name = "Vector Power" }; 111 var vectorroot = new Root() { Name = "Vector Root" }; 112 113 var vectorvariable = new Variable() { Name = "Vector Variable" }; 117 114 #endregion 118 115 119 116 #region group symbol declaration 120 var arithmeticSymbols = new GroupSymbol(ArithmeticFunctionsName, new List<ISymbol>() { add, sub, mul, div , mean});121 var trigonometricSymbols = new GroupSymbol(TrigonometricFunctionsName, new List<ISymbol>() { sin, cos, tan , tanh});117 var arithmeticSymbols = new GroupSymbol(ArithmeticFunctionsName, new List<ISymbol>() { add, sub, mul, div }); 118 var trigonometricSymbols = new GroupSymbol(TrigonometricFunctionsName, new List<ISymbol>() { sin, cos, tan }); 122 119 var exponentialAndLogarithmicSymbols = new GroupSymbol(ExponentialFunctionsName, new List<ISymbol> { exp, log }); 123 var specialFunctions = new GroupSymbol(SpecialFunctionsName, new List<ISymbol> { abs, airyA, airyB, bessel, cosineIntegral, dawson, erf, expIntegralEi, 124 fresnelCosineIntegral,fresnelSineIntegral,gamma,hypCosineIntegral,hypSineIntegral,norm, psi, sineIntegral, analyticalQuotient}); 125 var terminalSymbols = new GroupSymbol(TerminalsName, new List<ISymbol> { constant, variableSymbol, binFactorVariable, factorVariable }); 126 var realValuedSymbols = new GroupSymbol(RealValuedSymbolsName, new List<ISymbol>() { arithmeticSymbols, trigonometricSymbols, exponentialAndLogarithmicSymbols, specialFunctions, terminalSymbols }); 127 128 var powerSymbols = new GroupSymbol(PowerFunctionsName, new List<ISymbol> { square, pow, sqrt, root, cube, cubeRoot }); 129 130 var conditionSymbols = new GroupSymbol(ConditionsName, new List<ISymbol> { @if, variableCondition }); 131 var comparisonSymbols = new GroupSymbol(ComparisonsName, new List<ISymbol> { gt, lt }); 132 var booleanOperationSymbols = new GroupSymbol(BooleanOperatorsName, new List<ISymbol> { and, or, not, xor }); 133 var conditionalSymbols = new GroupSymbol(ConditionalSymbolsName, new List<ISymbol> { conditionSymbols, comparisonSymbols, booleanOperationSymbols }); 134 135 var timeSeriesSymbols = new GroupSymbol(TimeSeriesSymbolsName, new List<ISymbol> { timeLag, integral, derivative, laggedVariable, autoregressiveVariable }); 136 #endregion 137 138 AddSymbol(realValuedSymbols); 139 AddSymbol(powerSymbols); 140 AddSymbol(conditionalSymbols); 141 AddSymbol(timeSeriesSymbols); 120 var powerSymbols = new GroupSymbol(PowerFunctionsName, new List<ISymbol> { square, sqrt, cube, cubeRoot, power, root }); 121 var terminalSymbols = new GroupSymbol(TerminalsName, new List<ISymbol> { constant, variable, binFactorVariable, factorVariable }); 122 var aggregationSymbols = new GroupSymbol(VectorAggregationName, new List<ISymbol> { sum, mean, sd }); 123 var scalarSymbols = new GroupSymbol(ScalarSymbolsName, new List<ISymbol>() { arithmeticSymbols, trigonometricSymbols, exponentialAndLogarithmicSymbols, powerSymbols, terminalSymbols, aggregationSymbols }); 124 125 var vectorarithmeticSymbols = new GroupSymbol(VectorArithmeticFunctionsName, new List<ISymbol>() { vectoradd, vectorsub, vectormul, vectordiv }); 126 var vectortrigonometricSymbols = new GroupSymbol(VectorTrigonometricFunctionsName, new List<ISymbol>() { vectorsin, vectorcos, vectortan }); 127 var vectorexponentialAndLogarithmicSymbols = new GroupSymbol(VectorExponentialFunctionsName, new List<ISymbol> { vectorexp, vectorlog }); 128 var vectorpowerSymbols = new GroupSymbol(VectorPowerFunctionsName, new List<ISymbol> { vectorsquare, vectorsqrt, vectorcube, vectorcubeRoot, vectorpower, vectorroot }); 129 var vectorterminalSymbols = new GroupSymbol(VectorTerminalsName, new List<ISymbol> { vectorvariable }); 130 var vectorSymbols = new GroupSymbol(VectorSymbolsName, new List<ISymbol>() { vectorarithmeticSymbols, vectortrigonometricSymbols, vectorexponentialAndLogarithmicSymbols, vectorpowerSymbols, vectorterminalSymbols }); 131 132 //var realValuedSymbols = new GroupSymbol(RealValuedSymbolsName, new List<ISymbol> { scalarSymbols, vectorSymbols }); 133 134 135 #endregion 136 137 //AddSymbol(realValuedSymbols); 138 AddSymbol(scalarSymbols); 139 AddSymbol(vectorSymbols); 142 140 143 141 #region subtree count configuration 144 142 SetSubtreeCount(arithmeticSymbols, 2, 2); 145 143 SetSubtreeCount(trigonometricSymbols, 1, 1); 146 SetSubtreeCount(pow, 2, 2); 144 SetSubtreeCount(exponentialAndLogarithmicSymbols, 1, 1); 145 SetSubtreeCount(square, 1, 1); 146 SetSubtreeCount(sqrt, 1, 1); 147 SetSubtreeCount(cube, 1, 1); 148 SetSubtreeCount(cubeRoot, 1, 1); 149 SetSubtreeCount(power, 2, 2); 147 150 SetSubtreeCount(root, 2, 2); 148 SetSubtreeCount(square, 1, 1);149 SetSubtreeCount(cube, 1, 1);150 SetSubtreeCount(sqrt, 1, 1);151 SetSubtreeCount(cubeRoot, 1, 1);152 151 SetSubtreeCount(exponentialAndLogarithmicSymbols, 1, 1); 153 foreach (var sy in specialFunctions.Symbols.Except(new[] { analyticalQuotient })) {154 SetSubtreeCount(sy, 1, 1);155 }156 SetSubtreeCount(analyticalQuotient, 2, 2);157 158 152 SetSubtreeCount(terminalSymbols, 0, 0); 159 160 SetSubtreeCount(@if, 3, 3); 161 SetSubtreeCount(variableCondition, 2, 2); 162 SetSubtreeCount(comparisonSymbols, 2, 2); 163 SetSubtreeCount(and, 2, 2); 164 SetSubtreeCount(or, 2, 2); 165 SetSubtreeCount(not, 1, 1); 166 SetSubtreeCount(xor, 2, 2); 167 168 SetSubtreeCount(timeLag, 1, 1); 169 SetSubtreeCount(integral, 1, 1); 170 SetSubtreeCount(derivative, 1, 1); 171 SetSubtreeCount(laggedVariable, 0, 0); 172 SetSubtreeCount(autoregressiveVariable, 0, 0); 153 SetSubtreeCount(aggregationSymbols, 1, 1); 154 155 SetSubtreeCount(vectorarithmeticSymbols, 2, 2); 156 SetSubtreeCount(vectortrigonometricSymbols, 1, 1); 157 SetSubtreeCount(vectorexponentialAndLogarithmicSymbols, 1, 1); 158 SetSubtreeCount(vectorsquare, 1, 1); 159 SetSubtreeCount(vectorsqrt, 1, 1); 160 SetSubtreeCount(vectorcube, 1, 1); 161 SetSubtreeCount(vectorcubeRoot, 1, 1); 162 SetSubtreeCount(vectorpower, 2, 2); 163 SetSubtreeCount(vectorroot, 2, 2); 164 SetSubtreeCount(vectorexponentialAndLogarithmicSymbols, 1, 1); 165 SetSubtreeCount(vectorterminalSymbols, 0, 0); 173 166 #endregion 174 167 175 168 #region allowed child symbols configuration 176 AddAllowedChildSymbol(StartSymbol, realValuedSymbols); 177 AddAllowedChildSymbol(StartSymbol, powerSymbols); 178 AddAllowedChildSymbol(StartSymbol, conditionSymbols); 179 AddAllowedChildSymbol(StartSymbol, timeSeriesSymbols); 180 AddAllowedChildSymbol(StartSymbol, specialFunctions); 181 182 AddAllowedChildSymbol(DefunSymbol, realValuedSymbols); 183 AddAllowedChildSymbol(DefunSymbol, powerSymbols); 184 AddAllowedChildSymbol(DefunSymbol, conditionSymbols); 185 AddAllowedChildSymbol(DefunSymbol, timeSeriesSymbols); 186 AddAllowedChildSymbol(DefunSymbol, specialFunctions); 187 188 AddAllowedChildSymbol(realValuedSymbols, realValuedSymbols); 189 AddAllowedChildSymbol(realValuedSymbols, powerSymbols); 190 AddAllowedChildSymbol(realValuedSymbols, conditionSymbols); 191 AddAllowedChildSymbol(realValuedSymbols, timeSeriesSymbols); 192 AddAllowedChildSymbol(realValuedSymbols, specialFunctions); 193 194 AddAllowedChildSymbol(powerSymbols, variableSymbol, 0); 195 AddAllowedChildSymbol(powerSymbols, laggedVariable, 0); 196 AddAllowedChildSymbol(powerSymbols, autoregressiveVariable, 0); 197 AddAllowedChildSymbol(powerSymbols, constant, 1); 198 199 AddAllowedChildSymbol(square, realValuedSymbols, 0); 200 AddAllowedChildSymbol(square, conditionSymbols, 0); 201 AddAllowedChildSymbol(square, timeSeriesSymbols, 0); 202 203 AddAllowedChildSymbol(sqrt, realValuedSymbols, 0); 204 AddAllowedChildSymbol(sqrt, conditionSymbols, 0); 205 AddAllowedChildSymbol(sqrt, timeSeriesSymbols, 0); 206 207 AddAllowedChildSymbol(@if, comparisonSymbols, 0); 208 AddAllowedChildSymbol(@if, booleanOperationSymbols, 0); 209 AddAllowedChildSymbol(@if, conditionSymbols, 1); 210 AddAllowedChildSymbol(@if, realValuedSymbols, 1); 211 AddAllowedChildSymbol(@if, powerSymbols, 1); 212 AddAllowedChildSymbol(@if, timeSeriesSymbols, 1); 213 AddAllowedChildSymbol(@if, conditionSymbols, 2); 214 AddAllowedChildSymbol(@if, realValuedSymbols, 2); 215 AddAllowedChildSymbol(@if, powerSymbols, 2); 216 AddAllowedChildSymbol(@if, timeSeriesSymbols, 2); 217 218 AddAllowedChildSymbol(booleanOperationSymbols, comparisonSymbols); 219 AddAllowedChildSymbol(comparisonSymbols, realValuedSymbols); 220 AddAllowedChildSymbol(comparisonSymbols, powerSymbols); 221 AddAllowedChildSymbol(comparisonSymbols, conditionSymbols); 222 AddAllowedChildSymbol(comparisonSymbols, timeSeriesSymbols); 223 224 AddAllowedChildSymbol(variableCondition, realValuedSymbols); 225 AddAllowedChildSymbol(variableCondition, powerSymbols); 226 AddAllowedChildSymbol(variableCondition, conditionSymbols); 227 AddAllowedChildSymbol(variableCondition, timeSeriesSymbols); 228 229 230 AddAllowedChildSymbol(timeLag, realValuedSymbols); 231 AddAllowedChildSymbol(timeLag, powerSymbols); 232 AddAllowedChildSymbol(timeLag, conditionSymbols); 233 234 AddAllowedChildSymbol(integral, realValuedSymbols); 235 AddAllowedChildSymbol(integral, powerSymbols); 236 AddAllowedChildSymbol(integral, conditionSymbols); 237 238 AddAllowedChildSymbol(derivative, realValuedSymbols); 239 AddAllowedChildSymbol(derivative, powerSymbols); 240 AddAllowedChildSymbol(derivative, conditionSymbols); 169 AddAllowedChildSymbol(StartSymbol, scalarSymbols); 170 171 AddAllowedChildSymbol(arithmeticSymbols, scalarSymbols); 172 AddAllowedChildSymbol(trigonometricSymbols, scalarSymbols); 173 AddAllowedChildSymbol(exponentialAndLogarithmicSymbols, scalarSymbols); 174 AddAllowedChildSymbol(powerSymbols, scalarSymbols, 0); 175 AddAllowedChildSymbol(power, constant, 1); 176 AddAllowedChildSymbol(root, constant, 1); 177 AddAllowedChildSymbol(aggregationSymbols, vectorSymbols); 178 179 AddAllowedChildSymbol(vectorarithmeticSymbols, vectorSymbols); 180 AddAllowedChildSymbol(vectorarithmeticSymbols, scalarSymbols); 181 AddAllowedChildSymbol(vectortrigonometricSymbols, vectorSymbols); 182 AddAllowedChildSymbol(vectorexponentialAndLogarithmicSymbols, vectorSymbols); 183 AddAllowedChildSymbol(vectorpowerSymbols, vectorSymbols, 0); 184 AddAllowedChildSymbol(vectorpower, constant, 1); 185 AddAllowedChildSymbol(vectorroot, constant, 1); 241 186 #endregion 242 187 }
Note: See TracChangeset
for help on using the changeset viewer.