Print

Print


Hi, I recently contacted Sean Luke to solve the following problem:



I want to use ECJ to induce a decision tree to classify data in the way that
Quinlan's ID3 algorithm.

However, when I run ECJ with lets say 2 functions I get trees like :  (BDNF
(BDNF X Y ) Y) which is actually correct for a normal GP run.



But, in a decision tree, it doesn't make any sense to have 2 times the same
function in a branch.

Sean gave me a solution which actually worked for the problem when you have
only one function:



   Make two atomic types A and B.

- Make the set types {B}, and {A|B}.

- Set the return type of BDNF to A.

- Set the return types of all other functions to B.

- Set the argument types of BDNF to {B}.

- Set the argument types of all other functions to {A|B}



But that solution doesn't work when you have 2 or more functions, because it
isn't searching deep, the GP algorithm finds answers like:



(BDNF (MAO (BDNF X Y ) Y ) Y)





Is there any way to model this problem in ECJ using GPTypes? Or any other
solution to tell ECJ that a function can be only one time in a branch of a
tree?