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/