Print

Print


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
> >
> >
>