Evaluator.java 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. package algorithms.geneticAlgorithm.holegGA;
  2. import java.awt.Color;
  3. import java.awt.Paint;
  4. import java.util.ArrayList;
  5. import java.util.Random;
  6. import javax.swing.JFrame;
  7. import javax.swing.JPanel;
  8. import org.jfree.chart.ChartFactory;
  9. import org.jfree.chart.ChartPanel;
  10. import org.jfree.chart.JFreeChart;
  11. import org.jfree.chart.plot.PlotOrientation;
  12. import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
  13. import org.jfree.data.xy.XYSeries;
  14. import org.jfree.data.xy.XYSeriesCollection;
  15. import org.jfree.ui.ApplicationFrame;
  16. import org.jfree.ui.RefineryUtilities;
  17. public class Evaluator {
  18. XYLineAndShapeRenderer maxFitnessRenderer;
  19. XYLineAndShapeRenderer maxFoundRenderer;
  20. XYLineAndShapeRenderer bestIndividualRenderer;
  21. XYLineAndShapeRenderer averageIndividualRenderer;
  22. XYLineAndShapeRenderer worstIndividualRenderer;
  23. JFreeChart bestIndividualChart;
  24. JFreeChart fitnessChart;
  25. ChartPanel bestIndividualPanel;
  26. ChartPanel fitnessPanel;
  27. JFreeChart chart;
  28. int seriesCount = 0;
  29. public Evaluator(String title){
  30. maxFitnessRenderer = new XYLineAndShapeRenderer();
  31. maxFitnessRenderer.setSeriesPaint(0, Color.BLACK);
  32. maxFitnessRenderer.setSeriesShapesVisible(0, false);
  33. maxFoundRenderer = new XYLineAndShapeRenderer();
  34. maxFoundRenderer.setSeriesPaint(0, Color.ORANGE);
  35. maxFoundRenderer.setSeriesShapesVisible(0, false);
  36. bestIndividualRenderer = new XYLineAndShapeRenderer();
  37. bestIndividualRenderer.setSeriesPaint(0, Color.GREEN);
  38. bestIndividualRenderer.setSeriesShapesVisible(0, false);
  39. averageIndividualRenderer= new XYLineAndShapeRenderer();
  40. averageIndividualRenderer.setSeriesPaint(0, Color.BLUE);
  41. averageIndividualRenderer.setSeriesShapesVisible(0, false);
  42. worstIndividualRenderer = new XYLineAndShapeRenderer();
  43. worstIndividualRenderer.setSeriesPaint(0, Color.RED);
  44. worstIndividualRenderer.setSeriesShapesVisible(0, false);
  45. bestIndividualChart = ChartFactory.createXYLineChart(
  46. title,
  47. "Generation",
  48. "Fitness",
  49. null,
  50. PlotOrientation.VERTICAL,
  51. true,
  52. true,
  53. false);
  54. fitnessChart = ChartFactory.createXYLineChart(
  55. title,
  56. "Generation",
  57. "Fitness",
  58. null,
  59. PlotOrientation.VERTICAL,
  60. true,
  61. true,
  62. false);
  63. bestIndividualChart.getXYPlot().setBackgroundPaint(Color.WHITE);
  64. bestIndividualChart.getXYPlot().setDomainGridlinesVisible(true);
  65. bestIndividualChart.getXYPlot().setRangeGridlinesVisible(true);
  66. bestIndividualChart.getXYPlot().setRangeGridlinePaint(Color.GRAY);
  67. bestIndividualChart.getXYPlot().setDomainGridlinePaint(Color.GRAY);
  68. //bestIndividualChart.getXYPlot().setDataset(0, data);
  69. //bestIndividualChart.getXYPlot().setDataset(1, data2);
  70. bestIndividualChart.getXYPlot().setRenderer(1,maxFoundRenderer);
  71. bestIndividualChart.getXYPlot().setRenderer(0,maxFitnessRenderer);
  72. fitnessChart.getXYPlot().setBackgroundPaint(Color.WHITE);
  73. fitnessChart.getXYPlot().setDomainGridlinesVisible(true);
  74. fitnessChart.getXYPlot().setRangeGridlinesVisible(true);
  75. fitnessChart.getXYPlot().setRangeGridlinePaint(Color.GRAY);
  76. fitnessChart.getXYPlot().setDomainGridlinePaint(Color.GRAY);
  77. fitnessChart.getXYPlot().setRenderer(0,maxFitnessRenderer);
  78. fitnessChart.getXYPlot().setRenderer(1,bestIndividualRenderer);
  79. fitnessChart.getXYPlot().setRenderer(2,averageIndividualRenderer);
  80. fitnessChart.getXYPlot().setRenderer(3,worstIndividualRenderer);
  81. bestIndividualPanel = new ChartPanel(bestIndividualChart);
  82. bestIndividualPanel.setPreferredSize(new java.awt.Dimension(500, 270));
  83. fitnessPanel = new ChartPanel(fitnessChart);
  84. fitnessPanel.setPreferredSize(new java.awt.Dimension(500, 270));
  85. }
  86. public void drawFitnessGraph(ArrayList<Double> best, ArrayList<Double> medium,
  87. ArrayList<Double> worst){
  88. Random rng = new Random();
  89. XYSeries highest = new XYSeries("Best Individual");
  90. XYSeries average = new XYSeries("Average Individual");
  91. XYSeries lowest = new XYSeries("Worst Individual");
  92. XYSeries max = new XYSeries("Maximum Fitness");
  93. for(int i = 0; i < 100; i++){
  94. highest.add(i,best.get(i));
  95. average.add(i,medium.get(i));
  96. lowest.add(i,worst.get(i));
  97. max.add(i, 32);
  98. }
  99. XYSeriesCollection maxCol = new XYSeriesCollection(max);
  100. XYSeriesCollection averageCol = new XYSeriesCollection(average);
  101. XYSeriesCollection lowestCol = new XYSeriesCollection(lowest);
  102. XYSeriesCollection highestCol = new XYSeriesCollection(highest);
  103. fitnessChart.getXYPlot().setDataset(0, maxCol);
  104. fitnessChart.getXYPlot().setDataset(1, highestCol);
  105. fitnessChart.getXYPlot().setDataset(2, averageCol);
  106. fitnessChart.getXYPlot().setDataset(3, lowestCol);
  107. JFrame appFrame = new JFrame("demo");
  108. appFrame.setContentPane(fitnessPanel);
  109. appFrame.pack();
  110. RefineryUtilities.centerFrameOnScreen(appFrame);
  111. appFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  112. appFrame.setVisible(true);
  113. }
  114. public void drawFoundGraph(ArrayList<Double> found){
  115. XYLineAndShapeRenderer worstIndividualRenderer;
  116. JFreeChart bestIndividualChart;
  117. Random rng = new Random();
  118. XYSeries highest = new XYSeries("Best Found");
  119. XYSeries max = new XYSeries("Maximum Fitness");
  120. for(int i = 0; i < 100; i++){
  121. highest.add(i, found.get(i));
  122. max.add(i, 32);
  123. }
  124. XYSeriesCollection maxCol = new XYSeriesCollection(max);
  125. XYSeriesCollection highestCol = new XYSeriesCollection(highest);
  126. //bestIndividualChart.getXYPlot().setDataset(0, maxCol);
  127. //bestIndividualChart.getXYPlot().setDataset(1, highestCol);
  128. JFrame appFrame = new JFrame("demo");
  129. appFrame.setContentPane(bestIndividualPanel);
  130. appFrame.pack();
  131. RefineryUtilities.centerFrameOnScreen(appFrame);
  132. appFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  133. appFrame.setVisible(true);
  134. }
  135. public void initRendering(String title){
  136. seriesCount = 0;
  137. chart = ChartFactory.createXYLineChart(title,
  138. "Generation",
  139. "Fitness",
  140. null,
  141. PlotOrientation.VERTICAL,
  142. false,
  143. false,
  144. false);
  145. chart.getXYPlot().setBackgroundPaint(Color.WHITE);
  146. chart.getXYPlot().setDomainGridlinesVisible(true);
  147. chart.getXYPlot().setRangeGridlinesVisible(true);
  148. chart.getXYPlot().setRangeGridlinePaint(Color.GRAY);
  149. chart.getXYPlot().setDomainGridlinePaint(Color.GRAY);
  150. }
  151. public void initPlottedRendering(String title){
  152. seriesCount = 0;
  153. chart = ChartFactory.createXYLineChart(title,
  154. "Generation",
  155. "Fitness",
  156. null,
  157. PlotOrientation.VERTICAL,
  158. true,
  159. true,
  160. false);
  161. chart.getXYPlot().setBackgroundPaint(Color.WHITE);
  162. chart.getXYPlot().setDomainGridlinesVisible(true);
  163. chart.getXYPlot().setRangeGridlinesVisible(true);
  164. chart.getXYPlot().setRangeGridlinePaint(Color.GRAY);
  165. chart.getXYPlot().setDomainGridlinePaint(Color.GRAY);
  166. }
  167. public void addSeries(ArrayList<Double> series, Color color, String name){
  168. Random rng = new Random();
  169. Color usedColor;
  170. if(color == null){
  171. usedColor = new Color(rng.nextFloat(), rng.nextFloat(), rng.nextFloat());
  172. }else{
  173. usedColor = color;
  174. }
  175. XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
  176. renderer.setSeriesPaint(0, usedColor);
  177. renderer.setSeriesShapesVisible(0, false);
  178. XYSeries values = new XYSeries(name);
  179. for(int i = 0; i < series.size(); i++){
  180. values.add(i, series.get(i));
  181. }
  182. XYSeriesCollection col = new XYSeriesCollection(values);
  183. chart.getXYPlot().setDataset(seriesCount, col);
  184. chart.getXYPlot().setRenderer(seriesCount, renderer);
  185. seriesCount++;
  186. }
  187. public void drawChart(){
  188. ChartPanel chartPanel = new ChartPanel(chart);
  189. JFrame graph = new JFrame("");
  190. graph.setContentPane(chartPanel);
  191. graph.pack();
  192. RefineryUtilities.centerFrameOnScreen(graph);
  193. graph.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  194. graph.setVisible(true);
  195. }
  196. }