public bool Operate(Semantics resultSemantics, Individual individual, ISemanticSubTreePool subTreePool, int maxTreeDepth, out bool triedBackPropagation) { SyntaxTree tree = (SyntaxTree)individual.SyntaxTree.DeepClone(); TreeNode exchangeNode = tree.GetRandomNode(); Type nodeType = exchangeNode.Type; TreeNode root; if (exchangeNode.IsBackPropagable(out root)) { triedBackPropagation = true; var desiredSemantics = DoSemanticBackPropagation(resultSemantics, exchangeNode, root); TreeNode newNode = DoLibrarySearch(individual, subTreePool, nodeType, desiredSemantics); if (newNode != null) { bool replaced = tree.ReplaceTreeNode(exchangeNode, newNode); if (replaced && tree.Height <= maxTreeDepth) { individual.SyntaxTree = tree; return(true); } return(false); } } triedBackPropagation = false; return(false); }
public ApproximateGeometricMutator(ISemanticSubTreePool subTreePool, int maxTreeDepth) { SubTreePool = subTreePool; MaxTreeDepth = MaxTreeDepth; }
protected virtual TreeNode DoLibrarySearch(Individual individual, ISemanticSubTreePool subTreePool, Type nodeType, CombinatorialSemantics desiredSemantics) { return(subTreePool.GetBySemantics(nodeType, desiredSemantics)); }
public ApproximateGeometricCrossover(ISemanticSubTreePool subTreePool, int maxTreeDepth) { SubTreePool = subTreePool; MaxTreeDepth = maxTreeDepth; }