source: branches/HeuristicLab.Problems.GrammaticalOptimization/HeuristicLab.Algorithms.MonteCarloTreeSearch/MonteCarloTreeSearch_PruneLeaves.cs @ 13492

Last change on this file since 13492 was 13492, checked in by aballeit, 4 years ago

#2283 UCT parameter c

File size: 3.2 KB
Line 
1using System.Diagnostics;
2using HeuristicLab.Algorithms.Bandits;
3using HeuristicLab.Algorithms.MonteCarloTreeSearch.Base;
4using HeuristicLab.Algorithms.MonteCarloTreeSearch.Simulation;
5using HeuristicLab.Problems.GrammaticalOptimization;
6using System;
7using System.Linq;
8using System.Threading;
9
10namespace HeuristicLab.Algorithms.MonteCarloTreeSearch
11{
12    public class MonteCarloTreeSearch_PruneLeaves : MonteCarloTreeSearch
13    {
14        public MonteCarloTreeSearch_PruneLeaves(ISymbolicExpressionTreeProblem problem, int maxLen, Random random, IBanditPolicy behaviourPolicy,
15            ISimulation simulationPolicy)
16            : base(problem, maxLen, random, behaviourPolicy, simulationPolicy)
17        {
18        }
19
20        public override void Run(int maxIterations)
21        {
22            Reset();
23            int selections = 0;
24            TreeNode currentNode;
25            string phrase;
26            string simulatedPhrase;
27            double quality;
28            for (int i = 0; !StopRequested && i < maxIterations; i++)
29            {
30                currentNode = rootNode;
31
32                while (!currentNode.IsLeaf())
33                {
34                    int currentActionIndex = behaviourPolicy.SelectAction(random,
35                        currentNode.GetChildActionInfos());
36                    currentNode = currentNode.children[currentActionIndex];
37                    selections++;
38                    CheckSelection(currentNode, selections);
39                }
40
41                phrase = currentNode.phrase;
42
43                if (phrase.Length <= maxLen)
44                {
45                    // Version 2:
46                    if (currentNode.children != null && !currentNode.children.Any())
47                    {
48                        // already removed all child nodes so remove it too..
49                        currentNode.parent.RemoveChildren(currentNode);
50                        i--;
51                        continue;
52                    }
53                    ExpandTreeNode(currentNode);
54                    if (currentNode.children.Any())
55                    {
56                        currentNode =
57                            currentNode.children[behaviourPolicy.SelectAction(random, currentNode.GetChildActionInfos())
58                                ];
59                        selections++;
60                        CheckSelection(currentNode, selections);
61                    }
62                    else
63                    {
64                        // Version 2:
65                        // remove currentNode from tree..
66                        currentNode.parent.RemoveChildren(currentNode);
67                    }
68                }
69                if (currentNode.phrase.Length <= maxLen)
70                {
71                    quality = simulation.Simulate(currentNode, out simulatedPhrase);
72                    OnSolutionEvaluated(simulatedPhrase, quality);
73
74                    OnIterationFinishedChanged(goodSelections, selections);
75
76                    Propagate(currentNode, quality);
77                }
78                else
79                {
80                    i--;
81
82                }
83            }
84        }
85    }
86}
Note: See TracBrowser for help on using the repository browser.