123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- package algorithms.geneticAlgorithm.holegGA;
- import java.awt.Color;
- import java.awt.Paint;
- import java.util.ArrayList;
- import java.util.Random;
- import javax.swing.JFrame;
- import javax.swing.JPanel;
- import org.jfree.chart.ChartFactory;
- import org.jfree.chart.ChartPanel;
- import org.jfree.chart.JFreeChart;
- import org.jfree.chart.plot.PlotOrientation;
- import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
- import org.jfree.data.xy.XYSeries;
- import org.jfree.data.xy.XYSeriesCollection;
- import org.jfree.ui.ApplicationFrame;
- import org.jfree.ui.RefineryUtilities;
- public class Evaluator {
- XYLineAndShapeRenderer maxFitnessRenderer;
- XYLineAndShapeRenderer maxFoundRenderer;
- XYLineAndShapeRenderer bestIndividualRenderer;
- XYLineAndShapeRenderer averageIndividualRenderer;
- XYLineAndShapeRenderer worstIndividualRenderer;
- JFreeChart bestIndividualChart;
- JFreeChart fitnessChart;
- ChartPanel bestIndividualPanel;
- ChartPanel fitnessPanel;
- JFreeChart chart;
- int seriesCount = 0;
-
- public Evaluator(String title){
- maxFitnessRenderer = new XYLineAndShapeRenderer();
- maxFitnessRenderer.setSeriesPaint(0, Color.BLACK);
- maxFitnessRenderer.setSeriesShapesVisible(0, false);
- maxFoundRenderer = new XYLineAndShapeRenderer();
- maxFoundRenderer.setSeriesPaint(0, Color.ORANGE);
- maxFoundRenderer.setSeriesShapesVisible(0, false);
- bestIndividualRenderer = new XYLineAndShapeRenderer();
- bestIndividualRenderer.setSeriesPaint(0, Color.GREEN);
- bestIndividualRenderer.setSeriesShapesVisible(0, false);
- averageIndividualRenderer= new XYLineAndShapeRenderer();
- averageIndividualRenderer.setSeriesPaint(0, Color.BLUE);
- averageIndividualRenderer.setSeriesShapesVisible(0, false);
- worstIndividualRenderer = new XYLineAndShapeRenderer();
- worstIndividualRenderer.setSeriesPaint(0, Color.RED);
- worstIndividualRenderer.setSeriesShapesVisible(0, false);
-
- bestIndividualChart = ChartFactory.createXYLineChart(
- title,
- "Generation",
- "Fitness",
- null,
- PlotOrientation.VERTICAL,
- true,
- true,
- false);
-
- fitnessChart = ChartFactory.createXYLineChart(
- title,
- "Generation",
- "Fitness",
- null,
- PlotOrientation.VERTICAL,
- true,
- true,
- false);
-
- bestIndividualChart.getXYPlot().setBackgroundPaint(Color.WHITE);
- bestIndividualChart.getXYPlot().setDomainGridlinesVisible(true);
- bestIndividualChart.getXYPlot().setRangeGridlinesVisible(true);
- bestIndividualChart.getXYPlot().setRangeGridlinePaint(Color.GRAY);
- bestIndividualChart.getXYPlot().setDomainGridlinePaint(Color.GRAY);
- //bestIndividualChart.getXYPlot().setDataset(0, data);
- //bestIndividualChart.getXYPlot().setDataset(1, data2);
- bestIndividualChart.getXYPlot().setRenderer(1,maxFoundRenderer);
- bestIndividualChart.getXYPlot().setRenderer(0,maxFitnessRenderer);
-
- fitnessChart.getXYPlot().setBackgroundPaint(Color.WHITE);
- fitnessChart.getXYPlot().setDomainGridlinesVisible(true);
- fitnessChart.getXYPlot().setRangeGridlinesVisible(true);
- fitnessChart.getXYPlot().setRangeGridlinePaint(Color.GRAY);
- fitnessChart.getXYPlot().setDomainGridlinePaint(Color.GRAY);
-
- fitnessChart.getXYPlot().setRenderer(0,maxFitnessRenderer);
- fitnessChart.getXYPlot().setRenderer(1,bestIndividualRenderer);
- fitnessChart.getXYPlot().setRenderer(2,averageIndividualRenderer);
- fitnessChart.getXYPlot().setRenderer(3,worstIndividualRenderer);
-
-
- bestIndividualPanel = new ChartPanel(bestIndividualChart);
- bestIndividualPanel.setPreferredSize(new java.awt.Dimension(500, 270));
-
- fitnessPanel = new ChartPanel(fitnessChart);
- fitnessPanel.setPreferredSize(new java.awt.Dimension(500, 270));
- }
-
- public void drawFitnessGraph(ArrayList<Double> best, ArrayList<Double> medium,
- ArrayList<Double> worst){
- Random rng = new Random();
- XYSeries highest = new XYSeries("Best Individual");
- XYSeries average = new XYSeries("Average Individual");
- XYSeries lowest = new XYSeries("Worst Individual");
- XYSeries max = new XYSeries("Maximum Fitness");
- for(int i = 0; i < 100; i++){
- highest.add(i,best.get(i));
- average.add(i,medium.get(i));
- lowest.add(i,worst.get(i));
- max.add(i, 32);
- }
- XYSeriesCollection maxCol = new XYSeriesCollection(max);
- XYSeriesCollection averageCol = new XYSeriesCollection(average);
- XYSeriesCollection lowestCol = new XYSeriesCollection(lowest);
- XYSeriesCollection highestCol = new XYSeriesCollection(highest);
- fitnessChart.getXYPlot().setDataset(0, maxCol);
- fitnessChart.getXYPlot().setDataset(1, highestCol);
- fitnessChart.getXYPlot().setDataset(2, averageCol);
- fitnessChart.getXYPlot().setDataset(3, lowestCol);
-
- JFrame appFrame = new JFrame("demo");
- appFrame.setContentPane(fitnessPanel);
- appFrame.pack();
- RefineryUtilities.centerFrameOnScreen(appFrame);
- appFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
- appFrame.setVisible(true);
- }
-
- public void drawFoundGraph(ArrayList<Double> found){
- XYLineAndShapeRenderer worstIndividualRenderer;
- JFreeChart bestIndividualChart;
-
-
- Random rng = new Random();
- XYSeries highest = new XYSeries("Best Found");
- XYSeries max = new XYSeries("Maximum Fitness");
- for(int i = 0; i < 100; i++){
- highest.add(i, found.get(i));
- max.add(i, 32);
- }
- XYSeriesCollection maxCol = new XYSeriesCollection(max);
- XYSeriesCollection highestCol = new XYSeriesCollection(highest);
- //bestIndividualChart.getXYPlot().setDataset(0, maxCol);
- //bestIndividualChart.getXYPlot().setDataset(1, highestCol);
-
- JFrame appFrame = new JFrame("demo");
- appFrame.setContentPane(bestIndividualPanel);
- appFrame.pack();
- RefineryUtilities.centerFrameOnScreen(appFrame);
- appFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
- appFrame.setVisible(true);
- }
-
- public void initRendering(String title){
- seriesCount = 0;
- chart = ChartFactory.createXYLineChart(title,
- "Generation",
- "Fitness",
- null,
- PlotOrientation.VERTICAL,
- false,
- false,
- false);
- chart.getXYPlot().setBackgroundPaint(Color.WHITE);
- chart.getXYPlot().setDomainGridlinesVisible(true);
- chart.getXYPlot().setRangeGridlinesVisible(true);
- chart.getXYPlot().setRangeGridlinePaint(Color.GRAY);
- chart.getXYPlot().setDomainGridlinePaint(Color.GRAY);
- }
-
- public void initPlottedRendering(String title){
- seriesCount = 0;
- chart = ChartFactory.createXYLineChart(title,
- "Generation",
- "Fitness",
- null,
- PlotOrientation.VERTICAL,
- true,
- true,
- false);
- chart.getXYPlot().setBackgroundPaint(Color.WHITE);
- chart.getXYPlot().setDomainGridlinesVisible(true);
- chart.getXYPlot().setRangeGridlinesVisible(true);
- chart.getXYPlot().setRangeGridlinePaint(Color.GRAY);
- chart.getXYPlot().setDomainGridlinePaint(Color.GRAY);
- }
-
- public void addSeries(ArrayList<Double> series, Color color, String name){
- Random rng = new Random();
- Color usedColor;
- if(color == null){
- usedColor = new Color(rng.nextFloat(), rng.nextFloat(), rng.nextFloat());
- }else{
- usedColor = color;
- }
- XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
- renderer.setSeriesPaint(0, usedColor);
- renderer.setSeriesShapesVisible(0, false);
- XYSeries values = new XYSeries(name);
- for(int i = 0; i < series.size(); i++){
- values.add(i, series.get(i));
- }
- XYSeriesCollection col = new XYSeriesCollection(values);
- chart.getXYPlot().setDataset(seriesCount, col);
- chart.getXYPlot().setRenderer(seriesCount, renderer);
- seriesCount++;
- }
-
- public void drawChart(){
- ChartPanel chartPanel = new ChartPanel(chart);
- JFrame graph = new JFrame("");
- graph.setContentPane(chartPanel);
- graph.pack();
- RefineryUtilities.centerFrameOnScreen(graph);
- graph.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
- graph.setVisible(true);
- }
- }
|