Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!

Perceptron Simple

By: mcarcini on Aug 14th, 2012  |  syntax: Java  |  size: 8.75 KB  |  views: 112  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1.  
  2.  
  3. package perceptron.simple;
  4.  
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import javax.swing.JOptionPane;
  8. import javax.swing.*;
  9. import java.math.BigDecimal;
  10. import java.math.RoundingMode;
  11.  
  12.  
  13. public class Perceptron implements ActionListener{
  14.      
  15.     JButton entrenar=new JButton("ENTRENAR");
  16.     JMenuBar menu=new JMenuBar();
  17.     JMenu compuertasLogicas=new JMenu("ELEGIR COMPUERTA LOGICA");    
  18.     JMenuItem and=new JMenuItem("AND");
  19.     JMenuItem or=new JMenuItem("OR");
  20.     JButton probar=new JButton("PROBAR");
  21.     ImageIcon icono=new ImageIcon("perceptronsimple.png");
  22.     JLabel imagen=new JLabel(icono);
  23.    
  24.     static float funcionActivacion=0.0f;    
  25.     static float error=1.0f;
  26.     int iteraciones = 0;
  27.     static float[][] entradas =    
  28.         {
  29.             {1f , 1f  , -1f},    
  30.             {1f , -1f , -1f},
  31.             {-1f, 1f  , -1f},
  32.             {-1 , -1f , -1f}      
  33.         };            
  34.      // salidasDeseadas para el perceptron                            
  35.      float[] salidasDeseadas=new float[4];
  36.      int establecioSalidas=0;
  37.      static float[] pesos = {1.2f,-1.2f,-0.4f};
  38.      static float factorAprendizaje=.5f;
  39.        
  40.      public static void main(String args[]){
  41.         new Perceptron();
  42.     }
  43.     Perceptron(){
  44.         JFrame ventana=new JFrame();
  45.         ventana.setVisible(true);
  46.         ventana.setSize(500,300);
  47.         ventana.setDefaultCloseOperation(ventana.EXIT_ON_CLOSE);
  48.         ventana.setTitle("PERCEPTRON SIMPLE");
  49.         ventana.setResizable(false);
  50.         ventana.setLocationRelativeTo(null);
  51.         JDesktopPane esc=new JDesktopPane();
  52.         //les asignamos una posicion a los componentes
  53.         entrenar.setBounds(140,220,100,20);
  54.         probar.setBounds(260,220,100,20);        
  55.         imagen.setBounds(5,10,500,250);
  56.        
  57.         //ponemos a escuchar por algun evento a los botones y menuitem
  58.         entrenar.addActionListener(this);        
  59.         probar.addActionListener(this);
  60.         or.addActionListener(this);
  61.         and.addActionListener(this);
  62.        
  63.         //agregamos los 2 menuitem al menu
  64.         compuertasLogicas.add(and);
  65.         compuertasLogicas.add(or);
  66.         //agregamos el menu al menubar
  67.         menu.add(compuertasLogicas);
  68.         //agregamos todos los componentes al escritorio
  69.         esc.add(entrenar);
  70.         esc.add(probar);      
  71.         esc.add(imagen);
  72.         //indicamos cual es el menu y agreamos el escritorio a la ventana
  73.         ventana.setJMenuBar(menu);
  74.         ventana.add(esc);                    
  75.     }    
  76.      @Override
  77.     public void actionPerformed(ActionEvent e){
  78.         if(e.getSource()==entrenar){            
  79.             if(establecioSalidas==0){
  80.                JOptionPane.showMessageDialog(null,"eliga una compuerta logica");  
  81.             }else{
  82.                System.out.println("Pesos Iniciales");
  83.                for(int i = 0; i < pesos.length; i++){
  84.                  System.out.println(pesos[i]);
  85.                }
  86.                System.out.println("");        
  87.                int contador = 0;        
  88.                for(int i = 0; i <= entradas[0].length; i++){
  89.                  System.out.println("ITERACION "+contador+":");
  90.                  float funcionActivacion = funcionActivacion(entradas[i]);
  91.                  System.out.println("activacion: "+funcionActivacion);
  92.                  float error = error(salidasDeseadas[i]);
  93.                  System.out.println("Error: "+error);
  94.                  if(error==0f){      
  95.                    System.out.println("--------------------------------------");
  96.                    contador++;    
  97.                  }else{
  98.                     //Si hay error, recalcula los pesos
  99.                     calculaPesos(entradas[i],salidasDeseadas[i]);
  100.                     /*ponemos i=-1 para que empiece a sacar la funcion
  101.                     de activacion  desde el inicio  con los nuevos pesos*/
  102.                     i=-1;                      
  103.                     contador = 0;  
  104.                  }
  105.                }
  106.                JOptionPane.showMessageDialog(null,"LA RED YA ESTA ENTRENADA");              
  107.                System.out.println("Pesos Finales");
  108.                for(int i = 0; i < pesos.length; i++){
  109.                  System.out.println(pesos[i]);
  110.                }
  111.        
  112.            }                                      
  113.         }else if(e.getSource()==probar){                                                                      
  114.               String x1=JOptionPane.showInputDialog(null,"Ingresa la primera "
  115.                       + "entrada");
  116.               String x2=JOptionPane.showInputDialog(null,"Ingresa la segunda "
  117.                       + "entrada entrada");
  118.               float [] entradasPrueba=new float[3];
  119.               entradasPrueba [0]=Float.parseFloat(x1); //entrada neurona 1
  120.               entradasPrueba [1]=Float.parseFloat(x2); //entrada neurona 2
  121.               entradasPrueba [2]=-1f;                  //entrada para el umbral
  122.               float resultado = probarRed(entradasPrueba);              
  123.               JOptionPane.showMessageDialog(null,resultado);
  124.           }
  125.         if(e.getSource()==or){
  126.           salidasDeseadas[0]=1f;
  127.           salidasDeseadas[1]=1f;
  128.           salidasDeseadas[2]=1f;
  129.           salidasDeseadas[3]=-1f;          
  130.           establecioSalidas=1;
  131.        }
  132.         if(e.getSource()==and){
  133.           salidasDeseadas[0]=1f;
  134.           salidasDeseadas[1]=-1f;
  135.           salidasDeseadas[2]=-1f;
  136.           salidasDeseadas[3]=-1f;          
  137.           establecioSalidas=1;
  138.         }
  139.     }  
  140.      
  141.      public static float funcionActivacion(float[] entradas){
  142.         funcionActivacion = 0.0f;
  143.         System.out.println("metodo funcionActivacion");
  144.         for(int i = 0; i < entradas.length; i++){
  145.            
  146.             // se multiplica cada peso por cada entrada y se suma
  147.             funcionActivacion += pesos[i] * entradas[i];
  148.            
  149.             //redondeamos a 2 decimales el valor de la funcion activacion
  150.             String val = funcionActivacion+"";
  151.             BigDecimal big = new BigDecimal(val);
  152.             big = big.setScale(2, RoundingMode.HALF_UP);    
  153.             funcionActivacion=big.floatValue();
  154.             System.out.println("Multiplicacion");
  155.             System.out.println("w"+i+" * "+"x "+i);
  156.             System.out.println(pesos[i] +"*" +entradas[i]);
  157.            
  158.         }
  159.         System.out.println("y = "+funcionActivacion);
  160.         //se determina el valor de la salida
  161.         if(funcionActivacion >= 0)
  162.             funcionActivacion = 1;
  163.         else if(funcionActivacion < 0)
  164.             funcionActivacion = -1;
  165.        
  166.         return funcionActivacion;
  167.     }
  168.      //metodo para verificar si hay o no error
  169.         public static float error(float salidaDeseada){
  170.           System.out.println("Salida deseada - salida");
  171.           error = salidaDeseada - funcionActivacion;
  172.           System.out.println(salidaDeseada+" - "+funcionActivacion);
  173.           return error;
  174.         }
  175.       //metodo para el reajuste de pesos
  176.     public void calculaPesos(float[] entradas,float salidas){
  177.      if(error != 0){            
  178.        for(int i = 0; i < entradas.length; i++){                
  179.          System.out.println(pesos[i]+" + (2 * .5) * "+salidas+" * "+entradas[i]);                              
  180.          this.pesos[i]=pesos[i]+(2.0f*.5f)*(salidas*entradas[i]);                  
  181.          String val = this.pesos[i]+"";
  182.          BigDecimal big = new BigDecimal(val);
  183.          big = big.setScale(2, RoundingMode.HALF_UP);    
  184.          funcionActivacion=big.floatValue();                
  185.          System.out.println("salida");
  186.          System.out.println("AHORA LOS PESOS CAMBIARON A :"+ this.pesos[i]);
  187.             }
  188.         }
  189.     }        
  190.       public float probarRed(float [] entradasPrueba){
  191.         float result;        
  192.         funcionActivacion = 0.0f;
  193.         System.out.println("----------PROBANDO EL PERCEPTRON ---------");
  194.         for(int i = 0; i <=2 ; i++){
  195.             funcionActivacion += pesos[i] * entradasPrueba[i];            
  196.             String val = funcionActivacion+"";
  197.             BigDecimal big = new BigDecimal(val);
  198.             big = big.setScale(2, RoundingMode.HALF_UP);    
  199.             funcionActivacion=big.floatValue();
  200.             System.out.println("Multiplicacion");
  201.             System.out.println("w"+i+" * "+"x "+i);
  202.             System.out.println(pesos[i] +"*" +entradasPrueba[i]);
  203.         }
  204.         System.out.println("y = "+funcionActivacion);        
  205.          if(funcionActivacion >= 0)
  206.             funcionActivacion = 1;
  207.         else if(funcionActivacion < 0)
  208.             funcionActivacion = -1;
  209.          
  210.         result=funcionActivacion;        
  211.         return result;
  212.     }
  213.  
  214. }