Changeset 15907 for branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/GrammarEnumeration/Grammar.cs
- Timestamp:
- 04/16/18 15:19:58 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2886_SymRegGrammarEnumeration/HeuristicLab.Algorithms.DataAnalysis.SymRegGrammarEnumeration/GrammarEnumeration/Grammar.cs
r15883 r15907 176 176 177 177 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 194 180 double r2 = RSquaredEvaluator.Evaluate(problemData, tree, optimizeConstants); 195 181 … … 208 194 public SymbolicExpressionTree ParseSymbolicExpressionTree(SymbolString sentence) { 209 195 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!");211 196 212 197 var rootNode = rootSy.CreateTreeNode(); … … 214 199 rootNode.AddSubtree(startNode); 215 200 216 Stack< TerminalSymbol> parseStack = new Stack<TerminalSymbol>(sentence.OfType<TerminalSymbol>());201 Stack<Symbol> parseStack = new Stack<Symbol>(sentence); 217 202 startNode.AddSubtree(ParseSymbolicExpressionTree(parseStack)); 218 203 … … 220 205 } 221 206 222 public ISymbolicExpressionTreeNode ParseSymbolicExpressionTree(Stack< TerminalSymbol> parseStack) {223 TerminalSymbol currentSymbol = parseStack.Pop();207 public ISymbolicExpressionTreeNode ParseSymbolicExpressionTree(Stack<Symbol> parseStack) { 208 Symbol currentSymbol = parseStack.Pop(); 224 209 225 210 ISymbolicExpressionTreeNode parsedSubTree = null; … … 273 258 varNode.VariableName = currentSymbol.StringRepresentation; 274 259 parsedSubTree = varNode; 260 261 } else if (currentSymbol is NonterminalSymbol) { 262 ConstantTreeNode constNode = (ConstantTreeNode)constSy.CreateTreeNode(); 263 constNode.Value = 0.0; 264 parsedSubTree = constNode; 275 265 } 276 266
Note: See TracChangeset
for help on using the changeset viewer.