Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/16/18 15:19:58 (6 years ago)
Author:
lkammere
Message:

#2886: Changes in search heuristic for solving Poly-10 problem. Adapt tree evaluation to cover non-terminal symbols.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/GrammarEnumeration/Grammar.cs

    r15883 r15907  
    176176
    177177    public double EvaluatePhrase(SymbolString s, IRegressionProblemData problemData, bool optimizeConstants) {
    178       // Create sentences without Expression symbols.
    179       Symbol[] sEval = new Symbol[s.Count()];
    180 
    181       for (int i = 0; i < sEval.Length; i++) {
    182         Symbol currSym = s[i];
    183         if (currSym is NonterminalSymbol && currSym != Expr)
    184           return 0.0;
    185 
    186         if (currSym == Expr) {
    187           sEval[i] = Const;
    188         } else {
    189           sEval[i] = currSym;
    190         }
    191       }
    192 
    193       SymbolicExpressionTree tree = ParseSymbolicExpressionTree(new SymbolString(sEval));
     178      SymbolicExpressionTree tree = ParseSymbolicExpressionTree(s);
     179
    194180      double r2 = RSquaredEvaluator.Evaluate(problemData, tree, optimizeConstants);
    195181
     
    208194    public SymbolicExpressionTree ParseSymbolicExpressionTree(SymbolString sentence) {
    209195      Debug.Assert(sentence.Any(), "Trying to evaluate empty sentence!");
    210       Debug.Assert(sentence.All(s => s is TerminalSymbol), "Trying to evaluate symbol sequence with nonterminalsymbols!");
    211196
    212197      var rootNode = rootSy.CreateTreeNode();
     
    214199      rootNode.AddSubtree(startNode);
    215200
    216       Stack<TerminalSymbol> parseStack = new Stack<TerminalSymbol>(sentence.OfType<TerminalSymbol>());
     201      Stack<Symbol> parseStack = new Stack<Symbol>(sentence);
    217202      startNode.AddSubtree(ParseSymbolicExpressionTree(parseStack));
    218203
     
    220205    }
    221206
    222     public ISymbolicExpressionTreeNode ParseSymbolicExpressionTree(Stack<TerminalSymbol> parseStack) {
    223       TerminalSymbol currentSymbol = parseStack.Pop();
     207    public ISymbolicExpressionTreeNode ParseSymbolicExpressionTree(Stack<Symbol> parseStack) {
     208      Symbol currentSymbol = parseStack.Pop();
    224209
    225210      ISymbolicExpressionTreeNode parsedSubTree = null;
     
    273258        varNode.VariableName = currentSymbol.StringRepresentation;
    274259        parsedSubTree = varNode;
     260
     261      } else if (currentSymbol is NonterminalSymbol) {
     262        ConstantTreeNode constNode = (ConstantTreeNode)constSy.CreateTreeNode();
     263        constNode.Value = 0.0;
     264        parsedSubTree = constNode;
    275265      }
    276266
Note: See TracChangeset for help on using the changeset viewer.