GenAlgoInit.java 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. package algorithms.geneticAlgorithm.holegGA;
  2. import java.awt.Color;
  3. import java.util.ArrayList;
  4. import algorithms.geneticAlgorithm.holegGA.Components.HolegGeneration;
  5. import classes.AbstractCpsObject;
  6. import classes.Category;
  7. import classes.CpsEdge;
  8. import classes.HolonBattery;
  9. import classes.HolonObject;
  10. import classes.HolonSwitch;
  11. import classes.Position;
  12. import ui.controller.Control;
  13. import ui.model.Model;
  14. public class GenAlgoInit {
  15. ParameterArray params = new ParameterArray();
  16. Control controller;
  17. Model model;
  18. GenAlgoWindow window;
  19. public GenAlgoInit(Control controller, Model model){
  20. this.controller = controller;
  21. this.model = model;
  22. }
  23. public void start(){
  24. window = new GenAlgoWindow(controller, model);
  25. window.frame.setVisible(true);
  26. }
  27. public void evaluate(){
  28. Thread t = new Thread(){
  29. ArrayList<ArrayList<HolegGeneration>> runHistory = new ArrayList<ArrayList<HolegGeneration>>();
  30. ArrayList<Double> avgFitness = new ArrayList<Double>();
  31. ArrayList<Double> bestFitness = new ArrayList<Double>();
  32. ArrayList<Double> maxFitness = new ArrayList<Double>();
  33. ArrayList<Double> maxFound = new ArrayList<Double>();
  34. int runs = 30;
  35. Double maxValue = 100.0;
  36. public void run(){
  37. Evaluator plotAvg = new Evaluator("average from all parameters");
  38. Evaluator plotBest = new Evaluator("best from all parameters");
  39. plotAvg.initPlottedRendering("Average of all parameters");
  40. plotBest.initPlottedRendering("Best of all parameters");
  41. for(int b = 1; b <= 3; b++){
  42. avgFitness = new ArrayList<Double>();
  43. bestFitness = new ArrayList<Double>();
  44. maxFitness = new ArrayList<Double>();
  45. maxFound = new ArrayList<Double>();
  46. ParameterArray params = getParameter(b);
  47. for(int j = 0; j < 100; j++){
  48. avgFitness.add((double) 0);
  49. bestFitness.add(0.0);
  50. maxFitness.add(maxValue);
  51. maxFound.add(0.0);
  52. }
  53. Evaluator evalAvg = new Evaluator("average " + b);
  54. Evaluator evalBest = new Evaluator("best set " + b);
  55. Evaluator evalAvgAvg = new Evaluator("avgavg " + b);
  56. Evaluator evalAvgBest = new Evaluator("avgBest " + b);
  57. evalAvg.initRendering("Average of each run for set " + b);
  58. evalBest.initRendering("Best of each run for set " + b);
  59. evalAvgAvg.initRendering("Average of all runs for set " + b);
  60. evalAvgBest.initRendering("Best of all runs for set " + b);
  61. for(int i = 0; i < runs; i++){
  62. GenAlgoWindow tmp = new GenAlgoWindow(controller,model);
  63. ArrayList<HolegGeneration> oneRun = tmp.evaluationRun(params);
  64. ArrayList<Double> bestOneRun = new ArrayList<Double>();
  65. ArrayList<Double> averageOneRun = new ArrayList<Double>();
  66. ArrayList<Double> bestFoundOneRun = new ArrayList<Double>();
  67. for(int k = 0; k < oneRun.size(); k++){
  68. avgFitness.set(k, avgFitness.get(k)+oneRun.get(k).getAvgFittness());
  69. bestFitness.set(k, bestFitness.get(k)+oneRun.get(k).getMaxFittness());
  70. averageOneRun.add(oneRun.get(k).getAvgFittness());
  71. bestOneRun.add(oneRun.get(k).getMaxFittness());
  72. if(k != 0){
  73. if(oneRun.get(k).getMaxFittness() > bestFoundOneRun.get(k-1)){
  74. bestFoundOneRun.add(oneRun.get(k).getMaxFittness());
  75. }else{
  76. bestFoundOneRun.add(bestFoundOneRun.get(k-1));
  77. }
  78. }else{
  79. bestFoundOneRun.add(oneRun.get(k).getMaxFittness());
  80. }
  81. maxFound.set(k, maxFound.get(k)+bestFoundOneRun.get(k));
  82. }
  83. evalAvg.addSeries(averageOneRun, null, "");
  84. evalBest.addSeries(bestFoundOneRun, null, "");
  85. System.out.println("At run " + i);
  86. }
  87. for(int z = 0; z < 100; z++){
  88. avgFitness.set(z, avgFitness.get(z)/runs);
  89. bestFitness.set(z, bestFitness.get(z)/runs);
  90. maxFound.set(z, maxFound.get(z)/runs);
  91. }
  92. evalAvgAvg.addSeries(avgFitness, Color.GRAY, "");
  93. evalAvgBest.addSeries(maxFound, Color.BLUE, "");
  94. plotAvg.addSeries(avgFitness, getColor(b), "Parameter Set "+ b);
  95. plotBest.addSeries(maxFound, getColor(b), "Parameter Set " + b);
  96. evalAvg.addSeries(maxFitness, Color.BLACK, "Maximum Fitness");
  97. evalAvg.drawChart();
  98. evalBest.addSeries(maxFitness, Color.BLACK, "Maximum Fitness");
  99. evalBest.drawChart();
  100. evalAvgAvg.addSeries(maxFitness, Color.BLACK, "Maximum Fitness");
  101. evalAvgAvg.drawChart();
  102. evalAvgBest.addSeries(maxFitness, Color.BLACK, "Maximum Fitness");
  103. evalAvgBest.drawChart();
  104. }
  105. plotAvg.addSeries(maxFitness, Color.BLACK, "Maximum Fitness");
  106. plotAvg.drawChart();
  107. plotBest.addSeries(maxFitness, Color.BLACK, "Maximum Fitness");
  108. plotBest.drawChart();
  109. }
  110. };
  111. t.start();
  112. }
  113. public Color getColor(int i){
  114. if(i == 1){
  115. return Color.BLUE;
  116. }
  117. if(i == 2){
  118. return Color.GREEN;
  119. }else{
  120. return Color.RED;
  121. }
  122. }
  123. public ParameterArray getParameter(int i){
  124. if(i == 1){
  125. return getParameter1();
  126. }
  127. if(i == 2){
  128. return getParameter2();
  129. }else{
  130. return getParameter3();
  131. }
  132. }
  133. public ParameterArray getParameter1(){
  134. ParameterArray params = new ParameterArray();
  135. params = getSameParameters();
  136. params.set(params.MAX_EDGES, 39);
  137. params.set(params.POPULATION_SIZE, 100);
  138. params.set(params.TOURNAMENT_SIZE, 50);
  139. params.set(params.TOURNAMENT_PROB, 0.15);
  140. params.set(params.EDGE_MUTATION_PROB, 0.01);
  141. params.set(params.WILDCARD_MUTATION_PROB, 0.01);
  142. return params;
  143. }
  144. public ParameterArray getParameter2(){
  145. ParameterArray params = new ParameterArray();
  146. params = getSameParameters();
  147. params.set(params.MAX_EDGES, 39);
  148. params.set(params.POPULATION_SIZE, 100);
  149. params.set(params.TOURNAMENT_SIZE, 50);
  150. params.set(params.TOURNAMENT_PROB, 0.01);
  151. params.set(params.EDGE_MUTATION_PROB, 0.01);
  152. params.set(params.WILDCARD_MUTATION_PROB, 0.01);
  153. return params;
  154. }
  155. public ParameterArray getParameter3(){
  156. ParameterArray params = new ParameterArray();
  157. params = getSameParameters();
  158. params.set(params.MAX_EDGES, 39);
  159. params.set(params.POPULATION_SIZE, 100);
  160. params.set(params.TOURNAMENT_SIZE, 1);
  161. params.set(params.TOURNAMENT_PROB, 1.0);
  162. params.set(params.EDGE_MUTATION_PROB, 0.01);
  163. params.set(params.WILDCARD_MUTATION_PROB, 0.01);
  164. return params;
  165. }
  166. public ParameterArray getSameParameters(){
  167. ParameterArray params = new ParameterArray();
  168. params.set(params.MAX_EDGES, 50);
  169. params.set(params.EDIT_EDGES, true);
  170. params.set(params.POPULATION_SIZE, 100);
  171. params.set(params.TOURNAMENT_SIZE, 30);
  172. params.set(params.EDGE_BREAK_AMOUNT, 4);
  173. params.set(params.SIM_ITERATIONS, 1);
  174. params.set(params.EDGE_MUTATION_PROB, 0.0);
  175. params.set(params.SUPPLIED_POINTS, 10.0);
  176. params.set(params.OVERSUPPLIED_POINTS, 10.0);
  177. params.set(params.UNDERSUPPLIED_POINTS, -10.0);
  178. params.set(params.LENGTH_POINTS, -0.5);
  179. params.set(params.WILDCARD_USAGE, -5.0);
  180. params.set(params.WILDCARD_MUTATION_PROB, 0.0);
  181. params.set(params.PARTIALSUPPLIED_POINTS, 3.0);
  182. params.set(params.OVERPRODUCTION, -10.0);
  183. params.set(params.NODES_IN_WILDCARDS, true);
  184. return params;
  185. }
  186. }