Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/29/14 16:17:20 (10 years ago)
Author:
gkronber
Message:

#2026 maximal depth limit for random search

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Problems.GPDL/CodeGenerator/ProblemCodeGen.cs

    r10415 r10424  
    101101       { -1, 0 }, // terminals
    102102?SUBTREECOUNTTABLE?
     103    };
     104    public static readonly Dictionary<int, int> minDepth = new Dictionary<int, int>() {
     105?MINDEPTHTABLE?
    103106    };
    104107    public static readonly string[] symb = new string[] { ?SYMBOLNAMES? };
     
    144147        .Replace("?TRANSITIONTABLE?", GenerateTransitionTable(grammar))
    145148        .Replace("?SUBTREECOUNTTABLE?", GenerateSubtreeCountTable(grammar))
     149        .Replace("?MINDEPTHTABLE?", GenerateMinDepthTable(grammar))
    146150       ;
    147151    }
     
    149153    private void GenerateSolvers(GPDefNode ast, SourceBuilder solverSourceCode) {
    150154      var grammar = CreateGrammarFromAst(ast);
    151       // var randomSearchCodeGen = new RandomSearchCodeGen();
    152       // randomSearchCodeGen.Generate(grammar, ast.Terminals.OfType<TerminalNode>(), ast.FitnessFunctionNode.Maximization, solverSourceCode);
     155      var randomSearchCodeGen = new RandomSearchCodeGen();
     156      randomSearchCodeGen.Generate(grammar, ast.Terminals.OfType<TerminalNode>(), ast.FitnessFunctionNode.Maximization, solverSourceCode);
    153157      // var bruteForceSearchCodeGen = new BruteForceCodeGen();
    154158      // bruteForceSearchCodeGen.Generate(grammar, ast.Terminals.OfType<TerminalNode>(), ast.FitnessFunctionNode.Maximization, solverSourceCode);
    155       var mctsCodeGen = new MonteCarloTreeSearchCodeGen();
    156       mctsCodeGen.Generate(grammar, ast.Terminals.OfType<TerminalNode>(), ast.FitnessFunctionNode.Maximization, solverSourceCode);
     159      // var mctsCodeGen = new MonteCarloTreeSearchCodeGen();
     160      // mctsCodeGen.Generate(grammar, ast.Terminals.OfType<TerminalNode>(), ast.FitnessFunctionNode.Maximization, solverSourceCode);
    157161    }
    158162
     
    428432      return sb.ToString();
    429433    }
    430 
     434    private string GenerateMinDepthTable(IGrammar grammar) {
     435      var sb = new SourceBuilder();
     436      var minDepth = new Dictionary<ISymbol, int>();
     437      foreach (var s in grammar.TerminalSymbols) {
     438        minDepth[s] = 1;
     439      }
     440      while (minDepth.Count < grammar.Symbols.Count()) {
     441        foreach (var s in grammar.NonTerminalSymbols) {
     442          if (grammar.NumberOfAlternatives(s) > 1) {
     443            // alternatives
     444            if (grammar.GetAlternatives(s).Any(alt => minDepth.ContainsKey(alt.Single()))) {
     445              minDepth[s] = (grammar.GetAlternatives(s)
     446                .Where(alt => minDepth.ContainsKey(alt.Single()))
     447                .Select(alt => minDepth[alt.Single()]))
     448                .Min() + 1;
     449            }
     450          } else {
     451            // sequences
     452            if (grammar.GetAlternatives(s).Single().All(c => minDepth.ContainsKey(c))) {
     453              minDepth[s] = (grammar.GetAlternatives(s).Single().Select(c => minDepth[c])).Max() + 1;
     454            }
     455          }
     456        }
     457      }
     458      var allSymbols = grammar.Symbols.ToList();
     459      foreach (var s in grammar.Symbols) {
     460        sb.AppendFormat("// {0}", s).AppendLine();
     461        sb.AppendFormat("{{ {0}, {1} }}, ", allSymbols.IndexOf(s), minDepth[s]).AppendLine();
     462      }
     463      return sb.ToString();
     464    }
    431465  }
    432466}
Note: See TracChangeset for help on using the changeset viewer.