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);
        }
Esempio n. 2
0
 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));
 }
Esempio n. 4
0
 public ApproximateGeometricCrossover(ISemanticSubTreePool subTreePool, int maxTreeDepth)
 {
     SubTreePool  = subTreePool;
     MaxTreeDepth = maxTreeDepth;
 }