List<EvolutionaryOperator<Sudoku>> operators = new ArrayList<EvolutionaryOperator<Sudoku>>(2);
// Cross-over rows between parents (so offspring is x rows from parent1 and
// y rows from parent2).
operators.add(new SudokuVerticalCrossover());
// Mutate the order of cells within individual rows.
operators.add(new SudokuRowMutation(new PoissonGenerator(2, rng),
new DiscreteUniformGenerator(1, 8, rng)));
EvolutionaryOperator<Sudoku> pipeline = new EvolutionPipeline<Sudoku>(operators);
EvolutionEngine<Sudoku> engine = new GenerationalEvolutionEngine<Sudoku>(new SudokuFactory(puzzle),