Free cookie consent management tool by TermsFeed Policy Generator

Changeset 17463


Ignore:
Timestamp:
03/02/20 15:04:46 (4 years ago)
Author:
pfleck
Message:

#3040 Added type coherent vector grammar to enforce that the root symbol is a scalar.

Location:
branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4
Files:
4 edited
1 copied

Legend:

Unmodified
Added
Removed
  • branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/TypeCoherentVectorExpressionGrammar.cs

    r17460 r17463  
    3535    private const string TrigonometricFunctionsName = "Trigonometric Functions";
    3636    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
    3749    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";
    4650
    4751    [StorableConstructor]
     
    5761
    5862    private void Initialize() {
    59       #region symbol declaration
     63      #region scalar symbol declaration
    6064      var add = new Addition();
    6165      var sub = new Subtraction();
    6266      var mul = new Multiplication();
    6367      var div = new Division();
    64       var mean = new Average();
     68
    6569      var sin = new Sine();
    6670      var cos = new Cosine();
    6771      var tan = new Tangent();
     72
     73      var exp = new Exponential();
    6874      var log = new Logarithm();
    69       var pow = new Power();
     75
    7076      var square = new Square();
    71       var root = new Root();
    7277      var sqrt = new SquareRoot();
    7378      var cube = new Cube();
    7479      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();
    11385      var binFactorVariable = new BinaryFactorVariable();
    11486      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" };
    117114      #endregion
    118115
    119116      #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 });
    122119      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);
    142140
    143141      #region subtree count configuration
    144142      SetSubtreeCount(arithmeticSymbols, 2, 2);
    145143      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);
    147150      SetSubtreeCount(root, 2, 2);
    148       SetSubtreeCount(square, 1, 1);
    149       SetSubtreeCount(cube, 1, 1);
    150       SetSubtreeCount(sqrt, 1, 1);
    151       SetSubtreeCount(cubeRoot, 1, 1);
    152151      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 
    158152      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);
    173166      #endregion
    174167
    175168      #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);
    241186      #endregion
    242187    }
  • branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj

    r17460 r17463  
    231231    <Compile Include="Symbols\And.cs" />
    232232    <Compile Include="Symbols\AutoregressiveVariable.cs" />
     233    <Compile Include="Symbols\StandardDeviation.cs" />
    233234    <Compile Include="Symbols\Sum.cs" />
    234235    <Compile Include="Symbols\Average.cs" />
  • branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/OpCodes.cs

    r17460 r17463  
    7878    CubeRoot = 51,
    7979    Tanh = 52,
    80     Sum = 53
     80    Sum = 53,
     81    Sd = 54
    8182  };
    8283  public static class OpCodes {
     
    135136    public const byte Tanh = (byte)OpCode.Tanh;
    136137    public const byte Sum = (byte)OpCode.Sum;
     138    public const byte StandardDeviation = (byte)OpCode.Sd;
    137139
    138140    private static Dictionary<Type, byte> symbolToOpcode = new Dictionary<Type, byte>() {
     
    190192      { typeof(Cube), OpCodes.Cube },
    191193      { typeof(CubeRoot), OpCodes.CubeRoot },
    192       { typeof(Sum), OpCodes.Sum }
     194      { typeof(Sum), OpCodes.Sum },
     195      { typeof(StandardDeviation), OpCodes.StandardDeviation }
    193196    };
    194197
  • branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeVectorInterpreter.cs

    r17460 r17463  
    105105        int row = rowEnum;
    106106        var result = Evaluate(dataset, ref row, state);
    107         if (!result.IsScalar)
    108           throw new InvalidOperationException("Result of the tree is not a scalar.");
    109         yield return result.Scalar;
     107        if (result.IsScalar)
     108          yield return result.Scalar;
     109        else
     110          yield return double.NaN;
     111        //if (!result.IsScalar)
     112        //  throw new InvalidOperationException("Result of the tree is not a scalar.");
     113        //yield return result.Scalar;
    110114        state.Reset();
    111115      }
     
    148152
    149153      public DoubleVector Vector { get; }
    150       public bool IsVector => !(Vector.Count == 1 && double.IsNaN(Vector[0]));
     154      public bool IsVector => Vector != null;
     155      //public bool IsVector => !(Vector.Count == 1 && double.IsNaN(Vector[0]));
    151156
    152157      public bool IsNaN => !IsScalar && !IsVector;
     
    154159      public EvaluationResult(double scalar) {
    155160        Scalar = scalar;
    156         Vector = NaNVector;
     161        //Vector = NaNVector;
     162        Vector = null;
    157163      }
    158164      public EvaluationResult(DoubleVector vector) {
     165        if (vector == null) throw new ArgumentNullException(nameof(vector));
    159166        Vector = vector;
    160167        Scalar = double.NaN;
     
    168175
    169176      public static readonly EvaluationResult NaN = new EvaluationResult(double.NaN);
    170       private static readonly DoubleVector NaNVector = DoubleVector.Build.Dense(1, double.NaN);
     177      //private static readonly DoubleVector NaNVector = DoubleVector.Build.Dense(1, double.NaN);
    171178    }
    172179
     
    180187      if (lhs.IsVector && rhs.IsScalar && vsFunc != null) return new EvaluationResult(vsFunc(lhs.Vector, rhs.Scalar));
    181188      if (lhs.IsVector && rhs.IsVector && vvFunc != null) return new EvaluationResult(vvFunc(lhs.Vector, rhs.Vector));
    182       throw new NotSupportedException($"Unsupported combination of argument types: ({lhs}) / ({rhs})");
     189      return EvaluationResult.NaN;
     190      //throw new NotSupportedException($"Unsupported combination of argument types: ({lhs}) / ({rhs})");
    183191    }
    184192
     
    188196      if (val.IsScalar && sFunc != null) return new EvaluationResult(sFunc(val.Scalar));
    189197      if (val.IsVector && vFunc != null) return new EvaluationResult(vFunc(val.Vector));
    190       throw new NotSupportedException($"Unsupported argument type ({val})");
     198      return EvaluationResult.NaN;
     199      //throw new NotSupportedException($"Unsupported argument type ({val})");
    191200    }
    192201    private static EvaluationResult AggregateApply(EvaluationResult val,
     
    195204      if (val.IsScalar && sFunc != null) return new EvaluationResult(sFunc(val.Scalar));
    196205      if (val.IsVector && vFunc != null) return new EvaluationResult(vFunc(val.Vector));
    197       throw new NotSupportedException($"Unsupported argument type ({val})");
     206      return EvaluationResult.NaN;
     207      //throw new NotSupportedException($"Unsupported argument type ({val})");
    198208    }
    199209
     
    335345              v => v.Mean());
    336346          }
     347        case OpCodes.StandardDeviation: {
     348            var cur = Evaluate(dataset, ref row, state);
     349            return AggregateApply(cur,
     350              s => 0,
     351              v => v.Count > 1 ? Statistics.StandardDeviation(v) : 0);
     352          }
    337353        case OpCodes.Variable: {
    338354            if (row < 0 || row >= dataset.Rows) return EvaluationResult.NaN;
  • branches/3040_VectorBasedGP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Symbols/StandardDeviation.cs

    r17455 r17463  
    2525using HEAL.Attic;
    2626namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
    27   [StorableType("459E521B-A921-4A0F-B63D-B298DA2CDD11")]
    28   [Item("Average", "Symbol that represents the average (arithmetic mean) function.")]
    29   public sealed class Average : Symbol {
     27  [StorableType("615033EC-6A76-4DE7-B55F-BB228D6A8166")]
     28  [Item("StandardDeviation", "Symbol that represents the standard deviation function.")]
     29  public sealed class StandardDeviation : Symbol {
    3030    private const int minimumArity = 1;
    3131    private const int maximumArity = byte.MaxValue;
     
    3939
    4040    [StorableConstructor]
    41     private Average(StorableConstructorFlag _) : base(_) { }
    42     private Average(Average original, Cloner cloner) : base(original, cloner) { }
     41    private StandardDeviation(StorableConstructorFlag _) : base(_) { }
     42    private StandardDeviation(StandardDeviation original, Cloner cloner) : base(original, cloner) { }
    4343    public override IDeepCloneable Clone(Cloner cloner) {
    44       return new Average(this, cloner);
     44      return new StandardDeviation(this, cloner);
    4545    }
    46     public Average() : base("Average", "Symbol that represents the average (arithmetic mean) function.") { }
     46    public StandardDeviation() : base("StandardDeviation", "Symbol that represents the standard deviation function.") { }
    4747  }
    4848}
Note: See TracChangeset for help on using the changeset viewer.