- Timestamp:
- 01/29/14 16:17:20 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Problems.GPDL/CodeGenerator/ProblemCodeGen.cs
r10415 r10424 101 101 { -1, 0 }, // terminals 102 102 ?SUBTREECOUNTTABLE? 103 }; 104 public static readonly Dictionary<int, int> minDepth = new Dictionary<int, int>() { 105 ?MINDEPTHTABLE? 103 106 }; 104 107 public static readonly string[] symb = new string[] { ?SYMBOLNAMES? }; … … 144 147 .Replace("?TRANSITIONTABLE?", GenerateTransitionTable(grammar)) 145 148 .Replace("?SUBTREECOUNTTABLE?", GenerateSubtreeCountTable(grammar)) 149 .Replace("?MINDEPTHTABLE?", GenerateMinDepthTable(grammar)) 146 150 ; 147 151 } … … 149 153 private void GenerateSolvers(GPDefNode ast, SourceBuilder solverSourceCode) { 150 154 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); 153 157 // var bruteForceSearchCodeGen = new BruteForceCodeGen(); 154 158 // 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); 157 161 } 158 162 … … 428 432 return sb.ToString(); 429 433 } 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 } 431 465 } 432 466 }
Note: See TracChangeset
for help on using the changeset viewer.