#!/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 = ; chomp($ne); print "\n Digite o resultado esperado (Analista,Tecnico,NaoSei).................: "; $re = ; 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; }