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