Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/18/08 16:20:26 (17 years ago)
Author:
gkronber
Message:

added Size and Height properties to interface IFunctionTree and removed the helper methods from TreeGardener (specific implementations of size and height properties in classes implementing IFunctionTree can be more efficient than the general functions in TreeGardener)

Location:
trunk/sources/HeuristicLab.StructureIdentification/Manipulation
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.StructureIdentification/Manipulation/ChangeNodeTypeManipulation.cs

    r238 r324  
    9696        // calculate the height and size difference and
    9797        // check if the size of the new tree is still in the allowed bounds
    98         int oldChildSize = gardener.GetTreeSize(selectedChild);
    99         int oldChildHeight = gardener.GetTreeSize(selectedChild);
    100         int newChildSize = gardener.GetTreeSize(newFunctionTree);
    101         int newChildHeight = gardener.GetTreeHeight(newFunctionTree);
     98        int oldChildSize = selectedChild.Size;
     99        int oldChildHeight = selectedChild.Height;
     100        int newChildSize = newFunctionTree.Size;
     101        int newChildHeight = newFunctionTree.Height;
    102102        if((treeHeight.Data - oldChildHeight) + newChildHeight > maxTreeHeight ||
    103103          (treeSize.Data - oldChildSize) + newChildSize > maxTreeSize) {
     
    118118        // update size and height
    119119        treeSize.Data = (treeSize.Data - oldChildSize) + newChildSize;
    120         treeHeight.Data = gardener.GetTreeHeight(root); // must recalculate height because we can't know wether the manipulated branch was the deepest branch
     120        treeHeight.Data = root.Height; // must recalculate height because we can't know wether the manipulated branch was the deepest branch
    121121        // check if whole tree is ok
    122122        Debug.Assert(gardener.IsValidTree(root));
  • trunk/sources/HeuristicLab.StructureIdentification/Manipulation/CutOutNodeManipulation.cs

    r238 r324  
    7474        if (root.SubTrees.Count > 0) {
    7575          root = root.SubTrees[random.Next(root.SubTrees.Count)];
    76           GetVariableValue<IntData>("TreeSize", scope, true).Data = gardener.GetTreeSize(root);
    77           GetVariableValue<IntData>("TreeHeight", scope, true).Data = gardener.GetTreeHeight(root);
     76          GetVariableValue<IntData>("TreeSize", scope, true).Data = root.Size;
     77          GetVariableValue<IntData>("TreeHeight", scope, true).Data = root.Height;
    7878          // update the variable
    7979          scope.GetVariable(scope.TranslateName("FunctionTree")).Value = root;
     
    8585          IFunctionTree newTree;
    8686          newTree = gardener.CreateRandomTree(gardener.Terminals, 1, 1);
    87           GetVariableValue<IntData>("TreeSize", scope, true).Data = gardener.GetTreeSize(newTree);
    88           GetVariableValue<IntData>("TreeHeight", scope, true).Data = gardener.GetTreeHeight(newTree);
     87          GetVariableValue<IntData>("TreeSize", scope, true).Data = newTree.Size;
     88          GetVariableValue<IntData>("TreeHeight", scope, true).Data = newTree.Height;
    8989          // update the variable
    9090          scope.GetVariable(scope.TranslateName("FunctionTree")).Value = newTree;
     
    107107        Debug.Assert(gardener.IsValidTree(root));
    108108        // update the size and height of our tree
    109         GetVariableValue<IntData>("TreeSize", scope, true).Data = gardener.GetTreeSize(root);
    110         GetVariableValue<IntData>("TreeHeight", scope, true).Data = gardener.GetTreeHeight(root);
     109        GetVariableValue<IntData>("TreeSize", scope, true).Data = root.Size;
     110        GetVariableValue<IntData>("TreeHeight", scope, true).Data = root.Height;
    111111        // don't need to schedule initialization operations
    112112        return null;
     
    118118        parent.RemoveSubTree(childIndex);
    119119        // then determine the number of nodes left over after the child has been removed!
    120         int remainingNodes = gardener.GetTreeSize(root);
     120        int remainingNodes = root.Size;
    121121        allowedFunctions = gardener.GetAllowedSubFunctions(parent.Function, childIndex);
    122122        IFunctionTree newFunctionTree = gardener.CreateRandomTree(allowedFunctions, maxTreeSize - remainingNodes, maxTreeHeight - parentLevel);
    123123        parent.InsertSubTree(childIndex, newFunctionTree);
    124         GetVariableValue<IntData>("TreeSize", scope, true).Data = gardener.GetTreeSize(root);
    125         GetVariableValue<IntData>("TreeHeight", scope, true).Data = gardener.GetTreeHeight(root);
     124        GetVariableValue<IntData>("TreeSize", scope, true).Data = root.Size;
     125        GetVariableValue<IntData>("TreeHeight", scope, true).Data = root.Height;
    126126        Debug.Assert(gardener.IsValidTree(root));
    127127        // schedule an initialization operation for the new function-tree
  • trunk/sources/HeuristicLab.StructureIdentification/Manipulation/DeleteSubTreeManipulation.cs

    r238 r324  
    6464        Debug.Assert(gardener.IsValidTree(newTree));
    6565        // update sizes to match the new tree
    66         GetVariableValue<IntData>("TreeSize", scope, true).Data = gardener.GetTreeSize(newTree);
    67         GetVariableValue<IntData>("TreeHeight", scope, true).Data = gardener.GetTreeHeight(newTree);
     66        GetVariableValue<IntData>("TreeSize", scope, true).Data = newTree.Size;
     67        GetVariableValue<IntData>("TreeHeight", scope, true).Data = newTree.Height;
    6868        scope.GetVariable(scope.TranslateName("FunctionTree")).Value = newTree;
    6969
     
    8686
    8787        Debug.Assert(gardener.IsValidTree(root));
    88         GetVariableValue<IntData>("TreeSize", scope, true).Data = gardener.GetTreeSize(root);
    89         GetVariableValue<IntData>("TreeHeight", scope, true).Data = gardener.GetTreeHeight(root);
     88        GetVariableValue<IntData>("TreeSize", scope, true).Data = root.Size;
     89        GetVariableValue<IntData>("TreeHeight", scope, true).Data = root.Height;
    9090        // root hasn't changed so don't need to update 'FunctionTree' variable
    9191        return null;
     
    9797        parent.InsertSubTree(childIndex, newFunctionTree);
    9898        Debug.Assert(gardener.IsValidTree(root));
    99         GetVariableValue<IntData>("TreeSize", scope, true).Data = gardener.GetTreeSize(root);
    100         GetVariableValue<IntData>("TreeHeight", scope, true).Data = gardener.GetTreeHeight(root);
     99        GetVariableValue<IntData>("TreeSize", scope, true).Data = root.Size;
     100        GetVariableValue<IntData>("TreeHeight", scope, true).Data = root.Height;
    101101        // again the root hasn't changed so we don't need to update the 'FunctionTree' variable
    102102        // but we have to return an initialization operation for the newly created tree
  • trunk/sources/HeuristicLab.StructureIdentification/Manipulation/SubstituteSubTreeManipulation.cs

    r238 r324  
    6565
    6666        // update the variables in the scope with the new values
    67         GetVariableValue<IntData>("TreeSize", scope, true).Data = gardener.GetTreeSize(newTree);
    68         GetVariableValue<IntData>("TreeHeight", scope, true).Data = gardener.GetTreeHeight(newTree);
     67        GetVariableValue<IntData>("TreeSize", scope, true).Data = newTree.Size;
     68        GetVariableValue<IntData>("TreeHeight", scope, true).Data = newTree.Height;
    6969        scope.GetVariable(scope.TranslateName("FunctionTree")).Value = newTree;
    7070       
     
    8686        int parentLevel = gardener.GetBranchLevel(root, parent);
    8787        int maxSubTreeHeight = maxTreeHeight - parentLevel;
    88         int maxSubTreeSize = maxTreeSize - (treeSize - gardener.GetTreeSize(parent.SubTrees[childIndex]));
     88        int maxSubTreeSize = maxTreeSize - (treeSize - parent.SubTrees[childIndex].Size);
    8989
    9090        // create a random function tree
     
    9595        Debug.Assert(gardener.IsValidTree(root));
    9696        // update the values of treeSize and treeHeight
    97         GetVariableValue<IntData>("TreeSize", scope, true).Data = gardener.GetTreeSize(root);
    98         GetVariableValue<IntData>("TreeHeight", scope, true).Data = gardener.GetTreeHeight(root);
     97        GetVariableValue<IntData>("TreeSize", scope, true).Data = root.Size;
     98        GetVariableValue<IntData>("TreeHeight", scope, true).Data = root.Height;
    9999        // the root hasn't changed so we don't need to update
    100100        // return a CompositeOperation that randomly initializes all nodes of the new subtree
Note: See TracChangeset for help on using the changeset viewer.