Print

Print


Thank you Sean.

Is your solution an alternative to the one suggest by Eric? Or I have
to implement both? Because I already implemented the Eric's solution
and apparently it's working.

Thanks,
Marcio
--------
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 6:10 PM, Sean Luke <[log in to unmask]> wrote:
> Correct.  runComplete is meant to indicate whether an evaluator believes it's time to quit because it discovered the ideal solution.  It's not the right way to do this.
>
> Sean
>
>
> On Jul 29, 2014, at 10:15 PM, Eric Scott <[log in to unmask]> wrote:
>
>> Bad idea.  Technically, runComplete() is called right after evaluation in SimpleEvaluator -- so it might work for you right now -- but it's a predicate that isn't suppose to mutate state, and so it could in principle be called by anyone at any time.
>>
>> Siggy
>>
>>
>> On Tue, Jul 29, 2014 at 4:09 PM, Márcio Basgalupp <[log in to unmask]> wrote:
>> Thank you guys.
>>
>> What about the method runComplete?
>>
>>  public boolean runComplete(final EvolutionState state)
>>         {
>>         for(int x = 0;x<state.population.subpops.length;x++)
>>             for(int y=0;y<state.population.subpops[x].individuals.length;y++)
>>                 if (state.population.subpops[x].
>>                     individuals[y].fitness.isIdealFitness())
>>                     return true;
>>         // MY LOGIC HERE
>>         return false;
>>         }
>>     }
>>
>> Is this place another option? I didn't get very well the solution by
>> inheriting from SimpleEvaluator. Could you please give more details?
>> An example.
>>
>> Thank you,
>> Marcio
>> --------
>> 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 4:15 PM, Xiaomeng Ye <[log in to unmask]> wrote:
>> > 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
>> >> http://mason.gmu.edu/~escott8/
>> >
>> >
>>
>>
>>
>> --
>>
>> Ph.D student in Computer Science
>> George Mason University
>> http://mason.gmu.edu/~escott8/