Assuming you want to use ECJ for both your GP and GA, and it's truly a
*nested* GA (a whole GA run when evaluating a single individual), you
should be able to do it something like this:
-1. Make a special subclass of Initialializer, which you will use.
0. Make a global integer gaRandomOffset in your Initializer, starting
at 0.
1. At the beginning of your GP run -- during Initializer's setup
perhaps, load and store somewhere (in the Initializer) a
ParameterDatabase which holds the parameters for your GA runs. Let's
say it's called 'database'. You can get
a parameter database easily with new ParameterDatabase(filename).
2. On evaluation, call
EvolutionState state2 = Evolve.initialize(state.initializer.database,
state.initializer.gaRandomOffset++);
3. You'll need to stash YOUR EvolutionState in state2 somewhere so
state2's Problem can find it -- or hack globals up somehow.
4. Then call
Evolve.startFresh(state2,null);
You may want to modify the startFresh method (or create another one) so
it doesn't do state.output.close(); at the very end, as that'll close
stdout while your original EvolutionState is still using it.
5. Do your post-hoc analysis, then
state2 = null; // let gc
Sean
On Sep 19, 2005, at 3:07 PM, Arjan Seesing wrote:
> Hi,
>
> I'm going to use a nested GA inside my GP run. So to evaluate my GP
> programs, I'm first going to run a small GA run on a some extra data
> to be able to evaluate the individuals.
> My question is what would be the easiest way to call ECJ with the
> lowest overhead possible.
>
> I've been looking at the Console app which starts ECJ itself, but it's
> all so correlated to the gui, it is impossible to use the code there.
> I will be using the parameter database to pass data to the inner GA
> but I haven't decided how to pass data back.
>
> Some hints would be appreciated!
>
> Arjan
|