Just an example, could get more complex than this:
look into ec.simple.SimpleEvolutionState.evolve()
// EVALUATION
statistics.preEvaluationStatistics(this);
evaluator.evaluatePopulation(this);
statistics.postEvaluationStatistics(this);
// SHOULD WE QUIT?
if (evaluator.runComplete(this) && quitOnRunComplete)
{
output.message("Found Ideal Individual");
return R_SUCCESS;
}
// SHOULD WE QUIT?
if (generation == numGenerations-1)
{
return R_FAILURE;
}
// PRE-BREEDING EXCHANGING
statistics.prePreBreedingExchangeStatistics(this);
population = exchanger.preBreedingExchangePopulation(this);
statistics.postPreBreedingExchangeStatistics(this);
String exchangerWantsToShutdown = exchanger.runComplete(this);
if (exchangerWantsToShutdown!=null)
{
output.message(exchangerWantsToShutdown);
/*
* Don't really know what to return here. The only place I
could
* find where runComplete ever returns non-null is
* IslandExchange. However, that can return non-null whether or
* not the ideal individual was found (for example, if there was
* a communication error with the server).
*
* Since the original version of this code didn't care, and the
* result was initialized to R_SUCCESS before the while loop,
I'm
* just going to return R_SUCCESS here.
*/
return R_SUCCESS;
}
// BREEDING
statistics.preBreedingStatistics(this);
population = breeder.breedPopulation(this);
You can do it anywhere between evaluation and breeding. I would probably do
it in a customized Evaluator if I am just going to divide all the fitness
by some value..
On Tue, Jul 29, 2014 at 11:02 AM, Márcio Basgalupp <[log in to unmask]>
wrote:
> Thank you Ye.
>
> That's true.
>
> But my question is: where (in the code) is this post-evaluation stage?
>
> Best,
> Márcio
> --------
> Prof. Dr. Márcio Porto Basgalupp
> Instituto de Ciência e Tecnologia (ICT)
> Universidade Federal de São Paulo (UNIFESP)
> Tel: +55 12 3309-9582
>
>
> On Tue, Jul 29, 2014 at 11:40 AM, Xiaomeng Ye <[log in to unmask]>
> wrote:
> > It has been a while since I last used ECJ. I could be totally wrong.
> >
> > I remember there is a post-evaluation stage for each generation in the
> > evolution. If I am going to divide all fitness values by the biggest
> one. I
> > will do it in this post-evaluation stage.
> >
> > This post-evaluation stage is probably between the evaluation stage
> (where
> > the fitness are calculated) and the breeding stage (where
> crossover/mutation
> > happens).
> >
> >
> > On Tue, Jul 29, 2014 at 10:18 AM, Márcio Basgalupp <[log in to unmask]>
> > wrote:
> >>
> >> Dear all,
> >>
> >> I'm using ECJ for implementing a GP based-program. After evaluating
> >> (compute fitness) all individuals, I would like to "update" these
> >> fitness values (for example, divide all fitness values by the biggest
> >> one). However, I couldn't find where (which class) I have to do that.
> >> It should be where ECJ calls the method evaluate() for each
> >> individual, then I could update before proceeding to the next steps
> >> (select, genetic operators, ...).
> >>
> >> I would appreciate if someone help me.
> >>
> >> Best,
> >> Márcio
> >>
> >> --------
> >> Prof. Dr. Márcio Porto Basgalupp
> >> Instituto de Ciência e Tecnologia (ICT)
> >> Universidade Federal de São Paulo (UNIFESP)
> >> Tel: +55 12 3309-9582
> >
> >
>
|