Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import javax.swing.JOptionPane;
- import javax.swing.*;
- import java.math.BigDecimal;
- import java.math.RoundingMode;
- public class PerceptronSimple implements ActionListener{
- JButton entrenar=new JButton("ENTRENAR");
- JMenuBar menu=new JMenuBar();
- JMenu compuertasLogicas=new JMenu("ELEGIR COMPUERTA LOGICA");
- JMenuItem and=new JMenuItem("AND");
- JMenuItem or=new JMenuItem("OR");
- JButton probar=new JButton("PROBAR");
- ImageIcon icono=new ImageIcon("perceptronsimple.png");
- JLabel imagen=new JLabel(icono);
- static float funcionActivacion=0.0f;
- static float error=1.0f;
- int iteraciones = 0;
- static float[][] entradas =
- {
- //Entrada 1, Entrada 2, Umbral
- // {x1 , x2 , -1 }
- {1f , 1f , -1f},
- {1f , -1f , -1f},
- {-1f, 1f , -1f},
- {-1 , -1f , -1f}
- };
- // salidasDeseadas para el perceptron
- float[] salidasDeseadas=new float[4];
- int establecioSalidas=0;
- static float[] pesos = {1.2f,-1.2f,-0.4f};
- static float factorAprendizaje=.5f;
- public static void main(String args[]){
- new PerceptronSimple();
- }
- PerceptronSimple(){
- JFrame ventana=new JFrame();
- ventana.setVisible(true);
- ventana.setSize(500,300);
- ventana.setDefaultCloseOperation(ventana.EXIT_ON_CLOSE);
- ventana.setTitle("PERCEPTRON SIMPLE");
- ventana.setResizable(false);
- ventana.setLocationRelativeTo(null);
- JDesktopPane esc=new JDesktopPane();
- //les asignamos una posicion a los componentes
- entrenar.setBounds(140,220,100,20);
- probar.setBounds(260,220,100,20);
- imagen.setBounds(5,10,500,250);
- //ponemos a escuchar por algun evento a los botones y menuitem
- entrenar.addActionListener(this);
- probar.addActionListener(this);
- or.addActionListener(this);
- and.addActionListener(this);
- //agregamos los 2 menuitem al menu
- compuertasLogicas.add(and);
- compuertasLogicas.add(or);
- //agregamos el menu al menubar
- menu.add(compuertasLogicas);
- //agregamos todos los componentes al escritorio
- esc.add(entrenar);
- esc.add(probar);
- esc.add(imagen);
- //indicamos cual es el menu y agreamos el escritorio a la ventana
- ventana.setJMenuBar(menu);
- ventana.add(esc);
- }
- @Override
- public void actionPerformed(ActionEvent e){
- if(e.getSource()==entrenar){
- if(establecioSalidas==0){
- JOptionPane.showMessageDialog(null,"Primero eliga la compuerta logica que debera aprender el perceptron");
- }else{
- System.out.println("Pesos Iniciales");
- //imprimimos los pesos que definimos anteriormente
- for(int i = 0; i < pesos.length; i++){
- System.out.println(pesos[i]);
- }
- System.out.println("");
- int contador = 0;
- /*recorremos las entradas y se le van pasando a la funcionActivacion() esta funcion nos regresa la salida para dichas entradas.
- por ejemplo si elegimos la compuerta OR y se le manda la entradas:
- x1 = 1 , x2 = 0 la salida que nos deberia de regresa la funcionActivacion() es 1 esta salida se le manda
- al metodo error este verifica si hay o no error
- */
- for(int i = 0; i <= entradas[0].length; i++){
- System.out.println("ITERACION "+contador+":");
- float funcionActivacion = funcionActivacion(entradas[i]);
- System.out.println("activacion: "+funcionActivacion);
- float error = error(salidasDeseadas[i]);
- System.out.println("Error: "+error);
- if(error==0f){
- //Entra aqui si no hay error
- System.out.println("--------------------------------------");
- contador++;
- }else{
- //Si hay error, recalcula los pesos
- calculaPesos(entradas[i],salidasDeseadas[i]);
- /*ponemos i=-1 para que empiece a sacar la funcion
- de activacion desde el inicio con los nuevos pesos*/
- i=-1;
- contador = 0;
- }
- }
- JOptionPane.showMessageDialog(null,"LA RED YA ESTA ENTRENADA");
- System.out.println("Pesos Finales");
- for(int i = 0; i < pesos.length; i++){
- System.out.println(pesos[i]);
- }
- }
- // ya una ves que el perceptron este entrenado podemos dar clic en el boton probar y nos ira pidiendo las entradas
- // y nos debera de dar la salida correcta para cada entrada
- }else if(e.getSource()==probar){
- String x1=JOptionPane.showInputDialog(null,"Ingresa la primera entrada");
- String x2=JOptionPane.showInputDialog(null,"Ingresa la segunda entrada");
- float [] entradasPrueba=new float[3];
- entradasPrueba [0]=Float.parseFloat(x1); //entrada neurona 1
- entradasPrueba [1]=Float.parseFloat(x2); //entrada neurona 2
- entradasPrueba [2]=-1f; //entrada para el umbral
- float resultado = probarRed(entradasPrueba);
- JOptionPane.showMessageDialog(null,resultado);
- }
- if(e.getSource()==or){
- // definimos las salidas deseadas para la compuerta logica or
- salidasDeseadas[0]=1f;
- salidasDeseadas[1]=1f;
- salidasDeseadas[2]=1f;
- salidasDeseadas[3]=-1f;
- establecioSalidas=1;
- }
- if(e.getSource()==and){
- // definimos las salidas deseadas para la compuerta logica and
- salidasDeseadas[0]=1f;
- salidasDeseadas[1]=-1f;
- salidasDeseadas[2]=-1f;
- salidasDeseadas[3]=-1f;
- establecioSalidas=1;
- }
- }
- public static float funcionActivacion(float[] entradas){
- funcionActivacion = 0.0f;
- System.out.println("metodo funcionActivacion");
- for(int i = 0; i < entradas.length; i++){
- // se multiplica cada peso por cada entrada y se suma
- funcionActivacion += pesos[i] * entradas[i];
- //redondeamos a 2 decimales el valor de la funcion activacion
- String val = funcionActivacion+"";
- BigDecimal big = new BigDecimal(val);
- big = big.setScale(2, RoundingMode.HALF_UP);
- funcionActivacion=big.floatValue();
- System.out.println("Multiplicacion");
- System.out.println("w"+i+" * "+"x "+i);
- System.out.println(pesos[i] +"*" +entradas[i]);
- }
- System.out.println("y = "+funcionActivacion);
- //se determina el valor de la salida
- if(funcionActivacion >= 0)
- funcionActivacion = 1;
- else if(funcionActivacion < 0)
- funcionActivacion = -1;
- return funcionActivacion;
- }
- //metodo para verificar si hay o no error
- public static float error(float salidaDeseada){
- System.out.println("Salida deseada - salida");
- error = salidaDeseada - funcionActivacion;
- System.out.println(salidaDeseada+" - "+funcionActivacion);
- return error;
- }
- //metodo para el reajuste de pesos
- public void calculaPesos(float[] entradas,float salidas){
- if(error != 0){
- for(int i = 0; i < entradas.length; i++){
- System.out.println(pesos[i]+" + (2 * .5) * "+salidas+" * "+entradas[i]);
- this.pesos[i]=pesos[i]+(2.0f*.5f)*(salidas*entradas[i]);
- String val = this.pesos[i]+"";
- BigDecimal big = new BigDecimal(val);
- big = big.setScale(2, RoundingMode.HALF_UP);
- funcionActivacion=big.floatValue();
- System.out.println("salida");
- System.out.println("AHORA LOS PESOS CAMBIARON A :"+ this.pesos[i]);
- }
- }
- }
- public float probarRed(float [] entradasPrueba){
- float result;
- funcionActivacion = 0.0f;
- System.out.println("----------PROBANDO EL PERCEPTRON ---------");
- for(int i = 0; i <=2 ; i++){
- funcionActivacion += pesos[i] * entradasPrueba[i];
- String val = funcionActivacion+"";
- BigDecimal big = new BigDecimal(val);
- big = big.setScale(2, RoundingMode.HALF_UP);
- funcionActivacion=big.floatValue();
- System.out.println("Multiplicacion");
- System.out.println("w"+i+" * "+"x "+i);
- System.out.println(pesos[i] +"*" +entradasPrueba[i]);
- }
- System.out.println("y = "+funcionActivacion);
- if(funcionActivacion >= 0)
- funcionActivacion = 1;
- else if(funcionActivacion < 0)
- funcionActivacion = -1;
- result=funcionActivacion;
- return result;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement