Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/13/10 20:44:31 (14 years ago)
Author:
gkronber
Message:

Fixed bugs related to dynamic symbol constraints with ADFs. #290 (Implement ADFs)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.ArtificialAnt/3.3/ArtificialAntExpressionGrammar.cs

    r3294 r3338  
    3333
    3434    public ArtificialAntExpressionGrammar()
    35       : base(0, 3, 0, 3) {
     35      : base() {
    3636      Initialize();
    3737    }
     
    4545      var right = new Right();
    4646      var defun = new Defun();
    47       var invoke = new InvokeFunction();
    4847      var allSymbols = new List<Symbol>() { ifFoodAhead, prog2, prog3, move, left, right };
    4948      var nonTerminalSymbols = new List<Symbol>() { ifFoodAhead, prog2, prog3 };
    50       SetMinSubTreeCount(ifFoodAhead, 2);
    51       SetMaxSubTreeCount(ifFoodAhead, 2);
    52       SetMinSubTreeCount(prog2, 2);
    53       SetMaxSubTreeCount(prog2, 2);
    54       SetMinSubTreeCount(prog3, 3);
    55       SetMaxSubTreeCount(prog3, 3);
    56       SetMinSubTreeCount(move, 0);
    57       SetMaxSubTreeCount(move, 0);
    58       SetMinSubTreeCount(left, 0);
    59       SetMaxSubTreeCount(left, 0);
    60       SetMinSubTreeCount(right, 0);
    61       SetMaxSubTreeCount(right, 0);
    62       foreach (var sym in allSymbols) {
    63         AddAllowedSymbols(StartSymbol, 0, sym);
    64         AddAllowedSymbols(defun, 0, sym);
    6549
    66         for (int i = 0; i < GetMaxSubTreeCount(invoke); i++) {
    67           AddAllowedSymbols(invoke, i, sym);
    68         }
    69       }
    70       foreach (var sym in nonTerminalSymbols) {
    71         for (int argIndex = 0; argIndex < GetMaxSubTreeCount(sym); argIndex++) {
    72           AddAllowedSymbols(sym, argIndex, invoke);
    73         }
    74       }
    75       foreach (var nonTerminal in nonTerminalSymbols) {
    76         foreach (var child in allSymbols) {
    77           for (int argIndex = 0; argIndex < GetMaxSubTreeCount(nonTerminal); argIndex++) {
    78             AddAllowedSymbols(nonTerminal, argIndex, child);
     50      allSymbols.ForEach(s => AddSymbol(s));
     51      SetMinSubtreeCount(ifFoodAhead, 2);
     52      SetMaxSubtreeCount(ifFoodAhead, 2);
     53      SetMinSubtreeCount(prog2, 2);
     54      SetMaxSubtreeCount(prog2, 2);
     55      SetMinSubtreeCount(prog3, 3);
     56      SetMaxSubtreeCount(prog3, 3);
     57      SetMinSubtreeCount(move, 0);
     58      SetMaxSubtreeCount(move, 0);
     59      SetMinSubtreeCount(left, 0);
     60      SetMaxSubtreeCount(left, 0);
     61      SetMinSubtreeCount(right, 0);
     62      SetMaxSubtreeCount(right, 0);
     63
     64      // each symbols is allowed as child of the start symbol
     65      allSymbols.ForEach(s => SetAllowedChild(StartSymbol, s, 0));
     66
     67      // each symbol is allowed as child of all other symbols (except for terminals that have MaxSubtreeCount == 0
     68      foreach (var parent in allSymbols) {
     69        for (int argIndex = 0; argIndex < GetMaxSubtreeCount(parent); argIndex++) {
     70          foreach (var child in allSymbols) {
     71            SetAllowedChild(parent, child, argIndex);
    7972          }
    8073        }
    8174      }
    82 
    8375    }
    8476  }
Note: See TracChangeset for help on using the changeset viewer.