Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/01/15 19:49:25 (9 years ago)
Author:
gkronber
Message:

#2283 various fixes for tree-based GP

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Problems.GrammaticalOptimization/HeuristicLab.Problems.GrammaticalOptimization/Problems/SantaFeAntProblem.cs

    r11832 r11847  
    11using System;
    22using System.Collections.Generic;
     3using System.Diagnostics;
    34using System.Linq;
    45using System.Runtime.InteropServices;
     
    67using System.Text;
    78using System.Text.RegularExpressions;
     9using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    810
    911namespace HeuristicLab.Problems.GrammaticalOptimization {
    10   public class SantaFeAntProblem : IProblem {
     12  public class SantaFeAntProblem : ISymbolicExpressionTreeProblem {
    1113    private const string grammarString = @"
    1214G(A):
    1315A -> l | r | m | ?(A)(A) | lA | rA | mA
    1416";
     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    ";
    1525
    1626
     
    2535    public SantaFeAntProblem() {
    2636      this.grammar = new Grammar(grammarString);
     37      this.SymbolicExpressionGrammar = new GenericSymbExprGrammar(new Grammar(hlGrammarString));
    2738    }
    2839
     
    116127    public IEnumerable<Feature> GetFeatures(string phrase) {
    117128      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      }
    118151    }
    119152  }
Note: See TracChangeset for help on using the changeset viewer.