当前位置: 首页>>代码示例>>C#>>正文


C# ISymbolicExpressionTree.IterateNodesPostfix方法代码示例

本文整理汇总了C#中ISymbolicExpressionTree.IterateNodesPostfix方法的典型用法代码示例。如果您正苦于以下问题:C# ISymbolicExpressionTree.IterateNodesPostfix方法的具体用法?C# ISymbolicExpressionTree.IterateNodesPostfix怎么用?C# ISymbolicExpressionTree.IterateNodesPostfix使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在ISymbolicExpressionTree的用法示例。


在下文中一共展示了ISymbolicExpressionTree.IterateNodesPostfix方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: InitTree

 public static void InitTree(ISymbolicExpressionTree tree, MersenneTwister twister, List<string> varNames) {
   foreach (var node in tree.IterateNodesPostfix()) {
     if (node is VariableTreeNode) {
       var varNode = node as VariableTreeNode;
       varNode.Weight = twister.NextDouble() * 20.0 - 10.0;
       varNode.VariableName = varNames[twister.Next(varNames.Count)];
     } else if (node is ConstantTreeNode) {
       var constantNode = node as ConstantTreeNode;
       constantNode.Value = twister.NextDouble() * 20.0 - 10.0;
     }
   }
 }
开发者ID:thunder176,项目名称:HeuristicLab,代码行数:12,代码来源:Util.cs

示例2: Calculate

 public static double[] Calculate(ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, IRegressionProblemData problemData, IEnumerable<int> rows, bool applyLinearScaling, int decimalPlaces) {
   double r2 = SymbolicRegressionSingleObjectivePearsonRSquaredEvaluator.Calculate(interpreter, solution, lowerEstimationLimit, upperEstimationLimit, problemData, rows, applyLinearScaling);
   if (decimalPlaces >= 0)
     r2 = Math.Round(r2, decimalPlaces);
   return new double[2] { r2, solution.IterateNodesPostfix().OfType<VariableTreeNode>().Count() }; // count the number of variables
 }
开发者ID:t-h-e,项目名称:HeuristicLab,代码行数:6,代码来源:PearsonRSquaredNumberOfVariablesEvaluator.cs

示例3: IsValid

    public static void IsValid(ISymbolicExpressionTree tree) {
      int reportedSize = tree.Length;
      int actualSize = tree.IterateNodesPostfix().Count();
      Assert.AreEqual(actualSize, reportedSize);

      foreach (var defunTreeNode in tree.Root.Subtrees.OfType<DefunTreeNode>()) {
        int arity = defunTreeNode.NumberOfArguments;

        foreach (var argTreenode in defunTreeNode.IterateNodesPrefix().OfType<ArgumentTreeNode>()) {
          Assert.IsTrue(argTreenode.SubtreeCount == 0);
          Assert.IsTrue(((Argument)argTreenode.Symbol).ArgumentIndex < arity);
        }

        foreach (var argSymbol in Enumerable.Range(0, defunTreeNode.NumberOfArguments).Select(x => new Argument(x))) {
          Assert.IsTrue(defunTreeNode.Grammar.ContainsSymbol(argSymbol));
          Assert.IsTrue(defunTreeNode.Grammar.GetMaximumSubtreeCount(argSymbol) == 0);
          Assert.IsTrue(defunTreeNode.Grammar.GetMinimumSubtreeCount(argSymbol) == 0);
        }

        var invoke = new InvokeFunction(defunTreeNode.FunctionName);
        foreach (var otherRootNode in tree.Root.Subtrees) {
          if (otherRootNode.Grammar.ContainsSymbol(invoke)) {
            Assert.IsTrue(otherRootNode.Grammar.GetMinimumSubtreeCount(invoke) == arity);
            Assert.IsTrue(otherRootNode.Grammar.GetMaximumSubtreeCount(invoke) == arity);
            Assert.IsFalse(otherRootNode.Grammar.IsAllowedChildSymbol(invoke, invoke));
            for (int i = 0; i < arity; i++) {
              Assert.IsFalse(otherRootNode.Grammar.IsAllowedChildSymbol(invoke, invoke, i));
            }
          }
        }

      }

      foreach (var subtree in tree.Root.Subtrees) {
        if (tree.Root.Grammar.GetType().Name != "EmptySymbolicExpressionTreeGrammar")
          Assert.AreNotSame(subtree.Grammar, tree.Root.Grammar);
        IsValid(subtree.Grammar);
      }

      IsValid(tree.Root.Grammar);
      IsValid(tree.Root);
    }
开发者ID:t-h-e,项目名称:HeuristicLab,代码行数:42,代码来源:Util.cs

示例4: IsValid

 private bool IsValid(ISymbolicExpressionTree tree) {
   treeChart.Tree = tree;
   treeChart.Repaint();
   bool valid = !tree.IterateNodesPostfix().Any(node => node.SubtreeCount < GetMinArity(node.Symbol) || node.SubtreeCount > node.Symbol.MaximumArity);
   if (valid) {
     btnOptimizeConstants.Enabled = true;
     btnSimplify.Enabled = true;
     treeStatusValue.Visible = false;
   } else {
     btnOptimizeConstants.Enabled = false;
     btnSimplify.Enabled = false;
     treeStatusValue.Visible = true;
   }
   this.Refresh();
   return valid;
 }
开发者ID:t-h-e,项目名称:HeuristicLab,代码行数:16,代码来源:InteractiveSymbolicDataAnalysisSolutionSimplifierView.cs

示例5: GenerateHeader

    private void GenerateHeader(StringBuilder strBuilder, ISymbolicExpressionTree symbolicExpressionTree) {
      strBuilder.AppendLine("using System;");
      strBuilder.AppendLine("using System.Linq;" + Environment.NewLine);
      strBuilder.AppendLine("namespace HeuristicLab.Models {");
      strBuilder.AppendLine("public static class Model {");
      GenerateAverageSource(strBuilder);
      GenerateIfThenElseSource(strBuilder);
      strBuilder.Append(Environment.NewLine + "public static double Evaluate (");

      HashSet<string> varNames = new HashSet<string>();
      foreach (var node in symbolicExpressionTree.IterateNodesPostfix().Where(x => x is VariableTreeNode)) {
        varNames.Add(((VariableTreeNode)node).VariableName);
      }

      var orderedNames = varNames.OrderBy(n => n, new NaturalStringComparer()).Select(n => "double " + n);
      strBuilder.Append(string.Join(", ", orderedNames));

      strBuilder.AppendLine(") {");
      strBuilder.Append("double result = ");
    }
开发者ID:t-h-e,项目名称:HeuristicLab,代码行数:20,代码来源:SymbolicDataAnalysisExpressionCSharpFormatter.cs

示例6: CreateNewArgumentForDefun

    private static bool CreateNewArgumentForDefun(IRandom random, ISymbolicExpressionTree tree, DefunTreeNode defunBranch, ArgumentTreeNode newArgumentNode) {
      // select a random cut point in the function defining branch
      // the branch at the cut point is to be replaced by a new argument node
      var cutPoints = (from node in defunBranch.IterateNodesPrefix()
                       where node.Subtrees.Count() > 0 &&
                             !node.IterateNodesPrefix().OfType<ArgumentTreeNode>().Any() &&
                             !node.IterateNodesPrefix().OfType<InvokeFunctionTreeNode>().Any()
                       from subtree in node.Subtrees
                       select new CutPoint(node, subtree)).ToList();

      if (cutPoints.Count() == 0)
        // no cut point found => abort;
        return false;
      var selectedCutPoint = cutPoints[random.Next(cutPoints.Count)];
      // replace the branch at the cut point with an argument node
      var replacedBranch = selectedCutPoint.Child;
      selectedCutPoint.Parent.RemoveSubtree(selectedCutPoint.ChildIndex);
      selectedCutPoint.Parent.InsertSubtree(selectedCutPoint.ChildIndex, newArgumentNode);

      // find all old invocations of the selected ADF and attach a cloned version of the replaced branch (with all argument-nodes expanded)
      // iterate in post-fix order to make sure that the subtrees of n are already adapted when n is processed
      var invocationNodes = (from node in tree.IterateNodesPostfix().OfType<InvokeFunctionTreeNode>()
                             where node.Symbol.FunctionName == defunBranch.FunctionName
                             where node.Subtrees.Count() == defunBranch.NumberOfArguments
                             select node).ToList();
      // do this repeatedly until no matching invocations are found      
      while (invocationNodes.Count > 0) {
        List<ISymbolicExpressionTreeNode> newlyAddedBranches = new List<ISymbolicExpressionTreeNode>();
        foreach (var invocationNode in invocationNodes) {
          // check that the invocation node really has the correct number of arguments
          if (invocationNode.Subtrees.Count() != defunBranch.NumberOfArguments) throw new InvalidOperationException();
          // append a new argument branch after expanding all argument nodes
          var clonedBranch = (ISymbolicExpressionTreeNode)replacedBranch.Clone();
          clonedBranch = ReplaceArgumentsInBranch(clonedBranch, invocationNode.Subtrees);
          invocationNode.InsertSubtree(newArgumentNode.Symbol.ArgumentIndex, clonedBranch);
          newlyAddedBranches.Add(clonedBranch);
        }
        // iterate in post-fix order to make sure that the subtrees of n are already adapted when n is processed
        invocationNodes = (from newlyAddedBranch in newlyAddedBranches
                           from node in newlyAddedBranch.IterateNodesPostfix().OfType<InvokeFunctionTreeNode>()
                           where node.Symbol.FunctionName == defunBranch.FunctionName
                           where node.Subtrees.Count() == defunBranch.NumberOfArguments
                           select node).ToList();
      }
      // increase expected number of arguments of function defining branch
      // it's possible that the number of actually referenced arguments was reduced (all references were replaced by a single new argument)
      // but the number of expected arguments is increased anyway
      defunBranch.NumberOfArguments++;
      defunBranch.Grammar.AddSymbol(newArgumentNode.Symbol);
      defunBranch.Grammar.SetSubtreeCount(newArgumentNode.Symbol, 0, 0);
      // allow the argument as child of any other symbol
      GrammarModifier.SetAllowedParentSymbols(defunBranch.Grammar, selectedCutPoint.Child.Symbol, newArgumentNode.Symbol);

      foreach (var subtree in tree.Root.Subtrees) {
        // when the changed function is known in the branch then update the number of arguments
        var matchingSymbol = subtree.Grammar.Symbols.OfType<InvokeFunction>().Where(s => s.FunctionName == defunBranch.FunctionName).SingleOrDefault();
        if (matchingSymbol != null) {
          subtree.Grammar.SetSubtreeCount(matchingSymbol, defunBranch.NumberOfArguments, defunBranch.NumberOfArguments);
          foreach (var symb in subtree.Grammar.Symbols) {
            if (symb is StartSymbol || symb is ProgramRootSymbol) continue;
            if (symb.Name == matchingSymbol.Name) continue; //don't allow invoke as child of invoke
            if (subtree.Grammar.IsAllowedChildSymbol(selectedCutPoint.Parent.Symbol, symb, selectedCutPoint.ChildIndex))
              subtree.Grammar.AddAllowedChildSymbol(matchingSymbol, symb, newArgumentNode.Symbol.ArgumentIndex);
          }
        }
      }

      return true;
    }
开发者ID:thunder176,项目名称:HeuristicLab,代码行数:69,代码来源:ArgumentCreater.cs

示例7: Calculate

 public static double[] Calculate(ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree solution, double lowerEstimationLimit, double upperEstimationLimit, IRegressionProblemData problemData, IEnumerable<int> rows, bool applyLinearScaling, int decimalPlaces) {
   double r2 = SymbolicRegressionSingleObjectivePearsonRSquaredEvaluator.Calculate(interpreter, solution, lowerEstimationLimit, upperEstimationLimit, problemData, rows, applyLinearScaling);
   if (decimalPlaces >= 0)
     r2 = Math.Round(r2, decimalPlaces);
   return new double[2] { r2, solution.IterateNodesPostfix().Sum(n => n.GetLength()) }; // sum of the length of the whole sub-tree for each node 
 }
开发者ID:t-h-e,项目名称:HeuristicLab,代码行数:6,代码来源:PearsonRSquaredNestedTreeSizeEvaluator.cs


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