Changeset 6944
- Timestamp:
- 11/02/11 16:37:07 (13 years ago)
- Location:
- trunk/sources
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/FullTreeCreator.cs
r6888 r6944 21 21 22 22 using System; 23 using System.Collections.Generic;24 using System.ComponentModel;25 23 using System.Linq; 26 24 using HeuristicLab.Common; … … 133 131 throw new ArgumentException("Cannot create trees of depth " + maxDepth + " or smaller because of grammar constraints.", "maxDepth"); 134 132 135 var possibleSymbols = seedNode.Grammar.GetAllowedChildSymbols(seedNode.Symbol).Where(s => s.InitialFrequency > 0.0 && seedNode.Grammar.GetMaximumSubtreeCount(s) > 0).ToList();136 133 137 134 int arity = seedNode.Grammar.GetMaximumSubtreeCount(seedNode.Symbol); 138 135 // Throw an exception if the seedNode happens to be a terminal, since in this case we cannot grow a tree. 139 136 if (arity <= 0) 140 throw new ArgumentException("Cannot grow tree. Seed node shouldn't have arity zero."); 137 throw new ArgumentException("Cannot grow tree. Seed node shouldn't have arity zero."); 141 138 142 139 for (var i = 0; i != arity; ++i) { 140 var possibleSymbols = seedNode.Grammar.GetAllowedChildSymbols(seedNode.Symbol,i).Where(s => s.InitialFrequency > 0.0 && seedNode.Grammar.GetMaximumSubtreeCount(s) > 0); 143 141 var selectedSymbol = possibleSymbols.SelectRandom(random); 144 142 var tree = selectedSymbol.CreateTreeNode(); … … 149 147 // Only iterate over the non-terminal nodes (those which have arity > 0) 150 148 // Start from depth 2 since the first two levels are formed by the rootNode and the seedNode 151 foreach (var subTree in seedNode.Subtrees.Where(subTree => subTree.Grammar.GetMaximumSubtreeCount(subTree.Symbol) != 0)) 149 foreach (var subTree in seedNode.Subtrees.Where(subTree => subTree.Grammar.GetMaximumSubtreeCount(subTree.Symbol) != 0)) 152 150 RecursiveGrowFull(random, subTree, 2, maxDepth); 153 151 } … … 159 157 throw new ArgumentException("Cannot grow node of arity zero. Expected a function node."); 160 158 161 var possibleSymbols = currentDepth < maxDepth ?162 root.Grammar.GetAllowedChildSymbols(root.Symbol).Where(s => s.InitialFrequency > 0.0 && root.Grammar.GetMaximumSubtreeCount(s) > 0).ToList() :163 root.Grammar.GetAllowedChildSymbols(root.Symbol).Where(s => s.InitialFrequency > 0.0 && root.Grammar.GetMaximumSubtreeCount(s) == 0).ToList();164 159 165 160 for (var i = 0; i != arity; ++i) { 161 var possibleSymbols = currentDepth < maxDepth ? 162 root.Grammar.GetAllowedChildSymbols(root.Symbol,i).Where(s => s.InitialFrequency > 0.0 && root.Grammar.GetMaximumSubtreeCount(s) > 0) : 163 root.Grammar.GetAllowedChildSymbols(root.Symbol,i).Where(s => s.InitialFrequency > 0.0 && root.Grammar.GetMaximumSubtreeCount(s) == 0); 166 164 var selectedSymbol = possibleSymbols.SelectRandom(random); 167 165 var tree = selectedSymbol.CreateTreeNode(); -
trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/GrowTreeCreator.cs
r6888 r6944 21 21 22 22 using System; 23 using System.Collections.Generic;24 using System.ComponentModel;25 23 using System.Linq; 26 24 using HeuristicLab.Common; … … 134 132 var arity = SampleArity(random, seedNode); 135 133 // throw an exception if the seedNode happens to be a terminal, since in this case we cannot grow a tree 136 if (arity <= 0) 137 throw new ArgumentException("Cannot grow tree. Seed node shouldn't have arity zero."); 134 if (arity <= 0) 135 throw new ArgumentException("Cannot grow tree. Seed node shouldn't have arity zero."); 138 136 139 var possibleSymbols = seedNode.Grammar.GetAllowedChildSymbols(seedNode.Symbol).Where(s => s.InitialFrequency > 0.0).ToList();140 137 141 138 for (var i = 0; i != arity; ++i) { 139 var possibleSymbols = seedNode.Grammar.GetAllowedChildSymbols(seedNode.Symbol, i).Where(s => s.InitialFrequency > 0.0); 142 140 var selectedSymbol = possibleSymbols.SelectRandom(random); 143 141 var tree = selectedSymbol.CreateTreeNode(); … … 157 155 throw new ArgumentException("Cannot grow node of arity zero. Expected a function node."); 158 156 159 var possibleSymbols = currentDepth < maxDepth ?160 root.Grammar.GetAllowedChildSymbols(root.Symbol).Where(s => s.InitialFrequency > 0.0).ToList() :161 root.Grammar.GetAllowedChildSymbols(root.Symbol).Where(s => s.InitialFrequency > 0.0 && root.Grammar.GetMaximumSubtreeCount(s) == 0).ToList();162 157 163 158 for (var i = 0; i != arity; ++i) { 159 var possibleSymbols = currentDepth < maxDepth 160 ? root.Grammar.GetAllowedChildSymbols(root.Symbol,i).Where(s => s.InitialFrequency > 0.0) 161 : root.Grammar.GetAllowedChildSymbols(root.Symbol,i).Where( 162 s => s.InitialFrequency > 0.0 && root.Grammar.GetMaximumSubtreeCount(s) == 0); 164 163 var selectedSymbol = possibleSymbols.SelectRandom(random); 165 164 var tree = selectedSymbol.CreateTreeNode(); -
trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4/FullTreeCreatorTest.cs
r6888 r6944 72 72 Util.GetTerminalDistributionString(randomTrees) + Environment.NewLine 73 73 ); 74 Assert.IsTrue(Math.Round(1000.0 / (msPerRandomTreeCreation)) > 300); // must achieve more than 500 random trees / s74 Assert.IsTrue(Math.Round(1000.0 / (msPerRandomTreeCreation)) > 300); // must achieve more than 300 random trees / s 75 75 } 76 76 } -
trunk/sources/HeuristicLab.Tests/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4/GrowTreeCreatorTest.cs
r6888 r6944 71 71 Util.GetTerminalDistributionString(randomTrees) + Environment.NewLine 72 72 ); 73 Assert.IsTrue(Math.Round(1000.0 / (msPerRandomTreeCreation)) > 300); // must achieve more than 500 random trees / s73 Assert.IsTrue(Math.Round(1000.0 / (msPerRandomTreeCreation)) > 300); // must achieve more than 300 random trees / s 74 74 } 75 75 }
Note: See TracChangeset
for help on using the changeset viewer.