Changeset 3360 for trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/ArchitectureAlteringOperators/ArgumentDeleter.cs
- Timestamp:
- 04/15/10 19:58:42 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/ArchitectureAlteringOperators/ArgumentDeleter.cs
r3338 r3360 65 65 // argument deletion by consolidation is not possible => abort 66 66 return false; 67 // the argument to be removed is always the one with the largest index 68 // (otherwise we would have to decrement the index of the larger argument symbols) 67 69 var removedArgument = (from sym in selectedDefunBranch.Grammar.Symbols.OfType<Argument>() 68 select sym.ArgumentIndex).Distinct(). SelectRandom(random);70 select sym.ArgumentIndex).Distinct().OrderBy(x => x).Last(); 69 71 // find invocations of the manipulated funcion and remove the specified argument tree 70 var invocationNodes = from node in symbolicExpressionTree.IterateNodesPrefix().OfType<InvokeFunctionTreeNode>()71 where node.Symbol.FunctionName == selectedDefunBranch.FunctionName72 select node;72 var invocationNodes = (from node in symbolicExpressionTree.IterateNodesPrefix().OfType<InvokeFunctionTreeNode>() 73 where node.Symbol.FunctionName == selectedDefunBranch.FunctionName 74 select node).ToList(); 73 75 foreach (var invokeNode in invocationNodes) { 74 76 invokeNode.RemoveSubTree(removedArgument); … … 78 80 79 81 // delete the dynamic argument symbol that matches the argument to be removed 80 var matchingSymbol = selectedDefunBranch.Grammar.Symbols.OfType<Argument>().Where(s => s.ArgumentIndex == removedArgument). First();82 var matchingSymbol = selectedDefunBranch.Grammar.Symbols.OfType<Argument>().Where(s => s.ArgumentIndex == removedArgument).Single(); 81 83 selectedDefunBranch.Grammar.RemoveSymbol(matchingSymbol); 84 selectedDefunBranch.NumberOfArguments--; 82 85 // reduce arity in known functions of all root branches 83 86 foreach (var subtree in symbolicExpressionTree.Root.SubTrees) { 84 var matchingInvokeSymbol = subtree.Grammar.Symbols.OfType<InvokeFunction>().Where(s => s.FunctionName == selectedDefunBranch.FunctionName). FirstOrDefault();87 var matchingInvokeSymbol = subtree.Grammar.Symbols.OfType<InvokeFunction>().Where(s => s.FunctionName == selectedDefunBranch.FunctionName).SingleOrDefault(); 85 88 if (matchingInvokeSymbol != null) { 86 subtree.Grammar.SetMinSubtreeCount(matchingInvokeSymbol, selectedDefunBranch.NumberOfArguments - 1);87 subtree.Grammar.SetMaxSubtreeCount(matchingInvokeSymbol, selectedDefunBranch.NumberOfArguments - 1);89 subtree.Grammar.SetMinSubtreeCount(matchingInvokeSymbol, selectedDefunBranch.NumberOfArguments); 90 subtree.Grammar.SetMaxSubtreeCount(matchingInvokeSymbol, selectedDefunBranch.NumberOfArguments); 88 91 } 89 92 } 90 selectedDefunBranch.NumberOfArguments--;91 93 return true; 92 94 }
Note: See TracChangeset
for help on using the changeset viewer.