Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/13/21 17:49:34 (2 years ago)
Author:
gkronber
Message:

#3140: made several more changes for the constant -> number branch

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3140_NumberSymbol/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Hashing/SymbolicExpressionTreeHash.cs

    r18114 r18115  
    2828namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
    2929  public static class SymbolicExpressionTreeHash {
    30     private static readonly Addition add = new Addition();
    31     private static readonly Subtraction sub = new Subtraction();
    32     private static readonly Multiplication mul = new Multiplication();
    33     private static readonly Division div = new Division();
    34     private static readonly Logarithm log = new Logarithm();
    35     private static readonly Exponential exp = new Exponential();
    36     private static readonly Sine sin = new Sine();
    37     private static readonly Cosine cos = new Cosine();
    3830    private static readonly Number number = new Number();
    3931
     
    6658      var symbol = node.Symbol;
    6759      var name = symbol.Name;
    68       if (node is NumberTreeNode numNode) {
    69         name = strict ? numNode.Value.ToString() : symbol.Name;
     60      if (node is INumericTreeNode numNode) {
     61        name = strict ? numNode.Value.ToString() : "Number";
    7062      } else if (node is VariableTreeNode variableNode) {
    7163        name = strict ? variableNode.Weight.ToString() + variableNode.VariableName : variableNode.VariableName;
     
    222214            variableTreeNode.VariableName = variable.VariableName;
    223215            variableTreeNode.Weight = variable.Weight;
    224           } else if (node.Data is NumberTreeNode existingNumNode) {
    225             var newNumNode = (NumberTreeNode)treeNodes[i];
     216          } else if (node.Data is INumericTreeNode existingNumNode) {
     217            var newNumNode = (INumericTreeNode)treeNodes[i];
    226218            newNumNode.Value = existingNumNode.Value;
    227219          }
     
    285277
    286278        var symbol = child.Data.Symbol;
    287         if (child.Data is NumberTreeNode firstNum) {
     279        if (child.Data is INumericTreeNode firstNum) {
    288280          // fold sibling number nodes into the first number
    289281          for (int k = j + 1; k < children.Length; ++k) {
    290282            var sibling = nodes[children[k]];
    291             if (sibling.Data is NumberTreeNode otherNum) {
     283            if (sibling.Data is INumericTreeNode otherNum) {
    292284              sibling.Enabled = false;
    293285              node.Arity--;
     
    301293          for (int k = j + 1; k < children.Length; ++k) {
    302294            var sibling = nodes[children[k]];
    303             if (sibling.Data is NumberTreeNode numNode) {
     295            if (sibling.Data is INumericTreeNode numNode) {
    304296              sibling.Enabled = false;
    305297              node.Arity--;
     
    344336      var tmp = nodes;
    345337
    346       if (children.All(x => tmp[x].Data.Symbol is Number)) {
    347         var v = ((NumberTreeNode)nodes[children.First()].Data).Value;
     338      if (children.All(x => tmp[x].Data.Symbol is INumericSymbol)) {
     339        var v = ((INumericTreeNode)nodes[children.First()].Data).Value;
    348340        if (node.Arity == 1) {
    349341          v = 1 / v;
    350342        } else if (node.Arity > 1) {
    351343          foreach (var j in children.Skip(1)) {
    352             v /= ((NumberTreeNode)nodes[j].Data).Value;
     344            v /= ((INumericTreeNode)nodes[j].Data).Value;
    353345          }
    354346        }
     
    383375      var childSymbol = child.Data.Symbol;
    384376
    385       if (childSymbol is Number) {
     377      if (childSymbol is INumericSymbol) {
    386378        nodes[i].Enabled = false;
    387379      } else if ((parentSymbol is Exponential && childSymbol is Logarithm) || (parentSymbol is Logarithm && childSymbol is Exponential)) {
     
    393385      var children = nodes.IterateChildren(i);
    394386      var tmp = nodes;
    395       if (children.All(x => tmp[x].Data.Symbol is Number)) {
     387      if (children.All(x => tmp[x].Data.Symbol is INumericSymbol)) {
    396388        foreach (var j in children) {
    397389          nodes[j].Enabled = false;
Note: See TracChangeset for help on using the changeset viewer.