Print

Print


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 ho​w 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