Hi Sean, Thanks a lot for you reply. Please see my inline response. On Thu, Jun 2, 2016 at 6:58 AM, Sean Luke <[log in to unmask]> wrote: > On May 31, 2016, at 1:22 AM, Atm Golam Bari <[log in to unmask]> wrote: > > >>> MultiPopCoevolutionaryEvaluator (under ec/coevolve/) extends > SteadyStateEvaluator and overrides evaluatePopulation(, , ) > > 1. I presume you modified MultiPopCoevlutionaryEvaluator to do these > things. > -Yes. > > 2. SteadyStateEvaluator doesn't use evaluatePopulation. It uses > evaluateIndividual and works with SteadyStateEvolutionState, not > SimpleEvolutionState. > -Yes > >>> GroupedProblem inside MultiPopCoevolutionaryEvlauator is changed into > SimpleProblem > > ??? The purpose of coevolution is to evaluate individuals in the context > of one another. SimpleProblem would make no sense. > - My idea was like this : send one individual to the problem, play the interaction game with other individuals from different population inside problem class. > > >>> Inside performCoevolutionaryEvaluation (, , ), writing > prob.evluate(....) is called two times each for one population to be > workable with SimpleProblem. > > This isn't coevolution then. It's just two separate populations. > - I used the above idea to measure the context of one other inside the problem class. I am not sure how much it make sense in terms of coevolution. > > > What am I missing? Is it a right way to handle SSEA in a two pop > coevoluton? Any suggestion or new approach is highly appreciated. > > I think you need to first think about what SSEA means in a coevolutionary > context. Steady State is basically this: > > > Loop forever: > I <- breed new individual > F <- evaluate individual > G <- add individual into population, perhaps displacing an > existing individual > > How would you modify this loop to do SSEA in the way you're hoping? What > kind of coevolution are you trying to do? > - I need "Parallel 2-Population Competitive Coevolution" - I don't want to modify this loop. What I did in custom evaluator is as follows - public class EvalParetoSSEA extends SteadyStateEvaluator { --- public void evaluateIndividual(final EvolutionState state, Individual ind , int subpop) { //Overriding ... performCoevolutionaryEvaluation( state, state.population, (SimpleProblemForm)p_problem ) //See this is SimpleProblem, If I use GroupProblem I get a runtime error : SSEA uses SimpleProblem ... //This is what I did when want to send from inside performCoevolutionaryEvluation for(int i = 0; i < state.population.subpops[0].individuals.length; i++) for(int k = 0; k < numShuffled; k++) { for(int ind = 0; ind < inds.length; ind++) { inds[ind] = state.population.subpops[ind].individuals[ordering[k][ind][i]]; updates[ind] = true; if (ind == 0) prob.evaluate(state,inds[ind],subpops[ind], 0); *//This line gets the NullPointerException* else prob.evaluate(state,inds[ind],subpops[ind], 0); } //prob.evaluate(state,inds,updates, false, subpops, 0); evaluations++; } } } } So, the question that I want to ask now : >>How shall I modify SimpleProblem to work with GroupProblem inside performCoevolutionaryEvolution? Or do I really need it. >>evaluteindividual of steadystateEvaluator sends one individual, if I override evaluate individual inside custom evaluator I get null pointer exception (Please see above). So, I can't use this version? >> What I finally did is - use steadystateevaluator's evaluateindividual to send individual from a single population one by one to the problem class, catch that individual and the opponents from different population and perform interaction game, set fitness etc. But I am not sure whether it is any kind (say Parallel 2-pop competitive) of coevolution ? Thanks a lot for your time. > Sean >