/* Copyright 2006 by Sean Luke Licensed under the Academic Free License version 3.0 See the file "LICENSE" for more information */ package ec; import ec.steadystate.*; import ec.util.*; /* * Statistics.java * * Created: Tue Aug 10 21:10:48 1999 * By: Sean Luke */ /** * Statistics and its subclasses are Cliques which generate statistics * during the run. Statistics are arranged in a tree hierarchy -- * The root statistics object may have "children", and when the root is * called, it calls its children with the same message. You can override * this behavior however you see fit. *

There are lots of places where statistics might be nice to print out. * These places are implemented as hooks in the Statistics object which you * can override if you like; otherwise they call the default behavior. If * you plan on allowing your Statistics subclass to contain children, you * should remember to call the appropriate super.foo() if you * override any foo() method. * *

While there are lots of hooks, various EvolutionState objects only * implement a subset of them. You'll need to look at the EvolutionState * code to see which ones are implemented to make sure that your statistics * hooks are called appropriately! * *

Statistics objects should set up their statistics logs etc. during * setup(...). Remember to make the log restartable in * case of restarting from a checkpoint. * *

Steady-State Statistics. For convenience, Statistics contains * default implementations of the SteadyStateStatisticsForm methods but * does not implement SteadyStateStatisticsForm. This mostly is intended * to keep SteadyStateStatistcsForm implementations from having to call * functions on all their children: instead they can just call foo.super(); *

Parameters
base.num-children
int >= 0
(number of child statistics objects)
base.child.n
classname, inherits or equals ec.Statistics
(the class of child statistics object number n)

Parameter bases
base.child.n species (child statistics object number n)
* @author Sean Luke * @version 2.0 */ public class Statistics implements Singleton { public static final String P_NUMCHILDREN = "num-children"; public static final String P_CHILD = "child"; public Statistics[] children; public void setup(final EvolutionState state, final Parameter base) { int t = state.parameters.getIntWithDefault(base.push(P_NUMCHILDREN),null,0); if (t < 0) state.output.fatal("A Statistics object cannot have negative number of children", base.push(P_NUMCHILDREN)); // load the trees children = new Statistics[t]; for (int x=0;xresult is either state.R_FAILURE, indicating that an ideal individual was not found, or state.R_SUCCESS, indicating that an ideal individual was found. */ public void finalStatistics(final EvolutionState state, final int result) { for(int x=0;x