Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/02/15 16:08:21 (9 years ago)
Author:
gkronber
Message:

#2283: several major extensions for grammatical optimization

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Problems.GrammaticalOptimization/HeuristicLab.Algorithms.GrammaticalOptimization/AlternativesSampler.cs

    r11727 r11730  
    2727      InitPolicies(problem.Grammar);
    2828      for (int i = 0; i < maxIterations; i++) {
    29         var sentence = SampleSentence(problem.Grammar);
    30         var quality = problem.Evaluate(sentence) / problem.GetBestKnownQuality(maxLen); 
     29        var sentence = SampleSentence(problem.Grammar).ToString();
     30        var quality = problem.Evaluate(sentence) / problem.GetBestKnownQuality(maxLen);
    3131        DistributeReward(quality);
    3232
     
    5252    }
    5353
    54     private string SampleSentence(IGrammar grammar) {
     54    private Sequence SampleSentence(IGrammar grammar) {
    5555      updateChain.Clear();
    56       return CompleteSentence(grammar, grammar.SentenceSymbol.ToString());
     56      return CompleteSentence(grammar, new Sequence(grammar.SentenceSymbol));
    5757    }
    5858
    59     public string CompleteSentence(IGrammar g, string phrase) {
     59    public Sequence CompleteSentence(IGrammar g, Sequence phrase) {
    6060      if (phrase.Length > maxLen) throw new ArgumentException();
    6161      if (g.MinPhraseLength(phrase) > maxLen) throw new ArgumentException();
    62       bool done = phrase.All(g.IsTerminal); // terminal phrase means we are done
     62      bool done = phrase.IsTerminal; // terminal phrase means we are done
    6363      while (!done) {
    64         int ntIdx; char nt;
    65         Grammar.FindFirstNonTerminal(g, phrase, out nt, out ntIdx);
     64        char nt = phrase.FirstNonTerminal;
    6665
    6766        int maxLenOfReplacement = maxLen - (phrase.Length - 1); // replacing aAb with maxLen 4 means we can only use alternatives with a minPhraseLen <= 2
     
    6968
    7069        var alts = g.GetAlternatives(nt);
    71         string selectedAlt;
     70        Sequence selectedAlt;
    7271        // if the choice is restricted then one of the allowed alternatives is selected randomly
    7372        if (alts.Any(alt => g.MinPhraseLength(alt) > maxLenOfReplacement)) {
     
    8483
    8584        // replace nt with alt
    86         phrase = phrase.Remove(ntIdx, 1);
    87         phrase = phrase.Insert(ntIdx, selectedAlt);
     85        phrase.ReplaceAt(phrase.FirstNonTerminalIndex, 1, selectedAlt);
    8886
    89         done = phrase.All(g.IsTerminal); // terminal phrase means we are done
     87        done = phrase.IsTerminal; // terminal phrase means we are done
    9088      }
    9189      return phrase;
Note: See TracChangeset for help on using the changeset viewer.