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/