1. Repeat

2. for i ← 1 to nPop do

3. initialize(pop(i));

4. evaluate (pop(i));

5. structure(pop(i));

6. repeat

7. for j ← 1 to crossRate*popSize do

8. (ind1,ind2) ← selectedParents(pop(i));

9. newInd ← crossover(ind1,ind2);

10. if λ • mutatioRate then

11. newInd ← mutation(newInd);

12. evaluate(newInd);

13. insert(newInd, pop(i));

14. end for

15. structure (pop(i));

16. until convergence(pop(i));

17. executeMigration(pop(i),pop(i+1));

18. until stopCriterion;