3.15.4.5@hermano.com.br:~$ ls ./estudos/redes_neurais/Perceptron

..   00-leia.txt   neuronio-artificial.jpg   neuronio.jpg   perceptron.txt  

3.15.4.5@hermano.com.br:~$ cat ./estudos/redes_neurais/Perceptron/perceptron.txt

#!/usr/bin/perl

# Perceptron
# 06/11/2009
# Autor: Hermano Pereira
# www.hermano.com.br

use strict;

my $wb = 0;       # peso de bias
my $w1 = 0;       # peso 1
my $w2 = 0;       # peso 2
my $e1 = " ";     # entrada 1 (binario)
my $e2 = " ";     # entrada 2 (binario)
my $ne = " ";     # nome de entrada
my $re = " ";     # resultado esperado
my $se = " ";     # saida
my $bias = 1;
my $v = 0;        # resultado da soma ponderada
my $t = "";  
my $erro = 0;    

my $vez = 0;
my $iteracao = 0;
my $taxa = 0.05;  # taxa de aprendizagem

&imprimerede ($wb,$w1,$w2,$e1,$e2,$ne,$re,$se,$t);

while (1) {

   $iteracao++;

   print "\n ".$iteracao."a iteracao!\n\n";

   print " Digite o nome da pessoa de entrada (Paulo,Joao,Tiago,Pedro)...........: ";
   $ne = <STDIN>;
   chomp($ne);

   print "\n Digite o resultado esperado (Analista,Tecnico,NaoSei).................: ";
   $re = <STDIN>;
   chomp($re);

   if ($ne =~ /paulo/ig) { $e1 = 0; $e2 = 0; }
   if ($ne =~ /joao/ig) { $e1 = 0; $e2 = 1; }
   if ($ne =~ /tiago/ig) { $e1 = 1; $e2 = 0; }
   if ($ne =~ /pedro/ig) { $e1 = 1; $e2 = 1; }

   if ($re =~ /analista/ig) { $se = 0; }
   if ($re =~ /tecnico/ig) { $se = 1; }

   $t = "";

   &imprimerede ($wb,$w1,$w2,$e1,$e2,$ne,$re,$se,$t);

   print "\nCalculando ...\n";

   $v = $wb * $bias + $w1 * $e1 + $w2 * $e2;

   if ($v > 0) { $t = 1; } else { $t = 0; }

   sleep 1;

   &imprimerede ($wb,$w1,$w2,$e1,$e2,$ne,$re,$se,$t);

   sleep 1;

   if ($re =~ /naosei/ig) { $se = $t; }

   if ($se != $t) {

      $erro = $se - $t;

      $vez++;
      print "\nRecalculando pesos (".$vez."a vez)... \n";

      $wb = $wb + $taxa * $erro * $bias;  
      $w1 = $w1 + $taxa * $erro * $e1;  
      $w2 = $w2 + $taxa * $erro * $e2;  

      sleep 1;

   }

   $e1 = " ";
   $e2 = " ";
   $ne = " ";
   $re = " ";
   $se = " ";
   $t = "";

   &imprimerede ($wb,$w1,$w2,$e1,$e2,$ne,$re,$se,$t);

   sleep 1;

}


sub imprimerede {

   my $wb = $_[0];
   my $w1 = $_[1];
   my $w2 = $_[2];
   my $e1 = $_[3];
   my $e2 = $_[4];
   my $ne = $_[5];
   my $re = $_[6];
   my $se = $_[7];
   my $t = $_[8];
   my $resultado = "";

   if ($t ne "" && $t == 0) { $resultado = "Analista"; }
   if ($t ne "" && $t == 1) { $resultado = "Tecnico"; }
    

   print "\n----------------------------------------------------------\n\n";

   print "   Entrada           : $ne ($e1,$e2)\n";
   print "   Resultado esperado: $re ($se)\n\n";

   print "   (1) -------> (BIAS) ---wb=".&preenche($wb,7,"-")."--\\        \n";
   print "   (".$e1.") -------> (NRE1) ---w1=".&preenche($w1,7,"-")."-- > (NRS1) ---= $t - $resultado \n";
   print "   (".$e2.") -------> (NRE2) ---w2=".&preenche($w2,7,"-")."--/        \n";

   print "\n----------------------------------------------------------\n";

}

sub preenche {

   my $texto = $_[0];
   my $tamanho = $_[1];
   my $caractere = $_[2];
   my $lado = $_[3];

   if ($caractere eq "") {
      $caractere = " ";
   }

   while (length($texto) < $tamanho) {
      if ($lado eq "e") {
         $texto = $caractere.$texto;
      } else {
         $texto .= $caractere;
      }
   }

   return $texto;  

}


3.15.4.5@hermano.com.br:~$ clear_