Zheng Yin wrote: > How can I control ADF tree size? It looks like it goes through crossover > and mutation just as the Main tree. I guess the parameter, > gp.koza.xover.maxdepth will affect all trees, main one, ADF trees. Could I > set it separately for Main tree and ADF trees? such as I need the main > tree has depth 10 and the ADFs have depth 5. How can I set it? > Many thanks and looking forward to your answer. You're right that the maximum depth is a parameter set in the breeding pipeline rather than in the particular tree in an ADF forest. One way to deal with it is to simply modify the Crossover.java code. This isn't all that hard -- you just have it pick the maximum tree depth based on the index of the tree (to your liking). But in fact there is a way to do this without any code hacking though it's pretty roundabout. If you have a main tree and (say) two ADF trees, you need to create three Crossover operators, each with the same probability of occurring. For example, instead of the standard Koza crossover pipeline (found in koza.params): pop.subpop.0.species.pipe = ec.breed.MultiBreedingPipeline # Koza's decision here was odd... pop.subpop.0.species.pipe.generate-max = false # Subsidiary pipelines: pop.subpop.0.species.pipe.num-sources = 2 pop.subpop.0.species.pipe.source.0 = ec.gp.koza.CrossoverPipeline pop.subpop.0.species.pipe.source.0.prob = 0.9 pop.subpop.0.species.pipe.source.1 = ec.breed.ReproductionPipeline pop.subpop.0.species.pipe.source.1.prob = 0.1 ... you instead write: pop.subpop.0.species.pipe = ec.breed.MultiBreedingPipeline pop.subpop.0.species.pipe.generate-max = false pop.subpop.0.species.pipe.num-sources = 5 pop.subpop.0.species.pipe.source.0 = ec.breed.ReproductionPipeline pop.subpop.0.species.pipe.source.0.prob = 0.1 pop.subpop.0.species.pipe.source.1 = ec.gp.koza.CrossoverPipeline pop.subpop.0.species.pipe.source.1.prob = 0.3 pop.subpop.0.species.pipe.source.2 = ec.gp.koza.CrossoverPipeline pop.subpop.0.species.pipe.source.2.prob = 0.3 pop.subpop.0.species.pipe.source.3 = ec.gp.koza.CrossoverPipeline pop.subpop.0.species.pipe.source.3.prob = 0.3 Now we need to force each of those pipelines to only cross over a certain tree: pop.subpop.0.species.pipe.source.1.tree.0 = 0 pop.subpop.0.species.pipe.source.1.tree.1 = 0 pop.subpop.0.species.pipe.source.2.tree.0 = 1 pop.subpop.0.species.pipe.source.2.tree.1 = 1 pop.subpop.0.species.pipe.source.3.tree.0 = 2 pop.subpop.0.species.pipe.source.3.tree.1 = 2 ...and finally now that each of those crossover operators is working on its own specific tree we can then specify a maximum depth as we like: pop.subpop.0.species.pipe.source.1.maxdepth = 29 pop.subpop.0.species.pipe.source.2.maxdepth = 42 pop.subpop.0.species.pipe.source.3.maxdepth = 15 I admit this is hardly elegant, but it does get the job done. Assuming I typed it correctly here... Sean