Print

Print


On Apr 14, 2008, at 4:41 PM, Shane wrote:

> I would like to see the results of each gp individual in the  
> out.stat file, instead of just the best individual in each  
> generation.   I specifically want to see the string representation  
> of the tree for each individual.  Is this possible?  I will be  
> using a small population size for testing.

It's not built-in.  But it's very simple to write your own Statistics  
object, and then you just add it to the Statistics chain.  Or if  
you're just adding to the existing statistics file, you can just  
subclass from KozaStatistics and override it:

public class MyStatistics extends KozaStatistics
	{
	// we're going to steal KozaStatistics's 'statisticslog' variable,  
which makes this easy
	// since KozaStatistics sets the log to point to out.stat for us  
already

	// let's override this one function
	public void postEvaluationStatistics(final Evaluation state)
		{
		super.postEvaluationStatistics();
		state.output.println("========== CHILDREN ===========",
			Output.V_NO_GENERAL, statisticslog);
		for(int x=0;x<state.population.subpops.length;x++)
			{
			state.output.println("+++++ Subpop " + x + " +++++",
				Output.V_NO_GENERAL, statisticslog);
			for(int y=0; y< state.population.subpops[x].individuals.length; y++)
				{
				state.output.println("----- Individual " + y + " -----",
					Output.V_NO_GENERAL, statisticslog);

				// notice log and output verbosity are switched here, it's a
				// historical stupidity in ECJ
				state.population.subpops[x].individuals 
[y].printIndividualForHumans(state,
					statisticslog, Output.V_NO_GENERAL);
				}

			}
		}
	}


Something like that.  Now you can replace KozaStatistics with  
MyStatistics, something like adding the parameter:

	stat = edu.gmu.cs.MyStatistics

Your other option is to just write a direct subclass of Statistics  
and output to a separate file (you need to ask Output to create a log  
for you in your setup() method).  Look at SimpleStatistics and how it  
does it.  Then you can add that new Statistics object to your  
statistics chain.  Each Statistics object has N children (typically  
at most 1) who are also called.  So you could do:

	;;; keep this as before:
	;;; stat = ec.gp.koza.KozaStatistics
	stat.num-children = 1
	stat.0 = edu.gmu.cs.MyOtherStatistics

Now you have two statistics objects.

Sean