package algorithms.geneticAlgorithm.holegGA; import java.util.ArrayList; import classes.AbstractCpsObject; import classes.Category; import classes.CpsEdge; import classes.Position; import ui.controller.Control; import ui.model.Model; import algorithms.geneticAlgorithm.Components.GAResultListener; public class GenAlgoHandler { ArrayList> listeners = new ArrayList>(); HolegFactory factory; Control controller; Model model; int genCount; public GenAlgoHandler(Control controller, Model model){ this.controller = controller; this.model = model; genCount = 1; ArrayList objSpace = new ArrayList(); for(Category cat : model.getCategories()){ for(AbstractCpsObject obj : cat.getObjects()){ objSpace.add(obj); } } factory = new HolegFactory(objSpace, 5, 5); } public void createGeneration(){ ArrayList population = new ArrayList(); for(int i = 1; i <= 2; i++){ population.add(factory.createRandomIndividual()); } addPopulationListeners(genCount, population); genCount++; ArrayList children = new ArrayList(); HolegCrossover hC = new HolegCrossover(); //for(int j = 1; j <= 2; j++){ children.addAll(hC.crossOver(population)); //} addPopulationListeners(genCount, children); genCount++; } public void drawIndividual(HolegIndividual hI){ model.setObjectsOnCanvas(new ArrayList()); model.setEdgesOnCanvas(new ArrayList()); int xBound = (int) Math.ceil(Math.sqrt(hI.holonObjects.size())); int row = -1; int x = 50; int y = 50; int dist = 200; boolean isX = true; for(int i = 0; i < hI.holonObjects.size(); i++){ //for(AbstractCpsObject abs : hI.holonObjects){ AbstractCpsObject abs = hI.holonObjects.get(i); if(i % xBound == 0){ row++; } abs.setPosition(new Position(((i % xBound)* dist) + x , (row * dist) + y)); controller.addObjectCanvas(abs); } for(int j = 0; j < hI.holonEdges.size(); j++){ controller.addEdgeOnCanvas(hI.holonEdges.get(j)); } } public void addListener(GAResultListener listener){ listeners.add(listener); } public void addPopulationListeners(int generation, ArrayList population){ for(GAResultListener listener : listeners){ listener.populationCreated(generation, population); } } }