I started using ECJ a few weeks ago and I have a question about how to
implement certain tree constraints, in a genetic programming problem.
My individuals, should be trees that have the structure I show in
the attached file. Each tree holds a rule (in fact, it holds the antecedent
of an association rule) that has the following form:
A>5 & B<10 & ....
Just to simplify the problem, let's suppose that the only logical operator
availale is the AND one.
I saw that for implementing the constraint that a comparator node has to
have a non-terminal + a random value as children, I have to use GPNode
constraints, specifying the type of node I want for left and right child.
The problem I have is how to tell ECJ to build a tree with that specific
structure. When ECJ creates a tree, it puts the terminals on the leaves, and
non-terminals on the remainder nodes. But how can I specify that the nodes
previous to the leaves have to have a comparator?
Should I use Tree constraints? or should I modify the tree builder to meet
my needs? I know that this latter can be done but I'm not sure if it's the
right approach. I'm trying to extend the ECJ framework without touching its
classes, as I want to preserve the original code so in future releases of
ECJ I just "plug" my classes and everything continues working.
In case I have to implement it by specifying tree constraints, could you
provide me with an example about how to do it?
Thanks in advance.