Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INTRODUCCIN A LA INTELIGENCIA
ARTIFICIAL
La Inteligencia Artificial estudia cmo lograr que las mquinas realicen ta-
reas, que por el momento, son realizadas mejor por los seres humanos.
Por otra parte, la tradicin juda cre el mito del "golem" en 1580 (figura 1.1),
figura humanoide hecha de arcilla a la que un rabino poda dar vida propia,
convirtindola en un perfecto criado (que, en leyendas posteriores, llega a es-
capar del control de su amo). Hay que decir, sin embargo, que se requera la
intervencin divina para conseguir estos espectaculares resultados.
1
Planell Perez. Historia de la Inteligencia Artificial [en lnea]. Espaa: Ebooks gra-
tis; 2008. [fecha de acceso 16 de noviembre de 2007]. URL disponible en:
http://66.240.239.19/2/7/0/27068.ZIP
El escritor Karel Kapek difunde en los aos 20 una palabra destinada a tener
un gran xito: "robot". En su obra R.U.R."(Rossum's Universal Robots) apare-
cen unos seres creados para realizar las tareas que el hombre no quiere hacer,
que acaban siendo ms poderosos que el mismo hombre, llegando a poner en
peligro su existencia. Sin embargo, hasta la llegada de los ordenadores elec-
trnicos no dispusieron los cientficos y tcnicos de una herramienta que per-
mitiera la ejecucin de tareas ms complejas por parte de dispositivos mecni-
cos, ni para la construccin de robots.
1.2.3. CIBERNTICA
En Julio de 1945 Vannevar Bush public As We May Think una visin del fu-
turo en donde los ordenadores asistan a los humanos en muchas actividades.
Los proyectos mas ambiciosos de esta poca fueron el intento del General
Problem Solver(GPS), el Perceptron, la Traduccin Automtica y la resolucin
generalizada de problemas matemticos.
Logic Theorist. 1956. El Logic Teorist fue programado por Alan Newell, Her-
bert Simon y J.C. Shaw y buscaba las demostraciones de Teoremas Lgicos.
Un teorema lgico tiene la siguiente forma: supuesto que o bien X o bien Y es
verdadera, y supuesto que Y es de hecho falsa, entonces X es verdadera. El
Logic Theorist encontr la demostracin de 38 de los 52 teoremas presentes
en el capitulo II de los "Principia Mathematica" de Bertrand Russell y Alfred
North Whitehead. Sirvi como base para el GPS.
LISP (LISt Procesing). En 1958 John McCarthy anunci el desarrollo del len-
guaje de programacin LISP (LISt Procesing), este fue considerado desde
aquel momento como lenguaje de programacin de los investigadores de I.A.
El LISP es un lenguaje declarativo funcional.
Programa para jugar a las damas. Programa creado por Arthur Samuel (figu-
ra 1.5) en 1962 y al igual que el proyecto GTP fue auspiciado por IBM. El pro-
grama era capaz de aprender por si solo. Aprenda de la experiencia teniendo
en cuenta sus errores y xitos pasados para determinar su juego en partidas
posteriores. Alex Bernstein, consigui tambin un resultado similar para el aje-
drez. Tras hacerse eco la prensa de estos logros, se creo un escndalo entre
los periodistas y accionistas de IBM en general al considerar que se estaba
gastando el dinero de investigacin en unos objetivos tan frvolos. Con lo que
IBM no sigui aportando fondos para investigaciones en el campo de la Inteli-
gencia Artificial.
Como ancdota se tiene el resultado que se obtuvo al traducir primero del in-
gls al ruso, y el resultado se tradujo de nuevo al ingls:
STUDENT y SIR. 1964. Daniel Bobrow present como tesis doctoral a su pro-
fesor, Marvin Minsky, un programa llamado STUDENT, este era capaz de en-
tender enunciados de problemas algebraicos escritos en ingls y responder a
sus preguntas. Los problemas caractersticos que poda solucionar STUDENT
son similares al siguiente: "El to de Guillermo es dos veces ms viejo que el
padre de Guillermo. Dentro de dos aos, el padre de Guillermo ser tres veces
ms viejo que Guillermo .La suma de sus edades es 92. Averiguar la edad de
Guillermo".
SIR> Entiendo
SIR> Entiendo
SIR> Entiendo
SIR> Entiendo
SIR> Esta oracin es ambigua, pero supongo que (TIENE) significa (TIENE
COMO PARTES). Cuntos dedos hay en cada mano?
SIR> Entiendo
PERSONA> Mi padre
ELIZA> Tu padre
PERSONA> En matones.
ELIZA> Tiene eso que ver con el hecho de que tu novio te hizo venir aqu?
DEC iba a lanzar al mercado una nueva serie de ordenadores, los llamados
VAX. Dado que todos los ordenadores tenan configuraciones distintas entre s,
la VAX estaba previendo el enorme cuello de botella que se iba a formar,
cuando los ordenadores tuviesen fallos de configuracin y hubiese que arreglar
este problema uno por uno, con el consiguiente gasto de tiempo y dinero que
eso supona. Los directivos de la DEC contrataron a John McDertmott, con el
cometido de realizar un sistema experto que configurase todos los ordenado-
res que saliesen de la DEC. El informe de viabilidad de McDermontt expuso
resultados prometedores, y en diciembre de 1978 se empez a trabajar en el
proyecto. En abril de 1979 el equipo de investigacin que lo haba diseado
(con McDermott a la cabeza), pens que ya estaba preparado para salir y "co-
nocer el mundo", fue entonces cuando se hizo una prueba real, esperando re-
solver positivamente un 95% de las configuraciones, este porcentaje tal alto
anhelado por McDermontt y compaa se qued en un 20% al ser contrastado
con la realidad; XCON volvi al laboratorio, donde fue revisado y a finales de
ese mismo ao (1979) funcion con resultados positivos en la DEC. En 1980
XCON se instaur totalmente en DEC. Y en 1984, el XCOM haba crecido has-
ta multiplicarse por diez. En 1986 la compaa haba invertido ms de cincuen-
ta aos/hombre en el programa, pero se estaba recuperando con creces de su
inversin al ahorrarse cuarenta millones de dlares al ao.
Como conclusin a este periodo hay que destacar la revolucin que se inicio
con los sistemas expertos. El xito de XCON, MYCIN y PROSPECTOR con-
venci a las ms importantes empresas a invertir en sistemas expertos. Incluso
para los ms conservadores y los radicales Anti- Inteligencia Artificial, algo se
hacia evidente, mientras que los costes de desarrollo de los sistemas expertos
se hacan cada vez ms bajos, el salario de los expertos humanos se hacia
ms alto. La formacin de un futuro experto costaba mucho dinero y aos de
Este periodo viene marcado por el xito de los sistemas expertos y durante los
aos ochenta aparecen empresas y proyectos especializados en ofrecer solu-
ciones comercializables basados en las tcnicas de la Inteligencia Artificial. La
Inteligencia Artificial se consolid en cada vez ms empresas que desarrollaron
las "mquinas lisp" ( ordenadores que ejecutaban programas en LISP con la
misma rapidez de un ordenador central ) y los SHELLS ( herramientas de
desarrollo de sistemas expertos). Ejemplos de sistemas expertos que se co-
mercializaron en esta poca son el DELTA, de la General Electric Company,
que ayudaba a los mecnicos en la reparacin y en el diagnostico de locomo-
toras diesel; el Aldo en Disco para la reparacin de calderas hidroestticas gi-
ratorias usadas para la eliminacin de bacterias y el EURISKO capaz de per-
feccionar su propio cuerpo de leyes heursticas por induccin.
1987 supuso el fin de las maquinas LISP, debido a la aparicin de los micro-
ordenadores de Apple e IBM con potencia parecida a las maquinas LISP, y la
programacin en C del software utilizado en Inteligencia Artificial para los nue-
vos microordenadores.
2
La ciencia y el hombre [en lnea]. Veracruz: Revista de divulgacin cientifica y tec-
nologica de la Universidad Veracruzana; 2004. [fecha de acceso 18 de noviembre de
2007]. URL disponible en:
http://www.uv.mx/cienciahombre/revistae/vol17num3/articulos/inteligencia/index.htm.
Por ltimo, hay casos en los que una solucin es preferible a la otra, no obs-
tante que con ambas pueda lograrse la meta. Por ejemplo, son preferibles las
rutas que entraan menos acciones o acciones menos costosas.
El problema consiste en colocar las fichas del puzzle desde el estado inicial al
estado final (figura 2.2), utilizando el espacio vacio.
Figura 2.4. Diagrama del espacio de estados simplificado de la aspiradora. Los arcos indican ac-
cin. I = desplazarse a la izquierda, D = desplazarse a la derecha, A = aspirar.
3
Winston P. Inteligencia Artificial. 3ra. ed. USA: Addison Wesley; 1994
Una vez eliminadas las trayectorias con ciclos, se puede ordenar todas las tra-
yectorias posibles a partir del nodo inicial en un rbol de bsqueda, un tipo
especial de rbol semntico en el que cada nodo representa una trayectoria:
Figura 2.6 rbol de bsqueda hecho a partir de una red. Cada nodo representa una
trayectoria. Cada nodo hijo representa una trayectoria que es una extensin de un
paso de la trayectoria representada por su padre. Usted convierte redes en rboles
de bsqueda trazando todas las trayectorias posibles hasta que ya no pueda extender
ninguna de ellas sin crear un ciclo.
Pero como la lnea punteada conduce al nodo hoja C, sin encontrar a G, el si-
guiente paso es volver al nodo antecesor ms cercano que tenga una alternati-
va sin explorar. El nodo ms cercano de este tipo es B. La alternativa que
queda en B es mejor, ya que finalmente permite obtener el xito a travs de E,
a pesar de llegar a otro callejn sin salida en D. En la figura 2.7 se muestran
los nodos encontrados.
si el nodo meta se alcanza, mencione que hubo xito; de otro modo, notifi-
que el fracaso.
si se halla el nodo meta, mencione que hubo xito; si no, notifique el fraca-
so.
Para convertir lo probable en cierto, se tiene que extender todas las trayecto-
rias parciales hasta que tengan una longitud igual o mayor que la trayectoria
completa ms corta. La razn es que el ltimo paso para alcanzar la meta
puede ser lo suficientemente largo para hacer que la supuesta solucin resulte
ms larga que una o ms trayectorias parciales. Puede ser que slo un paso
pequeo extienda una de las trayectorias parciales al punto solucin. Para
asegurarse de que esto no suceda, en lugar de terminar al encontrar una tra-
yectoria, termine cuando la trayectoria parcial ms corta tenga una longitud
mayor que la trayectoria completa ms corta.
Ejemplos:
PROMEDIO
edad
mensaje
2.6.2. LISTAS
Una lista puede ser una secuencia de tomos separados por un espacio y en-
cerrados por parntesis redondos, incluyendo la posibilidad de que una lista
contenga una sublista que cumple con las mismas caractersticas.
Ejemplos:
()
(calificaciones 12 13)
2.6.3. COMENTARIOS
Se utiliza el carcter punto y coma (;) para ignorar los caracteres que siguen a
este.
Sintaxis:
Sintaxis:
(READ)
Una funcin es un identificador nf que se define con DEFUN mediante una lis-
ta:
Sintaxis:
F1
F2
...
Fn
Donde:
nf : nombre de la funcin
Cuando se evala (nf arg1 argn), siendo argi los argumentos que se pasan
a nf, tienen lugar el siguiente proceso:
NOTA:
Obsrvese que, con excepcin del valor de la ltima forma, no son toma-
dos en cuenta los valores de las formas. La evaluacin de estas formas se
hace exclusivamente por sus efectos laterales, o sea por las acciones o ta-
reas que ellas realizan.
(RDS NOMBRE_ARCHIVO.LSP)
;Archivo: F1.LSP
(DEFUN F1()
(PRINC "INGRESE PRIMER NUMERO: ")
(SETQ N1 (READ))
(PRINC "INGRESE SEGUNDO NUMERO: ")
(SETQ N2 (READ))
(SETQ SUMA (+ N1 N2))
(PRINC "LA SUMA ES: ")
(PRINT SUMA)
(TERPRI)
)
(RDS)
;ARCHIVO: AREACUAD.LSP
(DEFUN CUAD ()
(PRINC "PROGRAMA QUE CALCULA EL AREA DE UN
(RDS)
El Lisp utiliza los smbolos predefinidos NIL y T para representar los valores
falso y verdadero.
(AND F1 F2 . . . Fm) devuelve NIL si hay al menos una Fi con valor NIL; en
caso contrario devuelve el valor de Fm. AND termina en el primer Fi que
tenga valor NIL.
(OR F1 F2 . . . Fm) devuelve NIL si todas las Fi tienen valor NIL; en caso
contrario, OR termina y devuelve el resultado del primer Fi que resulte con
valor no NIL.
COND
Sintaxis:
( COND
L1
...
L2
Efecto:
COND devuelve NIL si los primeros miembros de todas las listas tienen valores
NIL.
LOOP Y DO
Sintaxis de LOOP:
(LOOP
L1
...
Ln
As, LOOP se ejecuta hasta encontrar una lista Li cuya cabeza es una lista con
valor verdadero.
Las listas del caso 2 se denominan listas de control y constituyen los lugares
por los cuales LOOP puede salir del ciclo o terminar su ejecucin.
(DO
LVAR
L1
Ln
(VARi Si Ai)
Procesar L1
procesar L2
Por tanto, cuando exista una forma Li cuyo primer miembro pi es una lista con
valor verdadero, pasa a evaluar los otros miembros y finaliza retornando el l-
timo valor.
(VARi Si) variable local con valor inicial pero sin expresin de actualiza-
cin.
;archivo: F2.LSP
(DEFUN F2()
(PRINC "INGRESE PRIMER NUMERO: ")
(SETQ N1 (READ))
(PRINC "INGRESE SEGUNDO NUMERO: ")
(SETQ N2 (READ))
( COND
((> N1 N2) (PRINC N1 )(PRINT " ES MAYOR"))
((< N1 N2) (PRINC N2 )(PRINT " ES MAYOR"))
('T (PRINC N1 )(PRINC "Y")(PRINC N2 )(PRINT " SON IGUALES"))
)
(TERPRI)
)
(RDS)
;archivo: PROG00.LSP
(DEFUN P00()
(SETQ N 1)
(PRINC "NUMERO DOBLE ")
(TERPRI)
(LOOP
((> N 10))
(PRINC N)
(PRINC " ")
(PRINC (DOBLE N))
(TERPRI)
(SETQ N (+ N 1))
)
); FIN DEFUN
(rds)
QUOTE
En estas funciones X es la letra A por CAR o D por CDR, que equivalen a apli-
car sucesivamente varios CAR y CDR, y por tanto simplifican la escritura de
esta clase de expresiones.
LIST
La funcin (LIST e1 e2 en) devuelve la lista (e1 e2 en) formada por los
elementos ei.
CONS
(x e1 e2 en)
APPEND
Se utiliza para formar una lista con los elementos de otras listas. De una mane-
ra precisa, si los valores de L1, L2, , Ln son listas, entonces el valor de
es la lista formada por los elementos de la primera lista, seguidos por los ele-
mentos de la segunda lista y as sucesivamente.
REVERSE
LAST
;ARCHIVO: PROG02.LSP
(DEFUN P02 ()
(SETQ C 0)
(SETQ PAR () IMP ())
(SETQ L '(4 5 6 8 9 11))
(PRINC "LISTA INICIAL : ")
(PRINT L)
(SETQ L (REVERSE L))
(SETQ LONG (LENGTH L))
(LOOP
(SETQ C (+ C 1))
((> C LONG)(TERPRI))
(COND
( (= (REM (CAR L) 2) 0) (SETQ PAR (CONS (CAR L) PAR)) (SETQ L (CDR L)) )
(T (SETQ IMP (CONS (CAR L) IMP)) (SETQ L (CDR L)) )
); FIN DE COND
); FIN DE LOOP
); FIN DE DEFUN
(RDS)
;archivo: PROG03.LSP
(DEFUN P03 ()
(SETQ L () )
(LOOP
(PRINC "ING. NOMBRE(FIN PARA TERMINAR) : ")
(SETQ NOMB (READ))
(TERPRI)
((EQUAL NOMB "FIN") (TERPRI))
(PRINC "ING. NOTA(0-20) : ")
(SETQ NOTA (READ))
(TERPRI)
(SETQ L (CONS (LIST NOMB NOTA) L))
);FIN LOOP (INGRESO DE DATOS)
(SETQ L (REVERSE L))
(PRINC "LISTA ES : ")
(PRINT L)
(TERPRI)
; COPIA DE LA LISTA
(SETQ L1 L)
;LONGITUD DE LA LISTA
(SETQ LONG (LENGTH L))
; BUSQUEDA DE LA NOTA MAYOR
(SETQ C 0)
(SETQ MAY (CADR (CAR L)))
(LOOP
(SETQ C (+ C 1))
( (> C LONG) (TERPRI))
(COND
( (< MAY (CADR (CAR L))) (SETQ MAY (CADR (CAR
L))) )
( (> MAY (CADR (CAR L)) ) (SETQ MAY MAY) )
);FIN DE COND
(SETQ L (CDR L))
);FIN DE LOOP
(PRINC "LA NOTA MAYOR ES: ")
(PRINT MAY)
(TERPRI)
;BUSQUEDA DE LOS QUE TIENEN MAYOR NOTA
);FIN DE LOOP
(TERPRI)
);FIN DE DEFUN
(RDS)
;ARCHIVO: PROG04.LSP
(DEFUN P04 ()
(SETQ LS '(PEDRO JUAN ANA))
(SETQ LV '(COME ESTUDIA CORRE))
(SETQ LA '(MUCHO POCO))
(SETQ ERROR '())
(CLEAR-SCREEN)
;*****************
(DEFUN ORACION (LI)
(SETQ LI (SUJETO LI))
(SETQ LI (VERBO LI))
(SETQ LI (COMP LI))
(RETURN ERROR)
);FIN DE ORACION
;********************
(DEFUN SUJETO (LI)
( COND
((MEMBER (CAR LI) LS 'EQUAL) (RETURN (CDR LI)) )
(T (PRINC "ERROR SUJETO") (TERPRI) (SETQ ERROR (CONS E1 ERROR)) (RETURN (CDR LI)))
)
); FIN SUJETO
;********************
(DEFUN VERBO (LI)
( COND
((MEMBER (CAR LI) LV 'EQUAL) (RETURN (CDR LI)) )
(T (PRINC "ERROR VERBO") (TERPRI) (SETQ ERROR (CONS E2 ERROR)) (RETURN (CDR LI)))
)
); FIN SUJETO
;********************
(DEFUN COMP (LI)
( COND
((MEMBER (CAR LI) LA 'EQUAL) (RETURN (CDR LI)) )
(T (PRINC "ERROR ADVERBIO") (TERPRI) (SETQ ERROR (CONS E3 ERROR)) (RETURN (CDR
LI)))
)
); FIN SUJETO
;***********
(RDS)
A
10
5
8
B D
5
2
C
1
F
7
40
E
1
G
ARCHIVO: BUSQRC.LSP
(DEFUN PP ()
(SETQ LESP
'( (A ((B 10) (C 8) (D 5)) )
(B ((C 5)) )
(C ((E 7) (F 1)) )
(D ((F 2)) )
(E ((G 1)) )
(F ((G 40)) )
)
)
(DO
(
(COLA (LIST (LIST 0 INICIO))); COLA=((0 INICIO))
(VISITADO NIL); lista de nodos visitados
(RUTA) ; ruta actual
(LONG) ; longitud de ruta actual
(LSUCD) ; lista de pares de sucesores con distancias
(FINRUTA) ; nodo final de ruta actual
(NUEVASRUTAS); lista de nuevas rutas
); FIN DO
); fin de funcion
(DEFUN HALLARNRUTAS ()
; devuelve (druta1 druta2) o NIL
; drutai = se construye agregando a RUTA
; un nodo de LSUCD que no este en
; VISITADO, y precedido por su longitud
(DO
( (LRUTAS 'NIL) (NODO) (RUTAAUX)
(DISTANCIA) (LONGTEMP)
); lista de variables de DO
(DEFUN UBICARMINIMO ()
(DO (
(RUTAMIN (CAR COLA)); ruta minima actual
(LONGMIN (CAAR COLA)); longitud minima actual
(COLARES (LIST (CAR COLA))); COLARES contiene primera ruta
(COLATEMP (CDR COLA) (CDR COLATEMP));controla proceso
(RUTATEMP)
(LONGTEMP)
); lista de variables de DO
); fin de funcion
(RDS)
Solucin:
As_s
Mg. Juan Gamarra Moreno 73
As: Significa que al lado izquierdo esta la aspiradora y que tambin existe su-
ciedad.
_s: Significa que al lado derecho no esta la aspiradora y que existe suciedad.
(DEFUN PP ()
(SETQ LESP
'( (As_s ( (_sAs 1) (A__s 1) ) )
(A__s ( (__As 1) ) )
(__As ( (__A_ 1) ) )
)
)
Solucin:
Considere los estados con ternas Rmn, donde R indica la ribera en la cual se
encuentra el bote y m y n, los nmeros de misioneros y canbales, respectiva-
mente, presentes all.
1M
1M 1C
2M
1C 2C
Una proposicin es una sentencia simple que tiene un valor asociado ya sea
de verdadero (V), o falso (F). Por ejemplo:
Hoy es Viernes
Ayer llovi
Hace fro
La lgica proposicional, permite la asignacin de un valor verdadero o falso
para la sentencia completa, no tiene facilidad para analizar las palabras indivi-
duales que componen la sentencia. Por este motivo, la representacin de las
sentencias del ejemplo, como proposiciones, sera:
hoy_es_Viernes
ayer_llovi
hace_fro
hoy_es_Viernes y hace_fro.
V V V V F V V
V F V F F F F
F V V F V V F
F F F F V V V
Si p => q va a ser verdadero, entonces toda vez que p sea verdadero, q debe
ser siempre verdadero.
Los predicados tambin pueden ser utilizados para asignar una cualidad abs-
tracta a sus trminos, o para representar acciones o relaciones de accin entre
dos objetos.
Por ejemplo:
parte_de(ecuador, europa)
Tanto los conectivos lgicos, como los operadores dados anteriormente para la
lgica proposicional, son igualmente vlidos en lgica de predicados. De he-
cho, la lgica proposicional es un subconjunto de la lgica de predicados.
Las variables, tambin pueden ser cuantificadas. Los cuantificadores que tpi-
camente se utilizan en lgica de predicados son:
X....
Establece que "para todo X, es verdad que . . . "
X....
Establece que "existe un X, tal que . . . "
3.2.1. UNIFICACIN
Los conectivos lgicos son aplicados a todos los predicados, para determi-
nar la veracidad de la sentencia dada.
Ejemplo:
Ejemplo:
X es un elefante X es un animal
Si se conoce que P(a), P(b), ......, P(n) son verdaderos, entonces se puede concluir que X,
P(X) es tambin verdadero.
PREDICATES
nondeterm person(symbol)
nondeterm car(symbol)
nondeterm likes(symbol, symbol)
nondeterm for_sale(symbol)
nondeterm can_buy(symbol,symbol)
CLAUSES
person(kelly).
person(judy).
person(ellen).
person(mark).
car(lemon).
car(hot_rod).
likes(kelly, hot_rod).
for_sale(pizza).
for_sale(lemon).
for_sale(hot_rod).
can_buy(X,Y) :- person(X), car(Y), likes(X,Y), for_sale(Y).
GOAL
can_buy(PERSONA,PRODUCTO).
Figura 3.1. Asociacin de los miembros en una familia a travs de una red asociativa
predicates
nondeterm hermana_de (symbol,symbol)
nondeterm esposa_de (symbol,symbol)
nondeterm madre_de (symbol,symbol)
nondeterm hijo_de (symbol,symbol)
nondeterm padre_de (symbol,symbol)
nondeterm abuelo_de (symbol,symbol)
nondeterm son_esposos (symbol,symbol)
clauses
hermana_de (ana, carolina).
esposa_de (ana,memo).
esposa_de (carolina, david).
esposa_de (susana, tomas).
madre_de (ana, susana).
madre_de (carolina, tomas).
madre_de (susana, juan).
padre_de (memo, susana).
padre_de (david, tomas).
padre_de (tomas, juan).
hijo_de (X,Y):- madre_de (Y,X); padre_de (Y,X).
abuelo_de (X,Y):- padre_de (X,Z), padre_de (Z,Y); padre_de (X,Z), madre_de(Z,Y).
son_esposos (X,Y):- esposa_de(X,Y).
goal
/*hijo_de (susana, Quien).*/
abuelo_de (Abuelo, Nieto).
/*son_esposos (Esposa,Esposo).*/
Para ejecutar el programa debemos activar una de las tres lneas que se en-
cuentran debajo de goal.
La ejecucin a la consulta de quienes son abuelos y quienes son sus nietos es:
La salida es:
predicates
nondeterm arriba_de(symbol,symbol)
nondeterm debajo_de(symbol,symbol)
nondeterm mas_abajo_de(symbol,symbol)
nondeterm libre(symbol)
nondeterm mover(symbol,symbol)
clauses
arriba_de(b,a).
arriba_de(a,mesa).
arriba_de(c,mesa).
arriba_de(d,mesa).
libre(b).
libre(c).
libre(d).
debajo_de(X,Y):-arriba_de(Y,X).
mas_abajo_de(Z,X):-debajo_de(Y,X),debajo_de(Z,Y).
mover(X,Y):-libre(X),libre(Y).
goal
/*arriba_de(X,mesa).*/
/*debajo_de(a,b).*/
/*mas_abajo_de(mesa,Arriba).*/
/*mover(Origen,Destino).*/
/*mover(Origen,Destino),Origen<>Destino.*/
Puede eliminar el par /* */ para ejecutar otras consultas, realicelos una por
vez.
Las reglas pueden ser utilizadas para expresar un amplio rango de asociacio-
nes, por ejemplo:
SI el drenaje del lavabo est tapado Y la llave de agua est abierta, ENTON-
CES se puede inundar el piso.
Un sistema basado en reglas utiliza el modus ponens para manipular las afir-
maciones y las reglas durante el proceso de inferencia. Mediante tcnicas de
bsqueda y procesos de unificacin, los sistemas basados en reglas automati-
zan sus mtodos de razonamiento y proporcionan una progresin lgica desde
Conformar una pila inicialmente compuesta por todos los objetivos priorita-
rios definidos en el sistema.
Si todas las reglas que pueden satisfacer el objetivo actual se han probado
y todas no han podido derivar un valor, entonces este objetivo quedar in-
determinado. Removerlo de la pila y retornar al paso (2). Si la pila est va-
ca parar y anunciar que se ha terminado el proceso.
p1 ---->
----> p2 ----->
-----> p3 ----->
-----> q3
Hecho objetivo
3er Obj 2do Obj
verdadero
Hechos = { a, b, d, e, g }
Reglas:
d r2
f
e
r3 r1
a
c z
b objetivo
Subobjetivos: d e a b
g
Subobjetivos: f c g
Figura 3.5 Prueba del objetivo Z con encadenamiento regresivo (encadenamiento hacia atrs)
R1: IF (P y Q) THEN S
R2: IF R THEN T
R3: IF (S y T) THEN U
R4: IF (S y R) THEN V
HECHOS={P,Q,R}
Probar V (objetivo)
Paso 1:
Paso 2:
Paso 3:
Paso 4:
R2: IF R THEN T
R3: IF (S y T) THEN U
Paso 4:
Paso 5:
R2: IF R THEN T
R3: IF (S y T) THEN U
HECHOS={P, Q, R, S, V}
Paso 5:
Pq es verdadero
P es verdadero
______
.
. . q es verdadero
P1 -->
--> P2 (Regla 1) dado -->
--> deducido
P2 -->
--> P3 (Regla 2) P1--
P1-->> Q3
P3 -->
--> q3 (Regla 3)
R1 R2 R3
p1 ---->
----> p2 ----->
-----> p3 ----->
-----> q3
deducido
Dado deducido deducido
Hechos = { b, e, g, a, d }
Reglas:
r3 r1
a
c z
b deducido
g
deducidos: f c
Ejemplo 2:
R1: IF (P y Q) THEN S
R2: IF R THEN T
R3: IF (S y T) THEN U
R4: IF (S y R) THEN V
HECHOS={P,Q,R}
V=objetivo
Paso 1: Realiza una comparacin de las hechos vs las reglas y busca que re-
glas se pueden ejecutar.
R2: IF R THEN T
R4: IF (S y R) THEN V
HECHOS = {P,Q,R,S}
Paso 2: Realiza una comparacin de los hechos vs las reglas y busca que re-
glas se pueden ejecutar.
R3: IF (S y T) THEN U
R4: IF (S y R) THEN V
HECHOS = {P, Q, R, S, T}
Paso 3: Realiza una comparacin de los hechos vs las reglas y busca que re-
glas se pueden ejecutar.
R4: IF (S y R) THEN V
HECHOS = {P, Q, R, S, T, U}
R4 se puede disparar
HECHOS = {P, Q, R, S, T, U, V}
3.4.1. INTRODUCCIN
4
Traduccin de: Durkin J. Expert Systems. USA: Ed. Macmillan; 1994
Definir el problema
Expandir el sistema
Refinar el sistema
Diseo de la interfase
De entrada estos pasos son aplicables a una pequea parte del sistema y lue-
go mediante su iteracin se expanden a todo el sistema hasta que ha sido refi-
nado y obtener el rendimiento de un experto.
El primer paso para el desarrollo de cualquier sistema experto debe ser apren-
der sobre el tema. Nuestra tarea en este caso ser desarrollar un sistema ex-
perto para ayudar a tomar decisiones financieras a un cliente que desea inver-
tir. Para ello se debe reunir informacin acerca del como trabaja una bolsa de
inversiones.
ACCIONES
Transferencias Empresas Comunes
BONOS
Del tesoro Corporaciones Municipales
AHORROS
Cuenta corriente Mercado monetario Cuentas de ahorro
PRODUCCIN
Agricultura Precio de metales Petrleo
INMUEBLES
Comercial Residencial Terrenos
Durante la explicacin de esta lista el experto podra incluir algunos comenta-
rios de cmo formar la cartera de inversiones. No obstante, es preferible tomar
la informacin por etapas.
Cada objetivo de nuestro sistema debe tener al menos una regla. Es necesario
obtener el conjunto de premisas para satisfacer cada regla. La forma general
de nuestras reglas ser la siguiente:
IF Premisas 1
AND Premisas 2
. .0
. .
THEN Cartera_i
EA: Cada inversin tiene un riesgo asociado con ella, de modo, que yo ne-
cesito saber algo acerca del estado personal y financiero del cliente. Cada una
de estas caractersticas es importante para recomendar una posicin agresiva
o conservadora.
EA: S.
EA: Claro que s. Si el cliente solo desea invertir una pequea cantidad de
dinero, se asume que es realmente conservador, e inmediatamente se le re-
comienda invertir todo su dinero en ahorros.
Esta discusin con el experto nos provee las principales consideraciones ate-
ner en cuenta cuando se recomienda una cartera de inversiones (nuestro obje-
tivo):
Mg. Juan Gamarra Moreno 101
Condicin personal del cliente (conservador o agresivo)
Tablas de decisin
Una tabla de decisin provee un formato fcil de llenar que el experto puede
usar para realizar su decisin (tabla 3.2).
Reglas objetivo
Podemos usar esta tabla para escribir nuestros objetivos. Si fuera muy grande
la tabla, necesitaramos usar herramientas de induccin. Dado que esta tabla
es pequea, se pueden escribir las reglas por simple inspeccin. Las siguien-
tes reglas estn representadas por el siguiente seudo cdigo:
Regla 1
Regla 3
Regla 4
Regla 5
Red de inferencia
Incluso en los estados tempranos de un proyecto es til dibujar una red de infe-
rencia de las reglas que se han hallado. La red de inferencia muestra las rela-
ciones lgicas entre las informaciones representadas en las reglas (figura 3.8).
Prueba de reglas
Orden de bsqueda
Otro aspecto importante en la prueba del sistema, en las primeras etapas del
proyecto, es el orden en que el sistema busca el conocimiento. La mayora de
shells buscan reglas de competencia en el orden en que son ingresadas. En
nuestro sistema esto implicara que la regla 1 es la que se debe buscar prime-
ro. Adems, la primera pregunta que el sistema debera realizar es que canti-
dad de dinero el cliente desea invertir. Por ello es necesario efectuar un buen
ensamblaje de nuestros objetivos para que no se pierda tiempo en preguntas
innecesarias cuando alguna pregunta clave del sistema podra estar dando
resultados concretos.
And
Or And
And
And
Estado
Inversin financiero
< 1000 = Agresivo
Estado
financiero =
Inversin Estado
conservador
>=1000 personal =
Estado
conservador
personal =
Agresivo
En este caso, el sistema buscara los posibles valores para la cartera reco-
mendada. Segn este procedimiento, un resultado que podra darse seria el
siguiente:
En este punto nuestro sistema tiene cinco reglas y puede recomendar 4 carte-
ras diferentes. Es totalmente funcional, pero no muy inteligente. El principal
forma para mejorar la inteligencia de un sistema experto es expandir su cono-
cimiento. Aqu, hay dos opciones disponibles: ampliando o profundizando el
conocimiento del sistema. Se entiende por ampliar el conocimiento a ensear
al sistema sobre problemas adicionales. En nuestro ejemplo, podemos ense-
arle otras mixturas de las carteras de inversiones. Este tipo de expansin es
bastante fcil y usualmente reservada para ms adelante en el proyecto.
Esto podra ser una pregunta difcil de contestar para el usuario porque requie-
re alguna especializacin en el problema.
En general, durante el desarrollo entero del sistema basado en reglas, Ud. de-
bera estar averiguando que puede expandirse en profundidad. Pregntese
usted mismo (o aun mejor pregunte al usuario) si el usuario puede contestar
eficazmente la pregunta planteada por el sistema. Si la respuesta es no, en-
tonces aada conocimiento al sistema que fuerce a buscar ms informacin
primitiva y fiable.
En la actualidad, nuestro sistema tiene tres problemas que pueden ser expan-
didos en profundidad:
Consejo de diseo: Expanda un problema por vez. Esto permite al experto en-
focarse en un slo problema y evita problemas comnmente encontrados
cuando al experto se le pide dirigirle a mltiples problemas.
Para expandir el estado personal tenemos dos preguntas para el experto, una
para cada posible valor: conservador o agresivo.
IC: Cmo Usted determina que el estado personal del cliente tiene una
posicin conservador?
Regla 6
IF El cliente ES viejo
OR El trabajo del cliente ES no estable
THEN El estado personal del cliente sugiere \
una posicin conservadora
IF El cliente ES joven
AND El trabajo del cliente ES estable
AND El cliente tiene \ nios
THEN El estado personal del cliente sugiere \
una posicin conservadora
Ahora se tiene dos reglas de profundidad que conducen a una de las premisas
de las reglas objetivos. La siguiente pregunta determina la posicin agresiva
del cliente:
IC: Cmo Usted determina que el estado personal del cliente tiene una
posicin agresiva?
Regla 8
IF El cliente ES joven
AND El trabajo del cliente ES estable
AND El cliente tiene \ no nios
THEN El estado personal del cliente sugiere \
una posicin agresiva
De esta discusin con el experto se obtuvieron diferentes reglas para soportar
el proceso de inferencia en profundidad. Sin embargo, tambin descubrimos
nuevos problemas que necesitaran ser explorados:
Uno de ellos puede ser contestado directamente y no tiene que ser explorado.
Sin embargo, expandiremos los otros dos, uno por vez.
Expansin de la edad
EA: 40 aos
Regla 9
Regla 10
Para evitar las inconsistencias del sistema es necesario llevar la cuenta de las
reglas que usan ELSE. A menudo el uso de ELSE dificulta el mantenimiento
del sistema por lo que debe evitar su uso.
EA: Usualmente considero dos cosas: los aos de servicio del cliente en su
actual compaa y la tasa de despidos que la compaa esta experimentando.
Por ejemplo, si l ha trabajo en la compaa entre 3 y 10 aos, y la tasa de
despidos es bajo, entonces asumo las cosas como estable. De hecho, si l ha
trabajado all por ms de 10 aos, siento que las cosas estn bien.
Regla 11
Regla 12
Regla 14
Podemos aadir las nuevas reglas a la red original de inferencia. La figura 3.9
muestra la parte de esta nueva red enfocado al estado personal del cliente.
Estado Estado
personal = personal =
conservador Agresivo
Or And And
Or < 40
>=40
And And
Servicio
>
Servicio
10
<
Servicio
3 Tasa de Tasa de
3 - 10
despidos despidos
alto bajo
IC: Cmo Usted sabe el estado financiero del cliente para sugerir una po-
sicin conservadora?
Regla 15
Regla 16
IC: Cmo Usted sabe el estado financiero del cliente para sugerir una po-
sicin agresiva?
Regla 17
Regla 18
Estado Estado
financiero = financiero =
conservador Agresivo
Or And
And
Total
activo < Cliente no
total tiene hijos
pasivo
Total Total Total
activo < 2 Cliente activo > 2 activo >
* total tiene hijos * total total
pasivo pasivo pasivo
Inicializar VEJEZ = 40
Regla 9
Inicializar SERVICIO_LARGO = 10
SERVICIO_CORTO = 3
Regla 11
ACTIVOS Y PASIVOS
Regla 17
Otro enfoque que podra elegirse es elaborar una red de seguridad inteligen-
te. Por inteligente se entiende que le sistema le dice al usuario que se encon-
tr algo que podra interesarle, aunque la recomendacin final no se alcanzo.
Para nuestro sistema ejemplo, podemos elegir informar al usuario acerca del
estado personal y financiero del cliente en la red de seguridad. Para cumplir
con esto, primero tendramos que hacer el siguiente ajuste a nuestra agenda
de metas:
Regla 18
IF Recomendacin se desconoce
THEN Visualizar por defecto
AND DISPLAY TEXTO POR DEFECTO
Existen varios lugares en el sistema donde se pueden elegir visualizar los ha-
llazgos intermedios. Por ejemplo, si queremos visualizar la valoracin al estado
personal del cliente. Sera necesario entonces aadir una sentencia a cada
regla que concluya en este asunto, la sentencia debe mostrar la informacin
adecuada. As se considera para la regla 6:
Regla 6
IF El cliente ES viejo
OR El trabajo del cliente ES no estable
THEN El estado personal del cliente sugiere \
una posicin conservadora
AND DISPLAY LA VALORACIN DEL ESTADO PERSONAL
DEL CLIENTE
DEL CLIENTE
Despus de considerar los asuntos personales del cliente, podra sugerir [Su-
gerencias al estado personal del cliente]. Continuare ahora con los aspectos
financieros del cliente.
El usuario tiene contacto con el sistema a travs de la interfaz del sistema. Mu-
chas veces la aceptacin del sistema depende en como la interfaz se acomoda
a las necesidades del usuario, los diferentes shells ofrecen ayuda en esta ta-
Visualizacin introductoria
Preguntas adecuadas
Este tipo de preguntas a parte de ser fras puede confundir al usuario llevndo-
los a contestarlas equivocadamente. Ante tal pregunta, el usuario podra pre-
guntarse Qu activos considero?, o, Ingreso las cantidades en dlares?.
SISTEMA: Por favor dame la cantidad en dlares total de los activos que el
cliente posee. Incluyendo la tenencia de cuentas bancarias, acciones, bonos,
inmuebles, etc. Por favor ingrese la cantidad en dlares sin comas, por ejemplo
150000.
Continuacin de la sesin
Primaria
Secundaria
Bachillerato
Ocupacional
Tcnico
Universitaria
Maestra
Ph. D.
Fin de sesin
SISTEMA: Para salir del sistema presione F10. Si se desea reiniciar la se-
sin presione F3.
Visualizacin de Conclusiones
Para comodidad del usuario que slo requiere una visualizacin de alto nivel
del razonamiento, el sistema podra mostrar una sugerencia que permita esta
visualizacin de los hallazgos importantes. Estos hallazgos importantes son
asuntos importantes que considera el sistema para determinar la recomenda-
cin final.
Aqu el usuario recibe una recomendacin final y razones de alto nivel de por-
que la recomendacin se hizo.
En este punto nuestro sistema prototipo esta completo. Todas las reglas se
codifican en el sistema y se asume que la interfaz se ha diseado de acuerdo a
las recomendaciones dadas en las secciones previas. Tambin se asume que
el sistema ha pasado satisfactoriamente las pruebas desarrolladas con cada
expansin. El paso que sigue es evaluar el sistema usado en el caso de prue-
bas reales.
Este proceso comienza preguntndole al experto por uno de los casos pasa-
dos. Se asume que el caso involucra un cliente de 30 aos de edad, ha estado
en una compaa 5 aos con una tasa de despido temporal pequea, tiene dos
La sugerencia ES
Visualizar por defecto
------------------------------------------
Reglas de Sugerencia de Inversin
------------------------------------------
------------------------------------------
Determinar el estado personal del cliente
------------------------------------------
------------------------------------------
Determinar el estado financiero del cliente
------------------------------------------
------------------------------------------
Determinar la edad del cliente
------------------------------------------
------------------------------------------
Determinar la estabilidad del trabajo del cliente
------------------------------------------
PASO 1
USUARIO: ENTRAR.
PASO 2
USUARIO: ENTRAR.
PASO 3
USUARIO: 30
PASO 4
USUARIO: 5
Baja
Alta
USUARIO: Baja
PASO 6
SISTEMA: El cliente:
tiene nios
no tiene nios
PASO 7
USUARIO: ENTRAR
PASO 8
USUARIO: 100000
USUARIO: 20000
PASO 10
USUARIO: ENTRAR
PASO 11
Revisin de la sesin
Otro aspecto que se debe notar en esta evaluacin es que el sistema result
cmodo para el usuario a travs de toda la sesin.
Apectos futuros
Otro enfoque que se podra tomar al modificar las reglas meta existentes para
incluir los portafolios adicionales sera el de aadir premisas adicionales. Por
ejemplo, podramos considerar otros asuntos tales como los objetivos de inver-
sin del cliente, periodo de inversin, o an condiciones financieras mundiales.
Para este enfoque ser necesario desarrollar tambin un conjunto de reglas
ms profundas que podran inferir estos nuevos valores modificados.
Las reglas meta escritas para esta nueva meta (ejemplo, 1.1.) necesitarn in-
formacin acerca de la recomendacin de portafolio. Para ello, primero se de-
be modificar las reglas del sistema y capturar las categoras de inversin gene-
ral en una sentencia simblica multivalor y el porcentaje a ser invertido como
se observa en la modificacin de la REGLA1:
Las premisas dentro de estas reglas podra contener asuntos que pueden dis-
tinguir entre los varios medios dentro de cada categora. La cantidad actual a
invertirse en algn medio sera decido usando informacin de la cantidad del
total de la inversin y el porcentaje de la inversin para la categora de inver-
sin general, tal como Porcentaje de ahorros.
Los sistemas con encadenamiento hacia atrs pueden estar diseados pa-
ra desarrollar bsqueda exhaustiva o no exhaustiva.
Para las reglas que usan nmeros para las operaciones de relacin, man-
tengan los nmeros en la forma de variable que se le asignan en una sec-
cin de inicializacin del programa.
Es importante que una interfaz se disee para cumplir con las necesidades
del usuario.
Para nuestro caso, el objetivo general del sistema experto es que ayude en la
manutencin de la salud. La rpida subida de los costos en el cuidado de la
salud, combinado con el incremento de la competencia en este rubro, ha gene-
Los clientes rutinariamente requieren apoyo mdico para nuevos casos o para
seguimientos de casos. Mientras algunos clientes requieren informacin u
otros servicios, los clientes que no son miembros son los primeros candidatos
para solicitar la membresa a OMS.
Temperatura Sntomas
Miembro ID
c) Problema: Qu tan serio es la condicin actual del cliente?, dos tems in-
fluencian la respuesta. Una temperatura anormal u otro sntoma presentado
que requiere servicio de atencin inmediata.
De acuerdo a las respuestas del cliente se puede ofrecer los siguientes servi-
cios:
Ayuda de nivel 2, para miembros con nuevos casos que no son serios.
Ayuda de nivel 3, para miembros con seguimiento de casos que no son se-
rios.
Dibujar rectngulos con un tringulo abierto para cada factor crtico identifi-
cado en el diagrama de bloques.
Dibujar una lnea recta que conecte a cada tringulo, escriba una frase que
describa al tem que llega al tringulo, el cual influenciar en la salida del
factor crtico. Adems bajo la lnea o entre parntesis escriba los valores
que puede tomar el tem anterior.
En cada rectngulo escriba el nombre del factor crtico y debajo escriba los
valores de este factor crtico. Realice lo mismo para el rectngulo que tiene
a las recomendaciones o conclusiones.
Razn Recomendacin
de ayuda
(nuevo caso, seguimiento de caso, otra informacin)
- Nivel 1
- Nivel 2
- Nivel 3
- Otra in-
formacin.
- No es
Temperatura miembro
(Normal, anormal, desconocido)
Problema
Otros sntomas
Serio
(Si, No) No es serio
Figura 3.12.
3.5.4. ETAPA 4: CREAR TABLAS DE DECISIN
En esta etapa se debe crear una tabla de decisin con la siguiente recomen-
dacin:
Tabla 3.3
no_ok)
Total de filas=2 x 3 x 2 12
Tabla 3.4
Regla Estado de Razn Problema Recomendacin
membresa
A1 Ok Nuevo caso Serio Nivel 1
A2 Ok Nuevo caso No es serio Nivel 2
A3 Ok seguimiento Serio Nivel 1
de caso
A4 Ok seguimiento No es serio Nivel 3
de caso
A5 Ok Otra informa- Serio Otra informacin
cin
A6 Ok Otra informa- No es serio Otra informacin
cin
A7 no_ok Nuevo caso Serio No es miembro
A8 no_ok nuevo caso No es serio No es miembro
A9 no_ok seguimiento Serio No es miembro
de caso
A10 no_ok seguimiento No es serio No es miembro
de caso
A11 no_ok Otra informa- Serio No es miembro
cin
A12 no_ok Otra informa- No es serio No es miembro
cin
Tabla 3.6
Condiciones Nmero de valores
Total de filas = 2 x 2 4
Tabla 3.7
Reglas Miembro Identificacin valida Estado de membresa
A1 Si Si Ok
A2 Si No No ok
A3 No Si No ok
A4 No No No ok
Tabla 3.8
Reglas Miembro Identificacin valida Estado de membresa
B1 Si Si Ok
B2 --- No No ok
B3 No --- No ok
Total de filas=3 x 2 6
Tabla 3.10
Regla Temperatura Otros sntomas Problema
A1 Normal Si Serio
A2 Normal No No es serio
A3 Anormal Si Serio
A4 Anormal No Serio
A5 Desconocido Si Serio
A6 Desconocido No Serio
Tabla 3.11
Regla Temperatura Otros sntomas Problema
B1 Normal Si Serio
B2 Normal No No es serio
Author:
EPG
DISPLAY THRESHOLD: 1
QUALIFIERS:
1 ESTADO DE MEMBRESIA
OK
NO OK
Display at end
NUEVO CASO
SEGUIMIENTO DE CASO
OTRA INFORMACION
Display at end
ES SERIO
NO ES SERIO
Display at end
4 EL CLIENTE ES MIEMBRO
NO
SI
Display at end
SI
NO
Display at end
NORMAL
ANORMAL
DESCONOCIDO
Display at end
Display at end
CHOICES:
1 LA RECOMENDACION ES AYUDA DE NIVEL 1
5 EL CLIENTE NO ES MIEMBRO
RULES:
----------------------------------------
RULE NUMBER: 1
IF:
ESTADO DE MEMBRESIA OK
and LA RAZON POR LA QUE VINO EL CLIENTE ES OTRA INFORMACION
THEN:
EL CLIENTE VINO POR OTRA INFORMACION - Confidence=1
and STOP
----------------------------------------
RULE NUMBER: 2
IF:
ESTADO DE MEMBRESIA OK
and LA RAZON POR LA QUE VINO EL CLIENTE ES NUEVO CASO
and EL PROBLEMA QUE TIENE EL CLIENTE ES SERIO
THEN:
LA RECOMENDACION ES AYUDA DE NIVEL 1 - Confidence=1
and STOP
----------------------------------------
RULE NUMBER: 3
IF:
ESTADO DE MEMBRESIA OK
and LA RAZON POR LA QUE VINO EL CLIENTE ES NUEVO CASO
and EL PROBLEMA QUE TIENE EL CLIENTE NO ES SERIO
THEN:
LA RECOMENDACION ES AYUDA DE NIVEL 2 - Confidence=1
and STOP
----------------------------------------
THEN:
LA RECOMENDACION ES AYUDA DE NIVEL 1 - Confidence=1
and STOP
----------------------------------------
RULE NUMBER: 5
IF:
ESTADO DE MEMBRESIA OK
and LA RAZON POR LA QUE VINO EL CLIENTE ES SEGUIMIENTO DE CASO
and EL PROBLEMA QUE TIENE EL CLIENTE NO ES SERIO
THEN:
LA RECOMENDACION ES AYUDA DE NIVEL 3 - Confidence=1
and STOP
----------------------------------------
RULE NUMBER: 6
IF:
ESTADO DE MEMBRESIA NO OK
THEN:
EL CLIENTE NO ES MIEMBRO - Confidence=1
and STOP
----------------------------------------
RULE NUMBER: 7
IF:
EL CLIENTE ES MIEMBRO NO
THEN:
ESTADO DE MEMBRESIA NO OK
----------------------------------------
RULE NUMBER: 8
IF:
LA IDENTIFICACION DEL CLIENTE ES VALIDA NO
THEN:
ESTADO DE MEMBRESIA NO OK
----------------------------------------
RULE NUMBER: 9
IF:
EL CLIENTE ES MIEMBRO SI
THEN:
ESTADO DE MEMBRESIA OK
----------------------------------------
RULE NUMBER: 10
IF:
LA TEMPERATURA DEL CLIENTE ES NORMAL
and EL CLIENTE TIENE OTROS SINTOMAS SI
THEN:
EL PROBLEMA QUE TIENE EL CLIENTE ES SERIO
----------------------------------------
RULE NUMBER: 11
IF:
LA TEMPERATURA DEL CLIENTE ES NORMAL
and EL CLIENTE TIENE OTROS SINTOMAS NO
THEN:
EL PROBLEMA QUE TIENE EL CLIENTE NO ES SERIO
----------------------------------------
RULE NUMBER: 12
IF:
LA TEMPERATURA DEL CLIENTE ES ANORMAL
THEN:
EL PROBLEMA QUE TIENE EL CLIENTE ES SERIO
----------------------------------------
RULE NUMBER: 13
IF:
LA TEMPERATURA DEL CLIENTE ES DESCONOCIDO
THEN:
EL PROBLEMA QUE TIENE EL CLIENTE ES SERIO
Se debe disear una interfaz adecuada que permita una interaccion con el
usuario que sea lo ms amigable posible.
Una pregunta para un problema medico puede ser la siguiente : Tiene una
fuerte jaqueca?. La respuesta es incierta, porque es subjetiva y requiere que el
usuario elabore un juicio al contestar la pregunta; por supuesto el usuario se
siente mejor al contestar con verdadero o falso. Por otro lado, el usuario po-
dra contestar asignando un nmero subjetivo a su respuesta entre 0 y 1, tal
como 0.7, que significa 70% de certeza en su respuesta. El nmero no tiene
base estadstica ni probabilstica, ms bien es el nivel de creencia de la res-
puesta dada.
Falso Verdadero
Factor de
certeza
Figura 3.13. Factor de Certeza
Rx : SI p Y q ENTONCES r
Rx : SI p ENTONCES r
Rx : SI p Y q Y r ..Y.. z ENTONCES c
Rx : SI p O q O r ..O.. z ENTONCES c
R1 : SI a Y b ENTONCES c
R2 : SI c O d ENTONCES e
R3 : SI e Y f ENTONCES x
Hallando FCc
Hallando FCe
Hallando FCx
Dados
R1 : SI a Y b ENTONCES x
R2 : SI c O d ENTONCES x
Los conjuntos difusos fueron introducidos por primera vez en 1965; la creciente
disciplina de la lgica difusa provee por s misma un medio para acoplar estas
tareas. En cierto nivel, la lgica difusa puede ser vista como un lenguaje que
permite trasladar sentencias sofisticadas en lenguaje natural a un lenguaje ma-
temtico formal. Mientras la motivacin original fue ayudar a manejar aspectos
imprecisos del mundo real, la prctica temprana de la lgica difusa permiti el
desarrollo de aplicaciones prcticas. Aparecieron numerosas publicaciones
que presentaban los fundamentos bsicos con aplicaciones potenciales. Esta
frase marc una fuerte necesidad de distinguir la lgica difusa de la teora de
probabilidad. Tal como la entendemos ahora, la teora de conjuntos difusos y la
teora de probabilidad tienen diferentes tipos de incertidumbre.
El trmino difuso procede de la palabra inglesa fuzz que sirve para denomi-
nar la pelusa que recubre el cuerpo de lo polluelos al poco de salir del huevo.
Este trmino ingls significa confuso, borroso, indefinido o desenfocado. Este
trmino se traduce por flou en frances y aimai en japones. Aunque la teora
de conjuntos difusos presente cierta complejidad, el concepto bsico es fcil-
mente comprensible.
Los Conjuntos Difusos son capaces de captar por s mismos la vaguedad lin-
gstica de palabras y frases comnmente aceptadas, como "gato pardo" o
"ligero cambio". La habilidad humana de comunicarse mediante definiciones
vagas o inciertas es un atributo importante de la inteligencia.
Una Variable Lingstica es aquella variable cuyos valores son palabras o sen-
tencias son vagas o imprecisas. Para estas variables lingsticas se utilizar un
nombre y un valor lingstico sobre un Universo de Discurso.
x no es PEQUEO.
U={0,1,2,3,4,5,6,7,8,9}
A={0,2,4,6,8}
B={1,3,5,7,9}
C={1,4,7}, etc.
Con estas definiciones hemos establecido que cada uno de los elementos del
Universo pertenecen o no a un determinado conjunto. Por lo tanto, cada con-
junto puede definirse completamente por una funcin de pertenencia, que ope-
ra sobre los elementos del Universo, y que le asigna un valor de 1 si el elemen-
to pertenece al conjunto, y de 0 si no pertenece.
Ahora bien, un Conjunto Difuso se define de forma similar, con una diferencia
conceptual importante: un elemento puede pertenecer parcialmente a un con-
junto.
D={20%/1,50%/4,100%/7}5
Las primeras diferencias que se hacen evidentes entre los Conjuntos Concre-
tos y los Conjuntos Difusos son las siguientes:
5
Se ha empleado una notacin frecuente, en donde el signo "/" no significa "dividido por".
Sin embargo, qu tan grande es la diferencia que existe entre dos jugadores
del equipo, uno con estatura de 179.9 cm y otro de 180.0 cm? Ese milmetro
de diferencia quizs no represente en la prctica algo significativo, y sin em-
bargo los dos jugadores han quedado rotulados con etiquetas distintas: uno es
Mediano y el otro es Alto. Si se optase por efectuar la misma clasificacin con
conjuntos difusos estos cambios abruptos se evitaran, debidos a que las fron-
teras entre los conjuntos permitiran cambios graduales en la clasificacin.
FREC
FREC _ DIFUSA
MAXIMO _ FREC
Con el resultado de las tablas 3.12 y 3.13., realizamos una grafica con la
EDAD y FREC DIFUSO que representan a las funciones de pertenencia. Las
funciones de pertenencia se muestran en las figuras 3.18 y 3.19 para edad jo-
ven y edad adulta.
1,2
0,8
0,6
0,4
0,2
0
15 18 21 24 27 30 33
0,8
0,6
0,4
0,2
0
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
Una vez obtenidas las funciones podramos aproximarlos a una de las funcio-
nes estndar que tiene la lgica difusa.
Los Conjuntos Difusos se pueden operar entre s del mismo modo que los con-
juntos clsicos. Puesto que los primeros son una generalizacin de los segun-
dos, es posible definir las operaciones de interseccin, unin y complemento
haciendo uso de las mismas funciones de pertenencia:
Para cada una de las variables, definimos los conjuntos difusos, de acuerdo a
los adjetivos tpicos utilizados en relacin con estas variables.
Baja 10 30 (x 103)
Ventas
Normal 10 50 (x 103)
($)
Alta 30 50 (x 103)
Accesible
Caro
Barato
Figura 3.25 Funciones de pertenencia para la variable Nivel de Ingreso del Cliente.
10 20 30 40 50
Figura 3.26 Funciones de pertenencia para la variable Ventas mensuales
Esta tarea sirve para ver si el sistema alcanza las especificaciones dados en la
definicin del problema.
Barato Accesible
Caro
barato(precio) = 0.2
accesible(precio) = 0.8
450
Figura 3.28 Grado de pertenencia para la variable Nivel de Ingreso del Cliente.
Las reglas que se dispararn son las reglas 1, 2, 4 y 5 con las siguientes ca-
ractersticas:
----------------------------------------
RULE NUMBER: 1
IF:
PRECIO DE COMPUTADORA BARATO (0.2)
and NIVEL DE INGRESO CLIENTE BAJO (0.167)
THEN:
VENTAS MENSUALES BAJA (FCvmb=0.167)
----------------------------------------
RULE NUMBER: 2
IF:
PRECIO DE COMPUTADORA BARATO (0.2)
and NIVEL DE INGRESO CLIENTE MEDIO (0.5)
THEN:
VENTAS MENSUALES NORMAL (FCvmn=0.2)
----------------------------------------
RULE NUMBER: 4
IF:
PRECIO DE COMPUTADORA ACCESIBLE (0.8)
and NIVEL DE INGRESO CLIENTE BAJO (0.167)
THEN:
VENTAS MENSUALES BAJA (FCvmb=0.167)
----------------------------------------
RULE NUMBER: 5
IF:
PRECIO DE COMPUTADORA ACCESIBLE (0.8)
and NIVEL DE INGRESO CLIENTE MEDIO (0.5)
THEN:
VENTAS MENSUALES BAJA (FCvmb=0.5)
----------------------------------------
----------------------------------------
RULE NUMBER: 1
IF:
PRECIO DE COMPUTADORA BARATO (0.2)
and NIVEL DE INGRESO CLIENTE BAJO (0.167)
THEN:
VENTAS MENSUALES BAJA ((y1)=FCvmb=0.167)
----------------------------------------
RULE NUMBER: 2
IF:
PRECIO DE COMPUTADORA BARATO (0.2)
and NIVEL DE INGRESO CLIENTE MEDIO (0.5)
THEN:
VENTAS MENSUALES NORMAL ((y2)=FCvmn=0.2)
----------------------------------------
RULE NUMBER: 4
IF:
PRECIO DE COMPUTADORA ACCESIBLE (0.8)
and NIVEL DE INGRESO CLIENTE BAJO (0.167)
----------------------------------------
RULE NUMBER: 5
IF:
PRECIO DE COMPUTADORA ACCESIBLE (0.8)
and NIVEL DE INGRESO CLIENTE MEDIO (0.5)
THEN:
VENTAS MENSUALES BAJA ((y4)=FCvmb=0.5)
----------------------------------------
Y K YK
K 1
VARIABLE N
Y
K 1
K
Donde:
Para el ejemplo que estamos desarrollando y1, y2, y3 y y4 son los centroides
de los conjuntos difusos que estn en las conclusiones de las reglas 1, 2, 4 y 5
respectivamente.
10 20 30 40 50
Una red neuronal artificial es, bsicamente, el resultado de los intentos por re-
producir mediante computadores el funcionamiento del cerebro humano. Su
principal aplicacin es en torno a las tareas en que los seres humanos fcil-
mente superan a los computadores tradicionales, como en procesamiento de
seales, procesamiento de imgenes, procesamiento de voz, en robtica y
otros.
La informacin que procesa una red neuronal se encuentra dispersa entre to-
das sus interconexiones, lo que la hace fundamentalmente diferente a un
computador tradicional, en que la informacin se encuentra totalmente locali-
zada y no distribuida como en este caso. Esta cualidad hace que las redes
neuronales posean una gran tolerancia a fallas.
X 2
W 2 j
Y j
:. Z j= W i jX i F ( Z j )
:
X n
W n j
A x o n e s S in a p s is D e n d r ita s C u e r p o d e la N e u r o n aA x n
:
:
: :
:
:
C a p a d e e n tr a d a C a p a e s c o n d i d aC a p a d e s a l i d a
Finalmente, hay que indicar que las redes monocapa se utilizan tpicamente en
tareas relacionadas con lo que se conoce como autoasociacin; por ejemplo,
Las capacidades del Perceptron con dos tres y cuatro niveles o capas y con
una nica neurona en el nivel de salida, se muestra en la figura 4.8.
Figura 4.8 Distintas formas de las regiones generadas por un perceptron multinivel
Ahora necesitamos una red neuronal que permita tomar los patrones de
entrada y de salida para el entrenamiento, tal como se muestra en la figura
4.9.
Para esta ejecucin se tiene que el valor devuelto por la red neuronal es muy
cercano a 1, tal como se dio en el entrenamiento (la red neuronal aprendi).
1 1 0 0 0 0 1
0 1 1 0 0 0 1
0 1 0 0 0 1 1
0 0 1 1 1 1 0
0 0 1 1 1 0 0
0 0 0 1 1 0 0
Salida
Figura 4.9 Red neuronal que permite tomar los patrones de la tabla 4.2.
Figura 4.10 Resultado que muestra un programa que contiene a la red neuronal entrenada de la
figura 4.9.
Figura 4.11 Resultados que muestra otra ejecucin del programa que contiene a la red neuronal
entrenada de la figura 4.9.
Back propaga-
1974- Sntesis Red ms popu- Necesita mu- Paul Werbos,
6
Hilera J, Martinez V. Redes Neuronales Artificiales: Fundamentos, modelos y Aplicacio-
nes. Espaa: Editorial RA-MA; 1995.
Memoria aso- 1985 Memoria hete- Aprendi- Baja capaci- Bart Kosko.
deben ser
codificados.
Mquinas de
1985- Reconoci- Redes sim- La mquina de Jeffrey
Optimiza- nes.
cin.
Brain-Estate-in-a-
Box. 1977 Extraccin de Posiblemen- Realizacin y James
des de totalmente.
Hopfield.
Pellionez.
TPM.
trones y en VLSI.
optimizacin. Fcil de
conceptua-
lizar
Neocognitron 1978- Reconocimien- Insensible Requiere mu- K. Fukushi-
84 to de carac- a la Trans- chos elemen- ma
teres manus- lacin, ro- tos de proce-
critos tacin y so, niveles y
escala. conexiones.
Hay muchos tipos diferentes de redes neuronales, cada uno de los cuales tiene
una aplicacin particular ms apropiada. Relacionamos ejemplos de algunas
aplicaciones comerciales separndolas en grupos segn las distintas discipli-
nas:
Biologa
Empresa
Medio ambiente
Finanzas
Identificacin de falsificaciones.
Interpretacin de firmas.
Manufacturacin
Inspecci6n de la calidad.
Medicina
Monitorizacin en ciruga.
Lectores de rayos X.
Militares
La regla propuesta por Widrow en 1960 (regla delta) ha sido extendida a redes
con capas intermedias (regla delta generalizada) con conexiones hacia adelan-
te (feedforward) y cuyas clulas tienen funciones de activacin continuas (li-
neales o sigmoidales), dando lugar al algoritmo de retropropagacin (backpro-
pagation). Estas funciones continuas son no decrecientes y derivables. La
funcin sigmoidal pertenece a este tipo de funciones, a diferencia de la funcin
escaln que se utiliza en el Perceptron, ya que esta ltima no es derivable en
el punto en el que se encuentra la discontinuidad.
El mtodo que sigue la regla delta generalizada para ajustar los pesos es exac-
tamente el mismo que el de la regla delta utilizada en el Perceptron y, ADALI-
NE; es decir, los pesos se actualizan de forma proporcional a la delta, o dife-
rencia entre la salida deseada y la obtenida ( = sal. deseada - sal. obtenida).
Dada una neurona (unidad Ui) y la salida que produce, yi (Figura 4.13), el cam-
bio que se produce en el peso de la conexin que une la salida de dicha neu-
rona con la unidad Uj (wji) para un patrn de aprendizaje p determinado es:
w ji t 1 pj y pi
En donde el subndice p se refiere al patron de aprendizaje concreto, y es la
constante o tasa de aprendizaje.
pj d pj y pj f 1 net j
donde dpj es la salida deseada de la neurona j para el patrn p y netj es la en-
trada neta que recibe la neurona j.
Segn esto, en el caso de que Uj no sea una neurona de salida (ver Figura
4.14), el error que se produce est en funcin del error que se comete en las
neuronas que reciben como entrada la salida de Uj:
pj pk wkj f 1 net j
k
donde el rango de k cubre todas aquellas neuronas a las que est conectada la
salida de Uj. De esta forma, el error que se produce en una neurona oculta es
la suma de los errores que se producen en las neuronas a las que est conec-
Figura 4.14 Conexiones entre neuronas de la capa oculta con la capa de salida.
w ji t 1 w ji t pj y pi w ji t w ji t 1
w ji t 1 pj y pi w ji t
w ji t 1 w ji t w ji t 1
w ji t 1 w ji t pj y pi w ji t
donde:
pj d pj y pj f 1 net j
si Uj es una neurona de salida y
pj pk wkj f 1 net j
k
si Uj no es una neurona de salida.
En una red backpropagation existe una capa de entrada con n neuronas y una
capa de salida con m neuronas y al menos una capa oculta de neuronas inter-
nas. Cada neurona de una capa (excepto las de entrada) recibe entradas de
todas las neuronas de la capa anterior y enva su salida a todas las neuronas
de la capa posterior (excepto las de salida). No hay conexiones hacia atrs
feedback ni laterales entre neuronas de la misma capa.
La aplicacin del algoritmo backpropagation tiene dos fases, una hacia adelan-
te y otra hacia atrs. Durante la primera fase el patrn de entrada es presenta-
do a la red y propagado a travs de las capas hasta llegar a la capa de salida.
Obtenidos los valores de salida de la red, se inicia la segunda fase, comparn-
dose estos valores con la salida esperada para obtener el error. Se ajustan los
pesos de la ltima capa proporcionalmente al error. Se pasa a la capa anterior
Paso 1
Paso 2
Paso 3
Calcular la salida actual de la red, para ello presentamos las entradas a la red
y vamos calculando la salida que presenta capa hasta llegar a la capa de sali-
da sta ser la salida de la red y1, y2,...,yM. Los pasos son los siguientes:
N
net whji
h
pj x pi jh
i 1
y pj f jh net hpj
Se realizan los mismos clculos para obtener las salidas de las neuronas
de salida (capa o: output)
L
net o
pk wkjo y pj ko
j 1
y pk f ko net opk
Paso 4
f k net jk
1
net
1 e jk
f ko f ko 1 f ko y pk 1 y pk
1
por lo que los trminos de error para las neuronas de salida quedan:
opk d pk y pk
para la salida lineal, y
opk d pk y pk y pk 1 y pk
Paso 5
wkjo t 1 opk y pj
y para los pesos de las neuronas de la capa oculta:
whji t 1 hpj x pi
whji t whji t 1
cuando se trata de una neurona oculta.
Paso 6
M
Ep 1
2 pk
2
k 1
resulta aceptablemente pequeo para cada uno de los patrones aprendidos.
El comportamiento del robot lo describe la tabla 4.4, cuando los sensores de-
tecten un objeto que se encuentra a una distancia inferior a la predeterminada
se dir que el objeto se encuentra cerca y esto se representa por medio de un
1 y cuando se detecte un objeto que se encuentra a una distancia mayor que la
predeterminada se dir que el objeto esta lejos lo cual se indica con un 1; de-
pendiendo de estas lecturas los motores podrn dar marcha adelante, lo que
se representar por un 1 o dar marcha atrs con un 1.
7
Universidad Tecnolgica de Pereira. Colombia.
S1 S2 S3 S4 M1 M2
1 1 1 1 -1 -1
-1 1 1 1 -1 1
1 1 -1 -1 1 -1
-1 -1 -1 -1 1 1
1 -1 1 1 1 -1
1 1 -1 1 -1 1
1 1 1 -1 1 -1
Luego del ingreso elija FILE, NEW e ingrese un nombre de archivo, como en la
figura 4.19 (no escriba ninguna extensin para el archivo).
Figura 4.19.
Seleccione Data Entry (figura 4.21) e ingrese los datos de la tabla 4.4, para
entrenar la red neuronal (figura 4.22). Se sugiere para el entrenamiento dupli-
car estos datos dos veces salvo el titulo de cada columna.
Figura 4.21
Luego de ingresar los datos cierre la ventana despus de haber grabado estos
con File, Save File.
En la figura 4.26 elija examinar datos para analizar los datos y los errores ge-
nerados a la salida.
Figura 4.24
Figura 4.26
Figura 4.28
' inarray(1) is S1
' inarray(2) is S2
' inarray(3) is S3
' inarray(4) is S4
' outarray(1) is M1
' outarray(2) is M2
netsum = -.7532668
netsum = netsum + inarray(1) * 7.551737
netsum = netsum + inarray(2) * .2998328
netsum = netsum + inarray(3) * 7.341322
netsum = netsum + inarray(4) * -6.852577
feature2(1) = 1 / (1 + exp(-netsum))
netsum = -2.495483
netsum = netsum + inarray(1) * -5.648689
netsum = netsum + inarray(2) * 1.05053
netsum = netsum + inarray(3) * -5.979871
netsum = netsum + inarray(4) * 6.870361
feature2(2) = 1 / (1 + exp(-netsum))
netsum = -4.198974E-02
netsum = netsum + inarray(1) * 4.999131
netsum = netsum + inarray(2) * -3.897346
netsum = netsum + inarray(3) * 2.603323E-05
netsum = netsum + inarray(4) * -3.897321
feature2(3) = 1 / (1 + exp(-netsum))
netsum = .1287855
netsum = netsum + feature2(1) * -2.675452
netsum = netsum + feature2(2) * -2.65109
netsum = netsum + feature2(3) * 6.387748
outarray(1) = 1 / (1 + exp(-netsum))
netsum = 3.821959
netsum = netsum + feature2(1) * -6.030695
netsum = netsum + feature2(2) * 3.957484
netsum = netsum + feature2(3) * 8.61486E-03
outarray(2) = 1 / (1 + exp(-netsum))
End Sub
Figura 4.30. Formulario en Visual Basic que manipula las entradas y salidas de la red neuronal.
' inarray(1) is S1
' inarray(2) is S2
' inarray(3) is S3
' inarray(4) is S4
' outarray(1) is M1
' outarray(2) is M2
netsum = -0.7532668
netsum = netsum + inarray(1) * 7.551737
netsum = netsum + inarray(2) * 0.2998328
netsum = netsum + inarray(3) * 7.341322
netsum = netsum + inarray(4) * -6.852577
feature2(1) = 1 / (1 + Exp(-netsum))
netsum = -2.495483
netsum = netsum + inarray(1) * -5.648689
netsum = netsum + inarray(2) * 1.05053
netsum = netsum + inarray(3) * -5.979871
netsum = netsum + inarray(4) * 6.870361
feature2(2) = 1 / (1 + Exp(-netsum))
netsum = -0.04198974
netsum = netsum + inarray(1) * 4.999131
netsum = netsum + inarray(2) * -3.897346
netsum = netsum + inarray(3) * 0.00002603323
netsum = netsum + inarray(4) * -3.897321
feature2(3) = 1 / (1 + Exp(-netsum))
netsum = 0.1287855
netsum = 3.821959
netsum = netsum + feature2(1) * -6.030695
netsum = netsum + feature2(2) * 3.957484
netsum = netsum + feature2(3) * 0.00861486
outarray(2) = 1 / (1 + Exp(-netsum))
End Sub
Private Sub Command2_Click()
End
End Sub
No hace nada: no pasa nada cuando se hace girar la llave del contacto.
Tabla 4.5. Para el problema de diagnsticos del automvil, se hacen corresponder los sntomas con
las causas.
Causas probables
Sntomas Batera Bobina Motor de Cables Distribuidor Bomba de
arranque gasolina
No hace nada X
Clics X X X
Molinillo X X X X
Gira X X X
Sin chispa X X
Cable caliente X X
Sin gasolina X
La solucin
Empleando los datos de nuestro ejemplo, ser necesaria una red con siete
unidades de entrada y seis unidades de salida. Esto deja nicamente sin de-
terminar el nmero de unidades internas (ocultas). En este caso, no hay nada
que indique cuntas unidades ocultas se van a necesitar para resolver el pro-
blema, y no hay consideraciones de interfaz externa que vayan a limitar el n-
mero de unidades ocultas.
M 2*M
n
2* N N
donde:
Lo nico que queda ahora es entrenar a la red con estos pares de datos. Una
vez que est entrenada, la red producir una salida que identifique a la causa
probable indicada por el mapa de sntomas de entrada. La red har esto cuan-
do la entrada sea equivalente a una de las entradas de entrenamiento, tal co-
mo se esperaba, y adems producir una salida, indicando la causa probable
del problema, cuando la entrada sea parecida a alguna de las entradas de en-
trenamiento, pero distinta de todas ellas. Esta aplicacin ilustra la capacidad de
la red para realizar la "mejor suposicin" (generalizacin) y pone de manifiesto
la capacidad de la red para enfrentarse a entradas de datos con ruido o incom-
pletas.
8
1. Sierra Molina, Guillermo y otros (1995). Sistemas Expertos en Contabilidad y Ad-
ministracin de Empresas. Editorial Addison Wesley. USA.
Bomba de gasolina
Motor de arranque
Cable caliente
No hace nada
Sin gasolina
Distribuidor
Sin chispa
Molinillo
Batera
Cables
Bobina
Clics
Gira
1 0 0 0 0 0 0 1 0 0 0 0 0
0 1 0 0 0 0 0 1 1 1 0 0 0
0 0 1 0 0 0 0 0 0 1 1 1 1
0 0 0 1 0 0 0 0 0 0 1 1 1
0 0 0 0 1 0 0 0 0 0 1 1 0
0 0 0 0 0 1 0 0 1 1 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 1
Se puede utilizar el Neuroshell, para entrenar a la red neuronal con los datos
de la tabla 4.6 y se debe obtener tambin el codigo fuente en Visual Basic. La
implementacion se encuentra en el CD que se adjunta al libro.
Figura 4.32. Ejecucin del programa en Visual Basic 6.0, teniendo en cuenta el 4 patron de entre-
namiento de la tabla 4.6.
e(1) = Val(Text1.Text)
e(2) = Val(Text2.Text)
e(3) = Val(Text3.Text)
e(4) = Val(Text4.Text)
e(5) = Val(Text5.Text)
e(6) = Val(Text6.Text)
e(7) = Val(Text7.Text)
Call Fire_DIAGNOST(e, s)
netsum = -0.3115481
netsum = netsum + inarray(1) * 0.7032344
netsum = netsum + inarray(2) * 0.1466639
netsum = netsum + inarray(3) * 2.036957
netsum = netsum + inarray(4) * -0.4733835
netsum = netsum + inarray(5) * -0.4653012
netsum = netsum + inarray(6) * -1.454124
netsum = netsum + inarray(7) * -0.7716009
netsum = -0.007483043
netsum = netsum + inarray(1) * -0.7950581
netsum = netsum + inarray(2) * -1.6701
netsum = netsum + inarray(3) * 1.082342
netsum = netsum + inarray(4) * 0.8707346
netsum = netsum + inarray(5) * -0.3615806
netsum = netsum + inarray(6) * -0.6289499
netsum = netsum + inarray(7) * 0.9206671
feature2(2) = 1 / (1 + Exp(-netsum))
netsum = 0.3411922
netsum = netsum + inarray(1) * 1.407685
netsum = netsum + inarray(2) * 1.998027
netsum = netsum + inarray(3) * -1.747856
netsum = netsum + inarray(4) * -1.269704
netsum = netsum + inarray(5) * -2.329731
netsum = netsum + inarray(6) * 1.356552
netsum = netsum + inarray(7) * 1.647663
feature2(3) = 1 / (1 + Exp(-netsum))
netsum = -0.2768248
netsum = netsum + inarray(1) * 2.065744
netsum = netsum + inarray(2) * -1.146601
netsum = netsum + inarray(3) * -0.9325874
netsum = netsum + inarray(4) * -1.517177
netsum = netsum + inarray(5) * 0.2812504
netsum = netsum + inarray(6) * -0.6556798
netsum = netsum + inarray(7) * 1.173773
feature2(4) = 1 / (1 + Exp(-netsum))
netsum = -0.1239126
netsum = netsum + inarray(1) * -1.830723
netsum = netsum + inarray(2) * 0.8275196
netsum = netsum + inarray(3) * 0.2012251
netsum = netsum + inarray(4) * -0.7351373
netsum = netsum + inarray(5) * 0.5414248
netsum = netsum + inarray(6) * 2.384689
netsum = netsum + inarray(7) * -1.566727
feature2(5) = 1 / (1 + Exp(-netsum))
netsum = 0.0145554
netsum = netsum + inarray(1) * -0.4000922
netsum = netsum + inarray(2) * -1.257582
netsum = netsum + inarray(3) * 0.8750437
netsum = netsum + inarray(4) * 1.78116
netsum = netsum + inarray(5) * 1.741183
netsum = netsum + inarray(6) * -2.168171
netsum = netsum + inarray(7) * -0.9200088
feature2(6) = 1 / (1 + Exp(-netsum))
netsum = 0.3624522
netsum = netsum + inarray(1) * -1.666589
netsum = netsum + inarray(2) * -2.92119
netsum = netsum + inarray(3) * 1.415627
netsum = netsum + inarray(4) * 0.1193302
netsum = netsum + inarray(5) * 0.3643235
netsum = netsum + inarray(6) * 1.332756
netsum = netsum + inarray(7) * 1.651392
netsum = -0.08557819
netsum = netsum + inarray(1) * 0.3886256
netsum = netsum + inarray(2) * -2.094244
netsum = netsum + inarray(3) * -1.564476
netsum = netsum + inarray(4) * 1.770092
netsum = netsum + inarray(5) * 0.9950833
netsum = netsum + inarray(6) * -1.562377
netsum = netsum + inarray(7) * 1.671334
feature2(8) = 1 / (1 + Exp(-netsum))
netsum = -0.2997127
netsum = netsum + inarray(1) * 1.399435
netsum = netsum + inarray(2) * -0.1395936
netsum = netsum + inarray(3) * -1.913407
netsum = netsum + inarray(4) * -0.9458458
netsum = netsum + inarray(5) * 2.404087
netsum = netsum + inarray(6) * 0.6442617
netsum = netsum + inarray(7) * -1.377198
feature2(9) = 1 / (1 + Exp(-netsum))
netsum = 0.8538765
netsum = netsum + feature2(1) * 1.642975
netsum = netsum + feature2(2) * -1.08525
netsum = netsum + feature2(3) * 1.692052
netsum = netsum + feature2(4) * 0.5226364
netsum = netsum + feature2(5) * -1.016138
netsum = netsum + feature2(6) * 0.3381723
netsum = netsum + feature2(7) * -4.312466
netsum = netsum + feature2(8) * -0.8845294
netsum = netsum + feature2(9) * 0.3042739
outarray(1) = 1 / (1 + Exp(-netsum))
netsum = 0.6356097
netsum = netsum + feature2(1) * -1.699543
netsum = netsum + feature2(2) * -0.8347372
netsum = netsum + feature2(3) * 1.740408
netsum = netsum + feature2(4) * -2.244962
netsum = netsum + feature2(5) * 2.778615
netsum = netsum + feature2(6) * -1.380548
netsum = netsum + feature2(7) * -1.0302
netsum = netsum + feature2(8) * -1.023457
netsum = netsum + feature2(9) * -0.1288214
outarray(2) = 1 / (1 + Exp(-netsum))
netsum = 0.8881556
netsum = netsum + feature2(1) * 1.621511
netsum = netsum + feature2(2) * -0.03661929
netsum = netsum + feature2(3) * 0.1688382
netsum = netsum + feature2(4) * -1.013181
netsum = netsum + feature2(5) * 2.699184
netsum = netsum + feature2(6) * -1.219513
netsum = netsum + feature2(7) * 0.4337809
netsum = netsum + feature2(8) * -3.760823
netsum = netsum + feature2(9) * -1.450161
outarray(3) = 1 / (1 + Exp(-netsum))
netsum = -0.1752312
netsum = netsum + feature2(1) * 0.7248147
netsum = -0.2363798
netsum = netsum + feature2(1) * 0.8358494
netsum = netsum + feature2(2) * 0.6256061
netsum = netsum + feature2(3) * -3.400938
netsum = netsum + feature2(4) * -1.574203
netsum = netsum + feature2(5) * 0.3605849
netsum = netsum + feature2(6) * 2.502021
netsum = netsum + feature2(7) * 0.2546888
netsum = netsum + feature2(8) * 0.5457298
netsum = netsum + feature2(9) * 0.2242781
outarray(5) = 1 / (1 + Exp(-netsum))
netsum = -0.1454982
netsum = netsum + feature2(1) * 0.7328083
netsum = netsum + feature2(2) * 1.886714
netsum = netsum + feature2(3) * 0.05207601
netsum = netsum + feature2(4) * -1.110788
netsum = netsum + feature2(5) * -1.82287
netsum = netsum + feature2(6) * 0.5481207
netsum = netsum + feature2(7) * 1.574738
netsum = netsum + feature2(8) * 1.149344
netsum = netsum + feature2(9) * -4.210217
outarray(6) = 1 / (1 + Exp(-netsum))
End Sub
antigedad en la empresa.
Figura 4.33. Ejecucin del programa en Visual Basic 6.0, teniendo en cuenta el 16 avo patrn de
entrenamiento de la tabla 4.7.
En el CD se encuentra la implementacin
del reconocimiento de los caracteres A y
B, utilizando Neuroshell y Visual Basic
.NET.
antigedad en la empresa.
Los datos sern los ejemplos que emplear el sistema de induccin para gene-
rar el rbol de decisin.
Paso 1:
La entropa se calcula:
Donde:
E(P)=1,92379494
Paso 2:
- T1 (Salario< 1 500)
Paso 3:
Info(Ti)=E(Pi)
Y tambin se calcula:
Info(X,T)=T1/T Info(T1)+
T2/T Info(T2)+ . . .+
Tk/T Info(Tk)
Info(T1)=-[1 Log2(1)]= 0
Paso 4:
Ganancia de informacin(X,T)=
E(P)- Info(X,T)
Ganancia de informacin(Salario,T)=
E(P)-Info(Salario,T)=
1.92379494-0.647782997=1.276011942
Paso 2-Estudios
- T1 (Estudios=Especializacin)
50 000 1
75 000 2
100 000 1
- T2 (Estudios=Medios )
100 000 1
50 000 2
25 000 2
- T3 (Estudios=Superiores)
100 000 3
75 000 2
50 000 2
Info(Ti)=E(Pi)
Y tambin se calcula:
Info(X,T)=T1/T Info(T1)+
T2/T Info(T2)+ . . .+
Tk/T Info(Tk)
Paso 4-Estudios
Ganancia de informacin(X,T)=
E(P)- Info(X,T)
Ganancia de informacin(Estudios,T)=
E(P)-Info(Estudios,T)=
1.92379494-1.531639839=
=0.392155101
Paso 2-Antigedad
100 00 3
75 000 3
50 000 1
25 000 1
- T2 (Antigedad =No )
100 00 2
75 000 1
50 000 4
25 000 1
Paso 3 - Antigedad
Info(Ti)=E(Pi)
Y tambin se calcula:
Info(X,T)=T1/T Info(T1)+
T2/T Info(T2)+ . . .+
Tk/T Info(Tk)
1/8 Log2(1/8)]=1.811278124
1/8 Log2(1/8)]=1.750000000
Paso 4 - Antigedad
Ganancia de informacin(X,T)=
E(P)- Info(X,T)
Ganancia de informacin(Antigedad,T)=
E(P)-Info(Antigedad,T)=
1.92379494-1.780639062=
=0.143155878
Ganancia de informacin(Salario,T)=
1.276011942
Ganancia de informacin(Estudios,T)=
0.392155101
Se elige Salario como nodo del rbol porque tiene mayor ganancia de informa-
cin.
< 1 500 ,
1 500 a 2 500 y
2 500
El proceso anterior se repetir para esas dos ramas en que no existe certi-
dumbre respecto a la decisin habiendo considerado el atributo salario, si bien
los atributos a analizar seran solo los dos restantes (estudios y antigedad).
Para el atributo salario rama 1500 a 2500 (elegir slo las filas que tengan este
valor ):
Paso 1
La entropa se calcula:
pk log2(pk))
Donde:
La entropa es:
E(P)=0.918295834
Paso 2-Estudios
- T1 (Estudios=Especializacin)
75 000 2
- T2 (Estudios=Medios )
50 000 2
75 000 2
Paso 3 -Estudios
Info(Ti)=E(Pi)
Y tambin se calcula:
Info(X,T)=T1/T Info(T1)+
T2/T Info(T2)+ . . .+
Tk/T Info(Tk)
Info(T1)=-[2/2 Log2(2/2)] =0
Info(T2)=-[2/2 Log2(2/2)] =0
Info(T3)=-[2/2 Log2(2/2)] =0
Paso 4 -Estudios
Ganancia de informacin(X,T)=
E(P)- Info(X,T)
Ganancia de informacin(Estudios,T)=
E(P)-Info(Estudios,T)=
Paso 2-Antigedad
- T1 (Antigedad =Si)
75 000 3
50 000 1
- T2 (Antigedad =No )
75 000 1
50 000 1
Paso 3 - Antigedad
Info(Ti)=E(Pi)
Y tambin se calcula:
Info(X,T)=T1/T Info(T1)+
T2/T Info(T2)+ . . .+
Tk/T Info(Tk)
=1.000000000
Paso 4 - Antigedad
Ganancia de informacin(Antigedad,T)=
E(P)-Info(Antigedad,T)=
0.918295834 -0.874185416
=0.044110418
Ganancia de informacin(Estudios,T)=
0.918295834
Se elige Estudios como nodo del rbol porque tiene mayor ganancia de infor-
macin.
Para el atributo salario rama >2 500 (elegir slo las filas que tengan este valor):
Paso 1
La entropa se calcula:
Donde:
La entropa es:
E(P)=0.970950594
Paso 2-Estudios
50 000 1
- T2 (Estudios=Medios)
25 000 2
- T3 (Estudios=Superiores)
50 000 2
Paso 3 -Estudios
Info(Ti)=E(Pi)
tambin se calcula:
Info(X,T)=T1/T Info(T1)+
T2/T Info(T2)+ . . .+
Tk/T Info(Tk)
Info(T1)=-[1/1 Log2(1/1)] =0
Info(T2)=-[2/2 Log2(2/2)] =0
Paso 4 -Estudios
Ganancia de informacin(X,T)=
E(P)- Info(X,T)
Ganancia de informacin(Estudios,T)=
E(P)-Info(Estudios,T)=
0.970950594-0.0= 0.970950594
Paso 2-Antigedad
- T1 (Antigedad =Si)
25 000 1
- T2 (Antigedad =No)
25 000 1
50 000 3
Paso 3-Antigedad
Y tambin se calcula:
Info(X,T)=T1/T Info(T1)+
T2/T Info(T2)+ . . .+
Tk/T Info(Tk)
Info(T1)=-[1/1 Log2(1/1)]=0.0
=0.811278124
Info(Antigedad,T)=
=0.649022500
Paso 4 - Antigedad
Ganancia de informacin(X,T)=
E(P)- Info(X,T)
Ganancia de informacin(Antigedad,T)=
E(P)-Info(Antigedad,T)=
0.970950594-0.649022500
=0.321928095
Ganancia de informacin(Estudios,T)=
0.970950594
5.3.1. XPERTRULE
En los ltimos aos, las tcnicas de aprendizaje automtico han ido alcanzan-
do un creciente inters dentro de la comunidad cientfica informtica. Muchos
cientficos piensan que los avances ms importantes en inteligencia artificial se
producirn mediante mtodos diseados para permitir a los ordenadores
aprender por s mismos. Dentro de estas tcnicas, los algoritmos genticos,
cuyos primeros desarrollos se deben a Holland, han sido aplicados en un am-
plio campo de problemas de aprendizaje de mquinas.
Estos algoritmos han sido aplicados en forma exitosa a una variada gama de
tareas de aprendizaje y a otros problemas de optimizacin. Por ejemplo, han
sido utilizados para aprender una coleccin de reglas de control de un robot y
para optimizar la topologa y los parmetros de una red neuronal.
6.1.1. CROMOSOMA
Todos los organismos vivos consisten de clulas. En cada clula hay el mismo
conjunto de cromosomas. Los cromosomas son cadenas de ADN y sirve como
un modelo para el organismo completo.
Un cromosoma consiste de genes, bloques de ADN (figura 6.1). Cada gen co-
difica una protena particular. Bsicamente podemos decir que cada gen codifi-
ca una caracterstica, por ejemplo color de ojos.
6.1.2. REPRODUCCIN
6.1.3. CAPACIDAD
Codificacin binaria
Cromosoma:
101100101100101011100101
Cdigo de permutacin
Cromosoma:
1 5 3 2 6 4 7 9 8
Cdigo de valor
Cromosoma A:
ABDJEIFJDHDIERJFDLDFLFEGT
El cdigo de valor es muy bueno para algunos problemas especiales. Por otra
parte para esta representacin es a menudo necesario desarrollar operaciones
de cruce y mutacin especficos para el problema.
Cdigo de rbol
Cromosoma A:
(+x(/5y))
El buscar una solucin es entonces igual a buscar para algn extremo (mnimo
o mximo) en el espacio de bsqueda. La solucin de un problema con algo-
ritmos genticos puede a menudo ser expresado como buscar el extremo de
una funcin (capacidad).
6.2.3. SELECCIN
En la Figura 6.3 y la Figura 6.4 se puede ver como cambia la situacin des-
pus de cambiar capacidades a nmero de orden.
Despus de esto todos los cromosomas tienen una opcin para ser seleccio-
nados. Pero este mtodo puede guiar a una baja convergencia, porque los me-
jores cromosomas no difieren muchos de los otros.
Elitismo
Cdigo binario
Cruzamiento
11001011+11011111 = 11001111
Cruzamiento uniforme: Los bits son aleatoriamente copiados del primer o del
segundo padre.
Mutacin
11001001 10001001
Cdigo de valor
Cruzamiento
Mutacin
Cruzamiento
(1 2 3 4 5 6 7 8 9) + (4 5 3 6 8 9 7 2 1) =
(1 2 3 4 5 6 8 9 7)
Mutacin
(1 2 3 4 5 6 8 9 7) (1 8 3 4 5 6 2 9 7).
Cdigo de rbol
Cruzamiento
Mutacin
6.2.5. ALGORITMOS
Algoritmo Uno
f) [Ciclo]: Ir al paso b.
Algoritmo Dos
7. Vuelta al paso nmero 3 y comienzo del ciclo otra vez. La poblacin tender
a mltiples copias de una sola cadena que tenga un rendimiento ptimo o cer-
cano a l.
Existe evidencia, tanto terica como emprica, que demuestra que, incluso en
espacios de bsquedas muy amplias y complejos, los algoritmos genticos
pueden localizar rpidamente estructuras de conocimiento efectivas emplean-
do entre 50 y 100 patrones.
t0
Inicializar P(t)
Evaluar P(t)
Mientras (no condicin de terminacin)
t=t+1
Seleccione padres de P(t-1)
alterar P(t)
Evaluar P(t)
Fin_mientras
Algoritmo Cuatro
Clonacin
Inversin
Gen=0
Creacin poblacin
inicial
Si
Criterio de
finalizacin Resultado
satisfecho?
No
Fin
Evaluacin de la capacidad
gen=gen+1
de cada individuo
Si
I=M?
No
Pr Seleccin de la Pm
operacion gnetica,
probabilisticamente
Pc
i=i+1
Reversin
Anulacin o Pavlov
Este tipo de planteo es aplicable a los GA, que constan al igual que el cuerpo
de una serie de genes interdependientes. En los seres vivos existen general-
mente mecanismos de compensacin, en donde ciertos genes impulsan accio-
nes en un sentido determinado y ciertos otros en sentido opuesto. La accin
final se produce como consecuencia de la medicin de estas fuerzas La anula-
cin estructurada de alguno de ellos puede servir como base para el entendi-
miento del comportamiento del resto del sistema. En el mbito de la biologa
estos genes reciben el nombre de aleles o alelos. Si se identificaran y anularan
algunos de los genes que condicionan el valor esperado en sentido opuesto,
esto representara una mejora idntica a la de mejorar los valores de los res-
tantes.
max g ( x) maxg ( x) C .
Es claro que para lograr tal precisin cada dominio Di debera estar dentro de
bi ai 10 6 rangos de tamaos iguales. Denotemos por mi al entero mas pe-
queo tal como bi ai 10 6 2 mi 1 . Entonces la representacin que tiene
una variable x i codificado como una cadena binaria de longitud mi claramente
satisface la precisin requerida. Adicionalmente, la siguiente frmula interpreta
cada cadena:
bi ai
xi ai decimal (10010012 )
2 mi 1
valor dentro del rango a1 ,b1 , el siguiente grupo de m2 bits mapea un valor
dentro del rango a2 ,b2 , y as sucesivamente; el ltimo grupo mk bits mapea
un valor dentro del rango ak , bk .
9
Traducido desde el libro: Michalewicz, Z. Genetic Algoritms + Data Structures = Evolu-
tion Programs. USA: Editorial Springer; 1996.
F i 1
pop _ size
eval(vi )
pi eval(vi ) / F
qi j 1 p j
i
b b b
1 2 b
pos pos1 bm y c1c2 c posc pos1 cm
son reemplazados por un par de sus descendientes:
b b b
1 2 c
pos pos1 cm y c1c2 c posb pos1 bm
Para cada cromosoma en la poblacin actual (es decir, despus del cruce) y
para cada bit dentro del cromosoma:
Figura 6.13.
217151000218
El dominio de la variable x 2 tiene una longitud 1.7; el requerimiento de preci-
sin implica que el rango [4.1,5.8] debera estar dividido en al menos
1.7*10000 rangos de igual tamao. Esto significa que 15 bits son requeridos
como la segunda parte del cromosoma:
21417000215
(010001001011010000111110010100010)
Los primeros 18 bits,
010001001011010000
representa
12.1 (3.0)
x1 3.0 decimal (010001001011010000 2 )
218 1
15.1
3.0 70352 3.0 4.052426 1.052426
262143
111110010100010
As el cromosoma
(010001001011010000111110010100010)
f (1.052426,5.755330) 20.252640 .
v1 = (100110100000001111111010011011111)
v2 = (111000100100110111001010100011010)
v3 = (000010000011001000001010111011101)
v4 = (100011000101101001111000001110010)
v5 = (000111011001010011010111111000101)
v6 = (000101000010010101001010111111011)
v7 = (001000100000110101111011011111011)
v8 = (100001100001110100010110101100111)
v9 = (010000000101100010110000001111100)
v10 = (000001111000110000011010000111011)
v11 = (011001111110110101100001101111000)
v12 = (110100010111101101000101010000000)
v13 = (111011111010001000110000001000110)
v15 = (111011101101110000100011111011110)
v16 = (110011110000011111100001101001011)
v17 = (011010111111001111010001101111101)
v18 = (011101000000001110100111110101101)
v19 = (000101010011111111110000110001100)
v20 = (101110010110011110011000101111110)
F i 1 eval(vi ) 387.776822
20
p10=eval(v10)/F = 0.054873
p11=eval(v11)/F = 0.060372
Ahora estamos listos para rodar la rueda de la ruleta 20 veces, cada vez selec-
cionamos un solo cromosoma para la nueva poblacin. Asumamos que la se-
cuencia (aleatoria) de 20 nmeros de rango [0..1] es:
0.703899
0.513870 0.389647
0.175741 0.277226
0.308652 0.368071
0.534534 0.983437
0.947628 0.005398
0.171736 0.765682
0.702231 0.646473
0.226431 0.767139
0.494773 0.780237
0.424720
El primer nmero r = 0.513870 es mayor que q10 y menor que q11, significando
que el cromosoma v11 es seleccionado para la nueva poblacin; el segundo
nmero r = 0.175741 es mayor que q3 y menor que q4, significando que el cro-
mosoma v4 es seleccionado para la nueva poblacin.
v1 = (011001111110110101100001101111000) (v 11)
v2 =(100011000101101001111000001110010) (v 4)
v3 =(001000100000110101111011011111011) (v7)
v5 =(000101010011111111110000110001100) (v 19)
v6 =(100011000101101001111000001110010) (v 4)
v7 =(111011101101110000100011111011110) (v 15)
v8 =(000111011001010011010111111000101) (v 5)
v9 =(011001111110110101100001101111000) (v11)
v10 =(000010000011001000001010111011101) (v 3)
v12 =(010000000101100010110000001111100) (v 9)
v13 =(000101000010010101001010111111011) (v 6)
v16 =(100110100000001111111010011011111) (v 1)
0.822951 0.917204
0.151932 0.519760
0.625477 0.401154
0.314685 0.606758
0.346901 0.785402
0.869921 0.389248
0.166525 0.200232
0.674520 0.355635
0.758400 0.826927
Esto significa que los cromosomas v2 , v11 , v13 y v18 fueron seleccionados
para cruzarse (tuvimos suerte: el nmero de cromosomas seleccionados fue
par, as podemos aparearlos fcilmente. Si el nmero de cromosomas selec-
cionado fue impar, deberamos tambin adicionar cualquier cromosoma extra o
eliminar uno de los cromosomas seleccionados esta seleccin es echo alea-
toriamente tambin). Ahora apareamos los cromosomas seleccionados aleato-
riamente: decimos, los primeros dos (es decir, v2 y v11) y los dos siguientes
(es decir, v13 y v18) son completamente emparejados. Para cada una de estas
dos parejas, generamos un nmero entero aleatorio pos en el rango [1..32] (33
es longitud total - nmero de bits en el cromosoma). El nmero pos indica la
posicin del punto de cruce. El primer par de cromosomas es:
v2 =(100011000 | 101101001111000001110010)
v2 = (100011000 | 101110000100011111011110)
y el nmero generado pos = 20. Estos cromosomas son reemplazados por una
pareja de cromosomas de sus descendientes:
v1 = (011001111110110101100001101111000)
v2= (100011000101110000100011111011110)
v4= (011001111110110101100001101111000)
v5= (000101010011111111110000110001100)
v6= (100011000101101001111000001110010)
v7= (111011101101110000100011111011110)
v8= (000111011001010011010111111000101)
v9= (011001111110110101100001101111000)
v10= (000010000011001000001010111011101)
v11= (111011101101101001111000001110010)
v12= (010000000101100010110000001111100)
v13= (000101000010010101000000001000110)
v14= (100001100001110100010110101100111)
v15= (101110010110011110011000101111110)
v16= (100110100000001111111010011011111)
v17= (000001111000110000011010000111011)
v18= (111011111010001000111010111111011)
v19= (111011101101110000100011111011110)
v20= (110011110000011111100001101001011)
Esto significa que tenemos que generar 660 nmeros aleatorios. En una mues-
tra corrida, 5 de estos nmeros fueron ms pequeos que 0.01, el nmero del
bit y el nmero aleatorio son listados abajo:
349 0.009945
418 0.008809
429 0.005425
602 0.002836
v1 = (011001111110110101100001101111000)
v2= (100011000101110000100011111011110)
v3= (001000100000110101111011011111011)
v4= (011001111110010101100001101111000)
v5= (000101010011111111110000110001100)
v7= (111011101101110000100011111011110)
v8= (000111011001010011010111111000101)
v9= (011001111110110101100001101111000)
v10= (000010000011001000001010111011101)
v11= (111011101101101001011000001110010)
v12= (010000000101100010110000001111100)
v13= (000101000010010101000100001000111)
v14= (100001100001110100010110101100111)
v15= (101110010110011110011000101111110)
v16= (100110100000001111111010011011111)
v17= (000001111000110000011010000111011)
v18= (111011111010001000111010111111011)
v19= (111011111101110000100011111011110)
v20= (110011110000011111100001101001011)
Tenemos completada slo una iteracin (es decir, una generacin) del bucle
while en el procedimiento gentico (Figura 0.1 de la Introduccin). Es intere-
sante examinar el resultado del proceso de evaluacin de la nueva poblacin.
Durante la fase de evaluacin decodificamos cada cromosoma y calculamos la
los valores de la funcin de capacidad de (x 1,x2) valores ya decodificados. Ob-
tenemos:
Eval(v4)=f(3.128235, 4.996097))=23.412613
Eval(v5)=f(-1.746635, 5.395584))=20.095903
Eval(v6)=f(5.278638, 5.593460))=17.406725
Eval(v7)=f(11.089025, 5.054515))=30.60205
Eval(v8)=f(-1.255173, 4.734458))=25.341160
Eval(v10)=f(-2.516603, 4.390381))=19.526329
Eval(v12)=f(0.795406, 5.381472))=16.127799
Eval(v13)=f(-1.811725, 4.209937))=22.692462
Eval(v14)=f(4.910618, 4.703018))=17.959701
Eval(v15)=f(7.935998, 4.757338))=13.666916
Eval(v16)=f(6.084492, 5.652242))=26.019600
Eval(v17)=f(-2.554851, 4.793707))=21.278435
Eval(v18)=f(11.134646, 5.65666976))=27.591064
Eval(v19)=f(11.059532, 5.054515))=27.608441
Ahora estamos listos para correr el proceso de seleccin otra vez y aplicar los
operadores genticos, evalar la siguiente generacin, etc. Despus de 1000
generaciones la poblacin es:
v1 = (111011110110011011100101010111011)
v2= (111001100110000100010101010111000)
v3= (111011110111011011100101010111011)
v4= (111001100010000110000101010111001)
v5= (111011110111011011100101010111011)
v6= (111001100110000100000100010100001)
v7= (110101100010010010001100010110000)
v8= (111101100010001010001101010010001)
v9= (111001100010010010001100010110001)
v10= (111011110111011011100101010111011)
v12= (110101100010010010001100010110001)
v13= (111011110111011011100101010111011)
v14= (111001100110000100000101010111011)
v15= (111001101010111001010100110110001
v16= (111001100110000101000100010100001)
v17= (111001100110000100000101010111011)
v18= (111001100110000100000101010111001
v19= (111101100010001010001110000010001)
v20= (111001100110000100000101010111001)
Eval(v1)=f(11.120940, 5.092514)=30.298543
Eval(v2)=f(10.588756, 4.667358)=26.86.9724
Eval(v3)=f(11.124627, 5.092514)=30.346567
Eval(v4)=f(10.574525, 4.242410)=31.933120
Eval(v5)=f(11.124627, 5.092514)=30.316575
Eval(v6)=f(10.588756, 4.214603)=34.356125
Eval(v7)=f(9.631066, 4.427881)=35.458636
Eval(v8)=f(11.518106, 4.452835)=23.30.9078
Eval(v9)=f(10.574816, 4.427933)=34.393820
Eval(v10)=f(11.124627, 5.092514)=30.306575
Eval(v11)=f(9.623693, 4.427881)=35.477928
Eval(v12)=f(9.631066, 4.427933)=35.456066
Eval(v13)=f(11.124627, 5.092514)=30.316575
Eval(v14)=f(10.588756, 4.242514)=32.932098
Eval(v15)=f(10.606555, 4.653714)=30.746768
Eval(v16)=f(10.588814, 4.214603)=34.359545
Eval(v18)=f(10.588756, 4.242410)=32.956664
Eval(v19)=f(11.518106, 4.472757)=19.669670
f ( x) x * sin(10 * x) 1.0
t0
Inicializar P(t)
Evaluar P(t)
Mientras (no condicin de terminacin)
t=t+1
Seleccione padres de P(t-1)
alterar P(t)
Evaluar P(t)
Fin_mientras
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <iostream.h>
#define TAMANO_POB 10
#define LONG_CROM 5
#define PCRUCE 0.25
#define PMUTACION 0.01
struct poblacion{
double valor;
unsigned int cromosoma[LONG_CROM];
double capacidad;
double frec;
double frec_ac;
};
void initialize_poblacion();
double funcion(double x);
double valor(int indiv,int pos_ini,int pos_fin,
int lim_inf,int lim_sup);
void evaluar();
void mejor();
float aleatorio();
int alea_int(int lim_inf,int lim_sup);
void seleccion();
void cruce();
void crossover(int parent1,int parent2);
void mutacion();
void mutation(int pos);
void main(){
int t;
double cap_ant;
t=0;
initialize_poblacion();
evaluar();
printf("%10s %10s %10s %10s %10s\n",
"gen", "best val", "best cap", "b gen val",
"b gen cap");
printf(
"%10d %10.6f %10.6f %10.6f %10.6f\n",
t, best.valor, best.capacidad,
bestgen.valor,bestgen.capacidad);
cap_ant=best.capacidad;
while(t<1000){
t++;
seleccion();
cruce();
mutacion();
evaluar();
void initialize_poblacion(){
int i,j;
float aleatorio(){
return (float) (rand()*10001/
(RAND_MAX-1))/10000;
}
void evaluar(){
int i;
double suma=0;
for(i=0;i<TAMANO_POB;i++){
pob[i].valor=valor(i,0,LONG_CROM-1,-1,2);
pob[i].capacidad=funcion(pob[i].valor);
suma+=pob[i].capacidad;
}
pob[0].frec=pob[0].capacidad/suma;
pob[0].frec_ac=pob[0].frec;
for(i=1;i<TAMANO_POB;i++){
pob[i].frec=pob[i].capacidad/suma;
pob[i].frec_ac=pob[i-1].frec_ac +
pob[i].frec;
}
mejor();
}
double factor,val;
int i;
factor=1;
val=0;
void mejor(){
int i;
i=0;
best=pob[i];
for(i=1;i<TAMANO_POB;i++)
if(best.capacidad<pob[i].capacidad)
best=pob[i];
if(bestgen.capacidad<best.capacidad)
bestgen=best;
void seleccion(){
float aleat;
int i,j;
for(i=0;i<TAMANO_POB;i++){
aleat=aleatorio();
j=0;
while(aleat>pob[j].frec_ac &&
j<TAMANO_POB-1) j++;
nueva_pob[i]=pob[j];
}
for(i=0;i<TAMANO_POB;i++)
pob[i]=nueva_pob[i];
}
void cruce(){
int selec[TAMANO_POB],indice,i;
float aleat;
indice=-1;
for(i=0;i<TAMANO_POB;i++){
aleat=aleatorio();
if(aleat<PCRUCE){
indice++;
selec[indice]=i;
}
}
if(indice % 2) indice--;
for(i=0;i<indice/2;i++)
crossover(selec[i],selec[indice/2+i]);
}
void mutacion(){
int selec[TAMANO_POB],indice,i;
float aleat;
indice=-1;
for(i=0;i<TAMANO_POB;i++){
aleat=aleatorio();
if(aleat<PMUTACION){
indice++;
selec[indice]=i;
}
}
for(i=0;i<indice;i++) mutation(selec[i]);
}
punto=alea_int(0,LONG_CROM-1);
pob[pos].cromosoma[punto]=
!pob[pos].cromosoma[punto];
}
Otro ejemplo es el movimiento de un robot por una rejilla (Figura 7.2), donde el
robot ha de desplazarse, desde una posicin inicial a una posicin final. Los
elementos son:
10
Basado en los apuntes de: Ruiz Jos. Inteligencia Artificial I [en linea]. Espaa:
Universidad de Sevilla; 2007. [fecha de acceso 13 de diciembre de 2007]. URL dispo-
nible en: http://www.cs.us.es/cursos/ia1-2006/
Borrado: lista de tomos que dejan de ser ciertos una vez se ha aplicado el
operador.
Adicin: lista de tomos que pasan a ser ciertos una vez se ha aplicado el
operador.
MOVER-SE(x,y)
P: ROBOT-EN(x,y),LIBRE(x+1,y-1)
B: ROBOT-EN(x,y),LIBRE(x+1,y-1)
A: ROBOT-EN(x+1,y-1),LIBRE(x,y)
Un plan es la secuencia de pasos que hay que dar para transformar el estado
inicial en el estado final. En la Figura 7.13, se puede ver un problema sencillo
en el dominio logstico, en el que hay que llevar un paquete que est en Bara-
jas a Cuatro Vientos utilizando un avin que inicialmente est en Cuatro Vien-
tos:
Figura 7.13. Dominio logstico: llevar un paquete que est en Barajas a Cuatro Vientos utilizando
un avin que inicialmente est en Cuatro Vientos.
11
Basado en los apuntes de: Aler Ricardo. Tutorial de Prodigy4.0 [en linea]. Espaa:
Dpto. Inteligencia Artificial - UNED; 2007. [fecha de acceso 13 de diciembre de
2007]. URL disponible en: http://www.ii.uned.es/superior/cuarto/IAIngCon/
OPERADOR Descargar
SI Avin_situado_en (<avin>, <lugar>)
Mercanca_cargada_en_avin (<mercanca>, <avin>)
ENTONCES Quitar Mercanca_cargada_en_avin (<mercanca>, <avin>)
Aadir Mercanca_situada_en (<mercanca>, <lugar>)
o bien:
;; Dominio logstico
(in-package "USER")
Definicin de predicados
(mercancia-en LUGAR)
Definicin de operadores
Los operadores representan los posibles cambios que se pueden efectuar so-
bre los estados. Para representarlos se utilizan reglas SI Condiciones EN-
TONCES Acciones. Las condiciones dicen cuando el operador se puede apli-
car. Las acciones indican como transformar el estado una vez ha sido aplicado
(aadiendo o borrando hechos). Las condiciones estn compuestas de frmu-
las basadas en lgica de predicados unidas por las conectivas AND, OR y ~
(NOT). Adems, pueden contener variables cuantificadas universal (para todo
x ...) o existencialmente (existe un x que ...). En Prodigy4.0, los operadores
tienen las siguientes partes:
(OPERATOR nombre_del_operador
(params <parametro1> <parametro2> ...)
(preconds
;; Declaracin de parmetros
(
(<variable o parametro 1> TIPO-DE-LA-VARIABLE1)
(<variable o parametro 2> TIPO-DE-LA-VARIABLE2)
...
)
;; Declaracin de precondiciones
(and
condicin1
condicin2
...
)
)
(effects
(
(<variable-efectos-1> TIPO-VARIABLE1)
(<variable-efectos-2> TIPO-VARIABLE2)
...
)
(
efecto1
efecto2
(if condicion
;; Aqu comienza la lista de efectos condicionales
;; (puede haber varios)
(
efecto-condicional1
efecto-condicional2
...
)
)
)
)
)
Precondiciones (preconds)
Son las condiciones que se tienen que cumplir para que se pueda aplicar un
operador. En el caso del operador de cargar el camin son dos: que el camin
est fsicamente en el lugar en el que se quiere realizar la carga, y que el obje-
to est en ese mismo lugar. Esto se expresara as:
(preconds
((<mercancia> MERCANCIA)
(<camion> CAMION)
(<lugar> LOCATION)
)
(and
(camion-en <camion> <lugar>)
(mercancia-en <mercancia> <lugar>)
)
)
(preconds
((<mercancia> MERCANCIA)
Todava tendramos que aadir las acciones de este operador. En este caso
los efectos del operador son dos:
(effects
()
((add (en-camion <mercancia> <camion>))
(del (mercancia-en <mercancia> <lugar>))
)
)
Efectos condicionales
(effects
;; A continuacin aparece la lista de variables y sus tipos
;; que se utilizan slo en la parte de efectos de la regla
(
(<mercancia2> MERCANCIA)
)
((add (en-camion <mercancia> <camion>))
(OPERATOR CARGAR-CAMION
(params <mercancia> <camion>)
(preconds
((<mercancia> MERCANCIA)
(<camion> CAMION)
(<lugar> LOCATION)
(<ciudad> CIUDAD)
)
(and
(en-ciudad <camion> <ciudad>)
(en-ciudad <mercancia> <ciudad>)
(camion-en <camion> <lugar>)
(mercancia-en <mercancia> <lugar>)
)
)
(effects
()
((add (en-camion <mercancia> <camion>))
(del (mercancia-en <mercancia> <lugar>))
)
)
)
(OPERATOR CARGAR-CAMION
(params <mercancia> <camion>)
(preconds
((<mercancia> MERCANCIA)
(<camion> CAMION)
(<lugar> LOCATION)
(<ciudad> CIUDAD)
)
(and
(en-ciudad <camion> <ciudad>)
(en-ciudad <mercancia> <ciudad>)
(camion-en <camion> <lugar>)
(mercancia-en <mercancia> <lugar>)
)
)
(effects
;; A continuacin aparece la lista de variables y sus tipos
;; que se utilizan slo en la parte de efectos de la regla
El lenguaje de Prodigy4.0 permite restringir los valores que pueden tomar las
variables del operador. Por ejemplo, supongamos que queremos escribir el
operador que mueve un camin de un lugar a otro. Con lo que ya sabemos,
podramos escribir algo como:
(OPERATOR MUEVE-CAMION
(params <camion> <desde> <hasta>)
(preconds
(
(<camion> CAMION)
(<desde> LUGAR)
(<hasta> LUGAR)
(<ciudad> CIUDAD)
)
(and
(en-ciudad <desde> <ciudad>)
(en-ciudad <hasta> <ciudad>)
(camion-en <camion> <desde>)))
(effects
()
((del (camion-en <camion> <desde>))
(add (camion-en <camion> <hasta>)))))
La funcin "eq" comprueba que dos cosas son idnticas, mientras que la fun-
cin "not" niega lo que va a continuacin. En particular, la definicin de esa
funcin en LISP, a la que vamos a llamar "diff", se escribe como:
(defun diff (x y)
(not (eq x y)))
(
(<camion> CAMION)
(<desde> LUGAR)
(<hasta> (and LUGAR
(diff <desde> <hasta>)
)
)
(<ciudad> CIUDAD)
)
(setf (current-problem)
(create-problem
(name <nombre del problema>)
;; posibles valores de variables y sus tipos
(objects
(<valor1> <valor2> ... TIPO-DE-LOS-VALORES)
(<valora> <valorb> ... TIPO-DE-LOS-VALORES)
...
)
;;Estado inicial
(state
(and
<predicado1>
<predicado2>
....
)
) ;; cierra state
;;Estado objetivo
(goal
(and
<predicado1>
<predicado2>
...
)
);; cierra goal
);; cierra create-problem
)
(objects
(m1 MERCANCIA)
(Paris CIUDAD)
(camion1 CAMION)
(agencia1 agencia2 AGENCIA)
)
Adems, tenemos que decir en que ciudad est cada uno de sus compo-
nentes:
- (en-ciudad m1 Paris)
(state
(and
(en-ciudad camion1 Paris)
(en-ciudad m1 Paris)
(en-ciudad agencia1 Paris)
(en-ciudad agencia2 Paris)
(mercancia-en m1 agencia1)
(camion-en camion1 agencia1)
)
)
(goal
(and
(mercancia-en m1 agencia2)
)
)
(setf (current-problem)
(create-problem
(name problema1)
(objects
(m1 MERCANCIA)
(Paris CIUDAD)
(camion1 CAMION)
(agencia1 agencia2 AGENCIA)
)
(state
(and
Ejecucin de Prodigy4.0
F:\>cd lisp.exe
F:\lisp.exe>lisp -M prodigy.mem
2 n2 (done)
4 n4 <*finish*>
5 n5 (mercancia-en m1 agencia2)
7 n7 <descargar-camion m1 camion1>
8 n8 (en-camion m1 camion1) [1]
10 n10 <cargar-camion m1 camion1> [1]
11 n11 <CARGAR-CAMION M1 CAMION1> [1]
12 n12 (camion-en camion1 agencia2)
14 n14 <mueve-camion camion1 agencia1 agencia2>
15 n15 <MUEVE-CAMION CAMION1 AGENCIA1 AGENCIA2>
15 n16 <DESCARGAR-CAMION M1 CAMION1>
Achieved top-level goals.
Solution:
<cargar-camion m1 camion1>
<mueve-camion camion1 agencia1 agencia2>
<descargar-camion m1 camion1>
El simbolo > es un prompt donde se deben escribir las instrucciones del planifi-
cador.
Inicialmente, Prodigy4.0 nos indica que objetos est creando (los mismos que
le dijimos en el fichero que contiene el problema). A continuacin, el planifica-
dor nos muestra la traza de la resolucin del problema (las lneas numeradas
desde 2 hasta 15). Ms adelante veremos como interpretarla. Finalmente, Pro-
digy4.0 nos da la solucin, que como era de esperar, consiste en cargar el ca-
min, moverlo a la agencia2, y descargarlo. Adems, Prodigy4.0 nos da infor-
macin acerca del tiempo que le cost encontrar la solucin, los nodos que
tuvo que expandir para conseguirlo y el nmero de soluciones encontradas:
Una nueva meta a resolver es idntica a otra que ya est pendiente, luego
no tiene sentido continuar por ese camino.
etc.
5 n5 (mercancia-en m1 agencia2)
7 n7 <descargar-camion m1 camion1>
8 n8 (en-camion m1 camion1) [1]
10 n10 <cargar-camion m1 camion1> [1]
(and
(en-camion <mercancia> <camion>)
(camion-en <camion> <lugar>)
)
5 n5 (mercancia-en m1 agencia2)
7 n7 <descargar-camion m1 camion1>
8 n8 (camion-en camion1 agencia2) [1]
10 n10 <mueve-camion camion1 agencia1 agencia2>
11 n11 <MUEVE-CAMION CAMION1 AGENCIA1 AGENCIA2> [1]
12 n12 (en-camion m1 camion1)
14 n14 <cargar-camion m1 camion1> [1]
15 n15 (camion-en camion1 agencia1)
17 n17 <mueve-camion camion1 agencia2 agencia1> ...applying leads to state loop.
13 n13 cargar-camion
14 n19 <cargar-camion m1 camion1> ...goal loop with node 5
10 n10 <mueve-camion camion1 agencia1 agencia2>
11 n20 (en-camion m1 camion1)
13 n22 <cargar-camion m1 camion1> [1]
14 n23 <CARGAR-CAMION M1 CAMION1>
15 n24 <MUEVE-CAMION CAMION1 AGENCIA1 AGENCIA2>
15 n25 <DESCARGAR-CAMION M1 CAMION1>
.
Solution:
<cargar-camion m1 camion1>
<mueve-camion camion1 agencia1 agencia2>
<descargar-camion m1 camion1>
5 n5 (mercancia-en m1 agencia2)
7 n7 <descargar-camion m1 camion1>
Pero para poder utilizarlo, tengo que resolver primero las metas:
- (en-camion m1 camion1)
Por tanto, he estado perdiendo el tiempo. Tengo que volver al ltimo punto
de decisin y tomar una decisin distinta a la que haba tomado. Este lti-
mo punto de decisin es cuando eleg el binding <lugar>=agencia1 para el
operador CARGAR-CAMION. Recordar que dicho operador exiga que la mer-
canca y el camin estuvieran en el mismo lugar, pero haba que decidir
qu lugar era ese. Haba decidido que ese lugar era la agencia1. Ahora
elegir el binding <lugar>=agencia2. Con ese binding, la primera precondi-
cin de CARGAR-CAMION ((camion-en camion1 agencia2)) ya es cierta, pues-
to que el camin est en la agencia2 (lo hemos movido all hace un mo-
mento). Luego intentar hacer cumplir la segunda: (mercancia-en m1
agencia2). Sin embargo, esta es la misma meta que intentabamos conse-
guir en el nodo n5, por lo que he entrado en un ciclo: he estado perdiendo
el tiempo ("goal loop with node 5").
;; Dominio logstico
;; Este fichero debera llamarse F:\lisp.exe\mis-dominios\logistica/domain.lisp
(in-package "USER")
(OPERATOR DESCARGAR-CAMION
(params <mercancia> <camion>)
(preconds
((<mercancia> MERCANCIA)
(<camion> CAMION)
(<lugar> LUGAR)
)
(and
(en-camion <mercancia> <camion>)
(camion-en <camion> <lugar>)
)
)
(effects
()
((del (en-camion <mercancia> <camion>))
(add (mercancia-en <mercancia> <lugar>))
)
)
)
(OPERATOR MUEVE-CAMION
(params <camion> <desde> <hasta>)
(preconds
(
(<camion> CAMION)
(<desde> LUGAR)
(<hasta> (and LUGAR
(diff <desde> <hasta>)
)
)
(<ciudad> CIUDAD)
)
(and
(en-ciudad <desde> <ciudad>)
(en-ciudad <hasta> <ciudad>)
(camion-en <camion> <desde>)))
(setf (current-problem)
(create-problem
(name problema1)
(objects
(m1 MERCANCIA)
(Paris CIUDAD)
(camion1 CAMION)
(agencia1 agencia2 AGENCIA)
)
(state
(and
(en-ciudad camion1 Paris)
(en-ciudad m1 Paris)
(en-ciudad agencia1 Paris)
(en-ciudad agencia2 Paris)
(mercancia-en m1 agencia1)
(camion-en camion1 agencia1)
)
)
(goal
(and
(mercancia-en m1 agencia2)
)
)
)
) ; Cierra setf
Ejecutar el comando "prodigy". Despus, hay que darle valor a la variable que
indica dnde estn los dominios:
La carga del dominio involucra la carga del fichero "domain.lisp" del dominio
correspondiente. Si queremos que Prodigy4.0 se ejecute ms rpido, se puede
pre-compilar el dominio:
El comando
Ejecutando Prodigy4.0
(run)
Para que la profundidad sea mayor (50 en este caso). Tambin podemos limi-
tar a Prodigy4.0 en el tiempo mximo que tiene disponible para solucionar el
problema:
En ocasiones no queremos ver la traza, slo la solucin (el plan). Eso se con-
sigue con:
(run :output-level 1)
ENHABITACION(ROBOT,r1)
CONEXION(d1,r1,r2)
CONEXION(d2,r2,r3)
Mg. Abraham Gamarra Moreno 313
BOX(b1)
ENHABITACION(b1,r2)
Realice la solucin.
HABITACION R1 HABITACION R2
Puerta
d1 Caja b1
robot
Puerta
d2
HABITACION R3
ENHABITACION(ROBOT,r1)
CONEXION(d1,r1,r2)
CONEXION(d2,r2,r3)
BOX(b1)
Realice la BOX(b1) and
solucin
ENHABITACION(b1,r2)
ENHABITACION(b1,r1)
utilizando
PRODIGY
Al igual que sucede en el ser humano, la capacidad de visin dota al robot con
un sofisticado mecanismo de percepcin que permite a la mquina responder a
su entorno de una forma inteligente y flexible. El uso de la visin y otros es-
quemas de percepcin, estn motivados por la constante necesidad de aumen-
tar la flexibilidad y los campos de aplicacin de los sistemas de robtica. As
como la percepcin de la proximidad del contacto juega un papel significativo
en el perfeccionamiento del comportamiento del robot, la visin se considera
como la ms potente capacidad sensorial de un robot. Como es de suponer,
los sensores, conceptos y hardware de proceso asociados con la visin artifi-
cial son considerablemente ms complejos que los asociados con las capaci-
dades de percepcin con sensores de proximidad, contacto, etc.
La visin artificial puede ser definida como los procesos de obtencin, caracte-
rizacin e interpretacin de informacin de imgenes tomadas de un mundo
tridimensional. Estos procesos, tambin habitualmente llamados visin por
computadora, pueden a su vez ser subdivididos en seis reas principales: 1)
captacin, 2) preprocesamiento, 3) segmentacin, 4) descripcin, 5) reconoci-
miento, 6) interpretacin. La captacin es el proceso a travs del cual se obtie-
ne una imagen visual. El preprocesamiento incluye tcnicas tales como la re-
duccin de ruido y realce de detalles. La segmentacin es el proceso que divi-
de una imagen en objetos que sean de nuestro inters. Mediante los procesos
de descripcin se obtienen caractersticas (por ejemplo, tamao, forma) con-
venientes para diferenciar un tipo de objeto de otro. El reconocimiento es el
proceso que identifica estos objetos (por ejemplo, una llave inglesa, un tornillo,
un soporte de motor). Finalmente, la interpretacin le asocia un significado a
un conjunto de objetos reconocidos.
Los principales dispositivos usados para la visin artificial son las cmaras de
televisin, que estn compuestas por un sensor basado en dispositivo de esta-
do slido o vlvulas electrnicas y electrnica asociada. Aunque un tratamiento
en profundidad de estos dispositivos est ms all del objetivo de la presente
obra. Aqu presentamos los principios de funcionamiento de los sensores de
imagen de estado slido a travs del estudio de los dispositivos de acopla-
miento de carga (CCD), los cuales son uno de los principales exponentes de
esta tecnologa. Los dispositivos de tratamiento de imagen de estado slido
nos ofrecen gran nmero de ventajas sobre las cmaras de tubos, como son
su menor peso, menor tamao, ms larga vida y menor consumo de potencia.
No obstante, la resolucin de algunos tubos est todava por encima de las
capacidades de las cmaras de dispositivos de estado slido.
Los sensores de rea son similares a los de exploracin de lnea, con la dife-
rencia de que los photosites estn reunidos en forma de matriz y existe un con-
junto de registros de transporte y puertas para cada columna de photosites,
segn se observa en la figura 8.1b. Los contenidos de los photosites impares
son secuencialmente transferidos a los registros verticales de transporte y pos-
teriormente al registro horizontal de transporte. El contenido de este registro es
enviado a un amplificador cuya salida es una lnea de vdeo, Repitiendo este
procedimiento para las lneas pares completamos el segundo campo de un
cuadro de televisin. Este mecanismo de exploracin se repite 30 veces por
segundo.
12
Fu K, Gonzalez R, Lee C. Robtica: Control, Deteccin, Visin e Inteligencia. Espaa:
Mc Graw Hill; 1988.
Figura 8.2. Convenio de coordenadas para representacin de imagen. El valor de cualquier punto
(x, y) viene dado por el valor (intensidad) de f en ese punto.
La figura 8.4 lustra el efecto producido por la reduccin del nmero del nivel de
intensidad manteniendo constante la resolucin espacial en 512 x 512 Las
imgenes de 256, 128 y 64 niveles son de una calidad aceptable. La imagen
de 32 niveles muestra una ligera degradacin (particularmente en las zonas
con poca variacin de intensidad) debido al uso de demasiado pocos niveles
para representar cada pixel. Este efecto es considerablemente ms visible en
la imagen obtenida por 16 niveles, y posteriormente se incrementa mucho, ob-
tenindose estructuras en forma de cresta (llamados contornos falsos).
8.2. PREPROCESAMIENTO12
En esta seccin veremos diversas tcnicas de procesamiento usadas en sis-
temas de visin artificial. Aunque el nmero de tcnicas disponibles para el
procesamiento general de datos de imagen es elevado, slo una parte de es-
tos mtodos satisface los requerimientos de velocidad de procesamiento y bajo
coste de implementacin, los cuales son caractersticas esenciales de un sis-
tema industrial de visin. El conjunto de tcnicas de proceso tratadas en esta
seccin son mtodos de uso habitual que satisfacen estos requerimientos.
(x,y1)
Este conjunto de pixels, llamados los 4-vecinos de p, ser llamado N4(p). Cada
uno de estos cuatro pixels se encuentra a una distancia unitaria de (x,y) y al-
gunos de los vecinos de p se encontrarn fuera de la imagen digital si (x,y) es-
t en el borde de la imagen.
(xl,y1)
y nos referiremos a ellos como ND(p) Estos puntos, junto con los 4 definidos
antes, se llaman los 8-vecinos de p, y se les nombra N8(p). Como antes, algu-
nos de los puntos de ND(p) y N8(p) se encontrarn fuera de la imagen si (x,y)
est en el borde de la imagen.
8.2.2. SUAVIZADO
Las operaciones de suavizado se usan para reducir ruido y otros efectos esp-
reos que pueden estar presentes en una imagen como resultado del mues-
treado, cuantizacin, transmisin o perturbaciones en el entorno durante el
proceso de obtencin de la imagen. En esta seccin consideraremos algunos
mtodos rpidos de suavizado que son apropiados para su uso en un sistema
de visin de un robot
Filtracin de la mediana
Otros mtodos desdibujan los contornos y otros detalles de forma. Este desdi-
bujamiento se suele reducir, en gran medida, usando los llamados filtros de la
mediana, en los cuales sustituimos la media de las intensidades por la media-
na en un entorno de vecindad predefinido de cada pixel.
Vea el proyecto de Visual Basic .Net llamado suavizado para ver el uso de es-
tas funciones.
Dim i As Integer
archivo = "..\"
End Select
'dibujar imagen
myBitmap = Bitmap.FromFile(archivo)
g.DrawImage(myBitmap, mipunto)
For x = 2 To resx - 3
For y = 2 To resy - 3
'llenar arreglos con intensidades de color
For i = 1 To 25
Select Case i
Case 1
xi = x - 2
yi = y - 2
Case 2
xi = x - 1
yi = y - 2
Case 3
xi = x
yi = y - 2
Case 4
xi = x + 1
yi = y - 2
Case 5
xi = x + 2
yi = y - 2
Case 6
xi = x - 2
yi = y - 1
Case 7
xi = x - 1
yi = y - 1
Case 8
xi = x
yi = y - 1
Case 9
xi = x + 1
yi = y - 1
Case 10
xi = x + 2
yi = y - 1
Case 11
xi = x - 2
yi = y
Case 12
xi = x - 1
yi = y
Case 13
xi = x
yi = y
Case 14
xi = x + 1
yi = y
Case 15
xi = x + 2
yi = y
Case 16
xi = x - 2
yi = y + 1
'ordenar arreglos
Array.Sort(alfa)
Array.Sort(azul)
Array.Sort(rojo)
Array.Sort(verde)
mybitmapf.SetPixel(x, y, pixelCo-
lor1.FromArgb(alfa(13), rojo(13), verde(13), azul(13)))
Next
Next
g.Clear(Color.Cyan)
g.DrawImage(mybitmapf, mipunto)
End Sub
REALCE LOCAL
Vea el proyecto de Visual Basic .Net llamado suavizado para ver el uso de es-
tas funciones.
Dim i As Integer
Dim salfa, srojo, sverde, sazul As Double
Dim salfa2, srojo2, sverde2, sazul2 As Double
Dim malfa, mrojo, mverde, mazul As Double
Dim dealfa, derojo, deverde, deazul As Double
Dim mgalfa, mgrojo, mgverde, mgazul As Double
Dim Axyalfa, Axyazul, Axyverde, Axyrojo, k As Double
Dim gxyalfa, gxyazul, gxyverde, gxyrojo As Double
Dim gxyalfai, gxyazuli, gxyverdei, gxyrojoi As Integer
End Select
'dibujar imagen
myBitmap = Bitmap.FromFile(archivo)
g.DrawImage(myBitmap, mipunto)
'***************************
' calcular medias y desviacin estandar para la
' vecindad de 5 x 5
For x = 2 To resx - 3
For y = 2 To resy - 3
'llenar arreglos con intensidades de color
For i = 1 To 25
Select Case i
Case 1
xi = x - 2
yi = y - 2
Case 2
salfa = 0
srojo = 0
sverde = 0
sazul = 0
For i = 1 To 25
salfa = salfa + alfa(i)
sazul = sazul + azul(i)
sverde = sverde + verde(i)
srojo = srojo + rojo(i)
Next
malfa = salfa / 25
mrojo = srojo / 25
mverde = sverde / 25
mazul = sazul / 25
salfa2 = 0
srojo2 = 0
sverde2 = 0
sazul2 = 0
For i = 1 To 25
salfa2 = salfa2 + (alfa(i) - malfa) * (alfa(i) -
malfa)
sazul2 = sazul2 + (azul(i) - mazul) * (azul(i) -
mazul)
sverde2 = sverde2 + (verde(i) - mverde) * (ver-
de(i) - mverde)
srojo2 = srojo2 + (rojo(i) - mrojo) * (rojo(i) -
mrojo)
Next
mybitmapf.SetPixel(x, y, pixelCol-
or1.FromArgb(gxyalfai, gxyrojoi, gxyverdei, gxyazuli))
Next
Next
g.Clear(Color.Cyan)
g.DrawImage(mybitmapf, mipunto)
End Sub
Operadores de gradiente.
Existen muchas maneras para generar una imagen de salida, g(x, y), basadas
en el cmputo del gradiente. El mtodo ms simple es suponer que el valor de
g en las coordenadas (x,y) es igual al gradiente de la imagen de entrada f en
ese punto; esto es,
Otra tcnica consiste en crear una imagen binaria usando la siguiente relacin:
archivo = "..\"
End Select
'dibujar imagen
myBitmap = Bitmap.FromFile(archivo)
g.DrawImage(myBitmap, mipunto)
For x = 2 To resx - 3
For y = 2 To resy - 3
Gxalfa = 0
Gxazul = 0
Gxverde = 0
Gxrojo = 0
Gyalfa = 0
Gyazul = 0
Gyverde = 0
Gyrojo = 0
pixelColor = myBitmap.GetPixel(x + 1, y)
Gxalfa = Gxalfa + 2 * pixelColor.A
Gxazul = Gxazul + 2 * pixelColor.B
Gxverde = Gxverde + 2 * pixelColor.G
Gxrojo = Gxrojo + 2 * pixelColor.R
pixelColor = myBitmap.GetPixel(x + 1, y + 1)
Gxalfa = Gxalfa + pixelColor.A
Gxazul = Gxazul + pixelColor.B
Gxverde = Gxverde + pixelColor.G
Gxrojo = Gxrojo + pixelColor.R
pixelColor = myBitmap.GetPixel(x - 1, y - 1)
Gxalfa = Gxalfa - pixelColor.A
Gxazul = Gxazul - pixelColor.B
Gxverde = Gxverde - pixelColor.G
Gxrojo = Gxrojo - pixelColor.R
pixelColor = myBitmap.GetPixel(x - 1, y)
Gxalfa = Gxalfa - 2 * pixelColor.A
Gxazul = Gxazul - 2 * pixelColor.B
Gxverde = Gxverde - 2 * pixelColor.G
Gxrojo = Gxrojo - 2 * pixelColor.R
pixelColor = myBitmap.GetPixel(x - 1, y + 1)
Gxalfa = Gxalfa - pixelColor.A
Gxazul = Gxazul - pixelColor.B
Gxverde = Gxverde - pixelColor.G
Gxrojo = Gxrojo - pixelColor.R
pixelColor = myBitmap.GetPixel(x, y + 1)
Gyalfa = Gyalfa + 2 * pixelColor.A
Gyazul = Gyazul + 2 * pixelColor.B
Gyverde = Gyverde + 2 * pixelColor.G
Gyrojo = Gyrojo + 2 * pixelColor.R
pixelColor = myBitmap.GetPixel(x + 1, y + 1)
Gyalfa = Gyalfa + pixelColor.A
Gyazul = Gyazul + pixelColor.B
Gyverde = Gyverde + pixelColor.G
Gyrojo = Gyrojo + pixelColor.R
pixelColor = myBitmap.GetPixel(x - 1, y - 1)
Gyalfa = Gyalfa - pixelColor.A
Gyazul = Gyazul - pixelColor.B
Gyverde = Gyverde - pixelColor.G
Gyrojo = Gyrojo - pixelColor.R
pixelColor = myBitmap.GetPixel(x, y - 1)
Gyalfa = Gyalfa - 2 * pixelColor.A
Gyazul = Gyazul - 2 * pixelColor.B
Gyverde = Gyverde - 2 * pixelColor.G
Gyrojo = Gyrojo - 2 * pixelColor.R
pixelColor = myBitmap.GetPixel(x + 1, y - 1)
Gyalfa = Gyalfa - pixelColor.A
Gyazul = Gyazul - pixelColor.B
Gyverde = Gyverde - pixelColor.G
Gyrojo = Gyrojo - pixelColor.R
Galfa = CInt(Math.Sqrt(Math.Pow(Gxalfa, 2) +
Math.Pow(Gyalfa, 2)))
Gazul = CInt(Math.Sqrt(Math.Pow(Gxazul, 2) +
Math.Pow(Gyazul, 2)))
Gverde = CInt(Math.Sqrt(Math.Pow(Gxverde, 2) +
Math.Pow(Gyverde, 2)))
Grojo = CInt(Math.Sqrt(Math.Pow(Gxrojo, 2) +
Math.Pow(Gyrojo, 2)))
mybitmapf.SetPixel(x, y, pixelColor1.FromArgb(Grojo,
Gverde, Gazul))
Next
Next
g.Clear(Color.Cyan)
g.DrawImage(mybitmapf, mipunto)
End Sub
archivo = "..\"
End Select
'dibujar imagen
myBitmap = Bitmap.FromFile(archivo)
g.DrawImage(myBitmap, mipunto)
For x = 2 To resx - 3
For y = 2 To resy - 3
Gxalfa = 0
Gxazul = 0
Gxverde = 0
Gxrojo = 0
Gyalfa = 0
Gyazul = 0
Gyverde = 0
Gyrojo = 0
pixelColor = myBitmap.GetPixel(x + 1, y)
Gxalfa = Gxalfa + 2 * pixelColor.A
Gxazul = Gxazul + 2 * pixelColor.B
Gxverde = Gxverde + 2 * pixelColor.G
Gxrojo = Gxrojo + 2 * pixelColor.R
pixelColor = myBitmap.GetPixel(x + 1, y + 1)
Gxalfa = Gxalfa + pixelColor.A
Gxazul = Gxazul + pixelColor.B
Gxverde = Gxverde + pixelColor.G
Gxrojo = Gxrojo + pixelColor.R
pixelColor = myBitmap.GetPixel(x - 1, y - 1)
Gxalfa = Gxalfa - pixelColor.A
Gxazul = Gxazul - pixelColor.B
Gxverde = Gxverde - pixelColor.G
Gxrojo = Gxrojo - pixelColor.R
pixelColor = myBitmap.GetPixel(x - 1, y)
Gxalfa = Gxalfa - 2 * pixelColor.A
Gxazul = Gxazul - 2 * pixelColor.B
Gxverde = Gxverde - 2 * pixelColor.G
Gxrojo = Gxrojo - 2 * pixelColor.R
pixelColor = myBitmap.GetPixel(x - 1, y + 1)
Gxalfa = Gxalfa - pixelColor.A
Gxazul = Gxazul - pixelColor.B
Gxverde = Gxverde - pixelColor.G
Gxrojo = Gxrojo - pixelColor.R
pixelColor = myBitmap.GetPixel(x, y + 1)
Gyalfa = Gyalfa + 2 * pixelColor.A
Gyazul = Gyazul + 2 * pixelColor.B
Gyverde = Gyverde + 2 * pixelColor.G
Gyrojo = Gyrojo + 2 * pixelColor.R
pixelColor = myBitmap.GetPixel(x + 1, y + 1)
Gyalfa = Gyalfa + pixelColor.A
Gyazul = Gyazul + pixelColor.B
Gyverde = Gyverde + pixelColor.G
Gyrojo = Gyrojo + pixelColor.R
pixelColor = myBitmap.GetPixel(x - 1, y - 1)
Gyalfa = Gyalfa - pixelColor.A
Gyazul = Gyazul - pixelColor.B
Gyverde = Gyverde - pixelColor.G
Gyrojo = Gyrojo - pixelColor.R
pixelColor = myBitmap.GetPixel(x, y - 1)
Gyalfa = Gyalfa - 2 * pixelColor.A
Gyazul = Gyazul - 2 * pixelColor.B
Gyverde = Gyverde - 2 * pixelColor.G
Gyrojo = Gyrojo - 2 * pixelColor.R
pixelColor = myBitmap.GetPixel(x + 1, y - 1)
Gyalfa = Gyalfa - pixelColor.A
Gyazul = Gyazul - pixelColor.B
Gyverde = Gyverde - pixelColor.G
Gyrojo = Gyrojo - pixelColor.R
Galfa = CInt(Math.Sqrt(Math.Pow(Gxalfa, 2) +
Math.Pow(Gyalfa, 2)))
Gazul = CInt(Math.Sqrt(Math.Pow(Gxazul, 2) +
Math.Pow(Gyazul, 2)))
Gverde = CInt(Math.Sqrt(Math.Pow(Gxverde, 2) +
Math.Pow(Gyverde, 2)))
Grojo = CInt(Math.Sqrt(Math.Pow(Gxrojo, 2) +
Math.Pow(Gyrojo, 2)))
mybitmapf.SetPixel(x, y, pixelColor1.FromArgb(Grojo,
Gverde, Gazul))
Next
Una forma de extraer los objetos del entorno es seleccionar un nivel T que se-
pare los dos tonos de intensidad. De esta forma, un punto (x, y) para el cual
f(x,y) > T ser un punto del objeto; en caso contrario, el punto ser del entorno.
Examinando g(x,y) vemos que los pixels a los que se les asigna valor 1 (o
cualquier otro nivel de intensidad segn el caso) corresponden a los objetos,
mientras que los pixels, a los que se les asigna un 0 Corresponden al entorno.
Cuando T depende slo de f(x,y), el umbral se llama global.
archivo = "..\"
End Select
'dibujar imagen
myBitmap = Bitmap.FromFile(archivo)
g.DrawImage(myBitmap, mipunto)
For x = 2 To resx - 3
For y = 2 To resy - 3
'obtener color
pixelColor = myBitmap.GetPixel(x, y)
alfa = pixelColor.A
azul = pixelColor.B
verde = pixelColor.G
rojo = pixelColor.R
mybitmapf.SetPixel(x, y, pixelColor1.FromArgb(rojo,
verde, azul))
Next
Next
g.Clear(Color.Cyan)
g.DrawImage(mybitmapf, mipunto)
End Sub
Existen varios algoritmos propuestos para cada una de estas reas; pero en
este libro se trata de reemplazar estas reas, con el reconocimiento de objetos
a travs de redes neuronales.
En 1923 el escritor checo Karel Capek escribe la obra Rossums Universal Ro-
bots de la que surge la palabra robot.
Las figuras 9.1, 9.2 y 9.3, destacan las principales caractersticas de la produc-
cin automatizada y la forma como evolucion.
Las figuras 9.7 y 9.8 muestran dos aplicaciones concretas de la robtica indus-
trial.
Los robots mviles o microbots son utilizados tambin como robots de forma-
cin e investigacin; e inclusive se realizan concursos entre universidades
donde se pone a prueba la destreza de la programacin de estos robots.
Las figuras 9.9, 9.10 y 9.11; muestran algunos robots de formacin e investiga-
cin
9.5. SENSORES
Los microbots utilizan sensores, que emulan nuestros sentidos, estos sirven
para tomar alguna decisin o para realizar alguna accin.
Entre los sensores que podemos utilizar se encuentran los sensores de golpe o
bumper, que permiten emular el tacto de las personas. Este sensor detecta si
hemos realizado contacto con un objeto o chocado con ese objeto. Las figuras
9.12 y 9.13 muestran un bumper.
Otro sensor que se utiliza es el sensor de rayos infrarrojos, que permite reco-
nocer colores claros o colores oscuros. Este sensor emula la vista pero en for-
ma muy rudimentaria. En microbtica es muy utilizada para que los robots
puedan seguir una lnea negra o blanca. Las figuras 9.14 y 9.15 muestran el
sensor de rayos infrarrojos.
Estas microcmaras permiten obtener imgenes que pueden ser utilizados por
los algoritmos de visin artificial.
Figura 9.18.
Motores.
Sensores.
Una tarjeta de potencia que permite elevar la potencia para mover los mo-
tores.
Figura 9.19. Componentes de un robot mvil. (Fuente: El robot Pathfinder. Madrid: F y G edito-
res; 2003.)
2. Robots de servicio.
4. Microbots.
Figura 9.27. Usos de los robots de servicio. (Fuente: El robot Pathfinder. Madrid: F y G editores;
2003.)
9.9.4. MICROBOTS
Son pequeos robots mviles que realizan una sencilla tarea con precisin y
velocidad. Dado su pequeo volumen y precio, y teniendo en cuenta que su
potencia casi se duplica cada ao al incorporar los avances tecnolgicos ms
avanzados, es previsible una invasin mundial de estas bestiecillas para fina-
les de la primera dcada del presente siglo.
Vigilancia y supervisin.
Aplicaciones militares.
;************************************************************************************
; LINEA NEGRA
;
; Hace que el microbot se mueva siguiendo una trayectoria marcada en el suelo
mediante
;te una lnea negra a modo de pista.
;
org 0x00
goto Reset ;Vector de RESET
org 0x05
;Se espera a que se accione cualquier bumper delantero para iniciar la secuecia
;Wait clrwdt
; Stop ;Situacin inicial de parada
; btfss J2 ;Sensor de obsculo dcho. ON ??
; goto Loop ;Si, inicio
; btfscJ3 ;Sensor de obstculo izdo ON ??
; goto Wait ;Si, inicio
;Bucle principal
end
;***************************************************************************
;Programa de robot explorador. Avanza y cada vez que se choca con un obstculo (bumpers),
;corrige su trayectoria. En funcin de con qu bumper se choque, reproduce un mensaje
;diferente grabado en su chip de voz. Es necesario introducir dos mensajes (duracin
;mxima 4 segundos), durante los ocho primeros segundos de grabacin del chip de voz.
;Posteriormente el robot se encargar de reproducir cada submensaje de cuatro segundos
;en funcin de qu bumper se haya activado.
;
; MOTORES
;RB0 Y RB1 son para el motor central
;RBO: 1
;RB1: 0 -> Robot gira hacia la derecha
;RB2 y RB3 son para el motor de la rueda izquierda
;RB2: 0
;RB3: 1 -> Robot avanza
;RB4 y RB5 son para el motor de la rueda derecha
;RB4: 1
;RB5: 0 -> Robot avanza
;
; SENSORES
;Cuando los sensores envan un '1' es que ven negro. Si se lee un '0' es que hay blanco
;RC0: Sensor de la izquierda
;RC1: Sensor de la derecha
;RC2: Sensor central
;RA1 y RA2: Bumpers
;RA1: Bumper izquierdo (JP7)
;RA2: Bumper derecho (JP8)
;***************************************************************************
;Variables del programa que sern utilizadas como registros (memoria RAM del Pic)
TEMPO EQU 0x20 ;Variable auxiliar para la modulacin de anchura de pulsos
con el Timer0
AUX EQU 0x21 ;Variable auxiliar para operaciones matemticas
DELAY_VAR EQU 0x24
TEMPO2 EQU 0x25
TIEMPO1 EQU 0x26
TIEMPO2 EQU 0x27
TIEMPO3 EQU 0x28
;Definiciones de valores para algunos parmetros del programa
TON_AVANCE EQU .5
TOFF_AVANCE EQU .8
TON_CENTRAL EQU .5
TOFF_CENTRAL EQU .10
CORRIGE_CENTRAL EQU .10
org 0xB0
;***************************************************************************
;***************** COMIENZO DEL PROGRAMA PRINCIPAL *************************
;***************************************************************************
INICIO:
bsf STATUS, 5 ;Banco 1
clrf PORTB ;PuertaB como salida para los sensores
movlw 0x07
movwf ADCON0 ;PuertaA como entrada digital
movlw 0xff
movwf PORTA
movlw b'00000111'
movwf PORTC
movlw b'00000001'
movwf TMR0 ;Preescaler. Mediante l se escoge la frecuencia de la
seal de modulacin de anchura de pulsos
bcf STATUS, 5 ;Banco 0
movlw b'00100000'
movwf PORTC
bcf INTCON, 7 ;Se deshabilitan las interrupciones
clrf PORTB
movlw TOFF_AVANCE
movwf TEMPO
movlw TOFF_CENTRAL
movwf TEMPO2
call DELAY
SITUAR_MOTOR_CENTRAL:
btfscPORTC, 2
goto BUCLE
call AVANCE_CENTRAL_DERECHA
goto SITUAR_MOTOR_CENTRAL
bsf PORTB, 0 ;Se mueve un poco el motor central
bcf PORTB, 1
call DELAY
;***************************************************************************
;Bucle principal del programa
BUCLE: bcf PORTB, 0 ;Se para el motor central
bcf PORTB, 1
call MOTORES_AVANCE
BUMPER_DER_ON:
call DELAY
btfssPORTA, 2
goto BUCLE
call DELAY
btfssPORTA, 2
goto BUCLE
goto SENSOR_DERECHA_ON
BUMPER_IZQ_ON:
call DELAY
btfssPORTA, 1
goto BUCLE
call DELAY
btfssPORTA, 1
goto BUCLE
goto SENSOR_IZQUIERDA_ON
;******************************************************************************
;Rutina a ejecutar cuando se ha activado el bumper de la izquierda
SENSOR_DERECHA_ON:
bcf PORTC, 6
bcf PORTC, 7
bcf PORTC, 5
clrf PORTB ;Se paran los motores y se espera a que se reproduzca el
mensaje
call DELAY2
bsf PORTC, 5
clrf TIEMPO1
clrf TIEMPO2
movlw .3
movwf TIEMPO3
ESPERA_RETROCESO_DERECHA:
call MOTORES_RETROCESO
decfsz TIEMPO1,1
goto ESPERA_RETROCESO_DERECHA
decfsz TIEMPO2,1
goto ESPERA_RETROCESO_DERECHA
decfsz TIEMPO3,1
goto ESPERA_RETROCESO_DERECHA
CENTRAL_ENBLANCO_IZQ:
call AVANCE_CENTRAL_IZQUIERDA
btfssPORTC, 2
goto CENTRAL_ENBLANCO_IZQ
ENNEGRO_IZQ:
call AVANCE_CENTRAL_IZQUIERDA
btfscPORTC, 2
goto ENNEGRO_IZQ
bcf PORTB, 0 ;Se para el motor central
bcf PORTB, 1
clrf TIEMPO1
clrf TIEMPO2
movlw .3
movwf TIEMPO3
;******************************************************************************
;Rutina a ejecutar cuando se ha activado el bumper de la izquierda
SENSOR_IZQUIERDA_ON:
bsf PORTC, 6
bcf PORTC, 7
bcf PORTC, 5
clrf PORTB ;Se paran los motores y se espera a que se reproduzca el
mensaje
call DELAY2
bsf PORTC, 5
clrf TIEMPO1
clrf TIEMPO2
movlw .3
movwf TIEMPO3
ESPERA_RETROCESO_IZQUIERDA:
call MOTORES_RETROCESO
decfsz TIEMPO1,1
goto ESPERA_RETROCESO_IZQUIERDA
decfsz TIEMPO2,1
goto ESPERA_RETROCESO_IZQUIERDA
decfsz TIEMPO3,1
goto ESPERA_RETROCESO_IZQUIERDA
CENTRAL_ENBLANCO_DER:
call AVANCE_CENTRAL_DERECHA
btfssPORTC, 2
goto CENTRAL_ENBLANCO_DER
ENNEGRO_DER:
call AVANCE_CENTRAL_DERECHA
btfscPORTC, 2
goto ENNEGRO_DER
bcf PORTB, 0 ;Se para el motor central
bcf PORTB, 1
clrf TIEMPO1
clrf TIEMPO2
movlw .3
movwf TIEMPO3
ESPERA_AVANCE_IZQUIERDA:
call MOTORES_AVANCE
decfsz TIEMPO1,1
goto ESPERA_AVANCE_IZQUIERDA
decfsz TIEMPO2,1
;************************************************************************
;Funcin que se encarga del avance de los motores traseros. A travs de esta rutina
;se controla la velocidad de avance del robot mediante modulacin de anchura de pulsos
MOTORES_AVANCE:
;Control de la modulacin de anchura de pulsos para los motores de avance del robot
btfssINTCON, 2 ;Desbordamiento del Timer
return
bcf INTCON, 2
MOTORES_TRACCION_AUX:
decfsz TEMPO, 1
return
movf PORTB, 0
andlw b'00111100'
movwf AUX
movlw 0
subwf AUX, 0
btfssSTATUS, 2
goto APAGAR_MOTORES
goto ENCENDER_MOTORES
;Mediante el valor introducido en la variable TEMPO en las rutinas de ENCENDER_MOTORES
y APAGAR_MOTORES
;se puede seleccionar el Duty Cicle que se desee para la seal, cuya frecuencia a su vez
tambin es seleccionable
;mediante el preescaler.
ENCENDER_MOTORES:
bcf PORTB, 2
bsf PORTB, 3
bsf PORTB, 4
bcf PORTB, 5
movlw TON_AVANCE
movwf TEMPO
return
APAGAR_MOTORES:
bcf PORTB, 2
bcf PORTB, 3
bcf PORTB, 4
bcf PORTB, 5
movlw TOFF_AVANCE
movwf TEMPO
return
;Rutina para el retroceso del robot con modulacin de anchura de pulsos
MOTORES_RETROCESO:
;Control de la modulacin de anchura de pulsos para los motores de avance del robot
btfssINTCON, 2 ;Desbordamiento del Timer
return
bcf INTCON, 2
;**********************************************************
;Funcin para el avance del motor central cuando este gira hacia la derecha
AVANCE_CENTRAL_DERECHA:
;Control de la modulacin de anchura de pulsos para los motores de avance del robot
btfssINTCON, 2 ;Desbordamiento del Timer
return
bcf INTCON, 2
call MOTORES_TRACCION_AUX
decfsz TEMPO2, 1
return
movf PORTB, 0
andlw b'00000011'
movwf AUX
movlw 0
subwf AUX, 0
btfssSTATUS, 2
goto APAGAR_MOTOR_CENTRAL_DER
goto ENCENDER_MOTOR_CENTRAL_DER
;Mediante el valor introducido en la variable TEMPO en las rutinas de ENCENDER_MOTORES
y APAGAR_MOTORES
;se puede seleccionar el Duty Cicle que se desee para la seal, cuya frecuencia a su vez
tambin es seleccionable
;mediante el preescaler.
ENCENDER_MOTOR_CENTRAL_DER:
bsf PORTB, 0 ;Se mueve un poco el motor central
bcf PORTB, 1
movlw TON_CENTRAL
movwf TEMPO2
;Funcin para el control del motor central cuando ste gira hacia la izquierda
AVANCE_CENTRAL_IZQUIERDA:
;Control de la modulacin de anchura de pulsos para los motores de avance del robot
btfssINTCON, 2 ;Desbordamiento del Timer
return
bcf INTCON, 2
call MOTORES_TRACCION_AUX
decfsz TEMPO2, 1
return
movf PORTB, 0
andlw b'00000011'
movwf AUX
movlw 0
subwf AUX, 0
btfssSTATUS, 2
goto APAGAR_MOTOR_CENTRAL_IZQ
goto ENCENDER_MOTOR_CENTRAL_IZQ
;Mediante el valor introducido en la variable TEMPO en las rutinas de ENCENDER_MOTORES
y APAGAR_MOTORES
;se puede seleccionar el Duty Cicle que se desee para la seal, cuya frecuencia a su vez
tambin es seleccionable
;mediante el preescaler.
ENCENDER_MOTOR_CENTRAL_IZQ:
bcf PORTB, 0 ;Se mueve un poco el motor central
bsf PORTB, 1
movlw TON_CENTRAL
movwf TEMPO2
return
APAGAR_MOTOR_CENTRAL_IZQ:
clrf PORTB
movlw TOFF_CENTRAL
movwf TEMPO2
return
;**************************************************************
;Funcion de temporizacin empleada por el programa
DELAY:
bsf STATUS, 5
movlw b'00000001'
movwf TMR0
bcf STATUS, 5
movlw CORRIGE_CENTRAL
movwf DELAY_VAR
DEL: btfssINTCON, 2
goto DEL
bcf INTCON, 2
decfsz DELAY_VAR,1
goto DEL
bsf STATUS, 5
movlw b'00000001'
movwf TMR0 ;Preescaler para la modulacin de anchura de pulsos de los
motores
bcf STATUS, 5
Recopilado por:
<>
juan <> pedro
Clauses
Solucin varon(alberto).
ejercicios 1. varon(eduardo).
hembra(alicia).
hembra(victoria).
padres(eduardo, victoria, alberto).
padres(alicia, victoria, alberto).
hermana_de(X,Y):-
hembra(X),
padres(X,M,P),
padres(Y,M,P),X<>Y.
goal
hermana_de(alicia,X).
predicates
poblacion(symbol,real)
superficie(symbol,real) Ejemplo 2
densidad(symbol,real)
clauses
/* poblacion(Prov,Pob) <- la poblacin, en miles de habitantes,
de la provincia Prov es Pob */
poblacion(alicante,1149).
poblacion(castellon,432).
poblacion(valencia,2066).
/* superficie(Prov,Sup) <- la superficie, en miles de km2, de la
provincia Prov es Sup */
superficie(alicante,6).
superficie(castellon,7).
superficie(valencia,11).
/* densidad(Prov,Den) <- la densidad de poblacin, habitantes/km2,
de la provincia Prov es Den */
densidad(X,Y) :- poblacion(X,P),
superficie(X,S),
Y=P/S.
goal
densidad(alicante, X).
goal
write("\n los regalos (Y), para los animales (X) se"),
write(" listan a continuacin: \n\n"), regalo(X,Y).
predicates
nondeterm hijo(string,string)
clauses
Ejemplo 4
hijo(javier, luis).
hijo(ana,luis).
hijo(maria,luis).
hijo(joseph,daniel).
goal
write("\ningrese nombre del padre: "),readln(Padre),
write("\n"),write(Padre),
write(" tiene los siguientes hijos:\n"),
hijo(Hijo,Padre).
A C D
MESA
Vea ejemplo9.pro
DESARROLLO DE UN
SISTEMA DIFUSO BASADO
EN REGLAS
Mg. Abraham Gamarra Moreno 18
Velocidad (rpm) : 0 - 60
Mg. Abraham Gamarra Moreno 20
DEFINICIN DE LOS
CONJUNTOS DIFUSOS
DEFINICIN DE LA REGLAS
DIFUSAS
RULE NUMBER: 1
IF:
LA TEMPERATURA AMBIENTE ES
FRIA
THEN:
LA VELOCIDAD DEL VENTILADOR
ES PARADO
DEFINICIN DE LA REGLAS
DIFUSAS
RULE NUMBER: 3
IF:
LA TEMPERATURA
AMBIENTE ES AGRADABLE
THEN:
LA VELOCIDAD DEL
VENTILADOR ES MEDIA
DEFINICIN DE LA REGLAS
DIFUSAS
RULE NUMBER: 5
IF:
LA TEMPERATURA
AMBIENTE ES TRRIDA
THEN:
LA VELOCIDAD DEL
VENTILADOR ES MAXIMA
PROBAR EL SISTEMA
Esta tarea sirve para ver si el sistema
alcanza las especificaciones dados en la
definicin del problema.
Para el ejemplo que se esta desarrollando
se probar con los siguientes datos de
entrada:
Temperatura = 18
Evaluando el grado de pertenencia a los
conjuntos difusos se tiene:
Mg. Abraham Gamarra Moreno 29
FRESCA(18) = 0.5
AGRADABLE(18) = 0.167
Mg. Abraham Gamarra Moreno 30
PROBAR EL SISTEMA
LAS REGLAS QUE SE DISPARARN SON:
RULE NUMBER: 2
IF (LA TEMPERATURA AMBIENTE ES
FRESCA)(0.5)
THEN (LA VELOCIDAD DEL VENTILADOR ES
LENTA) (0.5)
RULE NUMBER: 3
IF (LA TEMPERATURA AMBIENTE ES
AGRADABLE)(0.167)
THEN (LA VELOCIDAD DEL VENTILADOR ES
MEDIA) (0.167)
Mg. Abraham Gamarra Moreno 31
y1 y2
Conjuntos difusos para la velocidad
del ventilador
Mg. Abraham Gamarra Moreno 33
DEFUZZIFICACION DE LA
VARIABLE DE SALIDA
La velocidad del ventilador es:
Velocidad = y1*(y1)+ y2*(y2)
(y1) + (y2)
15. Kong Maynard. Inteligencia Artificial. Lima, Per: Fondo Editorial Pontifi-
cia Universidad Catlica del Per; 1993.
20. Rich E, Knight K. Inteligencia Artificial. 2da. Ed. Espaa: Mc Graw Hill;
1994.
21. Russell S, Norvig Peter. Inteligencia Artificial. Mxico: Prentice Hall; 1996.
24. Winston P. Inteligencia Artificial. 3ra. ed. USA: Addison Wesley; 1994.