GenAlgoHandler.java 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package algorithms.geneticAlgorithm.holegGA;
  2. import java.util.ArrayList;
  3. import classes.AbstractCpsObject;
  4. import classes.Category;
  5. import classes.CpsEdge;
  6. import classes.Position;
  7. import ui.controller.Control;
  8. import ui.model.Model;
  9. import algorithms.geneticAlgorithm.Components.GAResultListener;
  10. public class GenAlgoHandler {
  11. ArrayList<GAResultListener<HolegIndividual>> listeners = new ArrayList<GAResultListener<HolegIndividual>>();
  12. HolegFactory factory;
  13. Control controller;
  14. Model model;
  15. int genCount;
  16. public GenAlgoHandler(Control controller, Model model){
  17. this.controller = controller;
  18. this.model = model;
  19. genCount = 1;
  20. ArrayList<AbstractCpsObject> objSpace = new ArrayList<AbstractCpsObject>();
  21. for(Category cat : model.getCategories()){
  22. for(AbstractCpsObject obj : cat.getObjects()){
  23. objSpace.add(obj);
  24. }
  25. }
  26. factory = new HolegFactory(objSpace, 5, 5);
  27. }
  28. public void createGeneration(){
  29. ArrayList<HolegIndividual> population = new ArrayList<HolegIndividual>();
  30. for(int i = 1; i <= 2; i++){
  31. population.add(factory.createRandomIndividual());
  32. }
  33. addPopulationListeners(genCount, population);
  34. genCount++;
  35. ArrayList<HolegIndividual> children = new ArrayList<HolegIndividual>();
  36. HolegCrossover hC = new HolegCrossover();
  37. //for(int j = 1; j <= 2; j++){
  38. children.addAll(hC.crossOver(population));
  39. //}
  40. addPopulationListeners(genCount, children);
  41. genCount++;
  42. }
  43. public void drawIndividual(HolegIndividual hI){
  44. model.setObjectsOnCanvas(new ArrayList<AbstractCpsObject>());
  45. model.setEdgesOnCanvas(new ArrayList<CpsEdge>());
  46. int xBound = (int) Math.ceil(Math.sqrt(hI.holonObjects.size()));
  47. int row = -1;
  48. int x = 50;
  49. int y = 50;
  50. int dist = 200;
  51. boolean isX = true;
  52. for(int i = 0; i < hI.holonObjects.size(); i++){
  53. //for(AbstractCpsObject abs : hI.holonObjects){
  54. AbstractCpsObject abs = hI.holonObjects.get(i);
  55. if(i % xBound == 0){
  56. row++;
  57. }
  58. abs.setPosition(new Position(((i % xBound)* dist) + x , (row * dist) + y));
  59. controller.addObjectCanvas(abs);
  60. }
  61. for(int j = 0; j < hI.holonEdges.size(); j++){
  62. controller.addEdgeOnCanvas(hI.holonEdges.get(j));
  63. }
  64. }
  65. public void addListener(GAResultListener<HolegIndividual> listener){
  66. listeners.add(listener);
  67. }
  68. public void addPopulationListeners(int generation, ArrayList<HolegIndividual> population){
  69. for(GAResultListener<HolegIndividual> listener : listeners){
  70. listener.populationCreated(generation, population);
  71. }
  72. }
  73. }