Print

Print


Hi alll,

I'm trying to setup ECJ to evolve GP trees with a minimum depth with the following node types/constraints:

- RootNode 
(Section, Section) -> Melody  # (child1, child2) -> return type

- SectionNode 
(Measure | Section, Measure | Section) -> Section

- MeasureNode 
(Content | {Symbol}, Content | {Symbol}, Content | {Symbol}, Content | {Symbol}) -> Measure

- ContentNode 
(Content | {Symbol}, Content | {Symbol}) -> Content

- {Symbol} is an ERC or terminal

 I'm getting the 'no terminals are given with the return type XXX' warnings and related stuff, followed by a stack overflow error at ec.gp.koza.KozaBuilder.fullNode(). After browsing the list, I learned that most tree builder algorithms in ECJ need at least a terminal of any possible child type,  with the exception of Uniform. 

In my setup, Melody, Section, Measure, and Content are not meant to be terminals, but to represent hierarchical structure over a sequence of symbols (which are, you guessed it right, music events). So, I was wondering whether there is any parameter tweaks I could do to force those algoritms to build the tree to a minimum depth. In my case, the minimum tree depth would be 4, representing a four bar melody.

I was able to do this using the UNIFORM tree builder, setting its min-size and max-size params, but I would like to specify min/max depths rather than sizes. Also, I would like to build the tree FULL up to a minimum depth, then go use another strategy (e. g., GROW) to a maximum depth.

Thanks in advance,
--Pedro J. Ponce de León