Changeset 3338 for trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Tests/SubroutineCreaterTest.cs
- Timestamp:
- 04/13/10 20:44:31 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/Tests/SubroutineCreaterTest.cs
r3307 r3338 13 13 [TestClass] 14 14 public class SubroutineCreaterTest { 15 public SubroutineCreaterTest() { 16 } 15 private static ISymbolicExpressionGrammar grammar; 16 private static List<SymbolicExpressionTree> subroutineTrees; 17 private static int failedEvents; 17 18 18 19 private TestContext testContextInstance; … … 36 37 subroutineTrees = new List<SymbolicExpressionTree>(); 37 38 int populationSize = 1000; 38 var grammar = new TestGrammar(); 39 failedEvents = 0; 40 grammar = Grammars.CreateArithmeticAndAdfGrammar(); 39 41 var random = new MersenneTwister(); 40 42 for (int i = 0; i < populationSize; i++) { 41 43 var randTree = ProbabilisticTreeCreator.Create(random, grammar, 100, 10); 42 Assert.IsTrue(grammar.IsValidExpression(randTree));44 // PTC create is tested separately 43 45 randomTrees.Add(randTree); 44 46 } … … 47 49 var par0 = (SymbolicExpressionTree)randomTrees[random.Next(populationSize)].Clone(); 48 50 bool success = SubroutineCreater.CreateSubroutine(random, par0, grammar, 100, 10, 3, 3); 49 Assert.IsTrue(grammar.IsValidExpression(par0));51 if (!success) failedEvents++; 50 52 subroutineTrees.Add(par0); 51 53 } … … 53 55 54 56 55 56 private static List<SymbolicExpressionTree> subroutineTrees; 57 private static int failedEvents; 58 59 private class Addition : Symbol { } 60 private class Subtraction : Symbol { } 61 private class Multiplication : Symbol { } 62 private class Division : Symbol { } 63 private class Terminal : Symbol { } 64 65 private class TestGrammar : DefaultSymbolicExpressionGrammar { 66 public TestGrammar() 67 : base(0, 3, 0, 3) { 68 Initialize(); 69 } 70 71 private void Initialize() { 72 var add = new Addition(); 73 var sub = new Subtraction(); 74 var mul = new Multiplication(); 75 var div = new Division(); 76 var terminal = new Terminal(); 77 78 var defun = new Defun(); 79 var invoke = new InvokeFunction(); 80 81 var allSymbols = new List<Symbol>() { add, sub, mul, div, terminal, invoke }; 82 var functionSymbols = new List<Symbol>() { add, sub, mul, div }; 83 foreach (var symb in allSymbols) { 84 AddAllowedSymbols(StartSymbol, 0, symb); 85 AddAllowedSymbols(defun, 0, symb); 86 } 87 SetMinSubTreeCount(invoke, 0); 88 SetMaxSubTreeCount(invoke, 3); 89 for (int i = 0; i < 3; i++) { 90 allSymbols.ForEach(s => AddAllowedSymbols(invoke, i, s)); 91 } 92 SetMinSubTreeCount(terminal, 0); 93 SetMaxSubTreeCount(terminal, 0); 94 int maxSubTrees = 3; 95 foreach (var functionSymbol in functionSymbols) { 96 SetMinSubTreeCount(functionSymbol, 1); 97 SetMaxSubTreeCount(functionSymbol, maxSubTrees); 98 foreach (var childSymbol in allSymbols) { 99 for (int argumentIndex = 0; argumentIndex < maxSubTrees; argumentIndex++) { 100 AddAllowedSymbols(functionSymbol, argumentIndex, childSymbol); 101 } 102 } 103 } 104 } 57 [TestMethod()] 58 public void SubroutineCreaterCreateTest() { 59 foreach (var tree in subroutineTrees) 60 Assert.IsTrue(grammar.IsValidExpression(tree)); 105 61 } 106 62 107 63 [TestMethod()] 108 64 public void SubroutineCreaterSizeDistributionTest() { 109 int[] histogram = new int[105 / 5]; 110 for (int i = 0; i < subroutineTrees.Count; i++) { 111 histogram[subroutineTrees[i].Size / 5]++; 112 } 113 StringBuilder strBuilder = new StringBuilder(); 114 for (int i = 0; i < histogram.Length; i++) { 115 strBuilder.Append(Environment.NewLine); 116 strBuilder.Append("< "); strBuilder.Append((i + 1) * 5); 117 strBuilder.Append(": "); strBuilder.AppendFormat("{0:#0.00%}", histogram[i] / (double)subroutineTrees.Count); 118 } 119 Assert.Inconclusive("Size distribution of SubroutineCreater: " + strBuilder); 65 Assert.Inconclusive("SubroutineCreater: " + Util.GetSizeDistributionString(subroutineTrees, 105, 5)); 120 66 } 121 67 122 68 [TestMethod()] 123 69 public void SubroutineCreaterFunctionDistributionTest() { 124 Dictionary<Symbol, int> occurances = new Dictionary<Symbol, int>(); 125 double n = 0.0; 126 for (int i = 0; i < subroutineTrees.Count; i++) { 127 foreach (var node in subroutineTrees[i].IterateNodesPrefix()) { 128 if (node.SubTrees.Count > 0) { 129 if (!occurances.ContainsKey(node.Symbol)) 130 occurances[node.Symbol] = 0; 131 occurances[node.Symbol]++; 132 n++; 133 } 134 } 135 } 136 StringBuilder strBuilder = new StringBuilder(); 137 foreach (var function in occurances.Keys) { 138 strBuilder.Append(Environment.NewLine); 139 strBuilder.Append(function.Name); strBuilder.Append(": "); 140 strBuilder.AppendFormat("{0:#0.00%}", occurances[function] / n); 141 } 142 Assert.Inconclusive("Function distribution of SubroutineCreater: " + strBuilder); 70 Assert.Inconclusive("SubroutineCreater: " + Util.GetFunctionDistributionString(subroutineTrees)); 143 71 } 144 72 145 73 [TestMethod()] 146 74 public void SubroutineCreaterNumberOfSubTreesDistributionTest() { 147 Dictionary<int, int> occurances = new Dictionary<int, int>(); 148 double n = 0.0; 149 for (int i = 0; i < subroutineTrees.Count; i++) { 150 foreach (var node in subroutineTrees[i].IterateNodesPrefix()) { 151 if (!occurances.ContainsKey(node.SubTrees.Count)) 152 occurances[node.SubTrees.Count] = 0; 153 occurances[node.SubTrees.Count]++; 154 n++; 155 } 156 } 157 StringBuilder strBuilder = new StringBuilder(); 158 foreach (var arity in occurances.Keys) { 159 strBuilder.Append(Environment.NewLine); 160 strBuilder.Append(arity); strBuilder.Append(": "); 161 strBuilder.AppendFormat("{0:#0.00%}", occurances[arity] / n); 162 } 163 Assert.Inconclusive("Distribution of function arities of SubroutineCreater: " + strBuilder); 75 Assert.Inconclusive("SubroutineCreater: " + Util.GetNumberOfSubTreesDistributionString(subroutineTrees)); 164 76 } 165 77 … … 167 79 [TestMethod()] 168 80 public void SubroutineCreaterTerminalDistributionTest() { 169 Dictionary<Symbol, int> occurances = new Dictionary<Symbol, int>(); 170 double n = 0.0; 171 for (int i = 0; i < subroutineTrees.Count; i++) { 172 foreach (var node in subroutineTrees[i].IterateNodesPrefix()) { 173 if (node.SubTrees.Count == 0) { 174 if (!occurances.ContainsKey(node.Symbol)) 175 occurances[node.Symbol] = 0; 176 occurances[node.Symbol]++; 177 n++; 178 } 179 } 180 } 181 StringBuilder strBuilder = new StringBuilder(); 182 foreach (var function in occurances.Keys) { 183 strBuilder.Append(Environment.NewLine); 184 strBuilder.Append(function.Name); strBuilder.Append(": "); 185 strBuilder.AppendFormat("{0:#0.00%}", occurances[function] / n); 186 } 187 Assert.Inconclusive("Terminal distribution of SubroutineCreater: " + strBuilder); 81 Assert.Inconclusive("SubroutineCreater: " + Util.GetTerminalDistributionString(subroutineTrees)); 188 82 } 189 83 }
Note: See TracChangeset
for help on using the changeset viewer.