#!/usr/bin/perl use strict; use warnings; sub sigm { my $x = shift; return (1/(1 + exp(-$x))); } sub dxsigm { my $x = shift; return ($x*(1-$x)); } my $c_IN = 35; my $c_HIDDEN =10; my $c_OUT = 10; my $c_EPSILON = 0.005; my $c_NUMTRAIN = 10; my @actafer; $actafer[0]=[0,1,1,1,1,1,0,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,0,1,1,1,1,1,0]; $actafer[1]=[0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0]; $actafer[2]=[0,1,0,0,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,1,0,0,0,1]; $actafer[3]=[1,0,0,0,0,1,0,1,0,0,0,0,0,1,1,0,0,1,0,0,1,1,1,1,0,1,0,1,1,0,0,0,1,1,0]; $actafer[4]=[0,0,0,1,1,0,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,0,1,0,0]; $actafer[5]=[1,1,1,0,0,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,1,0,0,0,1,1,0,0,1,1,1,0]; $actafer[6]=[0,0,1,1,1,1,0,0,1,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,1,0,0,0,0,1,1,0]; $actafer[7]=[1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,1,1,1,1,0,1,0,0,0,0,1,1,0,0,0,0,0]; $actafer[8]=[0,1,1,0,1,1,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,0,1,1,0]; $actafer[9]=[0,1,1,0,0,0,0,1,0,0,1,0,0,1,1,0,0,1,0,0,1,1,0,0,1,0,1,0,0,1,1,1,1,0,0]; my @desout; $desout[0]=[1,0,0,0,0,0,0,0,0,0]; $desout[1]=[0,1,0,0,0,0,0,0,0,0]; $desout[2]=[0,0,1,0,0,0,0,0,0,0]; $desout[3]=[0,0,0,1,0,0,0,0,0,0]; $desout[4]=[0,0,0,0,1,0,0,0,0,0]; $desout[5]=[0,0,0,0,0,1,0,0,0,0]; $desout[6]=[0,0,0,0,0,0,1,0,0,0]; $desout[7]=[0,0,0,0,0,0,0,1,0,0]; $desout[8]=[0,0,0,0,0,0,0,0,1,0]; $desout[9]=[0,0,0,0,0,0,0,0,0,1]; my (@inhiddw,@hidoutw,@deltaihw,@deltahow,@x,@y,@z,@ehid,@eout,@ecm,@patr,@matrizin); my $delta=0.5; my $alfa=0.1; sub init { my ($i,$j); # srand48(); for($i=0;$i<$c_IN;$i++) { for($j=0;$j<$c_HIDDEN;$j++) { $inhiddw[$i][$j] = -0.5 + rand;#;drand48(); $deltaihw[$i][$j] = 0; } } for($i=0;$i<$c_HIDDEN;$i++) { for($j=0;$j<$c_OUT;$j++) { $hidoutw[$i][$j] = -0.5 + rand;#;drand48(); $deltahow[$i][$j] = 0; } } for($i=0;$i<$c_NUMTRAIN;$i++) { $patr[$i] = 0; } for($i=0;$i<$c_IN;$i++) #here was 35 { $matrizin[$i]=0; } } sub training { my ($i,$l,$num)=(0,0,0); my ($j,$t,$rep,$p); do { do { #/* select a random training pattern: i = (int)(NUMTRAIN*rnd), where 0