I think the easiest approach is to modify the produce() method of the breeding pipelines you're using to mark the children with information about their parents before returning them. Let's assume that you've modified individuals to hold pointer relevant statistical information. Then for example in VectorCrossover.produce(...), you might change parents.defaultCrossover(state,thread,parents); to // at this point, parents holds COPIES of the parents, and // we're just going to cross them over. updateStuff(parents); // do your thing here parents.defaultCrossover(state,thread,parents); You can create your own Statistics subclass and just override whatever hook you'd like there to print out things. You then hang your Statistics subclass instance as a child of the main statistics instance you're using (say, SimpleStatistics). See the documentation for Statistics for more info there. Sean On Jun 17, 2004, at 9:04 AM, Artur Matos wrote: > Hi to all, > > A while ago I have posted a question on how to generate phylogenetic > trees from ECJ runs (you can see my original post below, after this > message). At that time, Gabriel Balan kindly gave me some source code > for this but unfortunately it is not complete, and he cannot help me > at this time as he is currently out of the country. > > Basically I am just trying to generate the relationships between > individuals in succeeding generations --- whether they are connected > by mutation, crossover and reproduction, and to which parents. Do I > need to create my own breeding pipeline or extend the existing ones > for recording this information? It doesn't seem easy to extend the > pipelines for this. Any advice would be kindly appreciated.