On Jun 2, 2016, at 4:25 PM, BARI, ATM GOLAM <[log in to unmask]> wrote:
> - My idea was like this : send one individual to the problem, play the interaction game with other individuals from different population inside problem class.
You need to provide more information here.
1. When the evaluation of individual A with some individual B of the other population is finished, does this just effect the fitness of A?
2. Can you select individuals B from the other population totally at random, or is there some structure which dictates which individuals would get selected with which individuals A?
> 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.
If what you want to do is evaluate an individual A by testing it against random individuals from the other population, and the results of these tests only affects fitness of individual A, then I wouldn't screw with the coevolution system at all. And GroupedProblemForm's preprocessPopulation and postprocessPopulation stuff doesn't make much sense either. Maybe you could hack things up, just override SteadyStateEvaluator.evaluateIndividual(...) as follows:
MultiSimpleProblemForm msp = ((MultiSimpleProblemForm)(problem));
int otherSubpop = // the other subpopulation
int others = // pick individuals from other subpopulation
msp.evaluate(state, ind, others, otherSubpop, 0);
// you'll need to make queue protected rather than package/private
queue.addLast(new QueueIndividual(ind, subpop));
Now it is possible that what you REALLY want to do is something different:
Given Populations P1, P2, ..., Pn
I1, I2, ..., In <- breed new individual from each pop
F1, F2, ..., Fn <- evaluate(I1, I2, ..., In) together
Add I1, I2, ..., In into P1, P2, ..., Pn respectively,
perhaps displacing existing individuals
In this case, you'll need to rewrite the Steady State system to do evaluation and breeding of each subpopulation in parallel, and also to use GroupedProblemForm. You might called it Steady State CCEA or something, I dunno. Anyway, ECJ doesn't have that built in.