HopfieldApp
// A Simple Binary Hopfield Artificial Neural Network
// by Matt Hill, written for fun, to learn Java, ie, no guarantees
// or stylistic endrosements.
// Based on an a-life program by A.F. Slater (http://www.cee.hw.ac.uk/~afs/)
//
import java.applet.*;
import java.awt.*;
import java.lang.*;
class SettleThread extends Thread {
PatternClass pat;
HopMem hop;
final int itermax = 10;
final int thresh = 0;
SettleThread(HopMem Hmem, PatternClass c_p) {
pat = c_p;
hop = Hmem;
//outp.init(c_p);
}
public void run() {
int iter=0;
PatternClass lastpat = new PatternClass();
lastpat.init(pat);
// System.out.println("About to settle");
while ((iter < itermax) && (hop.ham(pat, lastpat) > thresh)) {
lastpat = pat.myclone();
pat = hop.iterate(pat);
iter++;
}
// System.out.println("Done settling");
}
} // End class SettleThread
class HopMem {
boolean settling;
int size;
int weights[][];
SettleThread sthread;
HopfieldApp happ;
public void debug(PatternClass pat) {
int x, y;
System.out.println("Current Pattern: ");
for (x=0;x 0) {
// System.out.println("Hopfield: paint: loc "+loc+" xpos "+xpos+" ypos "+ypos);
g.fillRect(xpos, ypos, current_pattern.blocksize, current_pattern.blocksize);
}
} // End for loc
//g.drawRect(1, 1, xsize - 3, ysize - 3);
g.setColor(Color.black);
g.drawRect(0, 0, xsize, ysize - 1);
}
/**
* Mouse methods
*/
public boolean mouseDown(Event evt, int x, int y) {
Graphics hop_graphics;
// getFocus();
// System.out.println("Mouse Down!");
int click_loc = (int)((x/current_pattern.blocksize) +
((int)(y/current_pattern.blocksize) * (int)(xsize/current_pattern.blocksize)) );
if ((x <= xsize) && (y <=ysize)) {
current_pattern.toggle(click_loc);
hop_graphics = mem.happ.getGraphics();
if (current_pattern.pattern[click_loc] > 0) {
hop_graphics.setColor(Color.red);
hop_graphics.fillRect(x-(x % current_pattern.blocksize), y-(y%current_pattern.blocksize),
current_pattern.blocksize, current_pattern.blocksize );
} else {
hop_graphics.clearRect(x-(x % current_pattern.blocksize), y-(y%current_pattern.blocksize),
current_pattern.blocksize, current_pattern.blocksize);
}
}
return true;
}
/* public void mouseDrag(int x, int y) {
mouseDown(x,y);
} */
public void toggle_settle() {
if (!mem.settling) {
mem.settling=true;
mem.settledown(current_pattern);
mem.settling=false;
} else {
current_pattern = mem.stopsettle();
mem.settling=false;
}
}
public boolean keyDown(Event evt, int key) {
char c=(char)key;
switch (c) {
case 's' : toggle_settle();
break;
case ' ' : current_pattern = mem.iterate(current_pattern);
//repaint();
//System.out.println("mack was 2. is now "+mack);
break;
case 'r' : current_pattern.randomize();
//mem.init(current_pattern);
repaint();
break;
case 'c' : current_pattern.init();
repaint();
break;
case 'n' : mem.init(current_pattern);
break;
case 'i' : mem.impose(current_pattern);
break;
case 'd' : mem.debug(current_pattern);
break;
case 'q' : repaint();
break;
} // End switch (c)
return true;
} // End keyDown
} // End applet HopfieldApp
Links to this Page
- enter. last edited on 29 January 2003 at 10:46 pm by 203.14.169.19
- Hopfield Netz last edited on 22 January 2002 at 5:45 pm by hmb2-t8-2.mcbone.net.