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
> http://mason.gmu.edu/~escott8/
>



-- 

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