Buenas,
Para el caso de ECJ, el método que deben modificar es:
public void defaultCrossover(EvolutionState state, int thread, VectorIndividual ind)
de la clase IntegerVectorIndividual o la equivalente que estén utilizando para la representación de los individuos.
En ese método se cruza el propio individuo con ind y se modifican ambos genomas.
ECJ no incluye operadores para permutaciones. Pueden implementarlos fácilmente basándose en los códigos en C de malva, viendo los ejemplos vistos en clase o a partir de los pseudocódigos que se muestran en la sección 7.3.4 del siguiente libro: http://hydra.it.teithe.gr/~adamidis/Introduction_to_Evolutionary_Algorithms-184996128X.pdf
Saludos,
Renzo