Print

Print


PS: There is a Problem.finishEvaluating() method that users can override to do post-processing, but it's called each time a thread completes, not after the whole population is done evaluating.  So you probably don't want to use it.


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



--

Ph.D student in Computer Science
George Mason University
http://mason.gmu.edu/~escott8/