0. It sounds like what you really want is to just use
ec.gp.koza.MutationPipeline, with the grow-builder's min-depth and
max-depth set to 0. In the standard mutation builder, one way to do
1. You can get a GPNode by taking a node out of your GPFunctionSet
and clone()ing it. The function set can be found at
2. Your node needs to be type-compatable with its parents and
children if you're using typed GP. You can pick nodes with certain
return types from your function set. You can also test for type
compatability between some old child and some new child with the
GPNode function swapCompatibleWith().
3. ECJ trees are pretty plain, except that the nodes have back
pointers which you need to remember to set. Once you have a GPNode,
you can weave it into your tree along these lines:
// to set your node to be the parent of some other node n, which will
be the j'th child of your node...
n.argposition = j;
n.parent = node;
node.child[j] = n;
// to set the node to be a child of a parent 'theParent' at index i
node.argposition = i;
node.parent = theParent; // theParent will be either a GPTree (if
node is the root) or a GPNode
if (theParent instanceof GPTree)
theParent.child = node; // i better be 0!
else theParent.children[i] = node;
As you can see, it's relatively straightforward.
On Oct 5, 2007, at 9:43 AM, ghada wrote:
> I need to create a NEW GPNode (initialize it properly, and set its
> value), to use it afterwards to replace a sub-tree in a constructed
> How can I do that in a proper ecj way, so the node will be suitable
> for the replacement?