Adding on Eric. Part of the reasons, that this is done in a method evaluatePopulation in some Evaluator class, is that it allows for better customization, separation from the ECJ core, and like Eric said, you can use multiple threads to run the evaluation.

So instead of rewriting the whole Evolve class, you just need to customize a Evaluator. You can multithread Evaluators easily. You can switch between different Evaluators to evolve something (using different fitness function) without changing anything else. Honestly a much better solution than the "easy" way.


On Tue, Jul 29, 2014 at 2:56 PM, Eric 'Siggy' Scott <[log in to unmask]> wrote:
You can find that behavior in SimpleEvaluator.evaluatePopulation(), which evaluates the population in parallel via a number of SimpleEvaluatorThreads that call SimpleEvaluator.evalPopChunk().  The actual "for loop" you are looking for is in evalPopChunk(), but it only runs on the portion of the population that belongs to its thread.

It really is simpler to use inheritance and add on your functionality after all that logic gets executed.

Siggy


On Tue, Jul 29, 2014 at 2:29 PM, Márcio Basgalupp <[log in to unmask]> wrote:
Thanks. But it's not clear for me. It should have an easier way, a
place (a loop already done) where I can just set the new fitness for
each individual. A loop where ECJ calls evaluate() method for each
individual, something like children[i].evaluate().
--------
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 2:48 PM, Eric 'Siggy' Scott <[log in to unmask]> wrote:
> The loop proper is in EvolutionState.run().
>
> SimpleEvolutionState.evolve() contains the logic for a single iteration of
> the loop.  In particular, it calls evaluator.evalutePopulation() once each
> generation.  So you want to inherit from SimpleEvaluator and override
> evaluatePopulation(), adding your logic after the call to
> super.evaluatePopulation().
>
> Siggy
>
>
>
>
> On Tue, Jul 29, 2014 at 1:29 PM, Márcio Basgalupp <[log in to unmask]>
> wrote:
>>
>> Thanks, but there is no loop in the method evolve() of my
>> EvolutionState.java.
>>
>> public int evolve()
>>
>>         throws InternalError, FileNotFoundException, IOException,
>> Exception { return R_NOTDONE; }
>>
>>
>> The same for SimpleEvolutionState.java
>>
>>
>> This loop (varying the children/individuals) is exactly what I'm looking
>> for.
>>
>> 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 12:23 PM, Eric 'Siggy' Scott <[log in to unmask]>
>> wrote:
>> > The post-evaluation stage is only for running statistics.
>> >
>> > Look in the evolve() method of your EvolutionState -- that has the
>> > high-level loop.  You'll probably want to customize your Evaluator to
>> > add a
>> > post-processing step, leaving the EvolutionState as is.
>> >
>> > Siggy
>> >
>> >
>> > 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
>> >> >
>> >> >
>> >
>> >
>> >
>> >
>> > --
>> >
>> > Ph.D student in Computer Science
>> > George Mason University
>> > http://mason.gmu.edu/~escott8/
>
>
>
>
> --
>
> Ph.D student in Computer Science
> George Mason University
> http://mason.gmu.edu/~escott8/



--

Ph.D student in Computer Science
George Mason University