class UniformDeterministicSelectionOperator extends AbstractSelectionOperator {

    public Population[] select(Population[] populations) {
        this.checkConsistency(populations);

        // unify populations for easy linear access to all input Individuals
        Individual[] inputIndividuals = this.concatenateIndividualsFromPopulations(populations, this.inputArity);

        int totalOutput = inputIndividuals.length * this.broodSize;
        List<Individual> outputList = new ArrayList<Individual>();
        // each Individual will be selected exactly broodSize times
        for (Individual individual : inputIndividuals){
            for (int i = 0; i < this.broodSize; i++){
                outputList.add(individual);
            }
        }
        // preparation of output
        this.individualsPerPopulation = totalOutput / this.outputArity;
        Population[] outputPopulations = this.createOutputPopulations();
        Individual[][] outputIndividuals = this.createOutputIndividuals();
        this.mapByColumns(outputList, outputIndividuals);
        this.assignIndividualsToPopulations(outputIndividuals, outputPopulations);

        return outputPopulations;
    }

    public  UniformDeterministicSelectionOperator();

}