Changeset 5569
- Timestamp:
- 02/28/11 17:36:15 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DataAnalysis Refactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/ReplaceBranchManipulation.cs
r5549 r5569 71 71 public static void ReplaceRandomBranch(IRandom random, ISymbolicExpressionTree symbolicExpressionTree, int maxTreeLength, int maxTreeDepth) { 72 72 // select any node as parent (except the root node) 73 var manipulationPoint = (from parent in symbolicExpressionTree.Root.IterateNodesPrefix().Skip(1) 74 from subtree in parent.SubTrees 75 select new { Parent = parent, Node = subtree, Index = parent.IndexOfSubTree(subtree) }) 76 .SelectRandom(random); 73 var manipulationPoints = (from parent in symbolicExpressionTree.Root.IterateNodesPrefix().Skip(1) 74 from subtree in parent.SubTrees 75 let subtreeIndex = parent.IndexOfSubTree(subtree) 76 let maxLength = maxTreeLength - symbolicExpressionTree.Length + subtree.GetLength() 77 let maxDepth = maxTreeDepth - symbolicExpressionTree.Depth + subtree.GetDepth() 78 // find possible symbols for the node (also considering the existing branches below it) 79 let allowedSymbols = (from symbol in parent.Grammar.GetAllowedSymbols(parent.Symbol, subtreeIndex) 80 // do not replace symbol with the same symbol 81 where symbol.Name != subtree.Symbol.Name 82 where parent.Grammar.GetMinExpressionDepth(symbol) <= maxDepth 83 where parent.Grammar.GetMinExpressionLength(symbol) <= maxLength 84 select symbol) 85 .ToList() 86 where allowedSymbols.Count > 0 87 select new { 88 Parent = parent, 89 Child = subtree, 90 Index = subtreeIndex, 91 AllowedSymbols = allowedSymbols, 92 MaxLength = maxLength, 93 MaxDepth = maxDepth 94 }) 95 .ToList(); 77 96 78 int maxLength = maxTreeLength - symbolicExpressionTree.Length + manipulationPoint.Node.GetLength(); 79 int maxDepth = maxTreeDepth - symbolicExpressionTree.Depth + manipulationPoint.Node.GetDepth(); 80 // find possible symbols for the node (also considering the existing branches below it) 81 var allowedSymbols = (from symbol in manipulationPoint.Parent.Grammar.GetAllowedSymbols(manipulationPoint.Parent.Symbol, manipulationPoint.Index) 82 where manipulationPoint.Node.Grammar.GetMinExpressionDepth(symbol) <= maxDepth 83 where manipulationPoint.Node.Grammar.GetMinExpressionLength(symbol) <= maxLength 84 select symbol).ToList(); 85 if (allowedSymbols.Count() == 0) return; 86 var weights = allowedSymbols.Select(s => s.InitialFrequency).ToList(); 87 var seedSymbol = allowedSymbols.SelectRandom(weights, random); 97 if (manipulationPoints.Count == 0) return; 98 var selectedManipulationPoint = manipulationPoints.SelectRandom(random); 99 100 var weights = selectedManipulationPoint.AllowedSymbols.Select(s => s.InitialFrequency).ToList(); 101 var seedSymbol = selectedManipulationPoint.AllowedSymbols.SelectRandom(weights, random); 88 102 // replace the old node with the new node 89 103 var seedNode = seedSymbol.CreateTreeNode(); … … 91 105 seedNode.ResetLocalParameters(random); 92 106 93 manipulationPoint.Parent.RemoveSubTree(manipulationPoint.Index);94 manipulationPoint.Parent.InsertSubTree(manipulationPoint.Index, seedNode);95 seedNode = ProbabilisticTreeCreator.PTC2(random, seedNode, maxLength, maxDepth, 0, 0);107 selectedManipulationPoint.Parent.RemoveSubTree(selectedManipulationPoint.Index); 108 selectedManipulationPoint.Parent.InsertSubTree(selectedManipulationPoint.Index, seedNode); 109 seedNode = ProbabilisticTreeCreator.PTC2(random, seedNode, selectedManipulationPoint.MaxLength, selectedManipulationPoint.MaxDepth, 0, 0); 96 110 } 97 111 }
Note: See TracChangeset
for help on using the changeset viewer.