package pl.javastart.first; import static java.lang.Math.pow; import java.util.Random; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; public class Ewolucyjny { public double licz() { double[] tablica1 = new double[1026]; double[] osobnik1 = new double[1000]; double[] osobnik2 = new double[1000]; double[] wynik = new double[1000]; int max = 100; int czas[] =new int[max]; int licznik = 0; double dg = -5.12; double gg = 5.12; double krok = 0.01; tablica1[0] = dg; // for (int i = 1; i < tablica1.length; i++) { // // tablica1[i] = (tablica1[i-1] + krok); // System.out.println(tablica1[i] + " "); // } double[] tablica2 = tablica1; // Do obsługi double sigmap = pow(0.03, 2); double s = tablica1.length; // losowanie Random r1 = new Random(); Random r2 = new Random(); int a1 = r1.nextInt(tablica1.length + 1); int a2 = r2.nextInt(tablica1.length + 1); // operacje int i; for (i = 0; i < max; i++) { czas[i] = i; Random z1 = new Random(); Random z2 = new Random(); double p1 = z1.nextFloat(); double p2 = z2.nextFloat(); double e1, e2; e1 = sigmap * p1; e2 = sigmap * p2; if (i == 0) { osobnik1[i + 1] = tablica1[a1]; osobnik2[i + 1] = tablica2[a2]; } if (i >= 1) { osobnik1[i] = osobnik1[i - 1] + e1; osobnik2[i] = osobnik2[i - 1] + e2; } // wartosc funkcji wynik[i] = pow(osobnik1[i], 2) + pow(osobnik2[i], 2); if (i > 1) { if (wynik[i - 1] > wynik[i]) { licznik = licznik + 1; } else { osobnik1[i] = osobnik1[i - 1]; osobnik2[i] = osobnik2[i - 1]; } if (licznik > 0) { int w = i / licznik; if (w < 0.2) sigmap = (1 / 0.82) * sigmap; if (w > 0.2) sigmap = 0.82 * sigmap; } //System.out.println(osobnik2[i]); } } double minimum = wynik[i]; double x = osobnik1[i]; double y = osobnik2[i]; System.out.println(x); System.out.println(y); System.out.println(minimum); XYSeries series = new XYSeries("XYGraph"); int i1; for ( i1 = 0 ; i1 < czas.length; i1++) { series.add(czas[i1],osobnik1[i1]); } XYSeriesCollection dataset = new XYSeriesCollection(); dataset.addSeries(series); // Tworzymy wykres XY JFreeChart chart1 = ChartFactory.createXYLineChart("Wykres wartości X",// Tytuł "Pokolenie", // x-axis Opis "Wartość X", // y-axis Opis dataset, // Dane PlotOrientation.VERTICAL, // Orjentacja wykresu /HORIZONTAL true, // pozkaż legende true, // podpowiedzi tooltips false); // Dodanie wykresu do okna ChartFrame frame1 = new ChartFrame("XYArea Chart", chart1); frame1.setVisible(true); frame1.setSize(1000,500); frame1.setLocation(500,300); XYSeries series2 = new XYSeries("XYGraph"); for ( i1 = 0 ; i1 < czas.length; i1++) { series2.add(czas[i1],wynik[i1]); } XYSeriesCollection dataset2 = new XYSeriesCollection(); dataset2.addSeries(series2); // Tworzymy wykres XY JFreeChart chart2 = ChartFactory.createXYLineChart("Wykres wartości funkcji",// Tytuł "Pokolenie", // x-axis Opis "Wartość Funkcji", // y-axis Opis dataset2, // Dane PlotOrientation.VERTICAL, // Orjentacja wykresu /HORIZONTAL true, // pozkaż legende true, // podpowiedzi tooltips false); // Dodanie wykresu do okna ChartFrame frame2 = new ChartFrame("XYArea Chart", chart2); frame2.setVisible(true); frame2.setSize(1000,500); frame2.setLocation(500,300); XYSeries series3 = new XYSeries("XYGraph"); for ( i1 = 0 ; i1 < czas.length; i1++) { series3.add(czas[i1],osobnik2[i1]); } XYSeriesCollection dataset3 = new XYSeriesCollection(); dataset3.addSeries(series3); // Tworzymy wykres XY JFreeChart chart3 = ChartFactory.createXYLineChart("Wykres wartości Y",// Tytuł "Pokolenie", // x-axis Opis "Wartość Y", // y-axis Opis dataset3, // Dane PlotOrientation.VERTICAL, // Orjentacja wykresu /HORIZONTAL true, // pozkaż legende true, // podpowiedzi tooltips false); // Dodanie wykresu do okna ChartFrame frame3 = new ChartFrame("XYArea Chart", chart3); frame3.setVisible(true); frame3.setSize(1000,500); frame3.setLocation(500,300); return a1; } public static void main(String[] args) { Ewolucyjny algo = new Ewolucyjny(); algo.licz(); } }