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();
}
}