Entre estos operadores se incluyen el de selección, crianza, reemplazo y migración.
Al igual que en el caso anterior, los operadores de selección, crianza y reemplazo siguen siendo los mismos que vimos en el capítulo anterior en la sección , por lo que sólo describiremos los de migración, que sí suponen un aspecto novedoso de OEP con respecto a OE.
Un eoMigrator (y descendientes) selecciona varios individuos de entre los mejores de la población, haciéndolos migrar hacia otras poblaciones, de acuerdo a cierto esquema de migración. De esta forma se realiza un intercambio de información útil entre las distintas poblaciones.
Como se puede ver en la figura , los diferentes esquemas de migración están implementados como subclases de eoMigrator:
De eoMigrator se puede hacer heredar una clase con el esquema de comunicación que mejor se adapte a nuestras necesidades, en función de la topología de la red de procesadores que vayamos a utilizar. Para ello, podemos utilizar los siguientes método protegidos:
Además la clase eoMigrator proporciona el método público getTheBest que toma como parámetro la población del procesador local y devuelve el mejor individuo de todas la poblaciones, para que funcione este método, tiene que ser llamado por todas las islas (procesos). Utilizando este método al final de las distintas ejecuciones en los diferentes procesadores, obtenemos el mejor individuo. De esta forma se puede implementar otro tipo de migración que se ha utilizado en las pruebas realizadas y que se ha denominado simple, y se basa en lanzar varias ejeuciones en paralelo e incomunicadas y obtener, al final, el mejor individuo de todas las poblaciones.