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

Last change on this file since 12840 was 12840, checked in by aballeit, 5 years ago

#2283 Final

File size: 3.1 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                        continue;
51                    }
52                    ExpandTreeNode(currentNode);
53                    if (currentNode.children.Any())
54                    {
55                        currentNode =
56                            currentNode.children[behaviourPolicy.SelectAction(random, currentNode.GetChildActionInfos())
57                                ];
58                        selections++;
59                        CheckSelection(currentNode, selections);
60                    }
61                    else
62                    {
63                        // Version 2:
64                        // remove currentNode from tree..
65                        currentNode.parent.RemoveChildren(currentNode);
66                    }
67                }
68                if (currentNode.phrase.Length <= maxLen)
69                {
70                    quality = simulation.Simulate(currentNode, out simulatedPhrase);
71                    OnSolutionEvaluated(simulatedPhrase, quality);
72
73                    OnIterationFinishedChanged(goodSelections, selections);
74
75                    Propagate(currentNode, quality);
76                }
77            }
78        }
79    }
80}
Note: See TracBrowser for help on using the repository browser.