- /**
- * Take care of initialization here.
- */
- public void init(GLAutoDrawable gld) {
- GL gl = gld.getGL();
- gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
- gl.glViewport(0, 0, 500, 300);
- gl.glEnable(GL.GL_DEPTH_TEST);
- gl.glClearDepth(1.0);
- gl.glDepthFunc(GL.GL_LEQUAL);
- gl.glMatrixMode(GL.GL_PROJECTION);
- gl.glLoadIdentity();
- gl.glMatrixMode(GL.GL_MODELVIEW);
- display(gld);
- }
-
- public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { }
- public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) { }
- public synchronized void display(GLAutoDrawable drawable) {
- GL gl = drawable.getGL();
- GLU glu = new GLU();
- gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
- gl.glPointSize(5.0f);
- gl.glLoadIdentity();
- glu.gluPerspective(50-tz, ((float)drawable.getWidth())/drawable.getHeight(), 0.5, 10);
- glu.gluLookAt(0, 0, -1, 0, 0, 0, 0, 1, 0);
- gl.glTranslatef(tx/(float)20, ty/(float)20, 0);
- gl.glRotatef(anglex/3, 0, 1, 0);
- gl.glRotatef(angley/3, 1, 0, 0);
-
- gl.glBegin(GL.GL_TRIANGLES);
- draw(gl, true, tile);
- gl.glEnd();
-
- gl.glBegin(GL.GL_TRIANGLES);
- gl.glColor4f((float)0.5, (float)0.5, (float)0.5, (float)0.8);
- //draw(gl, false, goal);
- gl.glEnd();
-
-
- int i = 0;
- //gl.glDisable(GL.GL_DEPTH_TEST);
- gl.glColor4f(1,1,1,1);
- for(Matrix m : translations) {
- //if (v1.z==0 && v1.y==0) continue;
- i++;
- if (i != 1 /*&& i!=4*/) continue;
- Point p = new Point(0, 0, 0).times(m);
- Vec v = new Vec(p.x, p.y, p.z);
- v = v.times((float)1.04);
- gl.glTranslatef(v.x, v.y, v.z);
- draw(gl, false, tile);
- gl.glTranslatef(-v.x, -v.y, -v.z);
- }
- //gl.glEnable(GL.GL_DEPTH_TEST);
- }
+ float hits = 0;
+ float misses = 0;
+ public void anneal() throws Exception {
+ float hightemp = 10;
+ float temp = hightemp;
+ float last = 10;
+ while(true) {
+ synchronized(this) {
+ double ratio = (hits+misses==0) ? 1 : (hits / (hits+misses));
+ hits = 0;
+ misses = 0;
+ float gamma = 0;
+ double acceptance = ratio;
+ accepts = (int)(Math.ceil(ratio*100));
+ temps = (int)(Math.ceil(temp*1000));
+ vertss = tile.size();
+ if (breaks > 0) { while (breaks>0) {
+ breaks--;
+ breakit();
+ //gamma = 1;
+ gamma = 1;
+ //temp = last * 0.8f;
+ //last = temp;
+ //temp = hightemp;
+ } } else
+ if (acceptance > 0.96) gamma = 0.4f;
+ else if (acceptance > 0.9) gamma = 0.5f;
+ else if (acceptance > 0.8) gamma = 0.65f;
+ else if (acceptance > 0.6) gamma = 0.7f;
+ else {
+ if (acceptance > 0.3) {
+ gamma = 0.9f;
+ } else if (acceptance > 0.15) {
+ gamma = 0.95f;
+ } else if (acceptance > 0.10) {
+ gamma = 0.98f;
+ } else {
+ breakit();
+ //gamma = 1;
+ gamma = 0.99f;
+ //gamma = 1;
+ //temp = last * 0.8f;
+ //last = temp;
+ //temp = hightemp;
+ }
+ }
+ temp = temp * gamma;