Changeset 10426 for branches/HeuristicLab.Problems.GPDL/CodeGenerator/MonteCarloTreeSearchCodeGen.cs
- Timestamp:
- 01/29/14 17:10:03 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Problems.GPDL/CodeGenerator/MonteCarloTreeSearchCodeGen.cs
r10415 r10426 17 17 public bool done; 18 18 public SearchTreeNode[] children; 19 // only for debugging 19 20 public double[] Ucb { 20 21 get { 21 22 return (from c in children 22 select ?IDENT? Solver.UCB(this, c)23 select ?IDENT?MonteCarloTreeSearchSolver.UCB(this, c) 23 24 ).ToArray(); 24 25 } … … 28 29 } 29 30 30 public sealed class ?IDENT?Solver { 31 public sealed class ?IDENT?MonteCarloTreeSearchSolver { 32 private int maxDepth = 20; 31 33 32 34 private readonly ?IDENT?Problem problem; … … 34 36 private SearchTreeNode searchTree = new SearchTreeNode(); 35 37 36 private Tree SampleTree( ) {37 var extensionsStack = new Stack<Tuple<Tree, int, int >>(); // the unfinished tree, the state, and the index of the extensionpoint38 private Tree SampleTree(int maxDepth) { 39 var extensionsStack = new Stack<Tuple<Tree, int, int, int>>(); // the unfinished tree, the state, the index of the extension point and the maximal depth of a tree inserted at that point 38 40 var t = new Tree(-1, new Tree[1]); 39 extensionsStack.Push(Tuple.Create(t, 0, 0 ));41 extensionsStack.Push(Tuple.Create(t, 0, 0, maxDepth)); 40 42 SampleTree(searchTree, extensionsStack); 41 43 return t.subtrees[0]; 42 44 } 43 45 44 private void SampleTree(SearchTreeNode searchTree, Stack<Tuple<Tree, int, int >> extensionPoints) {46 private void SampleTree(SearchTreeNode searchTree, Stack<Tuple<Tree, int, int, int>> extensionPoints) { 45 47 const int RANDOM_TRIES = 1000; 46 48 if(extensionPoints.Count == 0) { … … 52 54 int state = extensionPoint.Item2; 53 55 int subtreeIdx = extensionPoint.Item3; 56 int maxDepth = extensionPoint.Item4; 57 Debug.Assert(maxDepth >= 1); 54 58 Tree t = null; 55 59 if(searchTree.tries < RANDOM_TRIES || Grammar.subtreeCount[state] == 0) { … … 81 85 var altIdx = SelectAlternative(searchTree); 82 86 t = new Tree(altIdx, new Tree[1]); 83 extensionPoints.Push(Tuple.Create(t, Grammar.transition[state][altIdx], 0 ));87 extensionPoints.Push(Tuple.Create(t, Grammar.transition[state][altIdx], 0, maxDepth - 1)); 84 88 SampleTree(searchTree.children[altIdx], extensionPoints); 85 89 } else { … … 88 92 t = new Tree(-1, subtrees); 89 93 for(int i = subtrees.Length - 1; i >= 0; i--) { 90 extensionPoints.Push(Tuple.Create(t, Grammar.transition[state][i], i ));94 extensionPoints.Push(Tuple.Create(t, Grammar.transition[state][i], i, maxDepth - 1)); 91 95 } 92 96 SampleTree(searchTree, extensionPoints); … … 215 219 } 216 220 217 218 public static void Main(string[] args) { 219 // if(args.Length >= 1) ParseArguments(args); 220 221 var problem = new ?IDENT?Problem(); 222 var solver = new ?IDENT?Solver(problem); 223 solver.Start(); 224 } 225 226 public ?IDENT?Solver(?IDENT?Problem problem) { 221 public ?IDENT?MonteCarloTreeSearchSolver(?IDENT?Problem problem, string[] args) { 222 if(args.Length > 0 ) throw new ArgumentException(""Arguments ""+args.Aggregate("""", (str, s) => str+ "" "" + s)+"" are not supported ""); 227 223 this.problem = problem; 228 224 this.random = new Random(); 229 225 } 230 226 231 p rivatevoid Start() {227 public void Start() { 232 228 Console.ReadLine(); 233 229 var bestF = ?MAXIMIZATION? ? double.NegativeInfinity : double.PositiveInfinity; … … 241 237 242 238 int steps, depth; 243 var _t = SampleTree( );239 var _t = SampleTree(maxDepth); 244 240 // _t.PrintTree(0); Console.WriteLine(); 245 241 … … 247 243 steps = _t.GetSize(); 248 244 depth = _t.GetDepth(); 245 Debug.Assert(depth <= maxDepth); 249 246 var f = problem.Evaluate(_t); 250 247 if(?MAXIMIZATION?)
Note: See TracChangeset
for help on using the changeset viewer.