package algorithms.geneticAlgorithm.Components.Selections; import java.util.ArrayList; import java.util.Random; import algorithms.geneticAlgorithm.Components.GAIndividual; import algorithms.geneticAlgorithm.Components.GASelectionStrategy; public class SimpleSelectionStrategy implements GASelectionStrategy{ public class Range{ public double min; public double max; public Range(double min, double max){ this.min = min; this.max = max; } } ArrayList rouletteWheel; ArrayList currentPop; Random random; double maxRange; double minRange; public SimpleSelectionStrategy(){ rouletteWheel = new ArrayList(); random = new Random(); currentPop = new ArrayList(); } @Override public void setCurrentPopulation(ArrayList currentPopulation) { currentPop = currentPopulation; rouletteWheel.clear(); double offSet = 0; double min = 0; double max = 0; for(I individual : currentPop){ min = offSet; max = min + individual.getFittness(); offSet = max; Range range = new Range(min, max); rouletteWheel.add(range); } maxRange = max; } @Override public ArrayList selectIndividuals(){ ArrayList parents = new ArrayList(); parents.add(selectIndividual()); parents.add(selectIndividual()); return parents; } public I selectIndividual() { double randomValue = random.nextDouble() * maxRange; for(int i = 0; i < rouletteWheel.size(); i++){ Range current = rouletteWheel.get(i); if(current.min <= randomValue && randomValue < current.max){ return currentPop.get(i); } } return currentPop.get(random.nextInt(currentPop.size() - 1)); } }