• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C# ISymbolicExpressionTreeNode类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C#中ISymbolicExpressionTreeNode的典型用法代码示例。如果您正苦于以下问题:C# ISymbolicExpressionTreeNode类的具体用法?C# ISymbolicExpressionTreeNode怎么用?C# ISymbolicExpressionTreeNode使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



ISymbolicExpressionTreeNode类属于命名空间,在下文中一共展示了ISymbolicExpressionTreeNode类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。

示例1: CalculateImpactAndReplacementValues

    public override void CalculateImpactAndReplacementValues(ISymbolicDataAnalysisModel model, ISymbolicExpressionTreeNode node,
      IDataAnalysisProblemData problemData, IEnumerable<int> rows, out double impactValue, out double replacementValue, out double newQualityForImpactsCalculation,
      double qualityForImpactsCalculation = Double.NaN) {
      var classificationModel = (ISymbolicClassificationModel)model;
      var classificationProblemData = (IClassificationProblemData)problemData;

      if (double.IsNaN(qualityForImpactsCalculation))
        qualityForImpactsCalculation = CalculateQualityForImpacts(classificationModel, classificationProblemData, rows);

      replacementValue = CalculateReplacementValue(classificationModel, node, classificationProblemData, rows);
      var constantNode = new ConstantTreeNode(new Constant()) { Value = replacementValue };

      var cloner = new Cloner();
      var tempModel = cloner.Clone(classificationModel);
      var tempModelNode = (ISymbolicExpressionTreeNode)cloner.GetClone(node);

      var tempModelParentNode = tempModelNode.Parent;
      int i = tempModelParentNode.IndexOfSubtree(tempModelNode);
      tempModelParentNode.RemoveSubtree(i);
      tempModelParentNode.InsertSubtree(i, constantNode);

      OnlineCalculatorError errorState;
      var dataset = classificationProblemData.Dataset;
      var targetClassValues = dataset.GetDoubleValues(classificationProblemData.TargetVariable, rows);
      var estimatedClassValues = tempModel.GetEstimatedClassValues(dataset, rows);
      newQualityForImpactsCalculation = OnlineAccuracyCalculator.Calculate(targetClassValues, estimatedClassValues, out errorState);
      if (errorState != OnlineCalculatorError.None) newQualityForImpactsCalculation = 0.0;

      impactValue = qualityForImpactsCalculation - newQualityForImpactsCalculation;
    }
开发者ID:thunder176,项目名称:HeuristicLab,代码行数:30,代码来源:SymbolicClassificationSolutionImpactValuesCalculator.cs


示例2: Create

    public static void Create(IRandom random, ISymbolicExpressionTreeNode seedNode, int maxDepth) {
      // make sure it is possible to create a trees smaller than maxDepth
      if (seedNode.Grammar.GetMinimumExpressionDepth(seedNode.Symbol) > maxDepth)
        throw new ArgumentException("Cannot create trees of depth " + maxDepth + " or smaller because of grammar constraints.", "maxDepth");

      var arity = SampleArity(random, seedNode);
      // throw an exception if the seedNode happens to be a terminal, since in this case we cannot grow a tree
      if (arity <= 0)
        throw new ArgumentException("Cannot grow tree. Seed node shouldn't have arity zero.");

      var allowedSymbols = seedNode.Grammar.AllowedSymbols.Where(s => s.InitialFrequency > 0.0).ToList();

      for (var i = 0; i < arity; i++) {
        var possibleSymbols = allowedSymbols.Where(s => seedNode.Grammar.IsAllowedChildSymbol(seedNode.Symbol, s, i)).ToList();
        var weights = possibleSymbols.Select(s => s.InitialFrequency).ToList();

#pragma warning disable 612, 618
        var selectedSymbol = possibleSymbols.SelectRandom(weights, random);
#pragma warning restore 612, 618

        var tree = selectedSymbol.CreateTreeNode();
        if (tree.HasLocalParameters) tree.ResetLocalParameters(random);
        seedNode.AddSubtree(tree);
      }

      // Only iterate over the non-terminal nodes (those which have arity > 0)
      // Start from depth 2 since the first two levels are formed by the rootNode and the seedNode
      foreach (var subTree in seedNode.Subtrees)
        if (subTree.Grammar.GetMaximumSubtreeCount(subTree.Symbol) > 0)
          RecursiveCreate(random, subTree, 2, maxDepth);
    }
开发者ID:thunder176,项目名称:HeuristicLab,代码行数:31,代码来源:GrowTreeCreator.cs


示例3: RenderNode

 public static void RenderNode(TextWriter writer, ISymbolicExpressionTreeNode node, string prefix) {
   string label = node.ToString();
   writer.Write(label);
   if (node.SubtreeCount > 0) {
     var padding = prefix + new string(' ', label.Length);
     for (int i = 0; i != node.SubtreeCount; ++i) {
       char connector, extender = ' ';
       if (i == 0) {
         if (node.SubtreeCount > 1) {
           connector = RenderChars.JunctionDown;
           extender = RenderChars.VerticalLine;
         } else {
           connector = RenderChars.HorizontalLine;
           extender = ' ';
         }
       } else {
         writer.Write(padding);
         if (i == node.SubtreeCount - 1) {
           connector = RenderChars.CornerRight;
           extender = ' ';
         } else {
           connector = RenderChars.JunctionRight;
           extender = RenderChars.VerticalLine;
         }
       }
       writer.Write(string.Concat(connector, RenderChars.HorizontalLine));
       var newPrefix = string.Concat(padding, extender, ' ');
       RenderNode(writer, node.GetSubtree(i), newPrefix);
     }
   } else
     writer.WriteLine();
 }
开发者ID:thunder176,项目名称:HeuristicLab,代码行数:32,代码来源:SymbolicExpressionTreeHierarchicalFormatter.cs


示例4: MapBreathFirstIteratively

    /// <summary>
    /// Genotype-to-Phenotype mapper (iterative breath-first approach, by using a queue -> FIFO).
    /// </summary>
    /// <param name="startNode">first node of the tree with arity 1</param>
    /// <param name="genotype">integer vector, which should be mapped to a tree</param>
    /// <param name="grammar">grammar to determine the allowed child symbols for each node</param>
    /// <param name="maxSubtreeCount">maximum allowed subtrees (= number of used genomes)</param>
    /// <param name="random">random number generator</param>
    private void MapBreathFirstIteratively(ISymbolicExpressionTreeNode startNode,
                                          IntegerVector genotype,
                                          ISymbolicExpressionGrammar grammar,
                                          int maxSubtreeCount, IRandom random) {

      Queue<Tuple<ISymbolicExpressionTreeNode, int>> queue
        = new Queue<Tuple<ISymbolicExpressionTreeNode, int>>(); // tuples of <node, arity>

      int genotypeIndex = 0;
      queue.Enqueue(new Tuple<ISymbolicExpressionTreeNode, int>(startNode, 1));

      while (queue.Count > 0) {

        Tuple<ISymbolicExpressionTreeNode, int> current = queue.Dequeue();

        // foreach subtree of the current node, create a new node and enqueue it, if it is no terminal node
        for (int i = 0; i < current.Item2; ++i) {

          if (genotypeIndex >= maxSubtreeCount) {
            // if all genomes were used, only add terminal nodes to the remaining subtrees
            current.Item1.AddSubtree(GetRandomTerminalNode(current.Item1, grammar, random));
          } else {
            var newNode = GetNewChildNode(current.Item1, genotype, grammar, genotypeIndex, random);
            int arity = SampleArity(random, newNode, grammar);

            current.Item1.AddSubtree(newNode);
            genotypeIndex++;
            if (arity > 0) {
              // new node has subtrees so enqueue the node 
              queue.Enqueue(new Tuple<ISymbolicExpressionTreeNode, int>(newNode, arity));
            }
          }
        }
      }
    }
开发者ID:t-h-e,项目名称:HeuristicLab,代码行数:43,代码来源:BreathFirstMapper.cs


示例5: CompareNodes

    public static int CompareNodes(ISymbolicExpressionTreeNode a, ISymbolicExpressionTreeNode b) {
      var ta = a as SymbolicExpressionTreeTerminalNode;
      var tb = b as SymbolicExpressionTreeTerminalNode;

      if (ta == null)
        return tb == null ? String.CompareOrdinal(a.Symbol.Name, b.Symbol.Name) : -1;

      if (tb == null)
        return 1;

      // at this point we know a and b are both terminals
      var va = a as VariableTreeNode;
      var vb = b as VariableTreeNode;

      if (va != null)
        return vb == null ? -1 : CompareVariables(va, vb);

      if (vb != null)
        return 1;

      // at this point we know a and b are not variables
      var ca = a as ConstantTreeNode;
      var cb = b as ConstantTreeNode;

      if (ca != null && cb != null)
        return ca.Value.CompareTo(cb.Value);

      // for other unknown terminal types, compare strings
      return string.CompareOrdinal(a.ToString(), b.ToString());
    }
开发者ID:t-h-e,项目名称:HeuristicLab,代码行数:30,代码来源:SymbolicExpressionTreeNodeComparer.cs


示例6: VariableNodeEditDialog

    public VariableNodeEditDialog(ISymbolicExpressionTreeNode node) {
      InitializeComponent();
      oldValueTextBox.TabStop = false; // cannot receive focus using tab key

      NewNode = (VariableTreeNode)node; // will throw an invalid cast exception if node is not of the correct type
      InitializeFields();
    }
开发者ID:thunder176,项目名称:HeuristicLab,代码行数:7,代码来源:SymbolicExpressionTreeVariableNodeEditDialog.cs


示例7: FormatRecursively

    private string FormatRecursively(ISymbolicExpressionTreeNode node, int indentLength, ref int nodeId) {
      // save id of current node
      int currentNodeId = nodeId;
      // increment id for next node
      nodeId++;

      StringBuilder strBuilder = new StringBuilder();
      if (Indent) strBuilder.Append(' ', indentLength);

      // get label for node and map if necessary
      string nodeLabel = node.ToString();
      if (symbolNameMap.ContainsKey(nodeLabel)) {
        nodeLabel = symbolNameMap[nodeLabel];
      }

      strBuilder.Append("node" + currentNodeId + "[label=\"" + nodeLabel + "\"");
      // leaf nodes should have box shape
      if (node.SubtreeCount == 0) {
        strBuilder.AppendLine(", shape=\"box\"];");
      } else {
        strBuilder.AppendLine("];");
      }

      // internal nodes or leaf nodes?
      foreach (ISymbolicExpressionTreeNode subTree in node.Subtrees) {
        // add an edge 
        if (Indent) strBuilder.Append(' ', indentLength);
        strBuilder.AppendLine("node" + currentNodeId + " -- node" + nodeId + ";");
        // format the whole subtree
        strBuilder.Append(FormatRecursively(subTree, indentLength + 2, ref nodeId));
      }

      return strBuilder.ToString();
    }
开发者ID:t-h-e,项目名称:HeuristicLab,代码行数:34,代码来源:SymbolicExpressionTreeGraphvizFormatter.cs


示例8: FormatRecursively

 private void FormatRecursively(ISymbolicExpressionTreeNode node, StringBuilder strBuilder) {
   // TODO: adapt to interpreter semantics. The HL interpreter also allows Boolean operations on reals
   if (node.Subtrees.Any()) {
     if (node.Symbol is Addition) {
       FormatOperator(node, "+", strBuilder);
     } else if (node.Symbol is And) {
       FormatOperator(node, "&&", strBuilder);
     } else if (node.Symbol is Average) {
       FormatFunction(node, "Average", strBuilder);
     } else if (node.Symbol is Cosine) {
       FormatFunction(node, "Math.Cos", strBuilder);
     } else if (node.Symbol is Division) {
       FormatDivision(node, strBuilder);
     } else if (node.Symbol is Exponential) {
       FormatFunction(node, "Math.Exp", strBuilder);
     } else if (node.Symbol is GreaterThan) {
       FormatOperator(node, ">", strBuilder);
     } else if (node.Symbol is IfThenElse) {
       FormatFunction(node, "EvaluateIf", strBuilder);
     } else if (node.Symbol is LessThan) {
       FormatOperator(node, "<", strBuilder);
     } else if (node.Symbol is Logarithm) {
       FormatFunction(node, "Math.Log", strBuilder);
     } else if (node.Symbol is Multiplication) {
       FormatOperator(node, "*", strBuilder);
     } else if (node.Symbol is Not) {
       FormatOperator(node, "!", strBuilder);
     } else if (node.Symbol is Or) {
       FormatOperator(node, "||", strBuilder);
     } else if (node.Symbol is Xor) {
       FormatOperator(node, "^", strBuilder);
     } else if (node.Symbol is Sine) {
       FormatFunction(node, "Math.Sin", strBuilder);
     } else if (node.Symbol is Subtraction) {
       FormatSubtraction(node, strBuilder);
     } else if (node.Symbol is Tangent) {
       FormatFunction(node, "Math.Tan", strBuilder);
     } else if (node.Symbol is Square) {
       FormatSquare(node, strBuilder);
     } else if (node.Symbol is SquareRoot) {
       FormatFunction(node, "Math.Sqrt", strBuilder);
     } else if (node.Symbol is Power) {
       FormatFunction(node, "Math.Pow", strBuilder);
     } else if (node.Symbol is Root) {
       FormatRoot(node, strBuilder);
     } else {
       throw new NotSupportedException("Formatting of symbol: " + node.Symbol + " not supported for C# symbolic expression tree formatter.");
     }
   } else {
     if (node is VariableTreeNode) {
       var varNode = node as VariableTreeNode;
       strBuilder.AppendFormat("{0} * {1}", varNode.VariableName, varNode.Weight.ToString("g17", CultureInfo.InvariantCulture));
     } else if (node is ConstantTreeNode) {
       var constNode = node as ConstantTreeNode;
       strBuilder.Append(constNode.Value.ToString("g17", CultureInfo.InvariantCulture));
     } else {
       throw new NotSupportedException("Formatting of symbol: " + node.Symbol + " not supported for C# symbolic expression tree formatter.");
     }
   }
 }
开发者ID:t-h-e,项目名称:HeuristicLab,代码行数:60,代码来源:SymbolicDataAnalysisExpressionCSharpFormatter.cs


示例9: FormatRecursively

 private string FormatRecursively(ISymbolicExpressionTreeNode node, int indentLength) {
   StringBuilder strBuilder = new StringBuilder();
   if (Indent) strBuilder.Append(' ', indentLength);
   if (node.Subtrees.Count() > 0) { // internal node
     strBuilder.Append("(");
     if (node.Symbol is Addition) {
       strBuilder.AppendLine("+");
     } else if (node.Symbol is And) {
       strBuilder.AppendLine("&&");
     } else if (node.Symbol is Average) {
       strBuilder.AppendLine("avg");
     } else if (node.Symbol is Cosine) {
       strBuilder.AppendLine("cos");
     } else if (node.Symbol is Division) {
       strBuilder.AppendLine("/");
     } else if (node.Symbol is Exponential) {
       strBuilder.AppendLine("exp");
     } else if (node.Symbol is GreaterThan) {
       strBuilder.AppendLine(">");
     } else if (node.Symbol is IfThenElse) {
       strBuilder.AppendLine("if");
     } else if (node.Symbol is LessThan) {
       strBuilder.AppendLine("<");
     } else if (node.Symbol is Logarithm) {
       strBuilder.AppendLine("ln");
     } else if (node.Symbol is Multiplication) {
       strBuilder.AppendLine("*");
     } else if (node.Symbol is Not) {
       strBuilder.AppendLine("!");
     } else if (node.Symbol is Or) {
       strBuilder.AppendLine("||");
     } else if (node.Symbol is Sine) {
       strBuilder.AppendLine("sin");
     } else if (node.Symbol is Subtraction) {
       strBuilder.AppendLine("-");
     } else if (node.Symbol is Tangent) {
       strBuilder.AppendLine("tan");
     } else {
       throw new NotSupportedException("Formatting of symbol: " + node.Symbol + " not supported for external evaluation.");
     }
     // each subtree expression on a new line
     // and closing ')' also on new line
     foreach (var subtree in node.Subtrees) {
       strBuilder.AppendLine(FormatRecursively(subtree, indentLength + 2));
     }
     if (Indent) strBuilder.Append(' ', indentLength);
     strBuilder.Append(")");
   } else {
     if (node is VariableTreeNode) {
       var varNode = node as VariableTreeNode;
       strBuilder.AppendFormat("(* {0} {1})", varNode.VariableName, varNode.Weight.ToString("g17", CultureInfo.InvariantCulture));
     } else if (node is ConstantTreeNode) {
       var constNode = node as ConstantTreeNode;
       strBuilder.Append(constNode.Value.ToString("g17", CultureInfo.InvariantCulture));
     } else {
       throw new NotSupportedException("Formatting of symbol: " + node.Symbol + " not supported for external evaluation.");
     }
   }
   return strBuilder.ToString();
 }
开发者ID:t-h-e,项目名称:HeuristicLab,代码行数:60,代码来源:ExternalEvaluationSymbolicExpressionTreeStringFormatter.cs


示例10: FormatRecursively

 private static string FormatRecursively(ISymbolicExpressionTreeNode node) {
   StringBuilder strBuilder = new StringBuilder();
   if (node.Subtrees.Count() > 0) {
     // node
     var symbol = node.Symbol as CFGSymbol;
     if (symbol != null) {
       var partsEnumerator = symbol.GetTerminalParts().GetEnumerator();
       var subtreeEnumerator = node.Subtrees.GetEnumerator();
       while (partsEnumerator.MoveNext() && subtreeEnumerator.MoveNext()) {
         strBuilder.Append(partsEnumerator.Current);
         strBuilder.Append(FormatRecursively(subtreeEnumerator.Current));
       }
       strBuilder.Append(partsEnumerator.Current);
     } else {
       // ProgramRoot or StartSymbol
       foreach (var subtree in node.Subtrees) {
         strBuilder.Append(FormatRecursively(subtree));
       }
     }
   } else {
     // leaf
     var symbol = node.Symbol as CFGSymbol;
     if (symbol != null) {
       var parts = symbol.GetTerminalParts();
       strBuilder.Append(parts.First());
     }
   }
   return strBuilder.ToString();
 }
开发者ID:t-h-e,项目名称:HeuristicLab.CFGGP,代码行数:29,代码来源:CFGSymbolicExpressionTreeStringFormatter.cs


示例11: FindMatches

    public static IEnumerable<ISymbolicExpressionTreeNode> FindMatches(ISymbolicExpressionTreeNode root, ISymbolicExpressionTreeNode subtree, SymbolicExpressionTreeNodeEqualityComparer comp) {
      var fragmentLength = subtree.GetLength();
      // below, we use ">=" for Match(n, subtree, comp) >= fragmentLength because in case of relaxed conditions, 
      // we can have multiple matches of the same node

      return root.IterateNodesBreadth().Where(n => n.GetLength() >= fragmentLength && Match(n, subtree, comp) == fragmentLength);
    }
开发者ID:t-h-e,项目名称:HeuristicLab,代码行数:7,代码来源:SymbolicExpressionTreeMatching.cs


示例12: FormatOnlyExpression

 public string FormatOnlyExpression(ISymbolicExpressionTreeNode expressionNode) {
   var stringBuilder = new StringBuilder();
   stringBuilder.AppendLine("  for " + CurrentIndexVariable + " = 1:1:rows");
   stringBuilder.AppendLine("    estimated(" + CurrentIndexVariable + ") = " + FormatRecursively(expressionNode.GetSubtree(0)) + ";");
   stringBuilder.AppendLine("  end;");
   return stringBuilder.ToString();
 }
开发者ID:thunder176,项目名称:HeuristicLab,代码行数:7,代码来源:SymbolicDataAnalysisExpressionMATLABFormatter.cs


示例13: SortSubtrees

 public void SortSubtrees(ISymbolicExpressionTreeNode node) {
   if (node.SubtreeCount == 0) return;
   var subtrees = node.Subtrees as List<ISymbolicExpressionTreeNode> ?? node.Subtrees.ToList();
   if (IsSymmetric(node.Symbol)) {
     var comparer = new SymbolicExpressionTreeNodeComparer();
     subtrees.Sort(comparer);
   }
   foreach (var s in subtrees)
     SortSubtrees(s);
 }
开发者ID:thunder176,项目名称:HeuristicLab,代码行数:10,代码来源:SymbolicExpressionTreeCanonicalSorter.cs


示例14: SwapVariableWithTree

    private void SwapVariableWithTree(VariableTreeNode variableNode, ISymbolicExpressionTreeNode treeNode) {
      var parent = variableNode.Parent;
      int index = parent.IndexOfSubtree(variableNode);
      parent.RemoveSubtree(index);

      if (!variableNode.Weight.IsAlmost(1.0))
        treeNode = CreateNodeFromWeight(treeNode, variableNode);

      parent.InsertSubtree(index, treeNode);
    }
开发者ID:t-h-e,项目名称:HeuristicLab,代码行数:10,代码来源:SymbolicExpressionTreeBacktransformator.cs


示例15: FormatRecursively

 private static string FormatRecursively(ISymbolicExpressionTreeNode node) {
   StringBuilder strBuilder = new StringBuilder();
   if (node.Subtrees.Count() > 0) {
     // node
     foreach (var subtree in node.Subtrees) {
       strBuilder.Append(FormatRecursively(subtree));
     }
   } else {
     // leaf
     strBuilder.Append(node.ToString());
   }
   return strBuilder.ToString();
 }
开发者ID:t-h-e,项目名称:HeuristicLab.CFGGP,代码行数:13,代码来源:SymbolicExpressionTreeTerminalNodeStringFormatter.cs


示例16: Difference

 public static ISymbolicExpressionTreeNode Difference(this ISymbolicExpressionTreeNode node, ISymbolicExpressionTreeNode other) {
   var a = node.IterateNodesPrefix().ToList();
   var b = other.IterateNodesPrefix().ToList();
   var list = new List<ISymbolicExpressionTreeNode>();
   for (int i = 0, j = 0; i < a.Count && j < b.Count; ++i, ++j) {
     var s1 = a[i].ToString();
     var s2 = b[j].ToString();
     if (s1 == s2) continue;
     list.Add(a[i]);
     // skip subtrees since the parents are already different
     i += a[i].SubtreeCount;
     j += b[j].SubtreeCount;
   }
   ISymbolicExpressionTreeNode result = list.Count > 0 ? LowestCommonAncestor(node, list) : null;
   return result;
 }
开发者ID:t-h-e,项目名称:HeuristicLab,代码行数:16,代码来源:SymbolicExpressionTreeMatching.cs


示例17: Match

 ///<summary>
 /// Finds the longest common subsequence in quadratic time and linear space
 /// Variant of:
 /// D. S. Hirschberg. A linear space algorithm for or computing maximal common subsequences. 1975.
 /// http://dl.acm.org/citation.cfm?id=360861
 /// </summary>
 /// <returns>Number of pairs that were matched</returns>
 public static int Match(ISymbolicExpressionTreeNode a, ISymbolicExpressionTreeNode b, ISymbolicExpressionTreeNodeSimilarityComparer comp) {
   if (!comp.Equals(a, b)) return 0;
   int m = a.SubtreeCount;
   int n = b.SubtreeCount;
   if (m == 0 || n == 0) return 1;
   var matrix = new int[m + 1, n + 1];
   for (int i = 1; i <= m; ++i) {
     var ai = a.GetSubtree(i - 1);
     for (int j = 1; j <= n; ++j) {
       var bj = b.GetSubtree(j - 1);
       int match = Match(ai, bj, comp);
       matrix[i, j] = Math.Max(Math.Max(matrix[i, j - 1], matrix[i - 1, j]), matrix[i - 1, j - 1] + match);
     }
   }
   return matrix[m, n] + 1;
 }
开发者ID:t-h-e,项目名称:HeuristicLab,代码行数:23,代码来源:SymbolicExpressionTreeMatching.cs


示例18: GetRandomTerminalNode

    /// <summary>
    /// Randomly returns a terminal node for the given <paramref name="parentNode"/>.
    /// (A terminal has got a minimum and maximum arity of 0.)
    /// </summary>
    /// <param name="parentNode">parent node for which a child node is returned randomly</param>
    /// <param name="grammar">grammar to determine the allowed child symbols for parentNode</param>
    /// <param name="random">random number generator</param>
    /// <returns>randomly chosen terminal node with arity 0 or null, if no terminal node exists</returns>
    protected ISymbolicExpressionTreeNode GetRandomTerminalNode(ISymbolicExpressionTreeNode parentNode,
                                                                ISymbolicExpressionGrammar grammar,
                                                                IRandom random) {
      // only select specific symbols, which can be interpreted ...
      var possibleSymbolsList = (from s in grammar.GetAllowedChildSymbols(parentNode.Symbol)
                                 where s.InitialFrequency > 0.0
                                 where s.MaximumArity == 0
                                 where s.MinimumArity == 0
                                 select s).ToList();

      // no terminal node exists for the given parent node
      if (!possibleSymbolsList.Any()) return null;

      var newNode = possibleSymbolsList.SampleRandom(random).CreateTreeNode();
      if (newNode.HasLocalParameters) newNode.ResetLocalParameters(random);
      return newNode;
    }
开发者ID:thunder176,项目名称:HeuristicLab,代码行数:25,代码来源:GenotypeToPhenotypeMapper.cs


示例19: CalculateReplacementValue

    protected static double CalculateReplacementValue(ISymbolicExpressionTreeNode node, ISymbolicExpressionTree sourceTree, ISymbolicDataAnalysisExpressionTreeInterpreter interpreter,
      IDataset dataset, IEnumerable<int> rows) {
      //optimization: constant nodes return always the same value
      ConstantTreeNode constantNode = node as ConstantTreeNode;
      if (constantNode != null) return constantNode.Value;

      var rootSymbol = new ProgramRootSymbol().CreateTreeNode();
      var startSymbol = new StartSymbol().CreateTreeNode();
      rootSymbol.AddSubtree(startSymbol);
      startSymbol.AddSubtree((ISymbolicExpressionTreeNode)node.Clone());

      var tempTree = new SymbolicExpressionTree(rootSymbol);
      // clone ADFs of source tree
      for (int i = 1; i < sourceTree.Root.SubtreeCount; i++) {
        tempTree.Root.AddSubtree((ISymbolicExpressionTreeNode)sourceTree.Root.GetSubtree(i).Clone());
      }
      return interpreter.GetSymbolicExpressionTreeValues(tempTree, dataset, rows).Median();
    }
开发者ID:t-h-e,项目名称:HeuristicLab,代码行数:18,代码来源:SymbolicDataAnalysisSolutionImpactValuesCalculator.cs


示例20: Compile

 private static IEnumerable<Instruction> Compile(ISymbolicExpressionTreeNode branch, Func<ISymbolicExpressionTreeNode, byte> opCodeMapper, IEnumerable<Func<Instruction, Instruction>> postInstructionCompiledHooks) {
   foreach (var node in branch.IterateNodesPrefix()) {
     Instruction instr = new Instruction();
     int subtreesCount = node.SubtreeCount;
     if (subtreesCount > 255) throw new ArgumentException("Number of subtrees is too big (>255)");
     instr.nArguments = (byte)subtreesCount;
     instr.opCode = opCodeMapper(node);
     if (node.Symbol is Argument) {
       var argNode = (ArgumentTreeNode)node;
       instr.data = (ushort)argNode.Symbol.ArgumentIndex;
     }
     instr.dynamicNode = node;
     foreach (var hook in postInstructionCompiledHooks) {
       instr = hook(instr);
     }
     yield return instr;
   }
 }
开发者ID:thunder176,项目名称:HeuristicLab,代码行数:18,代码来源:SymbolicExpressionTreeCompiler.cs



注:本文中的ISymbolicExpressionTreeNode类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C# ISynchronizeInvoke类代码示例发布时间:2022-05-24
下一篇:
C# ISymbolicExpressionTree类代码示例发布时间:2022-05-24
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap