Free cookie consent management tool by TermsFeed Policy Generator

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

#2026 generate code for all solvers

File:
1 edited

Legend:

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

    r10415 r10426  
    1717    public bool done;
    1818    public SearchTreeNode[] children;
     19    // only for debugging
    1920    public double[] Ucb {
    2021      get {
    2122        return (from c in children
    22                 select ?IDENT?Solver.UCB(this, c)
     23                select ?IDENT?MonteCarloTreeSearchSolver.UCB(this, c)
    2324               ).ToArray();
    2425      }
     
    2829  }
    2930
    30   public sealed class ?IDENT?Solver {
     31  public sealed class ?IDENT?MonteCarloTreeSearchSolver {
     32    private int maxDepth = 20;
    3133
    3234    private readonly ?IDENT?Problem problem;
     
    3436    private SearchTreeNode searchTree = new SearchTreeNode();
    3537   
    36     private Tree SampleTree() {
    37       var extensionsStack = new Stack<Tuple<Tree, int, int>>(); // the unfinished tree, the state, and the index of the extension point
     38    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
    3840      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));
    4042      SampleTree(searchTree, extensionsStack);
    4143      return t.subtrees[0];
    4244    }
    4345
    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) {
    4547      const int RANDOM_TRIES = 1000;
    4648      if(extensionPoints.Count == 0) {
     
    5254      int state = extensionPoint.Item2;
    5355      int subtreeIdx = extensionPoint.Item3;
     56      int maxDepth = extensionPoint.Item4;
     57      Debug.Assert(maxDepth >= 1);
    5458      Tree t = null;
    5559      if(searchTree.tries < RANDOM_TRIES || Grammar.subtreeCount[state] == 0) {
     
    8185          var altIdx = SelectAlternative(searchTree);
    8286          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));
    8488          SampleTree(searchTree.children[altIdx], extensionPoints);
    8589        } else {
     
    8892          t = new Tree(-1, subtrees);
    8993          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));
    9195          }
    9296          SampleTree(searchTree, extensionPoints);         
     
    215219    }
    216220
    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 "");
    227223      this.problem = problem;
    228224      this.random = new Random();
    229225    }
    230226
    231     private void Start() {
     227    public void Start() {
    232228      Console.ReadLine();
    233229      var bestF = ?MAXIMIZATION? ? double.NegativeInfinity : double.PositiveInfinity;
     
    241237
    242238        int steps, depth;
    243         var _t = SampleTree();
     239        var _t = SampleTree(maxDepth);
    244240        //  _t.PrintTree(0); Console.WriteLine();
    245241
     
    247243        steps = _t.GetSize();
    248244        depth = _t.GetDepth();
     245        Debug.Assert(depth <= maxDepth);
    249246        var f = problem.Evaluate(_t);
    250247        if(?MAXIMIZATION?)
Note: See TracChangeset for help on using the changeset viewer.