miƩrcoles, 4 de enero de 2012

algo

http://www.facebook.com/profile.php?id=100002434627815

viernes, 26 de junio de 2009

Hopfield Asociativo


/*********************************************************/
/* HOPFIELD ASOCIATIVO */
/*********************************************************/
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Hopfield extends JFrame implements ActionListener {
public static final int NETWORK_SIZE = 8;
JTextField matrix[][] =
new JTextField[NETWORK_SIZE][NETWORK_SIZE];
JComboBox input[] = new JComboBox[NETWORK_SIZE];
JTextField output[] = new JTextField[NETWORK_SIZE];
JButton btnClear = new JButton("Clear");
JButton btnTrain = new JButton("Train");
JButton btnRun = new JButton("Run");
public Hopfield()
{
setTitle("Hopfield Neural Network");
JPanel connections = new JPanel();
connections.setLayout(
new GridLayout(NETWORK_SIZE,NETWORK_SIZE) );
for ( int row=0;row
for ( int col=0;col
matrix[row][col] = new JTextField(3);
matrix[row][col].setText("0");
connections.add(matrix[row][col]);
}
}
Container content = getContentPane();
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
content.setLayout(gridbag);
c.fill = GridBagConstraints.NONE;
c.weightx = 1.0;
c.gridwidth = GridBagConstraints.REMAINDER; //end row
c.anchor = GridBagConstraints.NORTHWEST;
content.add(
new JLabel(
"Weight Matrix for the Hopfield Neural Network:"),c);
c.anchor = GridBagConstraints.CENTER;
c.gridwidth = GridBagConstraints.REMAINDER; //end row
content.add(connections,c);
c.gridwidth = 1;
c.anchor = GridBagConstraints.NORTHWEST;
c.gridwidth = GridBagConstraints.REMAINDER; //end row
content.add(
new JLabel(
"Click \"Train\" to train the following pattern:"),c);
String options[] = { "0","1"};
JPanel inputPanel = new JPanel();
inputPanel.setLayout(new FlowLayout());
for ( int i=0;i
input[i] = new JComboBox(options);
inputPanel.add(input[i]);
}
c.gridwidth = GridBagConstraints.REMAINDER; //end row
c.anchor = GridBagConstraints.CENTER;
content.add(inputPanel,c);
c.anchor = GridBagConstraints.NORTHWEST;
c.gridwidth = GridBagConstraints.REMAINDER; //end row
content.add(
new JLabel("Click \"Run\" to see output pattern:"),c);
JPanel outputPanel = new JPanel();
outputPanel.setLayout(new FlowLayout());
for ( int i=0;i
output[i] = new JTextField(3);
output[i].setEditable(false);
outputPanel.add(output[i]);
}
c.gridwidth = GridBagConstraints.REMAINDER; //end row
c.anchor = GridBagConstraints.CENTER;
content.add(outputPanel,c);
JPanel buttonPanel = new JPanel();
btnClear = new JButton("Clear");
btnTrain = new JButton("Train");
btnRun = new JButton("Run");
btnClear.addActionListener(this);
btnTrain.addActionListener(this);
btnRun.addActionListener(this);
buttonPanel.setLayout(new FlowLayout());
buttonPanel.add(btnClear);
buttonPanel.add(btnTrain);
buttonPanel.add(btnRun);
content.add(buttonPanel,c);
pack();
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension d = toolkit.getScreenSize();
setLocation(
(int)(d.width-this.getSize().getWidth())/2,
(int)(d.height-this.getSize().getHeight())/2 );
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
setResizable(false);
}
public void actionPerformed(ActionEvent e)
{
if ( e.getSource()==btnRun )
run();
else if ( e.getSource()==btnClear )
clear();
else if ( e.getSource()==btnTrain )
train();
}
protected void run()
{
boolean pattern[] = new boolean[NETWORK_SIZE];
int wt[][] = new int[NETWORK_SIZE][NETWORK_SIZE];
for ( int row=0;row
for ( int col=0;col
wt[row][col]=Integer.parseInt(matrix[row][col].getText());
for ( int row=0;row
int i = input[row].getSelectedIndex();
if ( i==0 )
pattern[row] = false;
else
pattern[row] = true;
}
Layer net = new Layer(wt);
net.activation(pattern);
for ( int row=0;row
if ( net.output[row] )
output[row].setText("1");
else
output[row].setText("0");
if ( net.output[row]==pattern[row] )
output[row].setBackground(java.awt.Color.green);
else
output[row].setBackground(java.awt.Color.red);
}
}
protected void clear()
{
for ( int row=0;row
for ( int col=0;col
matrix[row][col].setText("0");
}
protected void train()
{
int work[][] = new int[NETWORK_SIZE][NETWORK_SIZE];
int bi[] = new int[NETWORK_SIZE];

for ( int x=0;x
if ( input[x].getSelectedIndex()==0 )
bi[x] = -1;
else
bi[x] = 1;
}
for ( int row=0;row
for ( int col=0;col
work[row][col] = bi[row]*bi[col];
}
for ( int x=0;x
work[x][x] =-1;
for ( int row=0;row
for ( int col=0;col
int i = Integer.parseInt(matrix[row][col].getText());
matrix[row][col].setText( "" + (i+work[row][col]));
}
}
static public void main(String args[])
{
JFrame f = new Hopfield();
f.show();
}
}
public class Layer {
protected Neuron neuron[] = new Neuron[8];
protected boolean output[] = new boolean[8];
protected int neurons;
public static final double lambda = 1.0;
Layer(int weights[][])
{
neurons = weights[0].length;
neuron = new Neuron[neurons];
output = new boolean[neurons];
for ( int i=0;i
neuron[i]=new Neuron(weights[i]);
}

public boolean threshold(int k)
{
double kk = k * lambda;
double a = Math.exp( kk );
double b = Math.exp( -kk );
double tanh = (a-b)/(a+b);
return(tanh>=0);
}
void activation(boolean pattern[])
{
int i,j;
for ( i=0;i<8;i++ ) {
neuron[i].activation = neuron[i].act(pattern);
output[i] = threshold(neuron[i].activation);
}
}
}
public class Neuron {
public int weightv[];
public int activation;
public Neuron(int in[])
{
weightv = in;
}

lunes, 1 de junio de 2009

Aprendizaje Competitivo A B C

public class Main {
public static void main(String[] args) {
int[][] mata = new int[10][10];
int[][] matb = new int[10][10];
int[][] matc = new int[10][10];
int i=0,j=0, jc=0;
/* MATRIZ A */
mata[0][0]=0;
mata[0][1]=1;
mata[0][2]=1;
mata[0][3]=1;
mata[0][4]=0;

mata[1][0]=0;
mata[1][1]=1;
mata[1][2]=0;
mata[1][3]=1;
mata[1][4]=0;

mata[2][0]=0;
mata[2][1]=1;
mata[2][2]=1;
mata[2][3]=1;
mata[2][4]=0;

mata[3][0]=0;
mata[3][1]=1;
mata[3][2]=0;
mata[3][3]=1;
mata[3][4]=0;

mata[4][0]=0;
mata[4][1]=1;
mata[4][2]=0;
mata[4][3]=1;
mata[4][4]=0;

/* MATRIZ B */

matb[0][0]=1;
matb[0][1]=1;
matb[0][2]=1;
matb[0][3]=1;
matb[0][4]=0;

matb[1][0]=0;
matb[1][1]=1;
matb[1][2]=0;
matb[1][3]=1;
matb[1][4]=0;

matb[2][0]=0;
matb[2][1]=1;
matb[2][2]=1;
matb[2][3]=1;
matb[2][4]=0;

matb[3][0]=0;
matb[3][1]=1;
matb[3][2]=0;
matb[3][3]=1;
matb[3][4]=0;

matb[4][0]=1;
matb[4][1]=1;
matb[4][2]=1;
matb[4][3]=1;
matb[4][4]=0;

/* MATRIZ C */
matc[0][0]=0;
matc[0][1]=1;
matc[0][2]=1;
matc[0][3]=1;
matc[0][4]=0;

matc[1][0]=0;
matc[1][1]=1;
matc[1][2]=0;
matc[1][3]=0;
matc[1][4]=0;

matc[2][0]=0;
matc[2][1]=1;
matc[2][2]=0;
matc[2][3]=0;
matc[2][4]=0;

matc[3][0]=0;
matc[3][1]=1;
matc[3][2]=0;
matc[3][3]=0;
matc[3][4]=0;

matc[4][0]=0;
matc[4][1]=1;
matc[4][2]=1;
matc[4][3]=1;
matc[4][4]=0;


for(i=0; i<=4 ; i++){
for (j=0; j<=4; j++){
System.out.print("\t"+mata[i][j]);
}
System.out.println("");
}

/* CARGA POR FILAS EN EL VECTOR */
int [] vector = new int[25];
jc=0;
while (jc < 25)
{
for(i=0; i<5 ; i++){
for (j=0; j<5; j++){
vector[jc]= mata[i][j];
jc=jc+1;
}
}
}
System.out.println("");
for(i=0; i<=24 ; i++){
System.out.print("\t"+vector[i]);
}

/* CARGA POR FILAS EN EL VECTOR */
int [] vector1 = new int[5];
int cont=0;
for(i=0; i<5 ; i++){
cont=0;
for (j=0; j<5; j++){
if(mata[i][j]==1)
cont = cont+1;
}
vector1[i]=cont;
}

System.out.println("");
for(i=0; i<5 ; i++){
System.out.print("\t"+vector1[i]);
}
System.out.println("\n\ngracias");
}
}

Abc

public class Main {
public static void main(String[] args) {
int[][] mata = new int[10][10];
int[][] matb = new int[10][10];
int[][] matc = new int[10][10];
int i=0,j=0, jc=0;
/* MATRIZ A */
mata[0][0]=0;
mata[0][1]=1;
mata[0][2]=1;
mata[0][3]=1;
mata[0][4]=0;

mata[1][0]=0;
mata[1][1]=1;
mata[1][2]=0;
mata[1][3]=1;
mata[1][4]=0;

mata[2][0]=0;
mata[2][1]=1;
mata[2][2]=1;
mata[2][3]=1;
mata[2][4]=0;

mata[3][0]=0;
mata[3][1]=1;
mata[3][2]=0;
mata[3][3]=1;
mata[3][4]=0;

mata[4][0]=0;
mata[4][1]=1;
mata[4][2]=0;
mata[4][3]=1;
mata[4][4]=0;

/* MATRIZ B */

matb[0][0]=1;
matb[0][1]=1;
matb[0][2]=1;
matb[0][3]=1;
matb[0][4]=0;

matb[1][0]=0;
matb[1][1]=1;
matb[1][2]=0;
matb[1][3]=1;
matb[1][4]=0;

matb[2][0]=0;
matb[2][1]=1;
matb[2][2]=1;
matb[2][3]=1;
matb[2][4]=0;

matb[3][0]=0;
matb[3][1]=1;
matb[3][2]=0;
matb[3][3]=1;
matb[3][4]=0;

matb[4][0]=1;
matb[4][1]=1;
matb[4][2]=1;
matb[4][3]=1;
matb[4][4]=0;

/* MATRIZ C */
matc[0][0]=0;
matc[0][1]=1;
matc[0][2]=1;
matc[0][3]=1;
matc[0][4]=0;

matc[1][0]=0;
matc[1][1]=1;
matc[1][2]=0;
matc[1][3]=0;
matc[1][4]=0;

matc[2][0]=0;
matc[2][1]=1;
matc[2][2]=0;
matc[2][3]=0;
matc[2][4]=0;

matc[3][0]=0;
matc[3][1]=1;
matc[3][2]=0;
matc[3][3]=0;
matc[3][4]=0;

matc[4][0]=0;
matc[4][1]=1;
matc[4][2]=1;
matc[4][3]=1;
matc[4][4]=0;


for(i=0; i<=4 ; i++){
for (j=0; j<=4; j++){
System.out.print("\t"+mata[i][j]);
}
System.out.println("");
}

/* CARGA POR FILAS EN EL VECTOR */
int [] vector = new int[25];
jc=0;
while (jc < 25)
{
for(i=0; i<5 ; i++){
for (j=0; j<5; j++){
vector[jc]= mata[i][j];
jc=jc+1;
}
}
}
System.out.println("");
for(i=0; i<=24 ; i++){
System.out.print("\t"+vector[i]);
}

/* CARGA POR FILAS EN EL VECTOR */
int [] vector1 = new int[5];
int cont=0;
for(i=0; i<5 ; i++){
cont=0;
for (j=0; j<5; j++){
if(mata[i][j]==1)
cont = cont+1;
}
vector1[i]=cont;
}

System.out.println("");
for(i=0; i<5 ; i++){
System.out.print("\t"+vector1[i]);
}
System.out.println("\n\ngracias");
}
}

Aprendizaje competitivo (abecedario)

package vec;

public class Main {

public static void main(String[] args) {
// TODO code application logic here
int[][] mata = new int[10][10];
int[][] matb = new int[10][10];
int[][] matc = new int[10][10];
int i=0,j=0, jc=0;
/********************/
/* MATRIZ A */
/********************/
mata[0][0]=0;
mata[0][1]=1;
mata[0][2]=1;
mata[0][3]=1;
mata[0][4]=0;

mata[1][0]=0;
mata[1][1]=1;
mata[1][2]=0;
mata[1][3]=1;
mata[1][4]=0;

mata[2][0]=0;
mata[2][1]=1;
mata[2][2]=1;
mata[2][3]=1;
mata[2][4]=0;

mata[3][0]=0;
mata[3][1]=1;
mata[3][2]=0;
mata[3][3]=1;
mata[3][4]=0;

mata[4][0]=0;
mata[4][1]=1;
mata[4][2]=0;
mata[4][3]=1;
mata[4][4]=0;

/********************/
/* MATRIZ B */
/********************/

matb[0][0]=1;
matb[0][1]=1;
matb[0][2]=1;
matb[0][3]=1;
matb[0][4]=0;

matb[1][0]=0;
matb[1][1]=1;
matb[1][2]=0;
matb[1][3]=1;
matb[1][4]=0;

matb[2][0]=0;
matb[2][1]=1;
matb[2][2]=1;
matb[2][3]=1;
matb[2][4]=0;

matb[3][0]=0;
matb[3][1]=1;
matb[3][2]=0;
matb[3][3]=1;
matb[3][4]=0;

matb[4][0]=1;
matb[4][1]=1;
matb[4][2]=1;
matb[4][3]=1;
matb[4][4]=0;

/********************/
/* MATRIZ C */
/********************/
matc[0][0]=0;
matc[0][1]=1;
matc[0][2]=1;
matc[0][3]=1;
matc[0][4]=0;

matc[1][0]=0;
matc[1][1]=1;
matc[1][2]=0;
matc[1][3]=0;
matc[1][4]=0;

matc[2][0]=0;
matc[2][1]=1;
matc[2][2]=0;
matc[2][3]=0;
matc[2][4]=0;

matc[3][0]=0;
matc[3][1]=1;
matc[3][2]=0;
matc[3][3]=0;
matc[3][4]=0;

matc[4][0]=0;
matc[4][1]=1;
matc[4][2]=1;
matc[4][3]=1;
matc[4][4]=0;


for(i=0; i<=4 ; i++){
for (j=0; j<=4; j++){
System.out.print("\t"+mata[i][j]);
}
System.out.println("");
}

/*********************************************/
/* CARGA POR FILAS EN EL VECTOR */
/*********************************************/
int [] vector = new int[25];
jc=0;
while (jc < 25)
{
for(i=0; i<5 ; i++){
for (j=0; j<5; j++){
vector[jc]= mata[i][j];
jc=jc+1;
}
}
}
System.out.println("");
for(i=0; i<=24 ; i++){
System.out.print("\t"+vector[i]);
}

/*********************************************/
/* CARGA POR FILAS EN EL VECTOR */
/*********************************************/
int [] vector1 = new int[5];
int cont=0;
for(i=0; i<5 ; i++){
cont=0;
for (j=0; j<5; j++){
if(mata[i][j]==1)
cont = cont+1;
}
vector1[i]=cont;
}

System.out.println("");
for(i=0; i<5 ; i++){
System.out.print("\t"+vector1[i]);
}
System.out.println("\n\ngracias");
}
}

miƩrcoles, 27 de mayo de 2009

Hopfield Asociativa



import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Hopfield extends JFrame implements ActionListener {
public static final int NETWORK_SIZE = 8;
JTextField matrix[][] =
new JTextField[NETWORK_SIZE][NETWORK_SIZE];
JComboBox input[] = new JComboBox[NETWORK_SIZE];
JTextField output[] = new JTextField[NETWORK_SIZE];
JButton btnClear = new JButton("Clear");
JButton btnTrain = new JButton("Train");
JButton btnRun = new JButton("Run");
public Hopfield()
{
setTitle("Hopfield Neural Network");
JPanel connections = new JPanel();
connections.setLayout(
new GridLayout(NETWORK_SIZE,NETWORK_SIZE) );
for ( int row=0;row
for ( int col=0;col
matrix[row][col] = new JTextField(3);
matrix[row][col].setText("0");
connections.add(matrix[row][col]);
}
}
Container content = getContentPane();
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
content.setLayout(gridbag);
c.fill = GridBagConstraints.NONE;
c.weightx = 1.0;
c.gridwidth = GridBagConstraints.REMAINDER; //end row
c.anchor = GridBagConstraints.NORTHWEST;
content.add(
new JLabel(
"Weight Matrix for the Hopfield Neural Network:"),c);
c.anchor = GridBagConstraints.CENTER;
c.gridwidth = GridBagConstraints.REMAINDER; //end row
content.add(connections,c);
c.gridwidth = 1;
c.anchor = GridBagConstraints.NORTHWEST;
c.gridwidth = GridBagConstraints.REMAINDER; //end row
content.add(
new JLabel(
"Click \"Train\" to train the following pattern:"),c);
String options[] = { "0","1"};
JPanel inputPanel = new JPanel();
inputPanel.setLayout(new FlowLayout());
for ( int i=0;i
input[i] = new JComboBox(options);
inputPanel.add(input[i]);
}
c.gridwidth = GridBagConstraints.REMAINDER; //end row
c.anchor = GridBagConstraints.CENTER;
content.add(inputPanel,c);
c.anchor = GridBagConstraints.NORTHWEST;
c.gridwidth = GridBagConstraints.REMAINDER; //end row
content.add(
new JLabel("Click \"Run\" to see output pattern:"),c);
JPanel outputPanel = new JPanel();
outputPanel.setLayout(new FlowLayout());
for ( int i=0;i
output[i] = new JTextField(3);
output[i].setEditable(false);
outputPanel.add(output[i]);
}
c.gridwidth = GridBagConstraints.REMAINDER; //end row
c.anchor = GridBagConstraints.CENTER;
content.add(outputPanel,c);
JPanel buttonPanel = new JPanel();
btnClear = new JButton("Clear");
btnTrain = new JButton("Train");
btnRun = new JButton("Run");
btnClear.addActionListener(this);
btnTrain.addActionListener(this);
btnRun.addActionListener(this);
buttonPanel.setLayout(new FlowLayout());
buttonPanel.add(btnClear);
buttonPanel.add(btnTrain);
buttonPanel.add(btnRun);
content.add(buttonPanel,c);
pack();
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension d = toolkit.getScreenSize();
setLocation(
(int)(d.width-this.getSize().getWidth())/2,
(int)(d.height-this.getSize().getHeight())/2 );
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
setResizable(false);
}
public void actionPerformed(ActionEvent e)
{
if ( e.getSource()==btnRun )
run();
else if ( e.getSource()==btnClear )
clear();
else if ( e.getSource()==btnTrain )
train();
}
protected void run()
{
boolean pattern[] = new boolean[NETWORK_SIZE];
int wt[][] = new int[NETWORK_SIZE][NETWORK_SIZE];
for ( int row=0;row
for ( int col=0;col
wt[row][col]=Integer.parseInt(matrix[row][col].getText());
for ( int row=0;row
int i = input[row].getSelectedIndex();
if ( i==0 )
pattern[row] = false;
else
pattern[row] = true;
}
Layer net = new Layer(wt);
net.activation(pattern);
for ( int row=0;row
if ( net.output[row] )
output[row].setText("1");
else
output[row].setText("0");
if ( net.output[row]==pattern[row] )
output[row].setBackground(java.awt.Color.green);
else
output[row].setBackground(java.awt.Color.red);
}
}
protected void clear()
{
for ( int row=0;row
for ( int col=0;col
matrix[row][col].setText("0");
}
protected void train()
{
int work[][] = new int[NETWORK_SIZE][NETWORK_SIZE];
int bi[] = new int[NETWORK_SIZE];

for ( int x=0;x
if ( input[x].getSelectedIndex()==0 )
bi[x] = -1;
else
bi[x] = 1;
}
for ( int row=0;row
for ( int col=0;col
work[row][col] = bi[row]*bi[col];
}
for ( int x=0;x
work[x][x] =-1;
for ( int row=0;row
for ( int col=0;col
int i = Integer.parseInt(matrix[row][col].getText());
matrix[row][col].setText( "" + (i+work[row][col]));
}
}
static public void main(String args[])
{
JFrame f = new Hopfield();
f.show();
}
}
public class Layer {
protected Neuron neuron[] = new Neuron[8];
protected boolean output[] = new boolean[8];
protected int neurons;
public static final double lambda = 1.0;
Layer(int weights[][])
{
neurons = weights[0].length;
neuron = new Neuron[neurons];
output = new boolean[neurons];
for ( int i=0;i
neuron[i]=new Neuron(weights[i]);
}

public boolean threshold(int k)
{
double kk = k * lambda;
double a = Math.exp( kk );
double b = Math.exp( -kk );
double tanh = (a-b)/(a+b);
return(tanh>=0);
}
void activation(boolean pattern[])
{
int i,j;
for ( i=0;i<8;i++ ) {
neuron[i].activation = neuron[i].act(pattern);
output[i] = threshold(neuron[i].activation);
}
}
}
public class Neuron {
public int weightv[];
public int activation;
public Neuron(int in[])
{
weightv = in;
}
public int act(boolean x[] )
{
int i;
int a=0;
for ( i=0;i
if ( x[i] )
a+=weightv[i];
return a;
}
}

lunes, 25 de mayo de 2009

Hopfield Asociativa



import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Hopfield extends JFrame implements ActionListener {
public static final int NETWORK_SIZE = 8;
JTextField matrix[][] =
new JTextField[NETWORK_SIZE][NETWORK_SIZE];
JComboBox input[] = new JComboBox[NETWORK_SIZE];
JTextField output[] = new JTextField[NETWORK_SIZE];
JButton btnClear = new JButton("Clear");
JButton btnTrain = new JButton("Train");
JButton btnRun = new JButton("Run");
public Hopfield()
{
setTitle("Hopfield Neural Network");
JPanel connections = new JPanel();
connections.setLayout(
new GridLayout(NETWORK_SIZE,NETWORK_SIZE) );
for ( int row=0;row
for ( int col=0;col
matrix[row][col] = new JTextField(3);
matrix[row][col].setText("0");
connections.add(matrix[row][col]);
}
}
Container content = getContentPane();
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
content.setLayout(gridbag);
c.fill = GridBagConstraints.NONE;
c.weightx = 1.0;
c.gridwidth = GridBagConstraints.REMAINDER; //end row
c.anchor = GridBagConstraints.NORTHWEST;
content.add(
new JLabel(
"Weight Matrix for the Hopfield Neural Network:"),c);
c.anchor = GridBagConstraints.CENTER;
c.gridwidth = GridBagConstraints.REMAINDER; //end row
content.add(connections,c);
c.gridwidth = 1;
c.anchor = GridBagConstraints.NORTHWEST;
c.gridwidth = GridBagConstraints.REMAINDER; //end row
content.add(
new JLabel(
"Click \"Train\" to train the following pattern:"),c);
String options[] = { "0","1"};
JPanel inputPanel = new JPanel();
inputPanel.setLayout(new FlowLayout());
for ( int i=0;i
input[i] = new JComboBox(options);
inputPanel.add(input[i]);
}
c.gridwidth = GridBagConstraints.REMAINDER; //end row
c.anchor = GridBagConstraints.CENTER;
content.add(inputPanel,c);
c.anchor = GridBagConstraints.NORTHWEST;
c.gridwidth = GridBagConstraints.REMAINDER; //end row
content.add(
new JLabel("Click \"Run\" to see output pattern:"),c);
JPanel outputPanel = new JPanel();
outputPanel.setLayout(new FlowLayout());
for ( int i=0;i
output[i] = new JTextField(3);
output[i].setEditable(false);
outputPanel.add(output[i]);
}
c.gridwidth = GridBagConstraints.REMAINDER; //end row
c.anchor = GridBagConstraints.CENTER;
content.add(outputPanel,c);
JPanel buttonPanel = new JPanel();
btnClear = new JButton("Clear");
btnTrain = new JButton("Train");
btnRun = new JButton("Run");
btnClear.addActionListener(this);
btnTrain.addActionListener(this);
btnRun.addActionListener(this);
buttonPanel.setLayout(new FlowLayout());
buttonPanel.add(btnClear);
buttonPanel.add(btnTrain);
buttonPanel.add(btnRun);
content.add(buttonPanel,c);
pack();
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension d = toolkit.getScreenSize();
setLocation(
(int)(d.width-this.getSize().getWidth())/2,
(int)(d.height-this.getSize().getHeight())/2 );
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
setResizable(false);
}
public void actionPerformed(ActionEvent e)
{
if ( e.getSource()==btnRun )
run();
else if ( e.getSource()==btnClear )
clear();
else if ( e.getSource()==btnTrain )
train();
}
protected void run()
{
boolean pattern[] = new boolean[NETWORK_SIZE];
int wt[][] = new int[NETWORK_SIZE][NETWORK_SIZE];
for ( int row=0;row
for ( int col=0;col
wt[row][col]=Integer.parseInt(matrix[row][col].getText());
for ( int row=0;row
int i = input[row].getSelectedIndex();
if ( i==0 )
pattern[row] = false;
else
pattern[row] = true;
}
Layer net = new Layer(wt);
net.activation(pattern);
for ( int row=0;row
if ( net.output[row] )
output[row].setText("1");
else
output[row].setText("0");
if ( net.output[row]==pattern[row] )
output[row].setBackground(java.awt.Color.green);
else
output[row].setBackground(java.awt.Color.red);
}
}
protected void clear()
{
for ( int row=0;row
for ( int col=0;col
matrix[row][col].setText("0");
}
protected void train()
{
int work[][] = new int[NETWORK_SIZE][NETWORK_SIZE];
int bi[] = new int[NETWORK_SIZE];

for ( int x=0;x
if ( input[x].getSelectedIndex()==0 )
bi[x] = -1;
else
bi[x] = 1;
}
for ( int row=0;row
for ( int col=0;col
work[row][col] = bi[row]*bi[col];
}
for ( int x=0;x
work[x][x] =-1;
for ( int row=0;row
for ( int col=0;col
int i = Integer.parseInt(matrix[row][col].getText());
matrix[row][col].setText( "" + (i+work[row][col]));
}
}
static public void main(String args[])
{
JFrame f = new Hopfield();
f.show();
}
}
public class Layer {
protected Neuron neuron[] = new Neuron[8];
protected boolean output[] = new boolean[8];
protected int neurons;
public static final double lambda = 1.0;
Layer(int weights[][])
{
neurons = weights[0].length;
neuron = new Neuron[neurons];
output = new boolean[neurons];
for ( int i=0;i
neuron[i]=new Neuron(weights[i]);
}

public boolean threshold(int k)
{
double kk = k * lambda;
double a = Math.exp( kk );
double b = Math.exp( -kk );
double tanh = (a-b)/(a+b);
return(tanh>=0);
}
void activation(boolean pattern[])
{
int i,j;
for ( i=0;i<8;i++ ) {
neuron[i].activation = neuron[i].act(pattern);
output[i] = threshold(neuron[i].activation);
}
}
}
public class Neuron {
public int weightv[];
public int activation;
public Neuron(int in[])
{
weightv = in;
}
public int act(boolean x[] )
{
int i;
int a=0;
for ( i=0;i
if ( x[i] )
a+=weightv[i];
return a;
}}