Changeset 11847 for branches/HeuristicLab.Problems.GrammaticalOptimization/HeuristicLab.Problems.GrammaticalOptimization/Problems/SantaFeAntProblem.cs
- Timestamp:
- 02/01/15 19:49:25 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Problems.GrammaticalOptimization/HeuristicLab.Problems.GrammaticalOptimization/Problems/SantaFeAntProblem.cs
r11832 r11847 1 1 using System; 2 2 using System.Collections.Generic; 3 using System.Diagnostics; 3 4 using System.Linq; 4 5 using System.Runtime.InteropServices; … … 6 7 using System.Text; 7 8 using System.Text.RegularExpressions; 9 using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding; 8 10 9 11 namespace HeuristicLab.Problems.GrammaticalOptimization { 10 public class SantaFeAntProblem : I Problem {12 public class SantaFeAntProblem : ISymbolicExpressionTreeProblem { 11 13 private const string grammarString = @" 12 14 G(A): 13 15 A -> l | r | m | ?(A)(A) | lA | rA | mA 14 16 "; 17 // for tree-based GP in HL we need a different grammar for the same language 18 // A = Ant, P = Prog2 and Prog3, I = IfFoodAhead 19 private const string hlGrammarString = @" 20 G(A): 21 A -> l | r | m | P | I 22 P -> AA | AAA 23 I -> AA 24 "; 15 25 16 26 … … 25 35 public SantaFeAntProblem() { 26 36 this.grammar = new Grammar(grammarString); 37 this.SymbolicExpressionGrammar = new GenericSymbExprGrammar(new Grammar(hlGrammarString)); 27 38 } 28 39 … … 116 127 public IEnumerable<Feature> GetFeatures(string phrase) { 117 128 return Enumerable.Repeat(new Feature(CanonicalRepresentation(phrase), 1.0), 1); 129 } 130 131 public ISymbolicExpressionGrammar SymbolicExpressionGrammar { get; private set; } 132 public string ConvertTreeToSentence(ISymbolicExpressionTree tree) { 133 var sb = new StringBuilder(); 134 ConvertTreeToSentence(tree.Root.GetSubtree(0).GetSubtree(0), sb); 135 return sb.ToString(); 136 } 137 private void ConvertTreeToSentence(ISymbolicExpressionTreeNode node, StringBuilder sb) { 138 if (node.SubtreeCount == 0) { 139 // terminal 140 sb.Append(node.Symbol.Name); 141 } else if (node.Symbol.Name == "I") { 142 Debug.Assert(node.SubtreeCount == 2); 143 sb.Append("?("); 144 ConvertTreeToSentence(node.GetSubtree(0), sb); 145 sb.Append(")("); 146 ConvertTreeToSentence(node.GetSubtree(1), sb); 147 sb.Append(")"); 148 } else { 149 foreach (var subTree in node.Subtrees) { ConvertTreeToSentence(subTree, sb); } 150 } 118 151 } 119 152 }
Note: See TracChangeset
for help on using the changeset viewer.