//iterated hillclimber
//iterasyonlu en dik yamaç tırmanıcı
import java.io.*;
import javax.swing.JOptionPane;


class fa extends f_xj
{
//çözümü istenen fonksiyon	
 double func(double x[])
 {
    double ff= 21.5+x[0]*Math.sin(4.0*Math.PI*x[0])+x[1]*Math.sin(20.0*Math.PI*x[1]);
    return ff; //maksimum testi
}
}


class OPO20
{
    public static void main(String args[]) throws IOException
    {
    int N=30;
	int POPSIZE=40;
    int MAXGENS=400;
    int NVARS=2;
    fa fax=new fa();
    fb fbx=new fb();
    iteratedhillclimber xx=new iteratedhillclimber(POPSIZE,NVARS,N);
    double low[]=new double[NVARS];
    double high[]=new double[NVARS];
    low[0]=-3.0;high[0]=12.1;
    low[1]=4.1;high[1]=5.8;
    double a[]=xx.calculate(low,high,fax,false);
    double x0[]=new double[NVARS];
    for(int i=0;i<NVARS;i++) x0[i]=a[i];
    String s="iterativ tepe tırmanma  sonucu =\n"+Matrix.toStringT(a);
     String s2="istatistiksel iteratif tepe tırmanma çok değişkenli fonksiyon optimizasyonu:";
     JOptionPane.showMessageDialog(null,s,s2,JOptionPane.PLAIN_MESSAGE);     
    }
}
