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