public void processToNextGeneration() { // notation if (generationNumber == -1) Collections.sort(currentPopulation); List<ChessBoard> bestEntities = currentPopulation.subList(0, currentPopulation.size() / 2); // couplage List<ChessBoard> newPopulation = new ArrayList<ChessBoard>(); double mutation = 0.1; for (int i = 0, size = bestEntities.size() / 2; i < size; i++) { ChessBoard entityA = bestEntities.remove(0); newPopulation.add(entityA); if (bestEntities.isEmpty()) break; int indexPartner = (int) (Math.random() * bestEntities.size()); ChessBoard entityB = bestEntities.remove(indexPartner); newPopulation.add(entityB); ChessBoard[] children = entityA.reproduce(entityB, (int) (Math.random() * entityB.getDNALength())); if (Math.random() < mutation) children[0].mutate(); if (Math.random() < mutation) children[1].mutate(); newPopulation.add(children[0]); newPopulation.add(children[1]); } currentPopulation = newPopulation; Collections.sort(currentPopulation); generationNumber++; }