//kohonen SOM
//taken from
//
//
//
//also based on
//
int state = 0;
SOM net;
Buttons [] button;
PFont font;
void setup(){
size(600,600);
double [] x = {
0.0 };
double [] y = {
0.0 };
net = new SOM(10,x,y);
font = loadFont("Kartika-48.vlw");
textFont(font,24);
button = new Buttons[4];
button[0] = new Buttons(500, 100, 100, 20, #EEEEEE, "train network", null);
button[1] = new Buttons(500, 120, 100, 20, #EEEEEE, "clear vectors", null);
button[2] = new Buttons(500, 140, 100, 20, #EEEEEE, "reset network", null);
button[3] = new Buttons(500, 160, 100, 20, #EEEEEE, "wierd mode", null);
}
void draw(){
background(0);
switch(state){
case 1:
if(!net.stable)
net.run();
break;
}
net.draw();
for(int i = 0; i < button.length; i++)
button[i].draw();
fill(255);
text("Kohonen Self Organising Map",10,20);
text("Click on applet to create target vectors (use more than 2) then train network to map net",10,40);
}
void mousePressed(){
int choice = -1;
for(int i = 0; i < button.length; i++)
if(button[i].over())
choice = i;
switch(choice){
case 0:
if(state == 0){
state = 1;
button[0].label = "stop training";
}
else{
state = 0;
button[0].label = "train network";
}
break;
case 1:
double [] x = {
0.0 };
double [] y = {
0.0 };
net.xv = x;
net.yv = y;
net.vectorChoice = 0;
break;
case 2:
double [] xt = {
0.0 };
double [] yt = {
0.0 };
net = new SOM(9,xt,yt);
break;
case 3:
net.comeToDaddy = !net.comeToDaddy;
break;
default:
if (net.xv[0] == 0.0){
net.xv[0] = (double)(1.0 / width) * mouseX;
net.yv[0] = (double)(1.0 / height) * mouseY;
}
else{
net.addVector((double)(1.0 / width) * mouseX,(double)(1.0 / height) * mouseY);
}
break;
}
}