Vous êtes sur la page 1sur 151

FACULTAD DE INGENIERIAS

Tema:

DISEO Y CONSTRUCCIN DE UNA RED NEURONAL
ARTIFICIAL DE PROPSITO GENERAL

Octubre 2007
Quito-Ecuador
SEDE QUITO CAMPUS SUR
CARRERA DE INGENIERIA DE SISTEMAS

MENCIN ROBTICA E INTELIGENCIA ARTIFICIAL
TESIS PREVIA A LA OBTENCIN DEL TITULO DE INGENIERO DE SISTEMAS
DANY ANAEL LPEZ LOAIZA
DIRECTOR:
ING. NAVAS RUILOVA GUSTAVO
UNIVERSIDAD POLITCNICA SALESIANA
1
DECLARACIN
Yo, Danny Anael Lpez Loaiza, declaro bajo juramento que el trabajo aqu
descrito es de mi autora; que no ha sido previamente presentado para ningn
grado o cali!icacin pro!esional; y, que hemos consultado las re!erencias
bibliogr"!icas que se incluyen en este documento#
A trav$s de la presente declaracin cedemos nuestros derechos de propiedad
intelectual correspondientes a este trabajo, a la %niversidad &olit$cnica 'alesiana,
segn lo establecido por la Ley de &ropiedad (ntelectual, por su reglamento y por
la normatividad institucional vigente#
)))))))))))))))))))))))
Danny Anael Lpez Loaiza
2
CERTIFICACIN
*erti!ico que el presente trabajo !ue desarrollado por Danny Anael Lpez Loaiza,
bajo mi direccin#
_______________________
Ing. Navas Ruilova Gustavo
3
DEDICATORIA
Dedicado a todas aquellas personas que en lugar de ver una nota, un pago o un
premio; vieron la necesidad y gusto de aprender algo, imaginarlo y verlo
!uncionar#
A quien no sigue una carrera esperando encontrar trabajo o buen sueldo#
A quien no aspira emplearse, sino ser !uente de empleo#
A quien no ve el reloj para salir de su trabajo#
A quien comprende que el conocimiento no se puede esconder y sabe
compartirlo#
Y a quien, an estando en desacuerdo, permite al resto hacerlo#
4
AGRADECIMIENTOS
+,presar en pocas lineas de te,to el pro!undo agradecimiento hacia todas las
personas que hacen posible que alguien tenga la oportunidad de escribir esto, me
resulta m"s complicado que la redaccin del trabajo en s#
Y pues, si somos resultado de todas las e,periencias que vivimos, agradecer a
cada una de ellas resultara una tarea de m"s complicada#
As que para hacer un breve resumen puedo agradecer a mis padres por su
cari-o, por todas las oportunidades que me regalan, por hacerme ver el mundo de
otra !orma, por solo mencionar unas pocas razones#
A quien estuvo alado mio durante todo este camino de aprendizaje#
A mis amigos quienes nunca me !altaron y estuvieron siguiendo mi mismo
camino, u otro que aunque pareca lejano, a la larga result la !orma de estar m"s
cerca#
A mis pro!esores, tutores, guas, senseis y dem"s, quienes pudieron ejempli!icar y
mostrar el conocimiento de libros en un idioma m"s entendible para mi#
A mi tutor por su gran paciencia, con!ianza y sinceridad#
+ntre muchas, muchas m"s a quienes no creo que hago justicia en este
agradecimiento; como al viejo pichirilo que entre atentados !sicos y velocidades
nunca vistas, me llevo sano y salvo a mi casa todas las noches durante algunos
a-os#
5
NDICE DE CONTENIDO
Indice :
. DECLARACIN................................................................................................................. 1
. CERTIFICACIN............................................................................................................... 2
. DEDICATORIA...................................................................................................................3
. AGRADECIIENTO!....................................................................................................... 4
. "NDICE DE CONTENIDO .................................................................................................5
. RE!#EN......................................................................................................................... 13
. $RE!ENTACIN.............................................................................................................. 14
1. CA$IT#LO I% Int&o'u((i)n al T*+a '* T*sis................................................................. 15
1.1. Titulo%....................................................................................................................... 15
1.2. $lant*a+i*nto '*l ,&o-l*+a% ................................................................................... 15
1.3. O-.*tivos...................................................................................................................1/
1.3.1. O-.*tivo G*n*&al............................................................................................... 1/
1.3.2. O-.*tivos *s,*(01i(os........................................................................................ 1/
1.4. Al(an(*..................................................................................................................... 12
1.5. I+,o&tan(ia 3 4usti1i(a(i)n.......................................................................................15
1.5.1. I+,o&tan(ia....................................................................................................... 15
1.5.2. 4usti1i(a(i)n...................................................................................................... 15
2. CA$IT#LO II% T*(nolog0a DotNET................................................................................26
2.1. Int&o'u((i)n% ............................................................................................................26
2.2. .NET F&a+*7o&8%..................................................................................................... 21
2.2.1. CLI 9Co++on Languag* In1&ast&u(tu&*:.......................................................... 23
2.2.2. ;CL 9;as* Class Li-&a&3:%................................................................................25
2.2.3. CLR 9Co++on Languag* Runti+*:.................................................................2/
2.2.4. RE!#EN....................................................................................................... 25
2.3. IDE 9Int*g&at*' D*v*lo,+*nt Envi&on+*nt: ,a&a .NET%........................................ 31
2.4. <*&sion*s '*l .NET F&a+*7o&8%.............................................................................. 34
2.4.1. .NET F&a+*7o&8 v1.6% .................................................................................... 34
2.4.2. .NET F&a+*7o&8 v1.1% .................................................................................... 34
2.4.3. .NET F&a+*7o&8 v2.6% .................................................................................... 35
2.4.4. .NET F&a+*7o&8 v3.6% .................................................................................... 35
=
2.5. C> 9!?a&,:@ El l*ngua.* ,&*'il*(to '*l .NET 1&a+*7o&8%........................................ 3=
2.=. T&a-a.an'o (on DotNET.......................................................................................... 32
2.=.1. Int&o'u((i)n%..................................................................................................... 32
2.=.2. oto& G&A1i(o 9GDIB:%..................................................................................... 35
2.=.2.1. Li*nCo 9G&a,?i(s:%.................................................................................... 46
2.=.2.2. LA,i(*s 9$*n:%............................................................................................41
2.=.2.3. ;&o(?as 9;&us?:%....................................................................................... 41
2.=.2.4. Figu&as ;Asi(as%........................................................................................ 42
2.=.2.5. an*.o '* I+Ag*n*s%................................................................................ 44
2.=.3. $unt*&os%........................................................................................................... 4=
2.=.4. Dilos 9T?&*a's:%................................................................................................ 45
2.=.5. C&*a(i)n '* Cont&ol*s '* #sua&io%................................................................... 51
3. CA$IT#LO III% R*'*s N*u&onal*s A&ti1i(ial*s 9RNA:................................................... =6
3.1. Int&o'u((i)n%.............................................................................................................=6
3.2. R*s*Ea Dist)&i(a%...................................................................................................... =1
3.3. N*u&ona ;iol)gi(a%................................................................................................... =3
3.3.1. D*n'&itas........................................................................................................... =3
3.3.2. !ina,sis............................................................................................................. =4
3.3.3. !o+a................................................................................................................. =4
3.3.4. AF)n..................................................................................................................=4
3.4. N*u&ona A&ti1i(ial%....................................................................................................=5
3.5. $*&(*,t&)n%................................................................................................................ ==
3.5.1. A,&*n'iCa.* '*l $*&(*,t&)n% .............................................................................=/
3.5.2. $&o-l*+a '* Os(ila(i)n.................................................................................... =2
3.5.3. $&o-l*+a '* Lin*ali'a' ................................................................................... /6
3.=. $*&(*,t&)n ulti(a,a................................................................................................/=
3.=.1. N*u&ona a&ti1i(ial auFilia& 9;IA!:% .................................................................. /5
3./. Algo&it+o '* a,&*n'iCa.*% ;ACG$RO$AGATION................................................ 21
3./.1. Int&o'u((i)n%..................................................................................................... 21
3./.2. R*su+*n ?ist)&i(o%............................................................................................22
3./.3. Algo&it+o '* A,&*n'iCa.*%............................................................................... 24
3./.3.1. Ca,a '* !ali'a%..........................................................................................2/
3./.3.2. #na Ca,a O(ulta%...................................................................................... 25
3./.3.3. G*n*&aliCa& a N (a,as O(ultas%................................................................. 56
/
4. CA$IT#LO I<% AnAlisis .................................................................................................52
4.1. Int&o'u((i)n.............................................................................................................. 52
4.2. Li+ita(ion*s............................................................................................................. 52
4.3. R*Huisitos................................................................................................................. 53
4.4. R*1*&*n(ias a ot&os ,&o3*(tos................................................................................... 5/
4.5. Diag&a+as '* Casos '* #so..................................................................................... 52
4.5.1. Diag&a+a '* Casos '* #so NI 1%...................................................................... 52
4.5.2. Diag&a+a '* Casos '* #so NI 2%...................................................................... 55
4.5.3. Diag&a+a '* Casos '* #so NI 3%.................................................................... 166
4.5.4. Diag&a+a '* Casos '* #so NI 4%.................................................................... 161
4.5.5. Diag&a+a '* Casos '* #so NI 5%.................................................................... 162
4.5.=. Diag&a+a '* Casos '* #so NI =%.................................................................... 163
5. CA$IT#LO <% Dis*Eo .................................................................................................. 164
5.1. Int&o'u((i)n............................................................................................................ 164
5.2. DI!EJO DEL !OFTKARE 9#L:......................................................................165
5.2.1. Diag&a+as '* Clas*s....................................................................................... 165
5.2.2. Diag&a+as '* !*(u*n(ia................................................................................. 162
5.2.2.1. Diag&a+a '* !*(u*n(ia NI 1% Con1igu&a(i)n '* la RNA........................162
5.2.2.2. Diag&a+a '* !*(u*n(ia NI 2% Ca+-ia& Fun(i)n Custo+...................... 165
5.2.2.3. Diag&a+a '* !*(u*n(ia NI 3% Ent&*na+i*nto '* la RNA..................... 116
5.2.2.4. Diag&a+a '* !*(u*n(ia NI 4% #so '* la RNA ..................................... 111
5.2.2.5. Diag&a+a '* !*(u*n(ia NI 5% #so '*l <iso& '* la RNA..................... 112
=. CA$IT#LO <I% Const&u((i)n....................................................................................... 113
=.1. D*&&a+i*ntas #sa'as% ............................................................................................ 113
=.2. Co+,on*nt* RNA.................................................................................................. 114
=.3. Clas* CA$A............................................................................................................115
=.4. Clas* Ca,aCol*((ion.............................................................................................. 126
=.5. Clas* Evalua'o&!t&ing............................................................................................ 121
=.=. Clas* RNA_<iso&................................................................................................... 122
/. CA$IT#LO <II% E.*+,lo '* A,li(a(i)n 9OCR ;Asi(o:............................................... 124
/.1. Int&o'u((i)n............................................................................................................ 124
/.2. A'Huisi(i)n '* la vo(al.......................................................................................... 125
/.3. R*'LN*u&onal A&ti1i(ial.......................................................................................... 12/
/.4. Con(lusion*s '*l OCR............................................................................................125
2
2. CA$IT#LO <III% Con(lusion*s 3 R*(o+*n'a(ion*s....................................................136
2.1. Con(lusion*s...........................................................................................................136
2.2. R*(o+*n'a(ion*s................................................................................................... 133
5. ;I;LIOGRAF"A ...........................................................................................................135
16. ANEMO% anual '* #sua&io.................................................................................... 13=
16.1. Int&o'u((i)n% ........................................................................................................13=
16.2. Ag&*ga& los (ont&ol*s '* IA_RNA....................................................................... 13/
16.3. Con1igu&a& la RNA............................................................................................... 135
16.4. Con1igu&a& *l <iso&............................................................................................... 143
16.4.1. Ca,as.............................................................................................................143
16.4.2. $*sos............................................................................................................. 143
16.4.3. Ta+aEos........................................................................................................ 144
16.5. Ent&*na+i*nto.......................................................................................................145
16.=. Consulta................................................................................................................ 145
5
Dibujos
. Di-u.o 1% .NET F&a+*Ko&8 L ORIGEN% $&o,ia '*l auto&.................................................21
. Di-u.o 2% Est&u(tu&a '*l F&a+*Ko&8 L ORIGEN% $&o,ia '*l auto&................................... 36
. Di-u.o 3% IDE <isual !tu'io.NET L ORIGEN% i(&oso1t <isual !tu'io .NET 2665...... 32
. Di-u.o 4% IDE !?a&,D*v*lo, L ORIGEN% !?a&,D*v*lo, v2.6..........................................33
. Di-u.o 5% Da-ilita& C)'igo No !*gu&o L ORIGEN% <isual !tu'io.NET 2665.................. 4/
. Di-u.o =% Flu.o '* Dilos L ORIGEN% $&o,ia '*l auto&.......................................................56
. Di-u.o /% Nu*vo $&o3*(to Class Li-&a&3 L ORIGEN% <isual !tu'io.NET 2665............... 52
. Di-u.o 2% Nu*vos (o+,on*nt*s o (ont&ol*s L ORIGEN% <isual !tu'io.NET 2665...........53
. Di-u.o 5% $&o,i*'a'*s *n *l ()'igo L ORIGEN% $&o,ia '*l auto&......................................52
. Di-u.o 16% N*u&ona ;iol)gi(a L ORIGEN% $&o,ia '*l auto&............................................. =3
. Di-u.o 11% N*u&ona A&ti1i(ial L ORIGEN% $&o,ia '*l auto&.............................................. =5
. Di-u.o 12% $&o-l*+a '* Os(ila(i)n L ORIGEN% $&o,ia '*l auto&..................................... =2
. Di-u.o 13% !olu(i)n Lin*ali'a' L ORIGEN% $&o,ia '*l auto&........................................... =5
. Di-u.o 14% Co+,u*&ta AND L ORIGEN% $&o,ia '*l auto&................................................ /1
. Di-u.o 15% !olu(i)n C. AND L ORIGEN% $&o,ia '*l auto&............................................... /2
. Di-u.o 1=% $&o-l*+a Lin*al L ORIGEN% $&o,ia '*l auto&................................................. /3
. Di-u.o 1/% Co+,u*&ta MOR L ORIGEN% $&o,ia '*l auto&................................................ /4
. Di-u.o 12% $&o-l*+a No Lin*al L ORIGEN% $&o,ia '*l auto&........................................... /5
. Di-u.o 15% Int*&(on*Fi)n '* (a,as L ORIGEN% $&o,ia '*l auto&......................................./=
. Di-u.o 26% Est&u(tu&a '* una RNA L ORIGEN% $&o,ia '*l auto&...................................... //
. Di-u.o 21% !olu(i)n '* la C. MOR L ORIGEN% $&o,ia '*l auto&....................................../2
. Di-u.o 22% N*u&ona ;IA! L ORIGEN% $&o,ia '*l auto&.................................................../5
. Di-u.o 23% $&o,aga(i)n '* *&&o&*s ?a(ia at&As L ORIGEN% $&o,ia '*l Auto&....................21
. Di-u.o 24% Davi' E. Ru+*l?a&t L ORIGEN%
?tt,%NN777.g&a7*+*3*&.(o+N,s3(?olog3N,&*viousN62.?t+................................................ 23
. Di-u.o 25% 4a+*s L (Cl*llan' L ORIGEN%
?tt,%NN777.g&a7*+*3*&.(o+N,s3(?olog3N,&*viousN62.?t+................................................ 23
. Di-u.o 2=% Caso '* uso NI 1 L ORIGEN% $&o,ia '*l Auto&.............................................. 52
. Di-u.o 2/% Caso '* uso NI 2 L ORIGEN% $&o,ia '*l Auto&.............................................. 55
. Di-u.o 22% Caso '* uso NI 3 L ORIGEN% $&o,ia '*l Auto&............................................ 166
. Di-u.o 25% Caso '* uso NI 4 L ORIGEN% $&o,ia '*l Auto&............................................ 161
16
. Di-u.o 36% Caso '* uso NI 5 L ORIGEN% $&o,ia '*l Auto&............................................ 162
. Di-u.o 31% Caso '* uso NI = L ORIGEN% $&o,ia '*l Auto&............................................ 163
. Di-u.o 32% Diag&a+a '* Clas*s L ORIGEN% $&o,ia '*l Auto&.........................................165
. Di-u.o 33% L*3*n'a '* Diag&a+as '* Clas*s L ORIGEN% $&o,ia '*l Auto&................... 165
. Di-u.o 34% Diag&a+a '* Clas*s 9D*tall* 1: L ORIGEN% $&o,ia '*l Auto&...................... 16=
. Di-u.o 35% Diag&a+a '* Clas*s 9D*tall* 2: L ORIGEN% $&o,ia '*l Auto&...................... 16/
. Di-u.o 3=% Con1igu&a(i)n '* la RNA L ORIGEN% $&o,ia '*l Auto&.............................. 162
. Di-u.o 3/% Ca+-ia& Fun(i)n Custo+ L ORIGEN% $&o,ia '*l Auto&.............................. 165
. Di-u.o 32% Ent&*na+i*nto '* la RNA L ORIGEN% $&o,ia '*l Auto&.............................. 116
. Di-u.o 35% #so '* la RNA L ORIGEN% $&o,ia '*l Auto&............................................... 111
. Di-u.o 46% #so '*l <iso& '* la RNA L ORIGEN% $&o,ia '*l Auto&............................... 112
. Di-u.o 41% Clas* RNA L ORIGEN% !?a&,D*v*lo, 2.2.................................................... 11=
. Di-u.o 42% $&o,i*'a'*s '*l RNA L ORIGEN% A3u'a G*n*&a'a (on Do(u+*ntOM 5.6...11/
. Di-u.o 43% Pto'o Evalua& L ORIGEN% !?a&,D*v*lo, 2.2............................................ 112
. Di-u.o 44% A3u'a% Pto'o Evalua& L ORIGEN% A3u'a G*n*&a'a (on Do(u+*ntOM 5.6
............................................................................................................................................ 112
. Di-u.o 45% Clas* CA$A L ORIGEN% !?a&,D*v*lo, 2.2..................................................115
. Di-u.o 4=% Clas* Ca,aColl*(tion L ORIGEN% !?a&,D*v*lo, 2.2....................................126
. Di-u.o 4/% Clas* Evalua'o&!t&ing L ORIGEN% !?a&,D*v*lo, 2.2.................................. 121
. Di-u.o 42% Clas* RNA_<iso& L ORIGEN% !?a&,D*v*lo, 2.2......................................... 122
. Di-u.o 45% A'Huisi(i)n '* la vo(al L ORIGEN% $&o,ia '*l auto&....................................125
. Di-u.o 56% ,a&a+*t&iCa(i)n '* la vo(al L ORIGEN% $&o,ia '*l auto&..............................12=
. Di-u.o 51% ;a&&a '* D*&&a+i*ntas L ORIGEN% $&o,ia '*l Auto&@ *Ft&a0'o '* !. <isual
!tu'io 2665........................................................................................................................ 13/
. Di-u.o 52% <*ntana '* s*l*((i)n '* (o+,on*nt*s L ORIGEN% $&o,ia '*l Auto&@ *Ft&a0'o
'* !. <isual !tu'io 2665................................................................................................ 132
. Di-u.o 53% I(onos '* los (o+,on*nt*s L ORIGEN% $&o,ia '*l Auto&@ *Ft&a0'o '* !.
<isual !tu'io 2665............................................................................................................. 132
. Di-u.o 54% $&o,i*'a'*s '*l (o+,on*nt* RNA L ORIGEN% $&o,ia '*l Auto&@ *Ft&a0'o '*
!. <isual !tu'io 2665..................................................................................................... 135
. Di-u.o 55% $&o,i*'a' O(ultas L ORIGEN% $&o,ia '*l Auto&@ *Ft&a0'o '* !. <isual
!tu'io 2665........................................................................................................................ 146
. Di-u.o 5=% FT Es(al)n L ORIGEN% $&o,ia '*l Auto&.................................................... 141
. Di-u.o 5/% FT Lin*al L ORIGEN% $&o,ia '*l Auto&.......................................................141
11
. Di-u.o 52% FT !ig+oi'* loga&0t+i(a L ORIGEN% $&o,ia '*l Auto&.............................. 141
. Di-u.o 55% FT !ig+oi'* Tang*n(ial L ORIGEN% $&o,ia '*l Auto&...............................142
. Di-u.o =6% FT Gauss L ORIGEN% $&o,ia '*l Auto&....................................................... 142
. Di-u.o =1% Con1igu&a& *l RNA_<iso& L ORIGEN% $&o,ia '*l Auto&.............................144
. Di-u.o =2% Ca+-ia& valo&*s '* *nt&a'a '*s'* *l viso& L ORIGEN% $&o,ia '*l auto&....... 156
. Di-u.o =3% *nQ (ont*Ftual '*l viso& L ORIGEN% $&o,ia '*l auto&................................151
12
Cdigos
C)'igo 1% E.*+,lo '* ()'igo *s(&ito *n C> L ORIGEN% $&o,ia '*l Auto&..........................3/
C)'igo 2% E.*+,lo '*l uso '* ,unt*&os L ORIGEN% $&o,ia '*l Auto&................................ 42
C)'igo 3% Ass*+-l3In1o L ORIGEN% $&o,ia '*l auto&........................................................ 53
C)'igo 4% C&*a& una $&o,i*'a' L ORIGEN% $&o,ia '*l auto&.............................................. 54
C)'igo 5% Pto'o $AINT L ORIGEN% $&o,ia '*l auto&......................................................54
C)'igo =% Cont&ol s*n(illo L ORIGEN% $&o,ia '*l auto&..................................................... 55
C)'igo /% C&*a& un Ev*nto L ORIGEN% $&o,ia '*l auto&....................................................5=
C)'igo 2% Co+*nta&ios ML L ORIGEN% $&o,ia '*l auto&................................................5/
C)'igo 5% A&gu+*ntos 'o(u+*nta'os L ORIGEN% $&o,ia '*l auto&................................... 52
C)'igo 16% E.*+ '* *nt&*na+i*nto L ORIGEN% $&o,ia '*l auto&...................................... 14=
C)'igo 11% E.*+ '*l *v*nto it*&a(i)n L ORIGEN% $&o,ia '*l auto&.................................. 14/
C)'igo 12% D*t*n*& *l *nt&*na+i*nto L ORIGEN% $&o,ia '*l auto&...................................14/
C)'igo 13% E.*+,lo '* uso (on ;DD L ORIGEN% $&o,ia '*l auto&.................................. 142
C)'igo 14% E.*+,lo '*l uso '* 1i(?*&o L ORIGEN% $&o,ia '*l auto&................................ 142
C)'igo 15% E.*+ '* (onsulta L ORIGEN% $&o,ia '*l auto&............................................... 145
13
RESUMEN
+l presente trabajo muestra el dise-o y construccin de un control escrito en *.,
que encapsula todas las !uncionalidades de una red neuronal multi/perceptrn
con el algoritmo de aprendizaje 0ac1&ropagation o propagacin para atr"s# +l
mismo que podr" ser usado para crear aplicaciones usando este tipo de redes en
cualquier lenguaje de programacin soportado por la tecnologa Dot2+3 de la
versin 4#5 del 6rame7or1 de 8icroso!t# &ara lograrlo, los controles est"n
encapsulados en un DLL que permite la compatibilidad entre lenguajes#
+l componente que encapsula todas las !uncionalidades de una red neuronal
arti!icial se llamar" RNA por sus siglas# &ero adicionalmente se crear" un control
gr"!ico llamado RNA_Visor que ser" una representacin e inter!az gr"!ica de una
92A, dando as una completa herramienta para el estudio y aplicacin de las
redes neuronales#
: : :
14
PRESENTACIN
Dada la realidad econmica y tecnolgica de nuestro medio, estoy convencido
que el uso de programas comerciales especializados en materias de inteligencia
arti!icial no es una buena solucin, por su alto precio, para la elaboracin de
sistemas inteligentes que el medio necesita#
&or esta razn, creo que el uso de so!t;are abierto o libre es la mejor alternativa a
la hora de desarrollar una aplicacin# +n cuanto a sistemas inteligentes, a la hora
de desarrollar el presente trabajo, no e,isten proyectos de so!t;are abierto para
inteligencia arti!icial# De modo que el dise-o y construccin de nuestras propias
herramientas se convierte en un eje indispensable; y as es que el presente
trabajo muestra, no solo como programar una herramienta inteligente que en este
caso es una red neuronal, sino que muestra como crear una herramienta, un
control para ser usado en cualquier aplicacin y en!oc"ndola al programador y no
a un usuario !inal#
: : :
15
1 CAPITULO I: Introduccin al Tema de Tesis
1.1 Titulo:
Dise-o y *onstruccin de una 9ed 2euronal Arti!icial <92A= de
propsito general
1.2 Planteamiento del problema:
*omprendiendo la inmensa necesidad de !omentar la peque-a y mediana
empresa de nuestro pas, casi todas las universidades en la actualidad educan
a sus alumnos para competir y desarrollar sus propios bienes y servicios#
Lamentablemente uno de los principales obst"culos que e,iste es el di!cil
acceso a las herramientas de desarrollo que se aprecia m"s en las
especialidades o "reas vinculadas a la tecnologa como es el caso de la
robtica e inteligencia arti!icial#
+n el caso espec!ico de 9edes 2euronales Arti!iciales <92A= como
herramienta de desarrollo de procesos inteligentes, resulta casi imposible por
los altos costos# &or ejemplo, una herramienta de programacin que permita el
uso de las 92A es el paquete Lab>ie; v?#45 de la 2acional (nstrument que se
puede adquirir por un precio de @4,ABC %'D
D
,otro es el paquete de
programacin matem"tico 8A3LA0 de 8ath7or1s que sumado el tool1it de
92A llegan a un precio de @A,CC5 %'D
4
,y por ltimo el paquete de
programacin 2+%9E(ntelligence alcanza un precio de @A,BBB %'D
A
#
D Precio consultado en agosto del 2006 en: http://www.ni.com/labview/esa/
2 Precio consultado en agosto del 2006 en: http://www.mathworks.com/store/priceListLink.do
3 Precio consultado en agosto del 2006 en: ?tt,%NN777.al3u'a.(o+
1=
Dada esta realidad social y econmica que hace pr"cticamente imposible que
una peque-a empresa !inancie una herramienta de programacin de tal
elevados costos, nos encontramos hoy en da con ingenieros que han pasado
a !ormar parte de otros sectores como operarios, realizando !unciones
impropias a las de un ingeniero, que son la investigacin y desarrollo de
soluciones; convergiendo en uno de los tantos problemas que nos sitan como
un pas consumista y tercermundista#
1/
1.3 Objetios
1.3.1 Objetio !eneral.
Dise-ar y construir una red neuronal arti!icial de propsito general que pueda ser
usada en cualquier lenguaje de programacin que soporte la tecnologa Dot2+3
v4# <8icroso!t 6rame7or1 4#5=
1.3.2 Objetios espec"#icos.
Desarrollar el so!t;are en su totalidad en el lenguaje de programacin *.
v4#
+mpaquetar el programa en un componente o control #2+3 <archivo DLL=
para !acilitar su uso y portabilidad#
*onstruir una inter!az gr"!ica que muestre la 92A programada y su
!uncionamiento#
%sar estructuras F8L <Data'ets= para el almacenamiento de los datos
brind"ndole as la posibilidad de interactuar con cualquier base de datos#
%sar punteros para el c"lculo de pesos y as mejorar la velocidad de
procesamiento#
%sar programacin en hilos para no atascar el !lujo de todo el programa en
los procesos largos de la 92A#
12
1.$ Alcance
+l so!t;are de 92A a desarrollar estar" basado en la versin 4 del 6rame;or1 de
8icroso!t y solo alcanza una compatibilidad directa con los programas y entornos
de programacin que soporten este !rame;or1, tal es el caso de >isual 0asic en
su versin ?, *. 4, *GG para #2+34, >0A para Autocad 455H, etc#
+l uso de lenguajes de programacin que permitan una compatibilidad indirecta
con esta tecnologa como es el caso de Delphi ?#2+3, >isual 0asic H I H#D, *.D,
Linu, con su proyecto Jo/8E2E, Lab>ie;, >isual 0asic K y otros, 2E est"n en el
alcance investigativo de esta tesis aunque en teora !uncionaran sin problema#
La 92A a programarse nicamente soportar" el algoritmo de aprendizaje
denominado L0ac1&ropagationM#
As mismo el so!t;are esta sujeto a las limitaciones y alcance que posee la
plata!orma 6rame7or1 4#
15
1.% Importancia & 'usti#icacin.
1.%.1 Importancia.
La herramienta de programacin que o!rece el presente trabajo permitir" a
muchos desarrolladores poner en pr"ctica sus conocimientos de 92A de una
!orma !"cil, r"pida y a un costo e,tremadamente bajo en relacin a sus similares,
al distribuirse el control como Fr!"r
#
# 0rindando as una gran ayuda a la
!ormacin y crecimiento de la peque-a y mediana empresa que se dedique al
desarrollo de procesos inteligentes#
Adem"s se pretende !omentar el desarrollo a bajos costos de herramientas que
permitan el desarrollo en conjunto del "rea de robtica e inteligencia arti!icial que
tiene poca o ninguna acogida en nuestro pas#
1.%.2 'usti#icacin.
+l presente trabajo naci de una necesidad real en el desarrollo y aplicacin de
procesos inteligentes en una peque-a empresa de Nuito, as como tambi$n en
distintos proyectos o trabajos de tesis presentados contempor"neamente a este#
&or otro lado, dar" una alternativa al o!recer una herramienta que permita estudiar
las 92A de una !orma pr"ctica y no solo terica#
+l uso de la tecnologa #2+3 se eligi por su gran avance y acogida, siendo la
plata!orma usada por m"s de 45 lenguajes hoy en da <>isual 0asic, Ada, *obol,
&erl, *GG, Oava, etc= , siendo *. su lenguaje por e,celencia#
Adem"s la e,tensa documentacin que lo sustenta lo hace la mejor opcin para
un trabajo de esta naturaleza# Y por ltimo, la visin a corto plazo que plantea
esta tecnologa lo hace compatible con diversas plata!ormas como Linu,,
8acintosh, 'olaris, etc#
4 !o1t7a&* '* 'ist&i-u(i)n g&atuita 3 sin l0+it* '* ti*+,o. ?tt,%NN*s.7i8i,*'ia.o&gN7i8iNF&**7a&*
26
2 CAPITULO II: Tecnolo("a )ot*+T
2.1 Introduccin:
La creciente demanda de los programadores para desarrollar aplicaciones
multimedia y 7eb obligaba a plata!ormas como 7indo;s a desarrollar sobre la
marcha A&(s <Application &rogramming (nter!ace= cada vez m"s elaborados y
complejos que carecan de documentacin detallada y en muchos casos caan en
incompatibilidades y errores#
La solucin empez a dialogarse en las mesas de los ejecutivos de
8icroso!t a !inales de los B5Ps, y as en Oulio del 4555, su presidente, 0ill Jates
anunciaba al mundo en la Profesional Developer Conference <PDC$
%
de Erlando
una vista preliminar de lo que sera una nueva plata!orma de desarrollo que
uni!icara todos los "mbitos del so!t;are, desde aplicaciones de escritorio
pasando por entornos 7eb, Dispositivos mviles, 0ases de Datos, entre otros#
*omo era de esperarse, 8icroso!t copio la idea que tan bien le estaba
!uncionando a la empresa 'un 8icrosystems con su lenguaje OA>A, y decidi
usar un compilador O(3 as como un lenguaje hibridado entre *GG y 0asic < *. =
K
#
&ero no se con!ormaron solo con eso, pensaron en ir m"s all" y establecer
un est"ndar a nivel internacional y lograr que cualquier lenguaje de programacin
pueda ser usado con su tecnologa, y que esta cubriera todos los "mbitos de
programacin e,istentesQ &EE, Jr"!icos, 8ultimedia, 0DD, 7eb, Dispositivos
mviles, Ouegos, etc#
5 ?tt,%NN777.+i(&oso1t.(o+N$&*ss,assN,&*ssN2666N.ul66N,'(gat*s8*3not*,&.+s,F
= Con(lusion ,&o,ia '*l auto&
21
2.2 .*+T ,rame-or.:
+l !rame;or1, traducido al espa-ol como Lmarco de trabajoM aunque se
recomienda mantener la palabra en ingl$s por su concepto dedicado, es el
corazn de la tecnologa Dot2+3 y aunque !ue impulsada por 8icroso!t, en su
desarrollo intervinieron empresas comoQ Re;lett/&ac1ard , (ntel, (08, 6ujitsu
'o!t;are, &lum Rall, la %niversidad de 8onash e ('+
Jeneralizando un poco, se puede decir que el .NET Framework es a la
tecnologa 2+3 como el Java Virtual Machine, JRE y J2SE es al Oava# +s decir,
el !rame;or1 constituye el vnculo entre el sistema operativo y el programa
generado bajo la tecnologa Dot2+3, dando as una transparencia al cdigo al
resolver el problema de incompatibilidad que se daba al tener que tomar en
cuenta el sistema operativo base, su versin, e incluso su con!iguracin al
programar#
%n dato muy importante que cabe recalcar es que muchos de los elementos
de la tecnologa Dot2+3 !ueron estandarizados bajo normativas internacionales, y
por lo tanto abiertas a todo el mundo# La normativa que rige al #2+3 !rame;or1 es
Dibujo 1: .!" #rame$ork % &'()!: Propia del autor
22
la ECMA&''%( ISO)IEC *'*+,
+
# 0asado en esto la versin de 8icroso!t toma el
nombre deQ Microsoft .NET Framework y no es el nico e,istente, hoy en da
e,isten varios aunque el de 8icroso!t constituye el m"s usado y !amoso; no
obstante la empresa -i.i"/ y m"s tarde No011, ambas encargadas de dar vida a
los programas de cdigo libre entre ellos Linu,, empez con la tarea de crear un
#2+3 !rame;or1 para todas los sistemas operativos, y al proyecto lo llamaronQ
MONO
2
, el cual ya esta disponible de !orma gratuita en su p"gina ;eb y ha tenido
mucha acogida por programadores de 7indo;s, Linu,, 'olaris y 8ac E' F#
+l #2+3 6rame;or1 se divide en las siguientes partesQ
(n!raestructura comn de lenguajes o *L(
La 0iblioteca de *lases 0ase o 0*L
+ntorno *omn de +jecucin para Lenguajes o *L9
/ ?tt,%NN777.+i(&oso1t.(o+N$&*ss,assN,&*ssN2666N.ul66N,'(gat*s8*3not*,&.+s,F
2?tt,%NN777.+onoL,&o.*(t.(o+
23
2.2.1 CLI 3Co..o/ L"/gu"g I/4r"s5ru65ur$
+l propsito del *L( es soportar una gran gama de lenguajes de
programacin y traducirlos a un lenguaje comn propio del !rame;or1 conocido
como MSIL <8icroso!t (ntermediate Lenguaje= que ser" usado luego por el
compilador O(3#
As, el *L( se encarga de brindar una in!raestructura que debe cumplir
todos los lenguajes que quieran !uncionar bajo la tecnologa #2+3, adem"s se
encarga de la validacin del mismo y de su respectiva compilacin para alcanzar
el cdigo 8'(L que ser" un lenguaje parecido al ensamblador y resultado !inal del
programa# +s decir un programa realizado en #2+3 nunca alcanza el lenguaje de
m"quina del computador por si solos, sino que queda e,presado en este lenguaje
8'(L que cumple la misma !uncionalidad que el lenguaje llamado 0Y3+*ED+ en
Oava#
&uesto de esta manera, es posible usar cualquier lenguaje de
programacin que cumpla las especi!icaciones del *L( para poder usar la
tecnologa #2+3, y es por esto que hoy en da tenemos varios lenguajes a nuestra
disposicin# Los o!recidos por 8icroso!t sonQ C7( C88( Visu"1 9"si6 : ;7( no
obstante muchas empresas han brindado a sus propios lenguajes de
programacin la compatibilidad con el *L( del #2+3 !rame;or1 de 8icroso!t, y es
as que hoy en da se puede encontrar lenguajes como< D1=>i?NET( Pr1(
P:5>o/( For5r"/ : Cobo1?NET entre otros# Rasta la !echa se han sumado m"s de
30 lenguaes de programaci!n
"
que pueden ser usados en la tecnologa #2+3#
+l *L( posee internamente un compilador para cada uno de los lenguajes a
usarse, y es as que realizar un programa en >isual 0asic no va a ser igual que
realizarlo en un *., las di!erencias de velocidad, alcance, entre otras va a seguir
dando las mismas di!erencias que siempre# %n lenguaje e,terno como los
5?tt,%NN777.'otn*t,o7*&*'.(o+Nlanguag*s.as,F
24
mencionados antes <Delphi, *obol, 6ortran, etc= deben de poseer un compilador
e,terno, y claramente ser compatible con el *L( y m"s espec!icamente con el
*L' <*ommon Language 'peci!ication= que es la parte del *L( donde se
encuentran las reglas a seguir para validar o no un lenguaje, adem"s usar el *3'
<*ommon 3ype 'ystem= que es el encargado de brindar un sistema de tipos nico
para todos los lenguajes de programacin, es decir, para todos los lenguajes
basados en #2+3 las variables como Lint, string, long, doubleM van a tener el
mismo tama-o en bits, y los mismos limites#
25
2.2.2 9CL 39"s C1"ss Libr"r:$<
+sta biblioteca es un conjunto muy bien organizado de clases que abarcan
las !unciones m"s comunes para todo programador#
+st"n de!inidas como archivos DLL lo que signi!ica que est"n en cdigo 8'(L y
por lo tanto pueden ser usadas de !orma transparente por cualquier lenguaje #2+3
Aqu una lista de las principales !uncionalidades que se pueden encontrar en esta
biblioteca de clasesQ
(nteraccin con los dispositivos peri!$ricos
6ormularios y componentes para aplicaciones de escritorio <7indo;s
6orms=
8anejo de datos <ADE#2+3=
Administracin de memoria
3ransmisin y recepcin de datos por distintos medios <F8L, 3*&I(&=
Administracin de componentes 7eb que corren tanto en el servidor como
en el cliente <A'&#2+3=
8anejo y administracin de e,cepciones
8anejo del sistema de ventanas
Rerramientas de despliegue de gr"!icos <JD(G=
Rerramientas de seguridad e integracin con la seguridad del sistema
operativo
(nteraccin con otras aplicaciones
8anejo de cadenas de caracteres y e,presiones regulares
8anejo de archivos, !icheros y streams#
Eperaciones aritm$ticas
8anipulacin de !echas, zonas horarias y periodos de tiempo
'erializacin
2=
8anipulacin de archivos de im"genes
Jeneracin de cdigo
8anejo de idiomas
(nteraccin con el A&( 7inA4 o 7indo;s A&(#
2/
2.2.3 CLR 3Co..o/ L"/gu"g Ru/5i.$
+s el verdadero ncleo de la tecnologa #2+3, se encarga de las !unciones
principales de un buen motor de ejecucin, cumpliendo tambi$n las !unciones de
depuracin, organizacin de memoria, seguridad y m"s#
Las !unciones que cumple sonQ
*arga las di!erentes clases de la 0*L, recursos y las uni!ica al programa#
8aneja la iteracin con antiguos componente *E8 que no son propios de
la tecnologa #2+3
*ontrola todos los recursos de memoria para soportar hilos <threads=
>eri!ica y valida los di!erentes tipos a usarse
*ontrola las e,cepciones
8otor de seguridad
8otor de depuracin
*ontrolador de cdigo en general
9ecolector de basura <Jarbage *olector LJ*M=
*ompilador O(3
+l *ompilador O(3 <Oust/(n/3ime= es un motor que corre en tiempo real generando
a partir del cdigo 8'(L un lenguaje de m"quina propio de cada computador# +ste
es en realidad el que otorga a la tecnologa #2+3 la compatibilidad con los
di!erentes sistemas#
22
*uando uno realiza un programa en la tecnologa #2+3, este programa ya en su
etapa de release, por ejemplo un ejecutable +F+; el #2+3 !rame;or1 lo deja
e,presado en el cdigo 8'(L, cuando es ejecutado el programa, el motor O(3 lo
trans!orma en tiempo real al lenguaje de m"quina del computador local# +n caso
de que el programa !uese usado en otra computadora con otro sistema operativo
y otro procesador# +l programa ser" interpretado por el motor O(3 de la otra
m"quina, como el lenguaje 8'(L sigue siendo el mismo, el motor O(3 del nuevo
computador traducir" en tiempo real el cdigo 8'(L a un nuevo lenguaje de
m"quina perteneciente a esta nueva computadora# Etorgando as la !le,ibilidad de
tener un programa que pueda correr en varias computadoras con di!erentes
con!iguraciones, siendo el !rame;or1 el encargado de realizar los cambios
respectivos, dando al programador total transparencia#
25
2.2.$ RESUMEN
&ara simpli!icar las cosas, podemos decir que el !rame;or1 es el motor que
corre entre el usuario y el sistema operativo, siendo claramente indispensable
tenerlo instalado en la computadora donde se quiera ejecutar cualquier programa
bajo la tecnologa #2+3
+l !rame;or1 es un est"ndar a nivel mundial, siendo 8icroso!t la empresa
que lo impulso y por lo tanto la pionera en esta tecnologa#
+l 8icroso!t #2+3 6rame;or1 es la versin de 8icroso!t de este !rame;or1, y es
completamente gratuito, pudiendo ser descargada desde el (nternet# &ero no es el
nico !rame;or1 bajo la tecnologa #2+3, el proyecto 8E2E es una alternativa al
!rame;or1 de 8icroso!t impulsado por la grande del cdigo libre 2ovell#
+l !rame;or1 se divide en tres partes !undamentalmenteQ
+l *L(, encargado de compilar y validar un cdigo escrito en muchos de los
lenguajes de programacin e,istentes para la tecnologa #2+3 y dar como
resultado un cdigo ensambler virtual conocido como 8'(L#
+l 0*L es la biblioteca de clases en las que se encuentran todas las
!unciones m"s comunes que un programador pueda requerir para una
aplicacin#
+l *L9 es el motor que ejecuta el cdigo 8'(L y lo trans!orma al cdigo de
m"quina requerido de !orma di!erente en cada computador#
36
Dibujo 2: !structura del #rame$ork % &'()!: Propia del autor
*. >0#2+3
CLI / Common Lan(ua(e In#rastructure 0
8'(L
1CL /1ase Class Librar&0
CL2 /Common Lan(ua(e 2untime0
8'(L
D55D5DD5DD5DD5DDD5
'('3+8A E&+9A3(>E
8icroso!t #2+3
6rame;or1
31
2.3 I)+ /Inte(rated )eelopment +nironment0 para .*+T:
*omo todos sabemos un (D+ es una #ntorno $ntegrado de Desarrollo que
brinda a un programador varias herramientas entre ellas una inter!az gr"!ica de
usuario <J%(=, un int$rprete, coloracin de sinta,is entre otras; para !acilitar el
trabajo a la hora de programar#
+l #2+3 6rame;or1 como vimos anteriormente consta internamente de
compiladores para los lenguajes promocionados por 8icroso!t, entre los que se
encuentran *. y >isual 0asic principalmente# 3eniendo la posibilidad de realizar
nuestros programas sin pagar un solo centavo por licencias de programas, al ser
como ya dijimos el #2+3 !rame;or1 una aplicacin !ree;are que se puede
descargar de (nternet#
&ero hay que estar consientes que esto involucra escribir nuestro cdigo en
algn editor de te,to que ya dispongamos como el 0loc de 2otas, y hacer la
respectiva compilacin desde un entorno de consola de comandos <DE'=# As
como no disponer de dise-adores gr"!icos para las aplicaciones con !ormularios
lo que resulta un dolor de cabeza#
Dado el mencionado problema, vemos la gran ayuda que signi!ica el uso de
un (D+ para la tecnologa #2+3, y es aqu que 8icroso!t lanza al mercado el (D+
m"s usado en el mundo para esta tecnologa, conocido comoQ Mi6roso45 Visu"1
S5udio?NET, que sirve como (D+ para todos los lenguajes de 8icroso!t, no
obstante si se desea un (D+ para un lenguaje nada m"s podemos encontrar uno
dedicado a >isual 0asic llamado Mi6roso45 Visu"1 9"si6?NET, o para *.
conocido como Mi6roso45 Visu"1 C7?
32
&ero cabe recalcar que el paquete 8icroso!t >isual 'tudio#2+3 es tan solo
un (D+ de la tecnologa #2+3 y no el motor indispensable# De ah que no es el
nico (D+ e,istente en el mercado, aunque si el mejor y por lo tanto el m"s
costoso#
Dibujo *: (D! +isual ,tudio.!" % &'()!: -icroso.t +isual ,tudio .!"
200/
33
Race varios a-os ya, un grupo de personas empezaron la tarea de o!recer a los
programadores de #2+3 un (D+ !ree;are y de ah que hoy podemos descargar de
!orma gratuita el tan !amoso S>"r=D01o=
<;;;#icsharpcode#netIEpen'ourceI'D= que por menos de D580 <versin 4#5= ,
podemos tener un (D+ de altsimo nivel, igualando en casi todos los aspectos al
(D+ de 8icroso!t#
Dibujo 0: (D! ,harpDe1elop % &'()!: ,harpDe1elop 12.0

'harpDevelop tuvo tan buena acogida en el mercado de los programadores
a nivel mundial que obligo a 8icroso!t a hacer algo que hace algunos a-os
pareca imposible que lo llegue a hacer, me re!iero concretamente a su versin
+,press del paquete 455C, el cual da a sus usuarios una versin !ree;are de su
(D+ del cual hablaremos m"s adelante#
Ambos (D+s cumplen los requisitos mnimos que un programador necesita,
entre ellos, un dise-ador gr"!ico de !ormularios, coloracin de sinta,is, coloracin
de errores, base de datos de los m$todos y propiedades de una clase <lista que
34
aparece indicando los m$todos y variables que posee una clase=, depuracin,
entre otros# 2o obstante cabe se-alar que segn mi apreciacin personal, la
versin de 8icroso!t es un poco m"s r"pida y consta de mejores herramientas
que el 'D, aunque se debe tomar muy en cuenta que el >isual 'tudio viene en 4
*Ds en comparacin a los D580 del 'harpDevelop#
2.$ 3ersiones del .*+T ,rame-or.:
Desde el a-o 4555 cuando !ue presentada la idea de la tecnologa #2+3, se
empez a trabajar en la construccin de un !rame;or1 que alcanzara tal nivel de
pro!undidad que se pueda construir todo un sistema operativo sobre $l# Ran
pasado casi H a-os desde entonces y las ambiciones de 8icroso!t se est"n
materializando#
2.$.1 ?NET Fr".@orA 0,?B<
'u primera versin vio la luz a !inales del 455D y vino de la mano con la salida de
Visu"1 S5udio?NET *BB* o vH#5, la que inclua claro la versin H de >isual 0asic y
la primera versin de *., este nuevo lenguaje que m"s adelante le dedicaremos
principal atencin#
2.$.2 ?NET Fr".@orA 0,?,<
&oco tiempo despu$s de la salida de su primera versin, los cambios y parches
en el !rame;or1 eran tan grandes que obligaron a sacar al mercado una versin
D#D del !rame;or1 acompa-ada del Mi6roso45 Visu"1 S5udio *BB' que inclua a
>isual 0asic H#D y a *. D#D # +sta versin es por muchos considerada la primera y
dejo completamente descontinuada a la 4554#
La gran acogida de esta tecnologa por los programadores de todo el mundo
sorprendi hasta a los mismos ejecutivos de 8icroso!t, incrementando sus
usuarios en una proporcin geom$trica jam"s vista#
+s aqu cuando 'harpDevelop sale al mercado con su versin D#5
35
2.$.3 ?NET Fr".@orA 0*?B<
&ara el 455C, la llegada de la segunda versin rompi todos los esquemas, dando
completa integracin a los programas desarrollados en las versiones anteriores,
acompa-ada por el Mi6roso45 Visu"1 S5udio?NET *BB%, la que inclua claro la
versin ? de >isual 0asic y la tan esperada segunda versin de *.# Las mejores
son muy considerables a todo nivel y es actualmente la versin m"s usada en el
mundo para las aplicaciones #2+3, integrando cientos de programas escritos en
esta tecnologa, por mencionar alguno al propio Auto*AD 455H de la !irma
AutoDes1# 'harpDevelop claro, lanz su segunda versin con este nuevo #2+3
6rame;or1#
2.$.$ ?NET Fr".@orA 0'?B<
Actualmente la acogida en el mundo de los programadores de #2+3 es tan grande
y sobretodo tan creciente que 8icroso!t decidi jugarse todo por el todo con esta
tecnologa, y as la llegada del !rame;or1 A#5 en estas !echas <+nero 455H= nos
trae no solo una versin mejorada, sino la gran sorpresa que quedar" escrita en
los libros, me re!iero concretamente la llegada del nuevo 7indo;s >ista, el primer
sistema operativo escrito en su totalidad en cdigo 8'(L, es decir en un lenguaje
de Lalto nivelM, rompiendo la tradicin de escribirlo en lenguaje de m"quina# Las
ventajas de este hecho hace que todo el sistema operativo y por lo tanto todos
programas estar"n basados en la tecnologa #2+3 y por lo tanto al hacer una
aplicacin en #2+3 estaremos al mismo nivel que todo, teniendo completo control
y transparencia#
8icroso!t ha anunciado el desarrollo de una versin A#C del !rame;or1,
cuyo (D+ est" bajo el nombre clave de ORCAS y ser" la versin 455? del >isual
'tudio#
3=
2.% C4 /56arp07 +l len(uaje predilecto del .*+T #rame-or.:
+l lenguaje m"s usado de todos los tiempos sin duda es el *GG por su gran
alcance, sin embargo su inminente di!icultad hizo que lenguajes tan Lsuper!icialesM
como el 0asic llegaran a las manos de todos por su sencillez y sobretodo por su
velocidad de desarrollo#
Oava, a !inales de los B5, propondra un nuevo lenguaje que hibridara la
sencillez del 0asic con la potencialidad del *GG, marcando un interesante
equilibrio entre los dos# La acogida de este lenguaje marco la historia, teniendo
hoy en da a Oava entre los primeros lenguajes de programacin m"s usados en
el mundo entero#
As es como 8icroso!t aposto a la creacin de un nuevo lenguaje similar a
Oava, y para esto contrato a una leyenda de la programacin, encargada de dar
vida al &ascal y a Delphi, me re!iero a A/drs Cj1sbrg
,B
, que !ue el arquitecto
de *. y uno de los encargados de dar vida a la tecnologa Dot2+3#
'u sinta,is se apega a una derivacin del *, como casi todos los lenguajes
lo han hecho, !ormando poco a poco en lo que algn da, creo yo, ser" un
est"ndar# +sto es la utilizacin de L;M para el !in de instruccin, el uso de llaves
LS TM, la distincin entre maysculas y minsculas, por mencionar algunas#
16 ?tt,%NN*s.7i8i,*'ia.o&gN7i8iNAn'*&s_D*.ls-*&g
3/
Adem"s el *. constituye el lenguaje clave para la tecnologa #2+3, de ah
que todo lo que se pueda hacer con esta tecnologa, se podr" hacer desde *.,
siendo el resto de lenguajes los que se deban acoplar#
&or citar un ejemplo, el propio (D+ antes mencionado, el 'harpDevelop
esta escrito en su totalidad en *.# 3eniendo en este lenguaje entre los D5 m"s
usados en el mundo, lo que es un r$cord tomando en cuenta que la vida de *. es
de tan solo C a-os con respecto a Oava que lleva m"s de DC a-os#
23digo 1: !jemplo de c3digo escrito en 24 % &'()!: Propia del 5utor

public Form1()
{
InitializeComponent();
}

private Stopwatch temporizador;
private const int cuantasCadenas = !!!!;
private void btnCalcular"Clic#(ob$ect sender% &vent'r(s e)
{
btnCalcular)&nabled = *alse;
btnCalcular)+e*resh();
,, -a prueba de Strin(.uilder (/ue tarda menos)
this)t0tStrin(.uilder)1e0t = 23rueba4
,, -a prueba de Strin( (/ue tarde un poco m5s)
this)t0tStrin()1e0t = calcularStrin(())1oStrin(();
btnCalcular)&nabled = true;
btnCalcular)+e*resh();
}
32
2.8 Trabajando con )ot*+T
2.8.1 Introduccin:
*omo ya lo haba mencionado, dentro de todos los lenguajes que se
pueden usar dentro de la tecnologa Dot2+3, vamos a usar el *. <'harp= puesto
que es el lenguaje por e,celencia de Dot2+3, es decir, el *. constituye un
lenguaje creado e,clusivamente para esta tecnologa y por ende resulta el m"s
compatible y en $l se pueden e,plotar al m",imo todas las herramientas que
brinda Dot2+3#
Al igual que la mayora de lenguajes de cuarta generacin, el *. brinda
una programacin estructurada, programacin orientada a objetos <&EE=, y
dem"s# &ero en el desarrollo del presente trabajo se utilizaron algunas
herramientas poco usuales en cuanto a este lenguaje y tecnologa se re!iere,
como esQ
+l motor gr"!ico JD(G propio de la tecnologa Dot2+3 que nos da la !acilidad de
dibujar a un e,celente nivel, pudiendo resolver !"cilmente los problemas de
parpadeo que aparecen siempre que intentamos realizar algn tipo de animacin,
solo por poner un ejemplo#
+l uso de punteros que era una tarea casi e,clusiva para *GG, ahora se
puede hacer desde *., claro, usando ciertas protecciones para combinar el
cdigo administrado por el motor de la tecnologa Dot2+3 <cdigo seguro= y el
cdigo en el que usamos punteros <cdigo no seguro=#
A estas herramientas le aumentamos el uso de hilos para poder correr
varios procesos en LparaleloM y una e,plicacin de como crear controles de
usuario encapsulados en una DLL para poder usarlos desde cualquier lenguaje de
esta tecnologa y tendremos todas las herramientas que se han usado en el
desarrollo del presente trabajo#
35
2.8.2 9otor !r:#ico /!)I;0:
+l JD( por sus siglas en inglesQ Gr"=>i6s D0i6 I/5r4"6
,,
, es el motor
gr"!ico del sistema operativo ;indo;s, y constituye, como todo motor, de un A&(
programado originalmente en *GG que nos permite usar esta librera# +sta librera
gr"!ica ha sido modi!icada constantemente para cubrir los grandes avances de las
presentaciones gr"!icas, y es as que para ;indo;s F&, los desarrolladores de
microso!t re/hicieron toda la librera gr"!ica dando nacimiento al JD(G, que como
su nombre lo indica es una evolucin del mismo#
La tecnologa Dot2+3 ha incluido una librera de comunicacin directa y en
bajo nivel al JD(G de ;indo;s, d"ndonos as la posibilidad de usar esta potente
herramienta de !orma natural y sencilla desde cualquier lenguaje de Dot2+3#
+l JD(G se divide en tres partes principalmenteQ
Dibujo en 4DQ +sta parte permite dibujar lineas, cuadrados, elipses, y
dem"s !iguras en cualquier parte de nuestros controles, incluyendo los
!ormularios# A esta parte se le ha agregado varias !uncionalidades muy
tiles como los degradados, sistema de colores A9J0, es decir incluyendo
el componente de Al!a que da niveles de transparencia; entre otras
mejoras#
8anejo de im"genesQ *on esta parte podemos abrir, manipular y guardar
im"genes que abarcan todos los !ormatos conocidos, como son el 08&,
O&J, J(6, &2J, entre otros# La manipulacin de las mismas se la puede
hacer pi,el por pi,el, o con matrices de trans!ormacin y rotacin#
8anejo de 3e,tosQ JD(G incluye un completo algoritmo para le manejo de
te,tos en el dibujo, pudiendo usar degradados, estilos de linea y m"s en la
gra!icacin de te,tos#
+n *., el uso de esta librera se da por medio del ensambladoQ S:s5.?Dr"@i/g
Nue a su vez contiene varios ensamblados y clases como por ejemploQ
Dra;ing4D, 3e,t, (maging, etc#
11 ?tt,%NN777.+i(&oso1t.(o+N7?'(Na&(?iv*NGDIn*Ft.+s,F
46
2.6.2.% &ien'o ()raphics*:
+l lienzo, e,presado en una clase de nombre Gr"=>i6s, es la clase base
para poder dibujar cualquier cosa en JD(G# Y pues, igual que un lienzo real, es lo
primero que hay que tener antes de dibujar aun quesea una linea# +n Dot2+3, el
lienzo es de color transparente y puede ser e,trado de casi cualquier lado,
teniendo entre las !ormas m"s comunes las siguientesQ
es!e una "ma#en$ 3eniendo un objeto de tipo I."g o 9i5."= que
luego trataremos m"s a !ondo, podemos e,traer un lienzo con el siguiente
cdigoQ
G&a,?i(s g R G&a,?i(s.F&o+I+ag*9i+ag*n:S
es!e un %ontrol$ 3eniendo cualquier control con inter!az gr"!ica, como
un !ormulario, botn, etiqueta, panel, u otro controlQ
G&a,?i(s g R control.C&*at*G&a,?i(s9:S
&san!o el evento '("NT$ 3odos los controles poseen un evento
denominado &A(23, que se genera cuando ;indo;s requiere volver a
dibujar dicho control# As podemos capturar este evento y como argumento
del mismo, tenemos a nuestra disposicin el lienzo u objeto Jraphics con
el que podemos alterar lo dibujado en el control#
,&ivat* voi' (ont&ol_$aint9o-.*(t s*n'*&@ $aintEv*ntA&gs *:
T
G&a,?i(s g R *.G&a,?i(sS
U
+,isten varias !ormas m"s de conseguir un lienzo, pero estas son las m"s
usadas# *abe recalcar que cuando se e,trae el lienzo de una imagen, todos los
dibujos se quedan intrnsecamente en la imagen y por lo tanto mantiene sus
modi!icaciones# &ero cuando se e,trae el lienzo desde un control directamente,
los dibujos realizados sobre este se ejecutan una nica vez, y esto se re!leja al
minimizar por ejemplo el !ormulario, los dibujos se habr"n borrado al restaurar el
!ormulario# &ara lograr que el control mantenga sus dibujos siempre, se usa el
evento &A(23, as se dibujara cada vez que se lo solicite#
41
2.6.2.2 &+pices (Pen*:
Los l"pices son clases que representan el estilo con el que se quiere
dibujar la silueta o contorno de algo# &or ejemplo, para crear un l"piz de color Azul
y de un grosor de A se usara el siguiente cdigoQ
$*n ,1 R n*7 $*n9Colo&.;lu*@3:S
+sta clase es muy completa, puesto que permite crear lapices con distintos
colores, te,turas, !ormas de empezar como una !lecha por ejemplo, etc#
2.6.2.3 ,rochas (,rush*:
Las brochas son clases que sirven para rellenar un dibujo# &rincipalmente se
puede tenerQ
'olid0rush Q +s una brocha de un solo color#
!oli';&us? s-1 R n*7 !oli';&us?9Colo&.G&**n:S
Ratch0rush Q +sta brocha combina dos colores de varias !ormas
predeterminadas#
Dat(?;&us? -1 R n*7 Dat(?;&us?9Dat(?!t3l*.!?ingl*@ Colo&.;lu*@ Colo&.R*':S

LinearJradient0rush Q &ermite usar una gradiente lineal de varios colores#
Lin*a&G&a'i*nt;&us? l-1 R n*7 Lin*a&G&a'i*nt;&us?
9n*7 $oint96@ 56:@ n*7 $oint9166@ 56:@ Colo&.;lu*@ Colo&.R*':S

&athJradient0rushQ +sta permite una gradiente de !orma circular de varios
colores#
G&a,?i(s$at? g,1 R n*7 G&a,?i(s$at?9:S
g,1.A''R*(tangl*9n*7 R*(tangl*96@6@166@166::S
$at?G&a'i*nt;&us? ,-1 R n*7 $at?G&a'i*nt;&us?9g,1:S
42
,-1.C*nt*&Colo& R Colo&.Lig?tV*llo7S
,-1.!u&&oun'Colo&s R n*7 Colo&WX T Colo&.Lig?tG&**n@ Colo&.Lig?tG&**n@
Colo&.G&**n@ Colo&.Da&8G&**n US
3e,ture0rush Q *on esta brocha podemos usar una imagen como papel
tapiz de nuestro relleno#
T*Ftu&*;&us? t-1Rn*7 T*Ftu&*;&us?9I+ag*.F&o+Fil*9YZC%[guill*..,gZ::S
2.6.2.- .iguras ,+sicas:
+ntre los m$todos que encontramos en el lienzo <Jraphics=, se ven
claramente dos grupos, los llamados D9A7 y los llamados 6(LL, con quienes se
pueden gra!icar todas las !ormas b"sicas de dibujo como son las lineas,
rect"ngulos, elipses, te,to, etc#
Los D9A7 est"n basados en l"pices, por lo tanto solo dibuja siluetas o
contornos# As se puede tener los siguientes cdigosQ
g.D&a7Lin*9,1@ 6@ 6@ 166@ 166:S g.D&a7R*(tangl*9,2@ 166@ 166@ 266@ 266:S
g.D&a7Elli,s*9,1@ 166@ 166@ 56@ 56:S g.D&a7Elli,s*9n*7 $*n9Colo&.R*':@ 166@ 166@
156@ 56:S
43
3odos los m$todos del tipo D9A7 dentro de la clase Jraphics sonQQ
D&a7A&(
D&a7;*Ci*&
D&a7Clos*'Cu&v*
D&a7Cu&v*
D&a7Elli,s*
D&a7I(on
D&a7I+ag*
D&a7I+ag*#ns(al*'
D&a7Lin*
D&a7Lin*s
D&a7$at?
D&a7$i*
D&a7$ol3gon
D&a7R*(tangl*
D&a7R*(tangl*s
D&a7!t&ing
&or otro lado, cuando usamos los m$todos 6(LL, estos est"n dirigidos a rellenar
las !ormas, as tenemos lo siguienteQ
g.FillElli,s*9s-1@ 6@ 6@ 166@ 166:S g.FillElli,s*9?-1@ 6@ 6@ 166@ 166:S
g.FillR*(tangl*9,-1@ 6@ 6@ 166@ 166:S g.FillElli,s*9t-1@ 6@ 6@ 366@ 366:S
*omo se ve, en los ejemplos usamos las distintas brochas que creamos
anteriormente#
44
La lista de m$todos 6(LL dentro de la clase Jraphics sonQ
6ill9egion
6ill9ectangle
6ill9ectangles
6ill&olygon
6ill&ie
6ill&ath
6ill+llipse
6ill*losed*urve
2.6.2./ 0aneo de $m+genes:
+l manejo de im"genes es muy e,tenso, y como no se uso el tema en el
presente trabajo, solo dar$ una breve introduccin a lo que a im"genes se re!iere#
+l JD(G divide el trato de im"genes en dos grandes clases#
IMAGE< +s la clase que soporta una im"gen y est" en!ocada a tratar la
manipulacin de la imagen a un nivel de archivo# +s decir, abrir la imagen, grabar
en un !ormato establecido, e,traer in!ormacin de la misma, presentarla en un
&citure0o,, etc
I+ag* i+ag*n1 R I+ag*.F&o+Fil*9YZC%[guill*..,gZ:S
1IT9AP: Esta (las* ta+-iPn (onti*n* una i+ag*n ,*&o *stA *n1o(a'a al t&ato '* los
,iF*l*s '* la i+ag*n. Es '*(i&@ *n (uanto a +o'i1i(a& los ,iF*l*s s* t&ata@ *st* o-.*to *s *l
Hu* lo ,*&+it* ?a(*&. A'*+As@ *sta (als* ,*&+it* instan(ia&s* a 'i1*&*n(ia '* la IAGE@
(&*an'o as0 una nu*va i+ag*n.
;it+a, -+1 R n*7 ;it+a,9166@ 166:S
45
+stas dos clases !uncionan casi siempre a la par, puesto que cada una contiene
!uncionalidades requeridas a lo largo de un trabajo de procesamiento de
im"genes# Y son D55U compatibles en cuanto a intercambiabilidad se re!iere# +s
decir, si se requiere pasar una imagen para que sea un objeto 0(38A& o (8AJ+,
basta con hacer el debido castingQ
i+ag*n1 R 9I+ag*:-+1S
-+1 R 9;it+a,:i+ag*n1S
&ara tratar con cada uno de los pi,eles, es necesario tener la imagen en un objeto
0(38A& y usar los m$todosQ
-+1.G*t$iF*l9F@ 3:S
-+1.!*t$iF*l9F@ 3@ Colo&.R*':S
Donde F,Y son las coordenadas del pi,el que se quiere leer o escribir# +l pi,el
esta representado por un color que es toda una clase que brinda !acilidades para
el trato de colores#
4=
2.8.3 Punteros:
2ormalmente, las variables, objetos o recursos que usamos en nuestros
programas son alojados de !orma din"mica en la memoria 9A8 de nuestro
computador, esto signi!ica que dependiendo de las necesidades del sistema
operativo, este tiene la potestad de mover los espacios de memoria 9A8 que
usamos# Jracias a esto, conseguimos que nuestros programas no inter!ieran con
otros que puedan estar corriendo en un computador# 2o obstante, algunas veces
es necesario alojar un paquete de datos en la memoria 9A8 y que este no se
mueva de ah en un tiempo, adem"s, al tenerlo !ijo es posible acceder a estos
datos de !orma directa# A esto se le conoce como LAtacar directamente a la
memoria 9A8M# Las ventajas que se consiguen al hacer esto es principalmente
velocidad#
+n *., el uso de punteros es conocido como L*digo 2E/'+J%9EM o
U/SAFE, puesto que al tener acceso directamente a la memoria 9A8 de la
computadora, es posible inter!erir con otros programas y llegar al colapso de
varios de ellos# &or esto hay que tener varias consideraciones, que van desde
usar correctamente las variables o punteros, hasta tener en cuenta el tama-o del
banco de datos que nos perteneces y no sobrepasarlo porque podremos alterar
otros valores de algn otro proceso#
&asos para escribir un cdigo no seguro en *.#
D# Avisar al compilador que permita el cdigo no seguro# +sto se hace en las
propiedades del proyecto <*lic derecho VV &ropiedades=, en la pesta-a
L0%(LDM hay una opcin que indica poder habilitar el cdigo no seguro#
(llow unsafe co!e
4/
4# Declarar los m$todos que van a contener el cdigo con punteros como
%2'A6+
,u-li( unsa1* voi' $&o(*sa&9-3t*WX -u11:T

A# 6ijar o congelar una variable u objeto en la memoria 9A8 con el comando
6(F+D#
1iF*' 9-3t*\ , R -u11:T
W# %sar los punteros de la misma !orma que se hace en *GG, esto es, usar el
puntero para indicar la direccin en la memoria 9A8# %sar el pre!ijo
asterisco < : = para indicar lo L+speci!icado porM, es decir, para indicar el
contenido de esa direccin de la 9A8#
63untero = 77; ,,&scribir en la direcci8n indicada por el
puntero el valor de 77
3untero99; ,,'uemntar la direcci8n de la memoria +':
Dibujo /: 6abilitar 23digo o ,eguro %
&'()!: +isual ,tudio.!" 200/
42
Ej.=1o< 8$todo que dado un vector de entrada, rellene todo el vector con el
valor de D55#
23digo 2: !jemplo del uso de punteros % &'()!: Propia del 5utor

public unsa*e void 3rocesar(b;te<= bu**)
{
*i0ed (b;te6 p = bu**)
{
b;te6 pp = p;
*or(b;te i=! ; i > bu**)-en(th ; i99)
{
6pp = 1!!;
pp99;
}
}
}
45
2.8.$ <ilos /T6reads0:
%n computador realiza varias tareas Lsimult"neamenteM, por ejemplo,
escuchamos msica mientras jugamos solitario y estamos descarg"ndonos algn
archivo del (nternet#
*ontando los procesos propios del sistema operativo y dem"s programas,
tenemos cerca de D5 procesos corriendo simult"neamente en nuestro
computador# &ero nosotros sabemos que casi toda computadora tiene
nicamente un procesador, y bueno, ahora se habla de dos procesadores
!uncionando en paralelo, pero aun as no son D5 procesadores, D para cada
programa# As que lo que se hace, es dividir todos los procesos en peticiones muy
peque-as, y estas son enviadas al procesador; trabajo realizado por el sistema
operativo de !orma transparente para nosotros# As el procesador solo e!ecta una
nica operacin a la vez, pero como hace un pedacito de cada uno, este se
aprecia como si lo hiciera todo a la vez#
*uando nosotros realizamos un programa, este es un proceso m"s para el
sistema operativo, sin embargo es un proceso casi siempre de un solo hilo# Y as
un hilo no es m"s que un sub/proceso que corre LindependientementeM de los
otros#
&ara aclarar mejor la idea, es muy comn usar los controles 3(8+9 en nuestros
programas# +stos pueden ser muy !"cilmente programados, basta un contador
que llame a un m$todo cuando el tiempo establecido haya !inalizado, sin embargo
si lo program"ramos de la !orma tradicional, mientras el programa realiza el
conteo del timer, no podramos hacer nada m"s# +s as que un 3imer esta
programado en otro hilo# +sto signi!ica que se ha creado otro proceso
independiente para que realice el conteo, y este est" muy aparte del proceso
normal de nuestro programa#
56
+n Dot2+3 v4, han implementado un control llamado L0ac1ground7or1erM que es
un completo control que permite empezar un proceso en un hilo nuevo# +ste
control nos brinda las !acilidades de crear uno o varios procesos en hilos
di!erentes para que puedan correr simult"neamente#
Rilo D
Dilo 4
Dibujo 6: #lujo de 6ilos % &'()!: Propia del autor
$&og&a+a $&in(i,al
Cont*o '*l Ti+*&
51
2.8.% Creacin de Controles de Usuario:
Los controles de usuario nos brindan varias ventajas, entre las m"s
importantes consta la compatibilidad de ser usada sin problema desde cualquier
lenguaje soportado por Dot2+3; as un control desarrollado en *. puede ser
usado desde >isual0asic#2+3 por ejemplo# Adem"s nos brinda proteccin al
cdigo, puesto que se encuentra compilado y encapsulado en un DLL# &or otro
lado se puede programar el control pensando en una programacin de usuario,
esto es, dejando comentarios en F8L para que el motor de >isual 'tudio
encargado de las !acilidades de programacin como listas, comentarios de
argumentos, entre otros, pueda usar nuestros propios comentarios; adem"s el
uso correcto de propiedades y dise-o gr"!ico nos da la posibilidad de usar nuestro
control en la plantilla de dise-o#
+,isten dos tipo de controles que se pueden crear, los llamados
CONTROLES propiamente dichos son aquellos que constan de una inter!az de
usuario gr"!ica, por ejemplo los botones, las etiquetas, !ormularios, etc# 'e
muestran de !orma gr"!ica en nuestro monitor# &or otro lado e,isten controles que
no tienen inter!az gr"!ica que toman el nombre de COMPONENTES y entre estos
se encuentran controles como el 3imer, 'erial&ort, Data'ets, entre otros# 'i bien
el concepto de control o componente puede ajustarse a ambos casos, se usa esta
di!erencia para separar ambos casos, puesto que en la parte de dise-o, ambos
son tratados de !orma di!erente#
52
Los pasos a seguir para la creacin de un control sonQ
D# *rear un proyecto nuevo y elegir la plantilla L*lass LibraryM, el nombre del
nombre del proyecto asignado ser" el nombre del ensamblado y del
archivo DLL generado al !inal#
4# Agregar un nuevo *ontrol de %suario# &ara esto basta hacer clic derecho
encima del proyecto en el e,plorador de soluciones y elegir la opcinQ LAdd
VV 2e; (temM y seleccionar la plantillaQ L%ser *ontrolM para crear un control
y L*omponent *lassM para un componente#
Dibujo 7: ue1o Pro8ecto 2lass Librar8 % &'()!: +isual ,tudio.!" 200/
53
A# &rogramar el control o componente con sus respectivos valores,
propiedades, comentarios, inter!az gr"!ica, etc#
W# *ompilar el control ya sea bajo D+0%J o 9+L+A'+# Al hacerlo saldr" un
mensaje avisando que una biblioteca de clases compilada, crea un DLL
pero este no puede ejecutarse de !orma independiente# De esta !orma,
podemos revisar la carpeta 0(2 de nuestro proyecto y veremos ah el
archivo DLL creado#
NOTA?& 'e puede abrir el archivo (ssem)ly"nfo.cs que est" dentro de la carpeta
&ropiedades del proyecto, y modi!icar los indicadores con que se compila el DLL,
estos indicadores sonQ
Dibujo 9: ue1os componentes o controles % &'()!:
+isual ,tudio.!" 200/
23digo *: 5ssembl8(n.o % &'()!: Propia del autor
<assembl;? 'ssembl;1itle(@:isControles@)=
<assembl;? 'ssembl;Aescription(@Controles propios@)=
<assembl;? 'ssembl;Con*i(uration(@@)=
<assembl;? 'ssembl;Compan;(@SI-11&C@)=
<assembl;? 'ssembl;3roduct(@:isControles@)=
<assembl;? 'ssembl;Cop;ri(ht(@Aann; -8pezBCop;ri(ht C !!D@)=
<assembl;? 'ssembl;1rademar#(@@)=
<assembl;? 'ssembl;Culture(@@)=
54
+n la elaboracin de un control de usuario e,isten W cosas a tomar en cuentaQ
D# Pro=id"ds< *omo bien sabemos, las propiedades no son m"s que
variables encapsuladas, pero en la creacin de controles estas son usadas
para acceder desde la ventana de propiedades en tiempo de dise-o# &or
ejemplo, si creamos una propiedad llamada L*olor9ectanguloM de tipo
*ELE9#
4# MD5odo O/PAINT?& +ste m$todo est" en la clase %ser*E239EL
D4
de la
cual heredamos nuestra clase, por lo tanto para tener acceso a este
m$todo tenemos que sobre/escribirlo de esta !ormaQ
12 ?tt,%NN+s'n2.+i(&oso1t.(o+N*nLusNli-&a&3N+s1/36329<!.26:.as,F
23digo 0: 2rear una Propiedad % &'()!: Propia del autor
private Color color+ = Color).lue;
public Color Color+ectan(ulo{
(et
{
return color+;
}
set
{
color+ = value;
}
}
23digo /: -:todo P5(" % &'()!: Propia del autor
protected override void En3aint(3aint&vent'r(s e)
{
Fraphics ( = e)Fraphics;
,,'/uG se in(resa todo el c8di(o para (ra*icar en el control
()Araw+ectan(le(3ens).lue% 7!% 7!% !!% !!);
base)En3aint(e);
}
55
+n este ejemplo estamos dibujando un rect"ngulo de color azul en el
control y este aparecer" incluso en el tiempo de dise-o cuando lo coloquemos en
un !ormulario# De este modo solo basta un buen dote artstico para crear
controles gr"!icos, por ejemplo un ';itch, un L+D, u otros#
*ombinando las propiedades y este m$todo podemos probar el siguiente
cdigoQ

*omo podemos ver, luego de cambiar el valor de la propiedad
Co1orR65"/gu1o, colocamos una llamada al m$todo I/0"1id"5 del control, que
obliga a ejecutarse de nuevo el m$todo En&A(23# Y dentro de este, el color del
rect"ngulo ser" el establecido por la propiedad#
Lo interesante de esto es que este cdigo se ejecuta en tiempo de dise-o,
as cuando tengamos a nuestro control en un !ormulario, basta cambiar la
propiedad en la ventana correspondiente y el rect"ngulo cambiar" de color# Y
cabe recalcar una vez m"s que esto se hace en tiempo de dise-o#
23digo 6: 2ontrol sencillo % &'()!: Propia del autor
private Color color+ = Color).lue;
public Color Color+ectan(ulo
{
(et {return color+;}
set
{
color+ = value;
this)Invalidate();
}
}
protected override void En3aint(3aint&vent'r(s e)
{
Fraphics ( = e)Fraphics;
()Araw+ectan(le(new 3en(color+)% 7!% 7!% !!% !!);
base)En3aint(e);
}
5=
A# E0/5os?& *omo se trata de una clase con cdigo cerrado, es
indispensable el uso de eventos para avisar al programa sustentador del
control que se ha e!ectuado una accin# 3odo control de usuario ya posee
por herencia varios eventos tales como el *lic, el &aint, los eventos propios
del 8ouse, etc# &ero por ejemplo, si en nuestro control quisi$ramos
generar un evento cuando se ha cambiado el color del rect"ngulo a rojo,
debemos crear el evento nosotros mismos de esta maneraQ
*omo vemos, el evento se llama %olorRo*o y est" en la lista de eventos de
la ventana &ropiedades del control en tiempo de dise-o, y se lo puede usar como
cualquier evento m"s# Adem"s est" usando un delegado sin argumentos, pero
casi siempre los eventos poseen argumentos que deben estar especi!icados por
el delegado#
23digo 7: 2rear un !1ento % &'()!: Propia del autor
public dele(ate void dColor();
public event dColor Color+o$o;

public Color Color+ectan(ulo
{
(et { return color+; }
set {
color+ = value;
i* (color+)&/uals(Color)+ed))
{
i* (Color+o$o H= null) Color+o$o();
}
this)Invalidate();
}
}

5/
W# Co./5"rios -ML?& +stos comentarios son muy tiles a la hora de usar el
control, pues son utilizados por el (D+ de programacin# Los comentarios
se colocan antes de empezar con la declaracin de una clase, propiedad o
m$todo y son declarados con tres barras inclinadas LIIIM# Adem"s en el
caso de las propiedades, tambi$n hay como agregar especi!icaciones para
ser usadas en la ventana de propiedades en tiempo de dise-o# >eamos
unos cuantos ejemplos#
>entana de &ropiedades en tiempo de dise-o
23digo 9: 2omentarios ;-L % &'()!: Propia del autor
,,, >summar;I
,,, &s el color /ue va a tener el borde del rect5n(ulo
,,, >,summar;I
<Aescription'ttribute(@&s el color /ue va a tener el borde del
rect5n(ulo@)=
<.indable'ttribute(true)=
<Cate(or;'ttribute(@Colores@)=
public Color Color+ectan(ulo
{
)))))))))))))
(lustraci3n 1: +entana de Propiedades %
&'()!: Propia del autor
52
*omentario de la propiedad al escribir cdigo#
+n el caso de los m$todos se puede usar m"s indicativos como por ejemploQ

%sando estos comentarios de !orma correcta, podemos hacer uso de las
!acilidades que brinda visual studio al navegar por objetos, es decir podemos usar
Dibujo <: Propiedades en el c3digo % &'()!: Propia del autor
23digo <: 5rgumentos documentados % &'()!: Propia del autor
,,, >summar;I
,,, :Jtodo /ue suma dos valores
,,, >,summar;I
,,, >param name=@sumando1@IKalor del primer nLmero a sumar>,paramI
,,, >param name=@sumando@IKalor del se(undo nLmero a sumar>,paramI
,,, >returnsI+espuesta de la suma>,returnsI
public double Sumar(double sumando1% double sumando)
{
return sumando1 9 sumando;
}
55
el e,plorador de objetos, los comentarios en tiempo de dise-o, generar reportes
de m$todos, ayudas, y muchas cosas m"s#
=6
3 CAPITULO III: 2edes *euronales Arti#iciales /2*A0
3.1 Introduccin:
La inteligencia arti!icial b"sicamente trata de dotarle a un sistema computacional
la capacidad de tener inteligencia, y esta en un breve resumen se puede centrar
puntualmente en dos aspectosQ
a= 3oma de decisiones segn el entorno
b= 8ejorar sus conocimientos en el transcurso del tiempo <aprendizaje X
evolucin=#
&ara cumplir el primer aspecto se-alado, es necesario tener un sistema
retroalimentado que consta b"sicamente de sensores para poder parametrizar el
entorno, un cerebro que procese la in!ormacin y tome decisiones, y actuadores
para poder interactuar con el entorno#
+n tanto el segundo aspecto se torna un poco m"s complicado# &ara que
un sistema pueda aprender se necesita inevitablemente cambiar la in!ormacin
que posee, es decir sus reglas del juego, y para conseguir esto es necesario tener
un sistema computacional, puesto que es el nico sistema que tiene la capacidad
de cambiar sus datos de !orma autnoma#
2o obstante, la complejidad de cambiar de !orma autnoma un programa
para que este pueda LaprenderM nos obliga a buscar una manera de conseguir
una estructura in!orm"tica estable y que dependa nicamente de DA3E' o
valores para su cambio o aprendizaje#
+s as que las redes neuronales arti!iciales, basadas en el !uncionamiento
de las redes neuronales biolgicas, cumplen el segundo aspecto de la inteligencia
arti!icial, constan de un sistema in!orm"tico estable que depende de valores
!"cilmente alterables para su aprendizaje#
=1
3.2 2ese=a <istrica:
Las redes neuronales arti!iciales nacieron de la idea de simular o imitar el
!uncionamiento de las redes neuronales biolgicas, as que para mirar su pasado
debemos empezar mencionando a &latn y Aristteles quienes !ueron los
primeros en plantear tericamente el !uncionamiento del cerebro humano# *laro,
no !ue hasta DBAK que A1"/ Turi/g mir al cerebro como una !orma de ver los
sistemas computacionales, presentando muchos trabajos sobre la inteligencia
arti!icial, algunos consagrados como el !amoso Test !e Turin#
+,
#
&ero la verdadera cuna de las redes neuronales arti!iciales como tales,
viene de la mano de !"rr/ M6Cu11o6> y !"15r Pi55s, un neuro!isilogo y un
matem"tico, respectivamente# Nuienes publicaron en ,E#' un libro llamadoQ FA
1ogi6"1 6"16u1us o4 5> id"s i.."//5 i/ /r0ous "65i0i5:F que mostraba un
an"lisis matem"tico del !uncionamiento del cerebro y adem"s mostraron el primer
modelamiento de una neurona simple, construida con circuitos electrnicos de la
$poca, al que llamaron Pr6=5r/#
&ero el gran avance de estos sistemas tendra un golpe muy duro de la
mano de M"r0i/ Mi/sA:
,#
: S:.our P"=r5 del (nstituto 3ecnolgico de
8assachussets <8(3=, que presento el libro 'erce-trons en DBKB que mostraba
al perceptrn como una unidad de control muy d$bil al no poder resolver la
!uncin FE9 <E9 e,clusiva=, y as demostrar la linealidad del perceptrn,
caracterstica intolerable en un mundo no/lineal, razn su!iciente como para
declarar a la neurona arti!icial como un elemento de control no apropiado y
caduco#
+n el transcurso de la siguiente d$cada muy pocas investigaciones se
hicieron, aunque !ue en DBHW cuando se realizo el primer algoritmo de aprendizaje
de propagacin para atr"s#
13 ?tt,%NN777.1il.ion.u(l.a(.u8N]asa3ginNttNtt*st.?t+l
14 ?tt,%NN7*-.+*'ia.+it.*'uN],a,*&tN
=2
&ero el nuevo renacimiento de las redes neuronales arti!iciales vendra de
;o>/ Co=4i1d del mismo (nstituto 3ecnolgico de 8assachussets
DC
en DB?4 al
publicar el libro LNur"1 Co.=u5"5io/ o4 D6isio/ i/ O=5i.iG"5io/ Prob1.sM
que mostraba la idea de conjunto de neuronas, conjunto de perceptrones que al
ser combinados en una estructura podan solucionar problemas no/lineales, y
claro, lo demostraron con el mismo problema que a-os atr"s haba destruido al
perceptrn#
Desde entonces las redes neuronales han ido evolucionando
constantemente, teniendo ahora un gran nmero de alternativas que van desde
un multi/layer perceptrn con 0ac1 &ropagation, hasta lo conocido como 9edes
neuronales di!usas#
Y sus aplicaciones hoy est"n en muchos de los arte!actos que usamos a diario#
+ntre ellos los m"s conocidos sonQ todos los E*9 <reconocimiento ptico de
caracteres=, reconocedores de voz, 33'
DK
<3e,t 3o 'peech= , 9econocedores de
huellas digitales, *ontroladores 0iom$tricos de personal, correctores de gram"tica
de procesadores de palabras, etc
15 ?tt,%NN7*-.+it.*'uN
1= ?tt,%NN*n.7i8i,*'ia.o&gN7i8iN!,**(?_s3nt?*sis
=3
3.3 *eurona 1iol(ica:
Al basarse las redes neuronales arti!iciales en el comportamiento de las redes
neuronales biolgicas, es evidente empezar por entender el !uncionamiento de
una simple neurona biolgica, esta sin entrar en mayor detalle se compone en de
W partesQ
Dibujo 10: eurona =iol3gica % &'()!: Propia del autor
3.3.1 D/dri5"s
'on capilares que permiten el ingreso de los impulsos neuronales hacia el ncleo
o 'E8A de la neurona# +s decir, las dendritas constituyen las L+ntradasM de la
neurona biolgica#
Los impulsos neuronales son cargas electro/qumicas generadas por el paso de
iones el$ctricos de varios componentes qumicos como el potasio y sodio#
=4
3.3.2 Si/"=sis
+s una membrana premiable que se encuentra al e,tremo de cada dendrita# +sta
sinapsis modi!ica el impulso el$ctrico que ingresa por la dendrita, atenu"ndolo o
ampli!ic"ndolo, de tal manera que es visto como la LJananciaM de una dendrita#
*omo veremos posteriormente, la ganancia que la sinapsis le brinda a cada
dendrita es la causante directa del resultado que la neurona genere, de este modo
es considerada a este nivel como la L8emoriaM de la neurona, puesto que
depende de la sinapsis para que una neurona se comporte de una !orma u otra#
3.3.3 So."?
+s el ncleo de la neurona, y es aqu donde se procesa todas las se-ales
procedentes de las dendritas para generar una se-al resultado# +ste
procesamiento se divide b"sicamente en dos etapasQ
'uma de se-ales#/ 'implemente se suman todas las se-ales obtenidas de las
dendritas#
6uncin de 3rans!erencia#/ Ebtenida la se-al sumada, esta pasa por una !uncin
de trans!erencia propia de cada tipo de neuronas, y genera una se-al resultado#
3.3.$ AH/?
+s la salida de la neurona, es decir, la se-al resultado que o!rece el 'E8A luego
de procesar las se-ales de las dendritas, es transportada por el a,n que puede
e,tenderse en el caso de los humanos, hasta varios metros rami!ic"ndose
llevando esta se-al no solo hasta la dendrita una neurona, sino que puede llegar a
dar su se-al hasta a D5 555 neuronas, y as, con la cone,in de a,ones y
dendritas, !ormar lo que se conoce como una 9ed 2euronal#
=5
3.$ *eurona Arti#icial:
0as"ndose en el modelo de la neurona biolgica, vamos a tenerQ
Dibujo 11: eurona 5rti.icial % &'()!: Propia del autor
Donde claramente las entradas estar"n e,presadas con el vector F, las
respectivas ganancias con J, la sumatoria y !uncin de trans!erencia y !inalmente
la respuesta e,presada en la se-al Y#
Dado este modelo lgico, pasar a un modelo matem"tico
DH
es bastante sencilloQ
: 9
1
( . >
$ ; (
n
i
i i
=
=

=
DHLibroQ LA logical calculus o! the ideas immanent in nervous activityM

F
D
F
4
F
A
F
n
7
D
7
4
7
A
7
n
Y
==
Donde se ha reemplazado la ganancia LJM, por la L7M, puesto que la
mayora de autores le tratan a la ganancia de una entrada como &+'E de la
entrada, as en ingl$s sera 7(D3R y de ah que se usa la L7M en lugar de la LJM
para e,presar este par"metro#
3.% Perceptrn:
+l perceptrn es uno de los primeros modelos de neurona arti!icial que e,isti, y
apareci en DBWA# +st" basado en el modelamiento matem"tico antes visto y usa
la !uncin de trans!erencia +'*ALY2# +s decir, consta nicamente de dos
valores de salida A*3(>ADE I D+'A*3(>ADE que puede e,presarse de !orma
binaria por D y 5 lgico# +ste valor de salida depende de un umbral <u= el cual casi
siempre tiene el valor de 5; al sobrepasar este umbral, la neurona se activa y al no
pasar el umbral la neurona queda desactivada#

=
=
n
i
i i
$ ; (
1
(! ( V u Q Y Z D
+lse Y Z 5
=/
3.%.1 Aprendi>aje del Perceptrn:
+n DBW?, C a-os despu$s de la creacin del perceptrn, Donald Rebb
propuso un algoritmo matem"tico para ajustar los pesos del perceptrn, y con
esto lograr que la neurona responda como se desea al dar unas determinadas
entradas#
+l algoritmo de variacin de los pesos se basa en el error o di!erencia que
e,iste entre la salida obtenida de la neurona y la salida requerida o deseada; y
multiplicar este error por el valor mismo de la entrada, dando un valor el cual
indicar" la di!erencia entre el nuevo peso y el antiguo#
$ $ $
! ; $
> > !
t
t
i i
i i
o d
+ =
=
=
+ : 1 9
Do/d<
Q 'alida Deseada
Q 'alida Ebtenida
Q 'igni!ica el Deltha del peso
Q Race re!erencia al valor del nuevo peso, por eso el <t G D=, que signi!ica
<3iempoGD=
Q +ste entonces sera el peso actual# +n el tiempo actual <t=
Los pasos a seguir para ense-ar a una neurona a comportarse de la !orma
que deseamos, es el siguienteQ
*olocamos valores aleatorios en todos los pesos#
t
t
i
i
i
o
d
$
$
$
>
>
: 1 9 +

=2
>amos colocando un conjunto de entradas y tomando la salida obtenida#
*alculamos el error, que no es m"s que la di!erencia entre la salida deseada y la
obtenida#
*alculamos el d7, es decir, el valor Deltha del peso#
Ahora tomamos un segundo juego de entradas y volvemos a aplicar los pasos 4,A
y W# +sto lo hacemos para todos los conjuntos de entradas#
'umamos todos los d7 de un peso que obtenemos en los distintos conjuntos de
entradas, para uni!icar el cambio que queremos darle al peso#
Actualizamos los valores de los pesos segn nuestro d7
*on esto terminamos lo que se conoce como UNA ITERACIN#
+l aprendizaje de una neurona se mide en razn de las iteraciones que le demora
converger en una respuesta# De este modo una neurona lograr" converger a una
respuesta en varios miles de iteraciones, claro, dependiendo de la complejidad del
problema a resolver#
3.%.2 Problema de Oscilacin.
+ste problema se encontr en las iteraciones !inales de una neurona al
alcanzar una respuesta# Y no es m"s que un cambio brusco en los pesos que
hace que la solucin no llegue a converger en una respuesta

Dibujo 12: Problema de &scilaci3n % &'()!: Propia del autor
9espuesta Deseada
9espuesta Ebtenida
(teraciones
=5
La solucin de este problema no es m"s que atenuar el cambio de los pesos, para
que no cambien tan bruscamente y as pueda converger m"s r"pido# As nace el
par"metro conocido como Ta.a !e a-ren!i.a*e, en ingl$s /earnin# Rate
e,presado normalmente con las siglas L9 o como una constante o coe!iciente, es
decir con una letra griega como alpha <[=#
+ste valor de taza de aprendizaje normalmente toma un valor entre 5 y D,
siendo un valor cercano a 5 su!iciente como para variar muy poco los pesos# 'e
usa un valor as de bajo cuando se quiere pulir una respuesta# &or otro lado, un
valor alto cercano a D hara que los pesos cambien bruscamente#
%sar un valor alto siempre, hace que la respuesta oscile y no converja en
una respuesta como lo veamos anteriormente, por otro lado un valor muy
peque-o hara demasiado lento el proceso de entrenamiento# &or eso es
recomendable empezar el entrenamiento con un valor alto de L9, y segn vaya
llegando a una respuesta reducir esta variable hasta converger en una respuesta#
An sabiendo la !uncionalidad e,acta de este par"metro L9, no es posible
asignar un algoritmo que lo describa a lo largo del entrenamiento de la neurona#
As que el valor y la variacin del mismo depender" de la e,periencia emprica de
quien entrena la red, as como la complejidad del problema a resolver# +n todo
caso, muchos optan por dejar con un valor !ijo a este par"metro durante todo el
entrenamiento, el cual casi siempre esta entre 5,C y 5,K#
Dibujo 1*: ,oluci3n Linealidad % &'()!: Propia del autor
9espuesta Deseada
9espuesta Ebtenida
(teraciones
/6
3.%.3 Problema de Linealidad
&ara comprender de mejor manera el problema de linealidad de una
neurona, vamos a tomar como ejemplo un perceptrn de dos entradas, el cual se
puede representar en un plano donde el valor de cada entrada toma un valor en
cada uno de los 4 ejes, gra!icando un punto en el plano, propio de cada conjunto
de entradas#
Ahora, vamos a entrenar a nuestra neurona para que se comporte como una
compuerta lgica A2D, es decir, que responda de acuerdo a la siguiente tablaQ
a b Y
5 5 5
5 D 5
D 5 5
D D D
Jra!icando este problema en un plano tendramos queQ
&
a
b
Y
/1
Dibujo 10: 2ompuerta 5D % &'()!: Propia del autor
Ahora, si observamos la ecuacin que describe el comportamiento del perceptrn
tenemosQ

=
=
n
i
i i
$ ; (
1
"f " 0 1 $ 2 3 + $Else 2 3 1
Y aplicada al problema de nuestro ejemplo tenemosQ
2 1
$ b $ a ( + =
&ues bien, est" !ormula es correspondiente a la ecuacin de una recta, en dondeQ

2 => 5; r + + =

1
2 1
+ + = $ b $ a (
A Z 7D Q 0 Z 74 Q F Z a Q Y Z b Q * Z D
*omo sabemos, las constantes que dan !orma a una recta son A y 0,
correlacionadas a nuestra neurona, vendran a ser los pesos de la misma# As es

Y Z D
Y Z 5
5 D
a
b
D
5
/2
que al modi!icar los pesos de esta neurona, en realidad estamos creando y
ubicando una recta en el plano#
%na recta que resuelva nuestro problema, se gr"!ica en el plano a continuacinQ
Dibujo 1/: ,oluci3n 2. 5D % &'()!: Propia del autor
9ecordando a la ecuacin de la recta que usualmente us"bamos para saber si un
punto <,,y= o en este ejemplo <a,b= se encontraba !ormando parte de la recta#
Ahora vamos a usar la ecuacin para saber a que lado de la recta se encuentra
un punto#
Y esto se logra solo viendo si el resultado es positivo, se encuentra a un lado, y si
es negativo, se encuentra al otro# *laro, tendiendo en 5 que nuestro punto !orma
parte de la recta#
De esta !orma, los valores constantes que representan a esta recta, ser"n los
valores de los pesos de nuestra neurona al llegar a la respuesta de este
problema#

Y Z D
Y Z 5
5 D
a
b
D
5
r
/3
>isto desde este punto, al inicializar los pesos de !orma aleatoria, estamos
colocando una recta cualquiera en el plano, y esta empieza a moverse a medida
que nuestra neurona se entrena, hasta llegar a separar un conjunto de otro#
'i analizamos cualquier otro ejemplo de 4 entradas, podremos gra!icar los
conjuntos de respuesta en un plano, y gra!icar una recta que los separe# Dando
as con el valor de los pesos para que un perceptrn resuelva el problema#
&or ejemploQ
Dibujo 16: Problema Lineal % &'()!: Propia del autor
'i trabajamos con una sola entrada, podemos gra!icar los valores como puntos
sobre un solo eje, y la LrectaM solucionadora quedara e,presada solo como un
punto que separe los do grupos a clasi!icar#
'i trabajamos con tres entradas nos tocara gra!icar los valores en un plano en
tres dimensiones, y la LrectaM solucionadora debera ser ahora un plano que
separe un grupo de otro#
De esta !orma, si trabajamos con W entradas, en teora se debera gra!icar los
valores en un plano de W dimensiones, lo cual no es posible, al menos por ahora,
a
b

Y Z D
Y Z 5
r
/4
y la separacin estara dada por un cubo# +n todo caso, el modelamiento
matem"tico sirve para resolver problemas de cualquier nmero de entradas, as
no sea posible un modelamiento gr"!ico del mismo#
Ya sea con una, dos o LnM entradas, el &erceptrn solo responde a una respuesta
LlinealM si$ndole imposible resolver problemas donde sus respuestas requeridas
no puedan ser separadas por una lnea# Y es as que 8arvin 8ins1y y 'eymour
&apera del 8(3 en DBKB mostraban la imposibilidad del perceptrn al tratar de
resolver la operacin binaria FE9# Dado que, la tabla de verdad de la FE9 y su
respuesta debera serQ
a b Y
5 5 5
5 D D
D 5 D
D D 5
*omo se puede apreciar, una recta no podra nunca dar resultado a este
problema# Adem"s, argumentando que los problemas en la naturaleza responden
Dibujo 17: 2ompuerta ;&' % &'()!: Propia del autor
/5
m"s a una solucin desordenada que a una ordenada que demanda una
respuesta no lineal de los sistemas, por ejemploQ
Dibujo 19: Problema o Lineal % &'()!: Propia del autor
As es como estos investigadores del 8(3 recomendaron en su libro
abandonar toda investigacin respecto al uso del las neuronas arti!iciales# Y as
!ue que durante D5 a-os no se hizo mayor investigacin al respecto#
a
b

Y Z D
Y Z 5
r
/=
3.8 Perceptrn 9ulticapa
+n DB?4 de se muestra una investigacin realizada por el mismo 8(3 que a-os
atr"s haba sepultado al perceptrn, la posibilidad de armar una red con
perceptrones, es decir combinar un conjunto de neuronas arti!iciales y hacerlas
!uncionar a la par para resolver un mismo problema# A esta combinacin de
neuronas arti!iciales se le conoci como &erceptrn 8ulticapa, y es aqu donde
nace la idea propiamente dicho de Rds Nu5r"1s Ar5i4i6i"1s#
+stas redes estar"n organizadas por capas, teniendo nicamente dos al
inicio, la capa de entrada y la capa de salida# Y ambas interconectadas teniendo a
todas las neuronas de la capa de salida con una cone,in o peso para cada una
de las neuronas de la capa de entrada#
Dibujo 1<: (ntercone?i3n de capas % &'()!: Propia del autor
+ste modelo sirvi para combinar varias neuronas arti!iciales en un mismo
problema, pero seguan siendo perceptrones que respondan a una respuesta
lineal# +s as que se vio la necesidad de e,pandir este modelo y aumentar una o
//
varias capas m"s en el medio, conocidas como CAPAS OCULTAS, en ingl$s
1ides &a2ers , que pueden ser una nica capa o varias#
Dibujo 20: !structura de una '5 % &'()!: Propia del autor
+n este ejemplo, se ve una red neuronal con A capas ocultas, adem"s de la capa
de entrada y salida#
*omo podemos ver gr"!icamente, las salidas de una neurona vienen a ser las
entradas para cada neurona de la capa siguiente, de la misma !orma para la capa
subsiguiente hasta llegar a la capa de salida que o!rece los resultados !inales de
la red# 3odas las neuronas de las capas ocultas y de salida responden bajo la
misma e,presin matem"tica vista con el perceptrn, en cuanto a la capa de
entrada, esta no e!ecta ningn c"lculo interno, solo sirve como soporte para la
distribucin de las entradas hacia todas las neuronas de la capa subsiguiente# +s
decir, las neuronas de la capa de entrada responden simplemente a una
e,presin de paso <Lo que entra, sale=#
De esta !orma, las redes neuronales logran brindar un resultado NO&LINEAL, y
claro pueden resolver el problema de la -OR sin problemas# A continuacin un
ejemplo de una red neuronal de tres capas que logra resolver el mencionado
problema#
/2
Dibujo 21: ,oluci3n de la 2. ;&' % &'()!: Propia del autor
+n cuanto al algoritmo de aprendizaje, las redes neuronales se clasi!ican en dos
grandes gruposQ
Aprendizaje 'upervisado
Aprendizaje 2E/'upervisado
'iendo la primera aquella que necesita saber la salida deseada antes de empezar
el proceso de aprendizaje# 'e le conoce como supervisada por el mismo hecho de
tener que o!recerle las salidas que se buscan, lo que implica inevitablemente
saber las salidas que se quieren, lo cual no siempre es un dato al que tenemos
acceso# +n este sistema, se encuentran varios algoritmos teniendo el m"s usado
y popular al 0ac1/&ropagation el cual se e,plicar" en detalle m"s adelante#
+l aprendizaje 2o/'upervisado es un dise-o di!erente de redes neuronales donde
la propia red establece cuales son las mejores salidas que puede o!recer# +sto
representa como en todo, puntos a !avor y en contra# &or un lado hace m"s
din"mico el aprendizaje y logra converger a soluciones de una manera m"s
natural y m"s cercana al modelo biolgico del cerebro# &ero por otro lado, el no
tener las salidas deseadas, hace imposible calcular una taza de error y por lo
tanto muy complejo saber hasta cuando llevar a cabo el entrenamiento de la
misma# +n este tipo de aprendizaje entran modelos de redes como las de \anon,
8apas Auto/Erganizativos y dem"s#
/5
3.8.1 *eurona arti#icial au?iliar /1IA50:
+l manejo de las redes neuronales de !orma emprica o!reci muchos resultados a
los investigadores quienes buscan maneras de hacer el aprendizaje m"s e,acto y
sobretodo r"pido# +n base a uno de estos estudios empricos naci la idea de una
neurona arti!icial au,iliar a la que llamaron 3endencia o por su ingl$s 0(A', que
no es m"s que un perceptrn en una capa que siempre tendr" como valor de
entrada la unidad <D=, de esta !orma no a!ecta como entrada al sistema, pero sus
pesos si a!ectan al conjunto# Agregar esta neurona au,iliar demostr en la
pr"ctica mejoras muy signi!icativas en varios problemas, y el uso o no de la
misma an no est" regido a una norma, como muchas cosas en las redes
neuronales, esta depende de la e,periencia del dise-ador de la red#
La mayora de autores, muestran a la neurona au,iliar como una neurona de
!orma triangular, ubicada como una neurona m"s en la capa anterior y sin
representar su entrada, puesto que siempre ser" D#
Dibujo 22: eurona =(5, % &'()!: Propia del autor
26
8uchas veces el modi!icar un peso, implicar alterar signi!icativamente la
entrada al que corresponde dicho peso# La neurona au,iliar 0(A' nos brinda la
posibilidad de tener pesos, los cuales podemos modi!icar sin que esto implique
alterar a su entrada, puesto que su entrada siempre ser" D y por lo tanto no
tomada en cuenta, adem"s es una neurona au,iliar, es decir est" como sobra del
sistema y por lo tanto no inter!iere, pero si nos da varios pesos m"s que mover y
as converger a un resultado m"s r"pido#
21
3.@ Al(oritmo de aprendi>aje: 1ACAP2OPA!ATIO*
3.@.1 Introduccin:
La creacin de redes multicapas resolva el problema de linealidad como ya vimos
anteriormente, pero plantea un nuevo problema en cuanto al algoritmo de
aprendizaje#
&ara usar la regla delta se necesita saber los valores de salida deseados y
compararlos con los valores obtenidos por la red neuronal, sin embargo al tener
una o varias capas ocultas, necesitaramos conocer los valores que quisi$ramos
que dicha capa oculta saque, y esto no es posible# 2o obstante las salidas
deseadas de la capa de salida si se los tiene, al ser un aprendizaje supervisado y
podemos saber el error general de la red neuronal y en base a este error,
distribuirlo hacia las capas ocultas usando una modi!icacin o generalizacin de la
regla delta, conocida mejor como algoritmo 9"6APro="g"5io/ haciendo $n!asis
en la idea de capturar el error en la capa de salida y propagar el error hacia atr"s,
llegando a todas las capas ocultas#
Dibujo 2*: Propagaci3n de errores hacia atr@s % &'()!: Propia del 5utor
22
3.@.2 2esumen 6istrico:
+n DBHW, &aul >erbos, &h#D# de la %niversidad de Rarvard, publica el libro IT>
Roo5s o4 9"6APro="g"5io/J donde describe un sin nmero de procesos
matem"ticos para propagar el error hacia atr"s en cualquier red de modelamiento
paralelo# Dado que las redes neuronales se consideran un tipo especial de redes,
sus colegas cient!icos tomaron poca o ninguna importancia a sus estudios que
generalizaban este proceso sin darle una utilidad concreta a las redes neuronales#
Doce a-os despu$s de esto <DB?K=, dos trabajos realizados al mismo tiempo por
David +# 9umelhart, Jeo!!rey +# Rinton y 9onald O# 7illiams, David &ar1er y
Yann Le *un, mostraban un algoritmo bac1propagation mucho m"s concreto,
estable y dedicado a las redes neuronales; recibiendo mucha acogida por la
comunidad de desarrolladores#
'in embargo !ue gracias al libro que el mismo a-o publicaron David + 9umelhart y
Oames L 8c*lelland de la %niversidad de *ali!ornia con el ttulo de LP"r"111
dis5ribu5d =ro6ssi/gM que hizo del algoritmo uno de los m"s populares y
usados m$todos de aprendizaje hasta nuestros das#
Libro 1: "he 'oots o. =ackPropagation % (,=: <790071/<9<79
Dibujo 20: Da1id !. 'umelhart % &'()!:
http://www.graweme8er.com/ps8cholog8/pre1ious/02.htm
23

Libro 2: Parallel Distributed Processing % (,= 02621912*1
Dibujo 2/: Aames L -c2lelland % &'()!:
http://www.graweme8er.com/ps8cholog8/pre1ious/02.htm
24
3.@.3 Al(oritmo de Aprendi>aje:
La regla delta generalizada o 0ac1propagation se puede resumir simplemente
comoQ
2
1
! $ $
t t
=
+

DondeQ
1 + t
$
Z 2uevo valor del peso
t
$
Z >alor actual del peso
Z L9 <Learning 9ate= o taza de aprendizajeQ >alor +ntre 5 y D
2
!
Z Jradiente negativa del error medio cuadr"tico
+ntonces la di!erencia entre el nuevo y el actual valor del peso esta dado por la
gradiente negativa del error medio cuadr"tico, atenuado por el L9
+l LR o 5"G" d "=r/diG"j es un valor que va entre 5 y D, siendo 5 un indicador
que no hara ningn cambio en el peso, y D el que deje pasar todo el valor al
nuevo peso# As un 5,C atenuara el cambio del nuevo peso a la mitad#
+n posteriores captulos trataremos de nuevo el valor de la taza de aprendizaje
para entender mejor como a!ecta en el entrenamiento de la red neuronal#
La gradiente inversa del error se describe como la derivada del error
respecto a todos los pesos de la red#
$
!
!

=
2
2
25
&ara continuar desenvolviendo la derivada hasta llegar a una representacin
matem"tica !"cil de interpretar en cdigo, veamos una vez m"s la nomenclatura
usada para de!inir todas las partes de una red neuronal#
&ara este ejemplo demostrativo, solo veremos una red neuronal con una capa
oculta#
AsQ
E
1
Z 'alida de la primera neurona de la capa de entrada
i Z 2umero de neuronas en la capa de entrada
O
1
Z 'alida de la primera neurona de la capa oculta
. Z 2umero de neuronas en la capa oculta
!
1
Z 'alida de la primera neurona de la capa de salida
8 Z 2umero de neuronas en la capa de salida
K
i.
Z &eso que conecta a la neurona LiM de la capa de entrada y la neurona LjM
de la capa oculta#
2=
K
.8
Z &eso que conecta a la neurona LjM de la capa oculta y la neurona L1M
de la capa de salida#
Adem"s teniendo implcitamente cada neurona variables tales comoQ
I
E1
Z >alor neto de la primera neurona de la capa de entrada
M
iO.
Z >alor de entrada LiM de la neurona LjM de la capa oculta
I
!8
Z >alor neto de la neurona L1M de la capa de salida
+ntonces para sacar el error medio cuadr"tico procedemos a aplicar la
siguiente !rmula
D?
Q

=
=
k
n
n n
, D !
1
2 2
: 9
2
1
DondeQ
D
n
Z 'alida Deseada de la neurona en la posicin LnM
&uesto que en estos momentos no tenemos idea de los valores que tienen
los pesos, por muchos motivos, empezando con que se inicializan con valores
aleatorio; no es posible sacar una derivada num$rica del error medio cuadr"tico
con respecto a los pesos, as que debemos operar la derivada hasta llegar a
e,presarla en otro dominio#
12 ?tt,%NNo?+.ut,.*'u.(oNn*u&onal*sNCa,itulo2N;a(8,&o,agationNR*gla;.?t+
2/
3.3.3.% Capa de 4alida:
'iendoQ
jk
$
!

2

La gradiente inversa del error con respecto a los pesos que corresponden a las
cone,iones entre la capa oculta y la capa de salida < j 1 =#
3enemosQ
jk
k
n n
k
n
n n
jk jk
$
,
, D , D
$ $
!


=
: 9 : 9
2
1
1
2
2
Ahora tenemos a la derivada de las se-ales de salida con respecto a los pesos#
+ntonces sabiendo que la salida es una !uncin directa de la sumatoria interna de
las entradas a la que llamamos < ( =, aplicamos la regla de la cadenaQ
jk
k
k
k
jk
k
$
(
(
,
$
,

+ntonces, reemplazando esta ecuacin con la anterior tenemos queQ


jk
k
k
k
k k
jk
$
(
(
,
, D
$
!

: 9
2
22
9ecordando que : 9( . > = tenemosQ
jk
,k
,k k k
jk
$
(
( . , D
$
!

: 9 ^ : 9
2
Y recordando tambi$n queQ
( )

=
=
j
n
nk n k
$ ; (
1
tenemosQ
j ,k k k
jk
& ( . , D
$
!
=

: 9 ^ : 9
2
'iendo LO
.
L la salida de la capa oculta, y por lo tanto entrada de la capa de
salida#
+ntonces volviendo a la !rmula principal de cambio de pesos tenemos queQ
j ,k k k jk jk
& ( . , D $ $
t t
+ =
+
: 9 ^ : 9
: 9 : 1 9

3eniendo a mejor e,presar comoQ
j ,k k k jk
& ( . , D $ = : 9 ^ : 9
jk jk jk
$ $ $
t t
+ =
+

: 9 : 1 9
DondeQ
jk
$ Z +s la di!erencia o cambio a aplicar en el peso K
.8
25
3.3.3.2 5na Capa 6culta:
+n cuanto a los pesos de la capa oculta, basta con proyectar la misma !rmula
teniendo en cuenta que ahora la derivada del error a desarrollar y su respectiva
regla de la cadena quedaran asQ
ij
&j
&j
j
j
,k
,k
k
ij
k
$
(
(
&
&
(
(
,
$
,

9esumiendo el proceso, la !rmula !inal quedaraQ


( )
i
k
n
jk ,k k k &j ij
! $ ( . , D ( . $ =

= 1
: 9 ^ : 9 : 9 ^
ij ij ij
$ $ $
t t
+ =
+

: 9 : 1 9
56
3.3.3.3 )enerali'ar a 7 capas 6cultas:
&ara generalizar la !rmula a 2 capas ocultas, vamos a pensar en una red
neuronal de las siguientes caractersticasQ
DondeQ
k
,
Z 2eurona L1M en la capa de salida
l
i
&
Z 2eurona LlM en la capa oculta LiM
m
i
&
: 1 9 +
Z 2eurona LmM en la capa oculta que le sigue a la capa LiM
n
i
&
: 1 9
Z 2eurona LnM en la capa oculta anterior a la capa LiM
51
As, la capa oculta LiM, empezar" siendo la ltima capa, la que se encuentra m"s
cercana a la capa de salida, donde la capa LiGDM ser" la capa de salida y la capa
Mi/DM la penltima capa# Luego la capa LiM pasar" a ser la que muestra el gr"!ico y
que antes era la capa Li/DM y la capa LiGDM pasar" a ser la que antes era la capa LiM
y as sucesivamente hasta cubrir todas las capas ocultas#
Ahora vamos a de!inir un nuevo valor que muchos autores denominan
4Sensitivi!a! !e la ca-a5 <

= y no es m"s que la !uerza que tiene el error


propagado en esa capa#
As, la sensitividad de la capa de salida ser"Q
: 9 ^ : 9
,k k k
k
,
( . , D =
+sta sensitividad es la nica di!erencia a partir de ahora entre una capa de salida
y una capa oculta, siendo la sensitividad de una capa ocultaQ
( )

=
=
+
n
j
mj
j
&
m &
m
&
$ ( .
i
i
i
1
: 1 9
: 9 ^
La generalizacin de las !rmulas para el cambio de pesos sera entoncesQ
l
i
m
&
lm
o
& $
i i
: 1 9
=
lm
o
lm
o
lm
o
i
t
i
t
i
$ $ $ + =
+

: 9 : 1 9
52
$ CAPITULO I3: An:lisis
$.1 Introduccin
+n el presente captulo se detallaran todos los requerimientos y limitaciones que
va a tener la tesis en!oc"ndose en el aspecto t$cnico# 3eniendo toda la teora a
disposicin, el an"lisis se dar" mediante una auto evaluacin de las necesidades
que se quiere cubrir, actuando como %suario &rogramador <cliente= y
desarrollador al mismo tiempo#
$.2 Limitaciones
Dejando a un lado las limitaciones propias del hard;are y so!t;are que actan
como plata!orma, en cuanto al sistema se re!iere, este tendr" nicamente el
algoritmo de aprendizaje por 0ac1propagation, usando las !rmulas matem"ticas
que se muestran con detalle en el captulo A#
53
$.3 2eBuisitos
Desarrollar ntegramente el cdigo en *. v4#
*ompilar el cdigo en base al 8icroso!t 6rame7or1 v4#5
*rear un componente que permita usar una red neuronal arti!icial, teniendo
las siguientes caractersticasQ
2mero ilimitado
:
de neuronas en la capa de entrada
2mero ilimitado
:
de neuronas en la capa de salida
2mero ilimitado
:
de capas ocultas, pudiendo ir desde ninguna hasta
las que se requieran#
2mero ilimitado
:
de neuronas en cada capa oculta#
(ntegrar las siguientes !unciones de trans!erenciaQ
+scaln
Lineal
'igmoide Logartmica
'igmoide 3angencial
Jauss
(ncluir una !uncin de trans!erencia personalizada por el %suario
&rogramador, es decir, que pueda escribir directamente la !rmula
matem"tica que desea como !uncin de trans!erencia#
&oder asignar una !uncin de trans!erencia por cada capa de !orma
independiente#
&oder usar opcionalmente la neurona au,iliar L0(A'M por cada capa de
!orma independiente#
\ Li+ita'o ,o& las (a,a(i'a'*s '* so1t7a&* 3 ?a&'7a&* '*l (o+,uta'o&@ ,o& *.*+,lo +*+o&ia RA.
54
(ncluir una !orma de inicializar todos los pesos de la red de !orma
aleatoria#
Dadas un nmero de muestras de entradas y salidas deseadas, que
ejecute su debido aprendizaje usando el algoritmo de bac1propagation#
&ermitiendo, as mismo, elegir los par"metros de aprendizaje como son
la taza de aprendizaje, el momento y el error mnimo para terminar el
proceso de aprendizaje#
+l proceso de aprendizaje debe reportar su avance mediante un evento
donde indique el error y la iteracin llevada a cabo#
+l proceso de aprendizaje debe correr en otro hilo que el programa
principal# &uesto que dicho proceso es largo, no debe paralizar el
programa principal#
Debe permitir consultar a la red neuronal arti!icial dada un vector de
entradas teniendo como resultado el vector de salida e indicando cual
de ellas es la mayor#
3odos los par"metros a modi!icar por el %suario &rogramador deben de
estar como L&ropiedadesM para poder usar la inter!az de dise-o de
nuestro (D+ de programacin#
&oder e,portar las con!iguraciones y pesos de una red hacia una
estructura F8L <Ebjeto Data'+3=
&oder e,portar las con!iguraciones y pesos de una red hacia una
archivo e,terno#
55
*rear un control que permita visualizar la con!iguracin y !uncionamiento
del componente de redes neuronales arti!iciales con las siguientes
caractersticasQ
&oder seleccionar cual objeto del componente se requiere visualizar#
>isualizar todas las capas y neuronas de la red#
Di!erenciar claramente entre la capa de entrada, salida y ocultas en el
caso de e,istir#
Dada la variedad de nmero de neuronas que puede haber en cada
capa, se requiere poder variar el tama-o del gr"!ico que represente a
una neurona#
&oder cambiar los colores de cada capa#
>isualizar los valores num$ricos de cada entrada y cada salida de la
red#
>isualizar las cone,iones o pesos de la red#
9epresentar con un color, el valor num$rico del peso en cada una de
las cone,iones#
3oda el diagrama de la red debe ser auto/escalado dependiendo del
tama-o del control, es decir, si el control cambia de tama-o en alguna
accin como por ejemplo ma,imizar la ventana, el gr"!ico se ajusta al
nuevo tama-o#
Asignar el nmero de decimales a mostrar en los valores num$ricos de
la capa de salida
&oder cambiar el tipo de letra y color del te,to mostrado en el visor#
5=
&ermitir en tiempo de dise-o y por medio de este control varias tareas
del componente de redes neuronales, como sonQ
Asignar pesos aleatorios
Asignar valores a cada una de las entradas de la red
+jecutar una consulta con los valores de entrada actuales
Juardar y 9estaurar un archivo donde est$ la con!iguracin y pesos
de la red#
(ngresar en tiempo de ejecucin los valores de las entradas de la red#
9epresentar la neurona au,iliar L0(A'M#
%sar crculos para la representacin de las neuronas, lineas para las
cone,iones y tri"ngulos para las neuronas au,iliares L0(A'M#
8ostrar gr"!icamente en el centro de cada neurona, un smbolo que
indique la !uncin de trans!erencia usada#
+ncapsular ambos controles en un archivo DLL#
Documentar con comentarios F8L el cdigo#
5/
$.$ 2e#erencias a otros pro&ectos
A la !echa de inicio de este proyecto, no e,ista ningn trabajo sobre redes
neuronales arti!iciales escritas en el lenguaje de programacin *., que se pueda
encontrar, ya sea en algn libro o en el (nternet# +l no encontrar ningn trabajo de
este tipo !ue una de las razones que impulso el desarrollo de esta tesis#
2o obstante, a la !echa de hoy, se puede encontrar m"s de un trabajo realizado
en *. re!erente a las redes neuronales arti!iciales# &royectos que nunca se
tomaron como re!erentes para el an"lisis, ni desarrollo de la tesis actual# 'in
embargo, luego de la culminacin del mismo, se ha revisado brevemente algunos
de los trabajos encontrados en (nternet y se ha podido ver con satis!accin
di!erencias muy grandes entre todos los proyectos#
A continuacin se muestra las re!erencias de los proyectos de redes neuronales
arti!iciales que se ha podido encontrar en (nternet hasta la !echa de hoy#
Ti5u1o< A( Q 2eural 2et;or1 !or beginners <&arte D, 4 y A =
Au5or< 'acha 0arber
U/i0rsid"d< 'usse, %niversity in (n!ormation 3echnology !or +/
*ommerce <(3+*= (nglaterra
URL< httpQII;;;#codeproject#comIcsIalgorithmsI2eural2et;or1)D#asp
Ti5u1o< *. 2eural net;or1 library
Au5or< 6ranc1 6leurey <6rancia=
URL< httpQII!ranc1#!leurey#!ree#!rI2eural2et;or1
52
$.% )ia(ramas de Casos de Uso
$.%.1 )ia(rama de Casos de Uso *C 1:
C"so d Uso< *rear Aplicativo para entrenar#
A65ors< &rogramador
Ds6ri=6i/< +s necesario crear un aplicativo para poder entrenar la 92A que se
encuentra en !orma de componente en un archivo DLL# 9azn por la cual el caso
de uso presente muestra como crear un aplicativo en cualquier lenguaje de
Dot2+3, por ejemplo >0#2+3 y muestra tambi$n como agregar la re!erencia del
DLL para usar los componentes#
Dibujo 26: 2aso de uso B 1 % &'()!: Propia del
5utor
55
$.%.2 )ia(rama de Casos de Uso *C 2:
C"so d Uso< Agregar y *on!igurar una 92A
A65ors< &rogramador
Ds6ri=6i/< +l componente 92A que ahora se debe encontrar en la barra de
herramientas del tiempo de dise-o de un !ormulario, se agrega como cualquier
otro componente, es decir arrastr"ndolo hacia el !ormulario# %na vez colocado, se
procede a con!igurarlo mediante la ventana de &ropiedades del entorno de
dise-o#
Dibujo 27: 2aso de uso B 2 % &'()!: Propia del
5utor
166
$.%.3 )ia(rama de Casos de Uso *C 3:
C"so d Uso< Agregar y *on!igurar el control 92A)>isor
A65ors< &rogramador
Ds6ri=6i/< +l control 92A)>isor que ahora se debe encontrar en la barra de
herramientas del tiempo de dise-o de un !ormulario, se agrega como cualquier
otro componente, es decir arrastr"ndolo hacia el !ormulario# %na vez colocado, se
procede a con!igurarlo mediante la ventana de &ropiedades del entorno de dise-o
y sirve como visualizador de un componente 92A#
Dibujo 29: 2aso de uso B * % &'()!: Propia del
5utor
161
$.%.$ )ia(rama de Casos de Uso *C $:
C"so d Uso< +ntrenar una 92A
A65ors< &rogramador, +structura F8L <Data'et=
Ds6ri=6i/< La etapa de entrenamiento de la red neuronal# *on este proceso se
especializa a la red en una tarea dada#
Dibujo 2<: 2aso de uso B 0 % &'()!: Propia del 5utor
162
$.%.% )ia(rama de Casos de Uso *C %:
C"so d Uso< *onsultar una 92A
A65ors< &rogramador, +structura F8L <Data'et=
Ds6ri=6i/< La etapa de consulta es el uso como tal del sistema, una vez
entrenada la red, est" lista para ser consultada o usada#
Dibujo *0: 2aso de uso B / % &'()!: Propia del 5utor
163
$.%.8 )ia(rama de Casos de Uso *C 8:
C"so d Uso< 3rabajar con el visor de la 92A
A65ors< &rogramador
Ds6ri=6i/< 'e puede visualizar el proceso de una red neuronal mediante este
control, este caso de uso, muestra su utilizacin#
Dibujo *1: 2aso de uso B 6 % &'()!: Propia del
5utor
164
% CAPITULO 3: )ise=o
%.1 Introduccin
+n el presente captulo, se analizar" el dise-o de los controles que permitir"n el
uso de redes neuronales arti!iciales# 3eniendo el an"lisis en el captulo anterior,
aqu veremos el dise-o de las clases y secuencia de operaciones, manteniendo el
modelamiento %8L#
165
%.2 )I5+DO )+L 5O,TEA2+ /U9L0
%.2.1 )ia(ramas de Clases
+l detalle de las clases se muestra a continuacin, representados con la siguiente
simbologaQ

Dibujo *2: Diagrama de 2lases % &'()!: Propia del 5utor
Dibujo **: Le8enda de Diagramas de 2lases %
&'()!: Propia del 5utor
16=
Dibujo *0: Diagrama de 2lases CDetalle 1D % &'()!: Propia del 5utor
16/
Dibujo */: Diagrama de 2lases CDetalle 2D % &'()!: Propia del 5utor
162
%.2.2 )ia(ramas de 5ecuencia
/.2.2.% Diagrama de 4ecuencia 78 %: *on!iguracin de la 92A
A65ors< &rogramador
Dibujo *6: 2on.iguraci3n de la '5 % &'()!: Propia del 5utor
165
/.2.2.2 Diagrama de 4ecuencia 78 2: *ambiar 6uncin *ustom
A65ors< &rogramador
Dibujo *7: 2ambiar #unci3n 2ustom % &'()!: Propia del 5utor
116
/.2.2.3 Diagrama de 4ecuencia 78 3: +ntrenamiento de la 92A
A65ors< &rogramador
Dibujo *9: !ntrenamiento de la '5 % &'()!: Propia del 5utor
111
/.2.2.- Diagrama de 4ecuencia 78 -: %so de la 92A
A65ors< &rogramador
Dibujo *<: Eso de la '5 % &'()!: Propia del 5utor
112
/.2.2./ Diagrama de 4ecuencia 78 /: %so del >isor de la 92A
A65ors< &rogramador
Dibujo 00: Eso del +isor de la '5 % &'()!: Propia del 5utor
113
8 CAPITULO 3I: Construccin
8.1 <erramientas Usadas:
*omo se ha repetido a lo largo de todo el documento, todo el sistema est"
programado ntegramente en el lenguaje de programacin *., compilado bajo el
6rame7or1 de 8icroso!t en su versin 4#5
+l (D+ de programacin usado es el S>"r=D01o= 0*?* que se puede descargar
gratuitamente de su p"gina ;eb como se indico en el captulo 4#
As mismo, se prob abrir y ejecutar el proyecto desde el (D+ de 8icroso!t >isual
'tudio 455C con todo $,ito, ya sea en su versin gratuita <+,press= como en la
pro!esional#
Adem"s, para la creacin del control que muestra una representacin gr"!ica, se
uso el motor JD(G propio de Dot2+3# As mismo se usaron punteros y manejo de
hilos# 3odos estas herramientas e,plicadas en el captulo 4#
114
8.2 Componente 2*A
+l componente encargado de mani!estar todo el comportamiento de la red
neuronal arti!icial como ya vimos en el diagrama de clases, se llama 92A por sus
siglas# +ste componente ser" una clase heredada de Component que es una
clase propia del 0*L del !rame;or1 y encapsula todas las propiedades y m$todos
que le permiten comportarse como un componente de usuario y poder ser usado
como tal en todo el (D+#
3odas las clases usadas estar"n dentro de un namespace llamado (A)92A,
haciendo re!erencia que es parte de la (nteligencia Arti!icial# 2ombre que llevara
tambi$n el ensamblado DLL#
+l cdigo de esta clase, como en el resto de clases, est" debidamente organizado
utilizando los 9+J(E2, que son sentencias ignoradas por el compilador que
sirven para agrupar el cdigo y as ser m"s !"cil organizarlo#
Adem"s, el uso de comentarios F8L para documentar el cdigo resulta muy
recomendable puesto que a la hora de compilar, estos comentarios se enlazan
como 8etadatos a la aplicacin !inal, siendo en este caso el archivo DLL# De esta
!orma un (D+ como el 'harpDevelop o el >isual 'tudio pueden mostrar estos
comentarios din"micamente al %suario &rogramador#
&or otro lado, e,isten muchas herramientas e,ternas como el Document9 : de la
empresa innovasys que nos permiten generar todo un documento de ayuda en
base a estos comentarios F8L de !orma autom"tica# +n el transcurso de este
capitulo, presentaremos pedazos de cdigo y muestras del documento de ayuda
generado con esta herramienta e,terna#
115
+n este gr"!ico se puede apreciar la organizacin que nos brinda los 9+J(E2s,
as como un comentario F8L, que siempre comienzan con un triple smbolo de
dividido <slash LIM =# +n el ejemplo, se muestra un resumen <sumary= de lo que va
a hacer esa clase#
La linea de cdigo que se muestra justo encima de la declaracin de la clase,
sirve para asignar un icono al componente y as lograr que este salga en la barra
de herramientas de nuestro (D+#
Dibujo 01: 2lase '5 % &'()!: ,harpDe1elop 2.2
11=
+n cuanto al documento de ayuda generado, se puede ver en el siguiente gr"!ico
una muestra de como nos presenta las propiedades del
Del mismo modo, estos comentarios F8L pueden brindar m"s in!ormacin, como
por ejemplo en los m$todos, se puede describir los argumentos de entrada, la
salida, e incluso colocar un ejemplo de aplicacin# 3odo esto e,portado al
documento de ayuda#
A continuacin se muestra un ejemplo del cdigo de los comentarios F8L y del
archivo de ayuda, que adicionalmente deja e,presada la declaracin en algunos
lenguajes de Dot2+3#
Dibujo 02: Propiedades del '5 % &'()!: 58uda )enerada con DocumentF; /.0
11/
Dibujo 0*: -:todo !1aluar % &'()!: ,harpDe1elop 2.2
Dibujo 00: 58uda: -:todo !1aluar % &'()!: 58uda )enerada con DocumentF; /.0
112
8.3 Clase CAPA
La capa clase contiene todas las !uncionalidades de una capa de la red neuronal,
y esta maneja todas las neuronas de una !orma global# +s decir, en primera
instancia se piensa en crear una clase 2+%9E2A que contenga el algoritmo de
proceso y aprendizaje, y que un vector de objetos de tipo 2+%9E2A sea una
capa# 2o obstante en el presente trabajo se decidi usar una clase *A&A que
maneje todas las !uncionalidades de proceso y aprendizaje de todas las neuronas
de dicha capa; desapareciendo de cierta !orma la individualidad de la neurona#
Dibujo 0/: 2lase 25P5 % &'()!: ,harpDe1elop 2.2
115
8.$ Clase CapaColeccion
+sta capa nace de la necesidad de poder mani!estar las capas ocultas, puesto
que estas pueden estar entre 5 o un nmero alto# As es que se crea una clase
que, con la ayuda de la clase Collection del 0*L del 6rame7or1, administra todo
lo re!erente a una lista o coleccin din"mica, es decir, tener los m$todos Add,
*lear, etc#
*abe recalcar que esta estructura de herencia es nueva, y que al menos hasta
ahora, no se ha visto en otro lenguaje de programacin# Y es que no solo se
hereda la clase Collection, sino en la misma declaracin de clase, se indica la
clase de la cual se va a hacer la coleccin, siendo en este caso la clase *A&A#
Dibujo 06: 2lase 2apa2ollection % &'()!: ,harpDe1elop 2.2
126
8.% Clase +aluador5trin(
+sta capa cumple un papel espec!ico y no indispensable en el sistema#
+ntre las !unciones de trans!erencia que e,isten, tenemos la opcin *%'3E8,
que se encarga de dar una ventana a que el %suario &rogramador para que
pueda personalizar su !uncin de trans!erencia# +ntonces para lograrlo, se crea
esta clase que permite crear una !uncin virtual en tiempo de ejecucin# +sto es,
que mientras se est" ejecutando el programa, se puede escribir en una cadena de
te,to una !uncin, compilarla y usarla#
Jracias a esta clase que permite evaluar como cdigo un 'tring, se puede crear
una !uncin virtual donde se deje espacio para que el %suario &rogramador cree
una !uncin matem"tica a gusto y la ingrese dentro de la propiedad
formula;Custom de la clase *A&A#
Dibujo 07: 2lase !1aluador,tring % &'()!:
,harpDe1elop 2.2
121
8.8 Clase 2*AF3isor
+s la clase m"s e,tensa del sistema, y se encarga de crear una representacin
gr"!ica de la red neuronal# +sta se instancia como un control normal, y entre las
propiedades solicita se indique que red neuronal se desea visualizar# 3eniendo
que tener previamente ya una instancia de 92A#
Dibujo 09: 2lase '5G+isor % &'()!: ,harpDe1elop 2.2
122
+ste control se hereda de la clase 5serControl del 0*L del 6rame;or1, y
sobrecarga el m$todo 6nPaint del mismo para lograr la mejor !orma de
gra!icacin# &uesto que el m$todo 6nPaint se ejecuta autom"ticamente cuando el
control requiere dibujarse, dando mucha !acilidad de hacerlo al heredar tambi$n el
objeto Jraphics o Lienzo del control# 3oda esta in!ormacin de como dibujar en un
control s ella puede encontrar en el captulo 4; donde se especi!ica la creacin de
controles y el manejo del JD(G, puesto que absolutamente todos los gr"!icos de
este visor, son creados con el JD(G#
123
@ CAPITULO 3II: +jemplo de Aplicacin /OC2 1:sico0
@.1 Introduccin
&ara poder mostrar el correcto !uncionamiento de los controles para redes
neuronales creados en el presente trabajo, es necesario darle un aplicativo real#
&or esta razn, a continuacin se presenta un peque-o ejemplo de aplicacin de
uno de los m"s comunes usos de las redes neuronales, que es un E*9
<9econocimiento Yptico de *aracteres, por sus siglas en ingl$s=#
+l uso de redes neuronales para el reconocimiento de caracteres es muy usado
actualmente principalmente por la caracterstica de J+2+9AL(]A*(Y2 de una
red neuronal, la cual permite ingresar un patrn apro,imado a la letra, y la red
determinar" el grado de apro,imacin a cada una de las muestras de
entrenamiento# +sto nos brinda la opcin de ingresar un patrn con cierto grado
de error, inevitable a la hora de trabajar con im"genes#
&ara una demostracin simple, este E*9 va a reconocer las cinco vocales del
al!abeto espa-ol, es decirQ A, +, (, E, %# De una muestra gr"!ica al car"cter A'*((
correspondiente a la letra#
124
@.2 AdBuisicin de la ocal
Dada la orientacin acad$mica/demostrativa de este E*9, la adquisicin de la
imagen se da por medio de una 7eb*A8, conectada al computador, que debe
captar cualquier imagen de una vocal de color negro escrita en mano imprenta en
maysculas en !ondo blanco#
Luego de capturar una imagen est"tica de la ;ebcam, se procede a binarizar la
imagen pudiendo seleccionar manualmente el umbral para ajustarse de mejor
manera a la imagen requerida#
%na vez tenida la imagen, se debe separar la letra de entre toda la imagen
capturada#
3eniendo la imagen de la letra lista, se procede a parametrizar la imagen y
obtener as una muestra num$rica para la red neuronal#
Dibujo 0<: 5dHuisici3n de la 1ocal % &'()!: Propia del autor
125
La parametrizacin de la letra, se da por medio de una matriz H,C que se
ajusta a toda la imagen, y dependiendo de los pi,eles negros en cada cajn
de la matriz, este toma un valor de D para negro, y 5 para blanco, teniendo
al !inal una matriz de 5 y D correspondiente a la imagen# Dicha matriz,
e,presa en orden las AC entradas binarias de la red neuronal a usarse para
el reconocimiento#
Dibujo /0: parametriIaci3n de la 1ocal %
&'()!: Propia del autor
12=
@.3 2edG*euronal Arti#icial
Los pasos a seguir para entrenar una red neuronal para el reconocimiento de
vocales es el siguienteQ
Ebtener las muestras de cada vocal parametrizadas como se indica
anteriormente#
Letra AQ
5 D D D 5 D 5 5 5 D D 5 5 5 D D D D D D D 5 5 5 D D 5 5 5 D D 5 5 5 D
Letra +Q
D D D D D D 5 5 5 5 D 5 5 5 5 D D D 5 5 D 5 5 5 5 D 5 5 5 5 D D D D D
Letra (Q
D D D D D 5 5 D 5 5 5 5 D 5 5 5 5 D 5 5 5 5 D 5 5 5 5 D 5 5 D D D D D
Letra EQ
5 D D D 5 D 5 5 5 D D 5 5 5 D D 5 5 5 D D 5 5 5 D D 5 5 5 D 5 D D D 5
Letra %Q
D 5 5 5 D D 5 5 5 D D 5 5 5 D D 5 5 5 D D 5 5 5 D D 5 5 5 D 5 D D D 5
*rear un objeto de tipo 92A, y un control 92A)>isor en una aplicacin en
*. , tal como muestra el manual de usuario ane,o en la presente tesis#
6ijar como nmero de entradas de la red AC, puesto que son AC los
nmeros de la matriz H,C resultante de la parametrizacin#
12/
6ijar como nmero de salidas de la red neuronal C, puesto que se requiere
nicamente distinguir C tipos de letras, las vocales#
2o !ijar ninguna capa oculta, puesto que se debe siempre empezar sin
ninguna capa oculta, y en caso de ser necesarias, ir aument"ndolas#
Dejar el resto de valores por de!ecto, es decir, sin uso de neuronas
au,iliares 0(A', con la !uncin de trans!erencia 'igmoide, etc#
*orrer el proceso de entrenamiento tal como muestra el manual de usuario
ane,o a la presente tesis, con los valores deQ
L9 Z 5,D
8omento Z 5,B
+rror 8nimo Z 5,555D
+n este caso, la red neuronal termina su proceso de entrenamiento !"cilmente
luego de 45 555 iteraciones# &or lo cual se da por terminado el E*9, listo para
consultar con cualquier letra parametrizada#
122
@.$ Conclusiones del OC2
&ara hacer un reconocedor de m"s letras, por ejemplo todas las
consonantes y vocales del al!abeto espa-ol, es necesario incrementar la
resolucin de la letra, es decir incrementar la matriz de H,C a una con
mayor calidad, por ejemplo una 45,DC, que dara un nmero de entradas
de A55#
+l uso de una capa oculta no !ue necesario, puesto que la red neuronal
logro converger a una solucin con tan solo dos capas# Y esto resulta
lgico, puesto que cada neurona de salida se especializa en un solo patrn
de entradas <letra=, sin inter!erir con las dem"s#
+n el caso de querer representar la letra reconocida en !ormato binario,
como el cdigo A'*((, es indispensable usar una o m"s capas ocultas,
puesto que una letra a!ecta a varias salidas ahora, y esto hace que la
in!ormacin de la capa de salida tenga que ser compartida entre s#
&ara lograr un reconocedor de te,to, el principio de reconocer es el mismo,
es decir, letra por letra# La di!erencia va a estar en el pre/procesamiento de
la imagen, la cual debe seleccionar autom"ticamente letra por letra de todo
un te,to continuo, siendo este un problema m"s de visin arti!icial#
125
H CAPITULO 3III: Conclusiones & 2ecomendaciones
H.1 Conclusiones
+l lenguaje de programacin *. mostr ser un e,celente candidato para el
desarrollo de todo tipo de herramientas, brindando un e,celente equilibrio
entre !acilidad de sinta,is, velocidad y alcance !uncional#
+n el desarrollo de herramientas, la creacin de componentes y controles
<clases en DLL= son la mejor !orma de trabajar, puesto que nos brinda una
e,celente estructura organizativa, una muy buena documentacin y
velocidad de desarrollo al usar cdigo reciclado#
+ncapsular los distintos cdigos probados en una DLL nos brinda muchas
!acilidades como sonQ proteccin de cdigo, compatibilidad entre lenguajes,
velocidad de compilacin, etc#
+l uso del motor gr"!ico JD(G que nos brinda la tecnologa Dot2+3 result
ser muy liviana y r"pida, siendo la mejor !orma de mostrar una inter!az
gr"!ica para nuestros controles# Y as !acilitar el uso y comunicacin entre
el programador y las herramientas#
%sar una estructura F8L como el objeto Data'et propio de Dot2+3 para
ser de puente universal con todo tipo de almacenamiento de datos, es de
vital importancia cuando se crea una herramienta de propsito general#
&uesto que la tecnologa F8L se ha convertido en un est"ndar en cuanto a
portabilidad de datos se re!iere#
136
+l uso de punteros es una e,celente !orma de ganar velocidad en los
procesos, no obstante hay que usarlos con mucho cuidado y no abusar de
los tama-os de memoria que se congelan#
*uando de procesos costosos en tiempo se hablan, es indispensable el
uso de hilos <3hreads=# +n la practica, el uso de esta herramienta brinda
una transparencia a la hora de trabajar con normalidad en todo el sistema,
mientras un proceso se sigue ejecutando en otro hilo#
+l traspaso de un modelamiento matem"tico a uno in!orm"tico,
espec!icamente el de programacin, resulta bastante complejo de muchas
!ormas# &uesto que en el transcurso de este trabajo, el traspaso de las
!rmulas matem"ticas a cdigo resultaba ambiguo, m"s que en la !rmula
en s, en el orden de aplicar uno u otro proceso# +videnciando una !alta de
documentacin al respecto, puesto que todos los te,tos de in!ormacin de
redes neuronales, muestran el camino o la solucin matem"tica y
aconsejan el uso de so!t;are dedicado como el 8atLab para su uso
in!orm"tico#
La representacin gr"!ica de la red neuronal es e!iciente cuando se trabaja
con redes relativamente peque-as, en donde se pueda apreciar sin ningn
problema las distintas neuronas y las cone,iones entre ellas# 'i se requiere
usar una red mucho m"s grande, no se recomienda el uso de la inter!az
gr"!ica#
+l algoritmo de bac1propagation es algo lento para llegar a converger a
una respuesta, no obstante permite alcanzar niveles de agrupacin o
separacin muy altos y precisos#
%na adecuada documentacin del cdigo usando estructuras F8L, resulta
de mucha utilidad a la hora de usar un control o componente# Las distintas
131
ayudas que nos brinda nuestro (D+ !avorito, nos van mostrando la
documentacin de !orma din"mica, !acilitando signi!icativamente el
desarrollo de un sistema#
+l uso correcto de las propiedades en un control o componente nos
permiten usar la ventana de propiedades de nuestro (D+ en tiempo de
dise-o, ganando mucha velocidad a la hora desarrollar un sistema#
Al encapsular un cdigo en una DLL, se pierde todo acceso que no sea
de!inido al mismo, por este motivo, es de principal importancia dejar todos
los accesos posibles, tanto propiedades y m$todos que !uncionan como
entradas, as como los eventos que !uncionan como salidas o respuestas
del comportamiento de una clase#
%na red neuronal no siempre llega a un resultado satis!actorio# +ste
depende de muchos !actores, en especial la con!iguracin de la propia red#
+s decir, nmero de neuronas, nmero de capas, !uncin de trans!erencia,
y dem"s# &or este motivo, la creacin de este control es nicamente la
mitad del camino, de ah parte toda la ciencia atr"s del uso y con!iguracin
de las redes neuronales para la solucin de problemas#
132
H.2 2ecomendaciones
+n!ocado hacia el 5suario ProgramadorQ
La inicializacin de los pesos antes de entrenar una red es de vital
importancia# 'egn algunas pruebas que se hicieron, se aconseja colocar
valores muy cercanos a cero y con cierto equilibrio, es decir, que todos los
pesos est$n balanceados sin llegar a que en un lado de la red los pesos
tengan valores muy altos y al otro lado muy bajos#
'e debe analizar con mucho cuidado la !orma de representar las entradas
de una red# &or ejemplo, se puede e,presar en una sola neurona un
nmero grande, o en muchas el mismo nmero en binario, o en
he,adecimal# Dependiendo de la importancia y variacin que este nmero
va a tener en la red, se debe aprovechar lo mejor posible la in!ormacin y
desglosarla en varias entradas#
+l nmero de neuronas de salida tambi$n deben ser estudiadas,
analizando la mejor !orma de dispersar la in!ormacin# As una de las
mejores !ormas usada casi siempre, es las salidas binarias en conjunto o
en solitario, es decir, en solitario cuando se tiene una neurona por cada
salida deseada, y en conjunto cuando se aplica la combinacin binaria
num$rica#
Las capas ocultas resultan lo m"s complicado de resolver en cuanto a la
con!iguracin se re!iere# 'e recomienda empezar sin ninguna capa oculta,
para que cada salida este linealmente e,presada por una !uncin de todas
las entradas# 'i lo vemos desde este punto de vista, la in!ormacin de cada
salida est" completamente separada una de la otra# &ero si se requiere
que la in!ormacin no trabaje por separado y m"s bien se busca
combinarlas, es necesario una capa oculta que entrevera la in!ormacin#
De la misma manera, el nmero de neuronas en cada capa oculta es un
dilema cubierto nicamente por la e,periencia del dise-ador# 2o obstante
133
se puede aconsejar usar un nmero medio entre las entradas y salidas de
la red# *onsejo en el que coinciden casi todos los autores#
+n cuanto a la !uncin de trans!erencia se re!iere, la que m"s se usa es la
sigmoide, sea tangencial o logartmica# 2o obstante, cuando se requiere
una respuesta proporcional entre las entradas y las salidas, es mejor usar
la !uncin lineal# Y cuando las e,igencias del sistema as lo requieran, el
uso de la !uncin gauss nos brinda mucha e,actitud pero poca !le,ibilidad
al ingresar entradas que no han sido entrenadas previamente#
'e recomienda siempre tener un visor del error mientras la red se entrena#
+sto es de muchsima utilidad a la hora de probar una con!iguracin,
puesto que con la curva del error se puede concluir un valor errneo de la
taza de aprendizaje, o del momento; as como tambi$n se puede ver una
!alta de capas ocultas o dem"s par"metros#
134
I 1I1LIO!2A,JA
LibrosQ
2i1ola \# \asabov, L6oundations o! 2eural 2et;or1s, 6uzzy 'ystems, and
\no;ledge +ngineeringM, 'egunda +dicin, DBB?, 8assachusetts (nstitute
o! 3echnology, ^ ('02 5C?C5A?HKH _
9ol! +c1mille, 2eural net;or1s <*omputer science=I *ongresses, DBB5,
%niversidad de 8ichigan, ^ ('02 5WWW??W55B _
Oos$ 9# Rilera I >ictor O# 8artnez, L9edes 2euronales Arti!iciales#
6undamentos, modelos y aplicacionesM, 4555, AL6AE8+JA Jrupo editor, ^
('02 BH5DC5CHDB _
9# 9ojas# 7eural 7etwor<s: = 42stematic $ntroduction> 'pringer, DBBK
^ ('02 A/CW5/K5C5C/A _
%9LsQ
?tt,%NN777.+i(&oso1t.(o+N$&*ss,assN,&*ssN2666N.ul66N,'(gat*s8*3not*,&.+s,F
?tt,%NN+s'n2.+i(&oso1t.(o+N*sL*sNn*t1&a+*7o&8Naa5=52239*nLus:.as,F
httpQIIes#;i1ipedia#orgI;i1iI#2+3
httpQIIen#;i1ipedia#orgI;i1iI8icroso!t)#2+3)6rame;or1
httpQII;;;#monogra!ias#comItrabajosD4IredneuroIredneuro#shtml
httpQIIes#;i1ipedia#orgI;i1iI9edes)neuronales)arti!iciales
httpQIIohm#utp#edu#coIneuronalesI*apitulo4I0ac1propagationI9egla0#htm
httpQIIes#;i1ipedia#orgI;i1iI9ed)neuronal
httpQIIes#;i1ipedia#orgI;i1iI2eurona
httpQIIen#;i1ipedia#orgI;i1iIJraphics)Device)(nter!ace
httpQIImsdn#microso!t#comIlibraryIde!ault#asp`urlZIlibraryIen/
usIgdicppIJD(&lusIaboutJD(&lus#asp
httpQII;;;#elguille#in!oIcolaboraIpunto2+3ItutJD(Iindice#htm
135
1K A*+LO: 9anual de Usuario
1K.1 Introduccin:
+l namespace (A)92A, o!rece dos componentes para el uso de redes
neuronales arti!iciales# +l primer componente 92A, es en s una red neuronal
arti!icial multi/perceptrn con el algoritmo de aprendizaje denominado
0ac1&ropagation o &ropagacin para atr"s# Y el componente 92A)>isor es el
encargado de mostrar una !orma visual de la 92A, as, en el visor se muestra de
!orma gr"!ica cada una de las neuronas, sus pesos, capas, bias, etc#
Dichos controles se encuentran encapsulados en un archivo DLL, por lo que
resulta indispensable tener un programa que lo use como re!erencia# +s por este
motivo que el presente trabajo est" en!ocado a un usuario programador y 2E a un
usuario !inal#
13=
1K.2 A(re(ar los controles de IAF2*A

%na vez creado cualquier proyecto bajo la tecnologa Dot2+3, ya sea en
>isual 0asic o en *., siendo estos dos los m"s conocidos# >amos a usar la
herramienta gr"!ica del dise-ador de nuestro (D+, como el que nos presenta el
8icroso!t >isual 'tudio 455C# Y seguimos los siguientes pasosQ
+n la barra de herramientas en tiempo de dise-o, hacer clic derecho y
seleccionar la opcin que diceQ L+legir (temsM o L*hosee (temsM
Dibujo /1: =arra de 6erramientas % &'()!: Propia del 5utorJ e?traKdo de -,. +isual
,tudio 200/
13/
+n la ventana que aparece, podemos elegir cualquier componente o
control del 6rame7or1 #2+3 o un componente *E8# +n nuestro caso
debemos seleccionar L0ro;ser####M o L+,aminar###M, donde debemos elegir el
archivoQ IIA_RNA?d11J y damos clic en E\#
Los tres componentes del (A)92A#dll se encuentran ahora en nuestra
barra de herramientas con los siguientes gr"!icosQ
Dibujo /2: +entana de selecci3n de componentes % &'()!: Propia del
5utorJ e?traKdo de -,. +isual ,tudio 200/
Dibujo /*: (conos de los componentes % &'()!: Propia
del 5utorJ e?traKdo de -,. +isual ,tudio 200/
132
%na vez que los controles se encuentran en la barra de herramientas,
basta con arrastrarlas a un !ormulario para que el dise-ador de nuestro
(D+, se encargue del cdigo que re!erencia el DLL#
1K.3 Con#i(urar la 2*A
La con!iguracin de la 92A no es m"s que establecer las propiedades del
mismo, ya sea desde cdigo o desde la barra de propiedades que nos o!rece
cualquier (D+ en su etapa de dise-o#

+n el caso de la propiedad Ecultas, la coleccin de capas se muestra en otra
ventana donde se puede agregar, modi!icar o eliminar cuantas capas se
requieran#
Dibujo /0: Propiedades del componente '5 % &'()!: Propia del
5utorJ e?traKdo de -,. +isual ,tudio 200/
135
D5"11s d 6"d" =ro=id"d
C"="E/5r"d"_/u.ro< +s el nmero de neuronas en la capa de entrada#
C"="S"1id"_/u.ro< +s el nmero de neuronas en la capa de salida#
C"="S"1id"_5i=oFT< +s el tipo de !uncin de trans!erencia de las neuronas
de la capa de salida, los cuales est"n de!inidos por el enum
.unction?ransfer;?2pe detallado m"s adelante#
C"="S"1id"_For.u1"Cus5o.< +sta propiedad es usada cuando el tipo de
!uncin de trans!erencia es !ijada como *%'3E8, y detalla en !orma de
LstringM la !uncin de trans!erencia a usarse, teniendo como argumento, la
suma del producto de todos los pesos y valores de entrada, denominado
por la mayora de autores con la letra L(M# &or ejemploQ
*apa'alida)6ormula*ustom Z L8ath#'in<(=M
C"="S"1id"_9IAS< +sta propiedad establece si la capa de salida va a
tener una neurona au,iliar denominada 0(A'
Nu.I5r"6io/s_E0/5o< +s el nmero de iteraciones a cumplirse para
que se genere el evento evento;$teracion del control#
Dibujo //: Propiedad &cultas % &'()!: Propia del 5utorJ e?traKdo de -,.
+isual ,tudio 200/
146
O6u15"s< +sta propiedad como ya vimos es una coleccin de capas, que
permite !ijar a su vez propiedades por cada capa oculta que se agregue,
estas propiedades sonQ 0ias, 6ormula)*ustom, 3ipo63, 2umero2euronas;
que son e,actamente iguales a las propiedades de la capa de salida, sino
que aplicadas a cada una de las capas ocultas#
Fu/65io/Tr"/s4r_T:=< +s un enum que describe los tipos de !uncin de
trans!erencia que se puede aplicar a una capa de neuronas#
Es6"1/?& +s la !uncin de trans!erencia tpica, que de!ine una salida
binaria !ijada en un umbral que casi siempre es 5#
Li/"1?& +s la !uncin de trans!erencia que pasa el valor sin procesar, de
esta !orma e,presa una proporcin directa representada por una linea#
Sig.oid Log"rK5.i6"?& +s la !uncin de trans!erencia que nace de la
necesidad de usar el escaln como !uncin continua para ser derivada y
as ser usada en el algoritmo de 0ac1&ropagation#
Dibujo /6: #" !scal3n % &'()!: Propia
del 5utor
Dibujo /7: #" Lineal % &'()!: Propia del
5utor
Dibujo /9: #" ,igmoide logarKtmica %
&'()!: Propia del 5utor
141
Sig.oid T"/g/6i"1?& +s una !uncin de trans!erencia id$ntica a la
anterior pero con su lmite in!erior en menos uno#
C".="/" d G"uss& +s una !uncin de trans!erencia que brinda una
salida activa muy e,igente gracias a su !orma en campana de gauss#
Cus5o.?& +s la !uncin de trans!erencia que permite personalizar la
!rmula#
Dibujo /<: #" ,igmoide "angencial % &'()!:
Propia del 5utor
Dibujo 60: #" )auss % &'()!: Propia del
5utor
142
1K.$ Con#i(urar el 3isor
+l control para visualizar una 92A, est" heredado de un %ser*ontrol y por lo
tanto sus propiedades cubren todos los niveles de herencia del control,
centr"ndose las particulares de este control en tres grupos de propiedades#
3eniendo por separado a la propiedad 9ed)2euronal que es la que establece
cual red neuronal se va a visualizar#
1K.$.1 Capas
+n este grupo se establecen los colores de las neuronas que van a verse
en cada capa#
Co1or9IAS< +s el color que va a tomar el tri"ngulo que representa a
la neurona au,iliar 0(A'#
Co1orE/5r"d"< +s el color que va a tomar todas las neuronas de la
capa de entrada
Co1orO6u15"s< +s el color que va a tomar todas las neuronas de las
capas ocultas#
Co1orS"1id"< +s el color que va a tomar todas las neuronas de la
capa de salida
Co1orSi.bo1o< +s el color que va a tomar el smbolo interno de
cada neurona que representa la !uncin de trans!erencia#
1K.$.2 Pesos
Aqu se establecen los par"metros para los pesos o cone,iones <lineas=,
entre valores m",imos y mnimos que se ajustara un gradiente de color#
Co1orPsoM"H< +s el color que va a tomar la cone,in cuando el
valor del peso sea mayor o igual a la propiedad @alorPeso0aA#
Co1orPsoMi/< +s el color que va a tomar la cone,in cuando el
valor del peso sea menor o igual a la propiedad @alorPeso0in#
V"1orPsoM"H< +s el valor tomado como m",imo para asignar el
color de la propiedad *olorPeso0aA#
143
V"1orPsoMi/< +s el valor tomado como mnimo para asignar el
color de la propiedad *olorPeso0in#
1K.$.3 Tama=os
+n este grupo de propiedades se establecen los valores de apariencia a
dibujarse#
A/6>oCo/Hio/s< +s el ancho en pi,eles de las cone,iones
<lineas= a dibujarse, normalmente el valor es D#
Co1orFo/5< +s el color que va a tener el resto del te,to, como los
valores de entrada y salida#
Fu/5TH5o< +s la !uente de te,to a usarse para mostrar los
valores de entrada y salida#
Nuro/"T"."Lo< +s el di"metro en pi,eles que tendr" el circulo
que representa a cada una de las neuronas#
NM.roD6i."1s< +s el nmero de decimales que van a usarse
para representar los valores de las salidas# >alor entre 5 para
adelante#
Dibujo 61: 2on.igurar el '5G+isor % &'()!: Propia del 5utor
144
1K.% +ntrenamiento
%na vez teniendo una 92A con!igurada, sea que esta tenga o no un control
92A)>isor asociado, se puede empezar con el proceso de entrenamiento#
+l entrenamiento de la red neuronal se da por medio de un m$todo del
componente 92A llamado Entrenar, el cual requiere C argumentos para trabajarQ
8uestras de entrada
8uestras de salida
Las muestras, tanto de entradas como de salidas deben ser e,presadas en un
doble vector de tipo DE%0L+# &ara esto vamos a tener un ejemplo donde la red
neuronal tenga A neuronas de entrada y 4 de salida# Y vamos a e,presar W
muestras#
Ent&a'a 1 Ent&a'a 2 Ent&a'a 3 !ali'a 1 !ali'a 2
u*st&a 1 2 5 / 1 6
u*st&a 2 3 4 = 1 6
u*st&a 3 5 L4 6 6 1
u*st&a 4 4 L5 1 6 1
Donde cada muestra va a ser un vector de tipo DE%0L+, y todas las muestras,
tanto de entradas como de salidas van a estar representadas por un vector de los
vectores de entrada, es decir un doble vector#
L9 <Learning 9ate= o 3aza de aprendizaje es un valor entre 5 y D que
de!ine la velocidad de aprendizaje que va a tener la red neuronal,
generalmente se empieza con un nivel alto, sea un 5#H o 5#? y se lo baja
progresivamente a medida que el entrenamiento !inalice# E simplemente se
lo deja con un valor medio, sea 5#C o 5#K
8omento es un valor que de!ine una tendencia hacia una direccin, este
valor ayuda a que la red neuronal no caiga en un oscilamiento perpetuo#
145
8nimo +rror es un valor requerido como meta, al cumplirse un error menor
o igual a este, el proceso de entrenamiento se da por !inalizado#
+l entrenamiento se procesa internamente por medio de un hilo di!erente al
proceso de la aplicacin, y noti!ica a este su avance por medio de un evento
llamado evento)(teracion que se dispara al cumplir cuantas iteraciones se
especi!iquen en la propiedad 2um(teraciones)+vento del componente 92A#
Dicho evento, entrega en sus argumentos el conteo de las iteraciones y el error
que lleva el proceso de entrenamiento# +sto es clave para poder mostrar de una
!orma gr"!ica el avance del entrenamiento al programador#
'ou-l*W XW X u*st&as_Ent&a'a R n*7 'ou-l*W4XS NN4 u*st&as '* *nt&a'a
'ou-l*W XW X u*st&as_!ali'a R n*7 'ou-l*W4XS NN4 u*st&as '* sali'a
u*st&as_Ent&a'aW6X R n*7 'ou-l*W3X T2@ 5@ /US NNu*st&a 1
u*st&as_Ent&a'aW1X R n*7 'ou-l*W3X T3@ 4@ =US NNu*st&a 2
u*st&as_Ent&a'aW2X R n*7 'ou-l*W3X T5@ L4@ 6US NNu*st&a 3
u*st&as_Ent&a'aW3X R n*7 'ou-l*W3X T4@ L5@ 1US NNu*st&a 4
u*st&as_!ali'aW6X R n*7 'ou-l*W2X T 1@ 6 US NNu*st&a 1
u*st&as_!ali'aW1X R n*7 'ou-l*W2X T 1@ 6 US NNu*st&a 2
u*st&as_!ali'aW2X R n*7 'ou-l*W2X T 6@ 1 US NNu*st&a 3
u*st&as_!ali'aW3X R n*7 'ou-l*W2X T 6@ 1 US NNu*st&a 4
NNEnt&*na& (on un LR R 6.= @ o+*nto '* 6.1 3 un E&&o& +0ni+o a 6.666661
&na1.Ent&*na&9u*st&as_Ent&a'a@ u*st&as_!ali'a@ 6.=@ 6.1@ 6.666661:S
23digo 10: !jem de entrenamiento % &'()!: Propia del autor
14=
&ara detener el proceso de entrenamiento, basta con ejecutar el m$todo
*ancelar+ntrenamiento#
6inalmente se puede concluir que el proceso de entrenamiento de una red
neuronal depende en su mayor parte del programador que la est$ supervisando,
teniendo a su disposicin todas las herramientas para que pueda observar el
comportamiento de su red, y as determinar cambios en los par"metros de
entrenamiento o dise-o en la estructura de la red#
3eniendo un resultado satis!actorio del proceso de entrenamiento, es necesario
poder almacenar de alguna !orma los pesos de la red neuronal, que despu$s de
todo son los que almacenan la e,periencia del entrenamiento, pudiendo decir de
alguna !orma que los pesos son la memoria de nuestro peque-o cerebro <92A=#
&ara esto, tenemos dos !ormas de almacenar los pesosQ
NNEnlaCa& *l *v*nto
&na1.*v*nto_It*&a(ion BR n*7 RNA.'*l*ga'o_it*&a(ion9t?is.&na1_*v*nto_It*&a(ion:S

NNEv*nto It*&a(i)n
,&ivat* voi' &na1_*v*nto_It*&a(ion9int int*&a(@ 'ou-l* *&&o&:
T
...........................................
U
23digo 11: !jem del e1ento iteraci3n % &'()!: Propia del autor
NNCan(*la *l ,&o(*so '* *nt&*na+i*nto
&na1.Can(*la&Ent&*na+i*nto9 :S
23digo 12: Detener el entrenamiento % &'()!: Propia del autor
14/
Obj5o D"5"S5< +l componente 92A tiene un m$todo llamado getData4et
y uno llamado setData4et, que nos entrega o recibe un objeto Data'et con
los pesos y estructura de la red, dicho objeto es usado en la tecnologa
Dot2+3 como una base de datos virtual escrita en el lenguaje F8L,
pudiendo ser utilizada para importar o e,portar a cualquier base de datos
soportada por Dot2+3#
Ar6>i0o d "1."6/".i/5o< &ara no tener que usar obligatoria mente
una base de datos, el componente 92A tiene los m$todos Juardar y Abrir,
los cuales guardan y recuperan de un archivo plano toda la estructura y
pesos de una determinada red neuronal#
NNGua&'a la *st&u(tu&a 3 ,*sos '* la
NN&*' n*u&onal *n *l a&(?ivo *s,*(i1i(a'o
&na1.Gua&'a&9ZC%[[&*'1.F+lZ:S
NNR*(u,*&a la *st&u(tu&a 3 ,*sos '* la
NN&*' n*u&onal '*l a&(?ivo *s,*(i1i(a'o
&na1.A-&i&9ZC%[[&*'1.F+lZ:S
23digo 10: !jemplo del uso de .ichero % &'()!: Propia del
autor
Data!*t 'atas*t1 R n*7 Data!*t9:S
NNGua&'a& *n ;as* '* Datos la *st&u(tu&a 3 ,*sos '* la RNA
'atas*t1 R &na1.g*tData!*t9:S
!HlDataA'a,t*&1.#,'at*9'atas*t1:S
NNR*stau&a& '*s'* una ;as* '* Datos la *st&u(tu&a 3 ,*sos '* la RNA
!HlDataA'a,t*&1.Fill9'atas*t1:S
&na1.!*tData!*t9'atas*t1:S
23digo 1*: !jemplo de uso con =DD % &'()!: Propia del autor
142
1K.8 Consulta
&ara el proceso de consulta de la red neuronal, se debe tener ya una instancia de
92A con su estructura y pesos de entrenamiento, as que se pueden tomar varios
caminos para llegar a este punto# &or ejemplo, se puede consultar en la misma
aplicacin del entrenamiento, o se puede guardar los pesos en un archivo o base
de datos y crear otra aplicacin de consulta donde nicamente se restaure la red
neuronal previamente entrenada y usarla para consultas, siendo este ltimo la
!orma m"s comn de hacerlo#
(ndependientemente de como se llegue a tener la 92A entrenada, el proceso de
consulta es muy simple, basta con ejecutar el m$todo #valuar de la 92A,
envi"ndole como argumento el vector de entradas de tipo DE%0L+#
&or ejemplo, si deseamos consultar a la red neuronal entrenada anteriormente
<ver *digo .=, se procedera a simplemente de!inir el vector de la entrada y
ejecutar el m$todo #valuar, cuyo resultado ser" el vector de salida# 2o obstante,
como en la mayora de los casos, el objetivo de la consulta es tener nicamente
una neurona ganadora, el componente 92A posee una propiedad que se
actualiza despu$s de ejecutar una evaluacin o consulta con el ndice de la
neurona ganadora#
Adicionalmente, es posible hacer una consulta directa por medio del control visor
de redes neuronales, y la consulta se e!ecta en tiempo de ejecucin en la
inter!az gr"!ica del visor#
NN<*(to& '* *nt&a'a
'ou-l*W X Ent&a'a R n*7 'ou-l*W3X T2@ 5@ /US
NNEvalua&
&na1.Evalua&9Ent&a'a:S
NNN*u&ona gana'o&a
int Gan'o&a R &na1.In'*FaF!ali'aS
23digo 1/: !jem de consulta % &'()!: Propia del autor
145
&ara cambiar los valores de entrada de la red en este modo gr"!ico, basta en
hacer clic con el ratn encima del valor de entrada y aparecer" un cuadro de
edicin donde se puede alterar el valor# &ara salir de este modo de edicin, basta
con hacer clic !uera del cuadro#
%na vez cambiados los valores de entrada, se puede acceder al men conte,tual
del visor haciendo clic secundario <tpicamente derecho= encima del control y
seleccionar la primera opcin que diceQ L&rocesarM# *abe resaltar que desde este
men es posible ejecutar varias tareas, como !ijar pesos aleatorios, guardar y
restaurar desde un !ichero la estructura y pesos de la red asociada al visor, etc#
Dibujo 62: 2ambiar 1alores de entrada desde el 1isor % &'()!:
Propia del autor
156
Luego de procesar las entradas, el mismo visor se encargar" de mostrar las
salidas y sus valores, teniendo siempre de color rojo la salida ganadora# De esta
!orma los dos controles, tanto la red como el visor trabajan conjuntamente para
!acilitar el trabajo del programador a la hora de entrenar y consultar su red
neuronal#
Dibujo 6*: -enL conte?tual del 1isor % &'()!: Propia del autor

Vous aimerez peut-être aussi