123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- 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<I extends GAIndividual> implements GASelectionStrategy<I>{
-
- public class Range{
-
- public double min;
- public double max;
- public Range(double min, double max){
- this.min = min;
- this.max = max;
- }
- }
-
- ArrayList<Range> rouletteWheel;
- ArrayList<I> currentPop;
- Random random;
- double maxRange;
- double minRange;
-
- public SimpleSelectionStrategy(){
- rouletteWheel = new ArrayList<Range>();
- random = new Random();
- currentPop = new ArrayList<I>();
- }
-
- @Override
- public void setCurrentPopulation(ArrayList<I> 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<I> selectIndividuals(){
- ArrayList<I> parents = new ArrayList<I>();
- 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));
- }
-
-
- }
|