Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
08/03/15 00:03:18 (9 years ago)
Author:
aballeit
Message:

#2283 limit parallelism

Location:
branches/HeuristicLab.Problems.GrammaticalOptimization/HeuristicLab.Algorithms.MonteCarloTreeSearch
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Problems.GrammaticalOptimization/HeuristicLab.Algorithms.MonteCarloTreeSearch/Base/TreeNode.cs

    r12762 r12832  
    1414        public string phrase;
    1515        public TreeNode parent;
    16         public List<TreeNode> children;
     16        public TreeNode[] children;
    1717        public IBanditPolicyActionInfo actionInfo;
    18         public int level;
     18        public ushort level;
    1919
    20         public TreeNode(TreeNode parent, string phrase, IBanditPolicyActionInfo actionInfo, int level)
     20        public TreeNode(TreeNode parent, string phrase, IBanditPolicyActionInfo actionInfo, ushort level)
    2121        {
    2222            this.parent = parent;
     
    3434            return children.Select(n => n.actionInfo);
    3535        }
     36
     37        internal void RemoveChildren(TreeNode currentNode)
     38        {
     39            TreeNode[] newChildren = new TreeNode[children.Length-1];
     40            int counter = 0;
     41            for (int i = 0; i < children.Length; i++)
     42            {
     43                if (children[i] != currentNode)
     44                {
     45                    newChildren[counter] = children[i];
     46                    counter++;
     47                }
     48            }
     49            children = newChildren;
     50        }
    3651    }
    3752}
  • branches/HeuristicLab.Problems.GrammaticalOptimization/HeuristicLab.Algorithms.MonteCarloTreeSearch/MonteCarloTreeSearch.cs

    r12829 r12832  
    120120            if (treeNode.children == null)
    121121            {
    122                 treeNode.children = new List<TreeNode>();
     122                List<TreeNode> newChildren = new List<TreeNode>();
    123123
    124124                var phrase = new Sequence(treeNode.phrase);
     
    137137                            {
    138138                                childNode = new TreeNode(treeNode, newSequence.ToString(),
    139                                     behaviourPolicy.CreateActionInfo(), treeNode.level + 1);
    140                                 treeNode.children.Add(childNode);
     139                                    behaviourPolicy.CreateActionInfo(), (ushort) (treeNode.level + 1));
     140                                newChildren.Add(childNode);
    141141                            }
    142142                        }
    143143                    }
    144144                }
     145                treeNode.children = newChildren.ToArray();
    145146            }
    146147        }
     
    164165        }
    165166
    166         private void GetTreeInfosRek(TreeInfos treeInfos, List<TreeNode> children)
    167         {
    168             treeInfos.TotalNodes += children.Count;
     167        private void GetTreeInfosRek(TreeInfos treeInfos, TreeNode[] children)
     168        {
     169            treeInfos.TotalNodes += children.Length;
    169170            foreach (TreeNode child in children)
    170171            {
     
    342343            return HexConverter(Color.FromArgb(newR, newG, newB));
    343344        }
     345
     346        public void FreeAll()
     347        {
     348            rootNode = null;
     349            GC.Collect();
     350        }
    344351    }
    345352}
  • branches/HeuristicLab.Problems.GrammaticalOptimization/HeuristicLab.Algorithms.MonteCarloTreeSearch/MonteCarloTreeSearch_PruneLeaves.cs

    r12829 r12832  
    4747                    {
    4848                        // already removed all child nodes so remove it too..
    49                         currentNode.parent.children.Remove(currentNode);
     49                        currentNode.parent.RemoveChildren(currentNode);
    5050                        continue;
    5151                    }
     
    6363                        // Version 2:
    6464                        // remove currentNode from tree..
    65                         currentNode.parent.children.Remove(currentNode);
     65                        currentNode.parent.RemoveChildren(currentNode);
    6666                    }
    6767                }
Note: See TracChangeset for help on using the changeset viewer.