public class Rastrigin implements Annealable {
    public static java.util.Random random 
	= new java.util.Random();
    public double step = .05;
    public double x;
    public double y;
    public double prevX;
    public double prevY;
	
    public Rastrigin() {
	this(10.0,10.0);
    }

    public Rastrigin(double x, double y) {
	this.x = x;
	this.y = y;
	prevX = x;
	prevY = y;
    }
	
    public void next() {
	prevX = x;
	prevY = y;
	x += step * random.nextGaussian();
	y += step * random.nextGaussian();
    }

    public void reject() {
	x = prevX;
	y = prevY;
    }
	
    public double energy() {
	return x*x + y*y - Math.cos(18*x) - Math.cos(18*y) + 2;
    }

    public Object clone() {
	try {
	    return super.clone();
	}
	catch (CloneNotSupportedException e) {
	    System.out.println(e);
	}
	return null;
    }

    public String toString() {
	return "(" + x + ", " + y + ")";
    }
}



