Title: Fundamentos de Inteligencia Artificial
1Fundamentos de Inteligencia Artificial
- M.C. Juan Carlos Olivares Rojas
2Agenda
- 2.1 Introducción
- 2.2 Representación del Conocimiento
- 2.3 Sistemas Expertos
3Introducción
- La Inteligencia Artificial pretende emular la
Inteligencia Humana a través del uso de
computadoras - La Inteligencia es la capacidad para resolver
problemas de cualquier tipo. La inteligencia
distingue al hombre del animal
4Introdcción
- A los sistemas inteligentes existentes les falta
el sentido común y la generalidad de los seres
humanos. - Alan M. Turing definió en 1950 una forma de
comprobar si una máquina piensa, esto lo hizo a
través del Test de Turing.
5Introducción
- Consiste en colocar dos hombres y una computadora
en un lugar en el cual no estén visibles los tres
elementos, se ocultan las identidades. - Uno de los participantes funciona como
interrogador. La prueba se pasa cuando el
interrogador no sabe distinguir entre las
respuestas de la computadora y del otro hombre.
6Introducción
7Introducción
- Extracto del diálogo del Ensayo de Turing
- P Por favor, redacte un soneto sobre el tema del
Fuerte Bridge - R No me incluya. Nunca pude escribir poesía.
- P Sume 34957 y 70764
- R (Pausa de 30s seguida de la respuesta) 105621
- .
8Introducción
- La IA se ha desarrollado desde mucho tiempo
atrás. Aristóteles comenzó a explicar y codificar
ciertos estilos de razonamientos como el
deductivo. - Los filósofos griegos ayudaron a plantear la
lógica clásica. El Silogismo se convierte en la
primera gran herramienta de la IA. - P-gtQ y Q-gtS P-gtS
9Introducción
- En 1956 John McCarthy definió el concepto de IA y
es considerado el padre de la misma. - Muchos investigadores han hecho aportaciones
valiosísimas a este campo, como Chomsky
(Lenguajes), Rosenblat (Perceptrón), Alan Turing
(Autómatas), etc.
10Aplicaciones
- Sistemas expertos
- Procesamiento de lenguaje natural
- Visión Artificial
- Robótica
- Aprendizaje
- Lógica Clásica y Difusa
- Juegos
- Redes neuronales
- Algoritmos genéticos
- Realidad virtual
11Representación del Conocimiento
- La características más importante que deben de
tener todo Sistemas Inteligente (SI) son - La forma de representar el conocimiento
- La forma en cómo se recupera la información
- La forma en como se puede adquirir nuevo
conocimiento (aprendizaje).
12Representación del Conocimiento
- Las formas de representación (explicitación) de
conocimiento son muy variadas y de ellas
dependerá la forma en que se recupere la
información y el cómo se aprende. - Siempre que se desarrolla un modelo se tiene dos
representaciones lógica y física. - Dichas representaciones se necesitan mapearse
para poder trabajar en conjunto.
13Representación del Conocimiento
- Cuando se tiene un problema de la vida real, éste
debe mapearse al esquema de una computadora para
poderse realizar un sistema computacional. - Imaginemos que deseamos desarrollar un juego de
laberintos (modelo físico), Cómo quedaría
representado su conocimiento (modelo )?
14Representación del Conocimiento
- Se puede representar como una matriz, como un
grafo, máquinas de estado finito, etc. Además, se
deben tener reglas de cómo es el juego. - Sino tenemos las dos representaciones no podemos
comprender ni aprender el juego.
15Representación del Conocimiento
- Las redes semánticas son una forma sencilla de
explicitar conocimiento, están conformadas por
grafos que codifican el conocimiento en forma
taxonómica. - Los nodos nos representan categorías y las
aristas relaciones entre esas categorías. - Existen dos tipos de relaciones muy especiales
Is-A y la Have-A.
16Representación del Conocimiento
- Se puede acceder a través de cada uno de los
conceptos para inferir conocimiento. - Los guiones (script) son otra forma de
representar conocimiento. Están conformados por
componentes llamados ranuras (slots) que es un
conjunto de pares atributo-valor. Los guiones son
más fáciles de introducir en muchos casos que un
mapa conceptual.
17Representación del Conocimiento
- El mismo conocimiento puede estar estructurado en
diferentes representaciones como por ejemplo una
base de datos, una red semántica, un frame, un
mapa conceptual, etc. Pero al final de cuentas
deben tener el mismo significado (semántica).
18Red Semántica
19Redes Semánticas
- Ejemplo de un guión
- Impresoras
- Subconjunto_de Máquina_Oficina
- Superconjunto_de Impresora_Laser,
Impresora_Inyección - Fuente_alimentacion Toma_Pared
- Autor Juan_Perez
- Fecha 15_Febrero_2008
20Representación del Conocimiento
- La representación del conocimiento tiene una gran
importancia a tal punto de actualmente se habla
de la Ingeniería del Conocimiento. - Los frames son una estructura en la cual se
pueden representar valores, restricciones,
procesos, tienen relaciones de pertinencia y
herencia (por lo que se parecen a la programación
orientada a objetos).
21Representación del Conocimiento
- El método descripción y pareamiento se utiliza
para solucionar problemas de IA y es de los más
básicos. - El primer paso consiste en identificar todas las
características de un objeto. - Después se realiza una búsqueda con un conjunto
de objetos ya definidos.
22Representación del Conocimiento
- En realidad se utilizan dos métodos muy
importantes el extractor y el evaluador de
conocimientos. - Al realizar el pareamiento de los objetos puede
ser que no caigan exactamente en el patrón de
conocimiento por lo que se tiene que tener una
medida de similitud.
23Representación del Conocimiento
- Una forma de explicitar conocimiento con gran
difusión en la actualidad es a través del uso de
ontologías, las cuales consiste de relaciones
entre distintos conceptos como definiciones. - Las ontologías pueden ser representadas a través
de lenguajes como XML.
24Representación del Conocimiento
- AMOR
- Querer a una persona o cosa sobre todas las cosas
- Palabra de 4 caracteres A, M, O y R
yuxtapuestos - AMOR AMOR AMOR ROMA
- Amor AMOR Amor Cariño
- Amor Amar Distancia Léxica 1
25Representación del Conocimiento
- Círculo
- Descripción
- Figura formada por todos los puntos comprendidos
a una distancia equidistante del centro
correspondidos en un ángulo de 0 a 360 grados. - Propiedades
- Centro (punto)
- Diámetro (dos veces radio)
- Áreas
26Representación del Conocimiento
Similitud de 75
27Representación del Conocimiento
- Se utiliza en otras múltiples ramas como
- Reconocimiento de huellas digitales
- Reconocimiento de Voz
- Reconocimiento de Lenguaje Natural
- Validación de Requerimientos de Software
- Etc.
- Se debe de representar de manera adecuada el
conocimiento para poder compararlo.
28Representación del Conocimiento
- Un granjero quiere cruzar un rió llevando consigo
una zorra, una ganso y un saco de trigo. Por
desgracia, su bote es tan pequeño que sólo puede
transportar una de sus pertenencias en cada
viaje. Peor aún, la zorra, si no se le vigila, se
come al ganso, y el ganso, si no se le cuida, se
come el trigo de modo que el granjero no debe
dejar a la zorra sola con el ganso o al ganso
solo con el trigo.
29Representación del Conocimiento
Granjero Zorra Ganso Trigo
Granjero Zorra Ganso Trigo
Se puede utilizar el método de descripción y
pareamiento?
30Representación del Conocimiento
31Representación del Conocimiento
- Otra forma de resolución de problemas utilizado
en la IA consiste en las Analogías. - Las analogías son un tipo especial de relación
que define como están representados los objetos
de una categoría y como obtener sus predecesores
y antecesores inmediatos.
32Representación del Conocimiento
- Alguna vez nos hemos preguntado por qué en la
mayoría de los exámenes de admisión generalmente
son más importantes las analogías que los de
conocimientos? - Por que en la mayoría de los casos el
conocimiento de cierta forma se puede adquirir
pero la forma de aprender y razonar es sumamente
complicado. En muchos casos son más importantes
las reglas que el conocimiento.
33Representación del Conocimiento
Cómo quedarían D y 5?
34Representación del Conocimiento
- Qué problemas se presentan con la Abstracción de
la Figura D o bien de la Figura 3? - La resolución de problemas por analogía tiene
como base cierto conocimiento previo en ocasiones
difícil de obtener.
35Sistemas Expertos
- Son el primer producto viable comercialmente de
la Inteligencia Artificial. - Permiten introducir información acerca de una
materia específica a la computadora (base de
conocimientos), y actúan como si fueran expertos
en la materia.
36Sistemas Expertos
- Un Sistema experto simula el proceso de
razonamiento humano mediante la aplicación
específica de conocimientos e inferencias. - A continuación se mencionan algunas herramientas
como Prolog y Lisp para la construcción de SE.
37Quiz 2-1
- Quién es considerado el padre de la IA?
- En qué consiste el test de Turing?
- Quién invento el silogismo?
- Menciona tres áreas donde se puede utilizar la IA
38Quiz 2-1
- Cuáles son las tres componentes que debe tener
todo Sistema Inteligente? - Cuáles son los dos tipos de relaciones básicas
en redes semánticas? - Qué es un script en IA?
39Actividad
- Describe una heurística de cómo una persona puede
escapar de un laberinto - Describe un método de cómo se puede utilizar en
un tablero de ajedrez de 4x4, 4 reinas sin que se
eliminen. Generaliza dicho método para que se
ejecuten n reinas en un tablero de nxn.
40Actividad
41Prolog
- Es un lenguaje de programación con paradigma de
programación lógica. Viene del acrónimo de
PROgamming LOGic. - Basa su funcionamiento en lógica de primer orden.
Utiliza el concepto de predicados lógicos para
representar hechos y representar reglas de
inferencia.
42Prolog
- Prolog es un lenguaje interpretado.
- En este curso se utiliza la herramienta swiprolog
dado que se puede ejecutar en Windows y es
software libre. - Los programas se pueden hacer directamente sobre
la shell o bien, a través de un editor de Texto
plano.
43Prologo
- Todo sistema experto se compone de dos elementos
principales - La base de conocimientos (hechos)
- El motor de inferencia (reglas)
- Generalmente las reglas son la interfaz que tiene
la aplicación hacia el usuario para realizar
preguntas.
44PROLOG
- Hechos
- las aves vuelan
- los pingüinos no vuelan
- "pichurri" es un ave
- "sandokan" es un perro
- "alegría" es un ave
- Los hechos pueden ser simples o complejos
45PROLOG
- Comentarios en Prolog
- Base de Hechos
- volar(ave). Sería regla?
- novolar(pingüinos). omitir dicho predicado
- ave("pichurri).
- perro(wendo).
- ave("alegría).
46PROLOG
- Reglas o Restricciones
- una mascota vuela si es un ave y no es un
pingüino - Preguntas
- "pichurri" vuela ?
- qué mascotas vuelan ?
47Prolog
- Reglas
- vuela(X)- ave(X).
- Mascotavuela(X)- ave(X).
- Preguntas desde el shell
- vuela(pichurri)
- Mascotavuelan(X)
48PROLOG
- Términos constantes (a), variables (X),
funciones (f(X, Y )) - pepe, juan, Cliente, cliente-de(X, Y )
- Fórmulas atómicas predicados definidos sobre
términos - tipo-cliente(X,bueno)
49PROLOG
- Fórmulas bien formadas (WFF fórmulas atómicas
unidas por conectivas (, v, ) y cuantificadas
(1A universal, 1B existencial) - 1AX, 1BZ cliente(X) compra(X, Z) caro(Z) ?
tipo-cliente(X, bueno) - abuelo(X,Y) - padre(X,Z), padre(Z,Y).
- 1AX, Y 1BZ padre(X, Z) padre(Z, Y) ? abuelo(X,
Y )
50PROLOG
- abuelo(X,Y) - padre(X,Z), madre(Z,Y).
- abuelo(X,Y) - padre(X,Z), padre(Z,Y).
- abuelo(X, Y) (pepe, juan), (pepe, ana), ,
(luis, javier) - progenitor(X, Y ) - padre(X, Y ).
- progenitor(X, Y ) - madre(X, Y ).
51PROLOG
- abuelo(X,Y) - padre(X,Z), madre(Z,Y).
- abuelo(X,Y) - padre(X,Z), padre(Z,Y).
- abuelo(X,Y) - padre(X,Z), progenitor(Z,Y).
- hechos A. (A átomo)
- reglas A - A1, ..., An. (ngt0, y A, A1, ..., An
átomos)
52PROLOG
- Hechos
- padece(jon, gripe).
- padece(jon, hepatitis).
- padece(ana, gripe).
- padece(carlos, alergia).
- es-síntoma(fiebre, gripe).
- es-síntoma(cansancio, gripe).
- es-síntoma(estornudos, alergia).
- suprime(paracetamol, fiebre).
- suprime(antihistamínico, estornudos).
53PROLOG
- Reglas
- debe-tomar(Per, Far) - padece(Per, Enf),
alivia(Far, Enf). - alivia(Far, Enf) - es-síntoma(Sin, Enf),
suprime(Far, Sin). - Preguntas
- ? padece(carlos, gripe).
- ? padece(jon, Z).
- ? alivia(paracetamol, gripe).
54PROLOG
- ? alivia(X, gripe).
- ? debe-tomar(Y, antihistamínico).
- ? alivia(X, Y).
- ? suprime(X, fiebre), suprime(X, estornudos).
- Qué devuelve cada pregunta como resultado?
55PROLOG
- hija (A, B) lt- mujer (A), padre (B, A).
- hija (A, B) lt- mujer (A), madre (B, A).
- A continuación se muestra un programa completo en
PROLOG - declaraciones
- padrede('juan', 'maria').
- padrede('pablo', 'juan').
56PROLOG
- padrede('pablo', 'marcela').
- padrede('carlos', 'debora').
- Reglas
- A es hijo de B si B es padre de A hijode(A,B)
- padrede(B,A). - abuelode(A,B) - padrede(A,C), padrede(C,B).
- hermanode(A,B) - padrede(C,A) , padrede(C,B), A
\ B. - familiarde(A,B) - padrede(A,B).
57PROLOG
- familiarde(A,B) - hijode(A,B).
- familiarde(A,B) - hermanode(A,B).
- consultas
- juan es hermano de marcela?
- ?- hermanode('juan', 'marcela').
- Yes
- ?- hermanode('carlos', 'juan'). No
- ?- abuelode('pablo', 'maria'). Yes
- ?- abuelode('maria', 'pablo'). no
58PROLOG
- unificación con evaluación.
- ?- X is 35.
- X 8
- unificación simbólica
- ?- X 35.
- X 35
59PROLOG
- comparación con evaluación
- ?- 35 26.
- yes
- comparación simbólica.
- ?- 35 26.
- no
- ?- 35 35.
- yes
60PROLOG
- Los programas en PROLOG se definen a través de
Algoritmos, Lógica y Control. - En caso de que una consulta de más de un
resultado, el prompt no aparece en la shell. Se
puede utilizar el operador . Para terminar el
resultado, o bien, el operador para continuar
con los emparejamientos de resultados. - Se pueden combinar preguntas para obtener
respuestas más exactas.
61PROLOG
- Combinación de preguntas
- legusta(pepe, pesca).
- legusta(maria, bailar).
- legusta(ana, pesca).
- legusta(pepe, musica).
- legusta(maria, musica).
- legusta(ana, bailar).
- preguntas
62PROLOG
- Le gusta la música a Pepé y a María?
- ?_ legusta(pepe,musica), legusta(maria, musica).
- Le gusta bailar a Pepé o le gusta la música a
maria? - ?_ legusta(pepe,bailar) legusta(maria, musica).
63Prolog
- Le gusta bailar a Pepé y a maria no le gusta la
música? - legusta(pepe,bailar), not(legusta(maria,musica)).
64PROLOG
- El portal de redes sociales del ITM desea diseñar
un Sistema Experto para encontrar la pareja ideal
de cada estudiante si es que existiese. - Para lograr esto, se tienen en la base de
conocimientos registrados los gustos de cada
usuario (color de ojos, altura, complexión,
carro, etc.). Se da un punto por cada
coincidencia.
65PROLOG
- Diseñar la regla o reglas que determinen la mejor
pareja de cada usuario. (Se deben tener al menos
2 hombres y 2 mujeres con 5 gustos c/u). - Probar su desarrollo a través de las reglas
predefinidas.
66PROLOG
- Se puede aplicar recursividad en PROLOG además de
que algunos programas en programación
estructurada pueden ser implementados. - Sucesiones
- sucesor(1,2).
- sucesor(2,3).
- sucesor(3,4).
- sucesor(4,5).
- sucesor(5,6).
67PROLOG
- sucesor(6,7).
- suma(1,X,R)-sucesor(X,R).
- suma(N,X,R)-sucesor(M,N), suma(M,X, R1),
sucesor(R1, R). - Como se crearía una consulta?
- Qué es lo que el programa haría?
68PROLOG
- Ejemplo
- entrada(paella).
- entrada(gazpacho).
- entrada(consome).
- carne(filete_de_cerdo).
- carne(pollo_asado).
- pescado(trucha).
- pescado(bacalao).
- postre(flan).
69PROLOG
- postre(nueces_con_miel).
- postre(naranja).
- calorias(paella, 200).
- calorias(gazpacho, 150).
- calorias(consome, 300).
- calorias(filete_de_cerdo, 400).
- calorias(pollo_asado, 280).
- calorias(trucha, 160).
- calorias(bacalao, 300).
70PROLOG
- calorias(flan, 200).
- calorias(nueces_con_miel, 500).
- calorias(naranja, 50).
- plato_principal(P)- carne(P) pescado(P).
- comida(Entrada, Principal, Postre)-
entrada(Entrada), plato_principal(Principal),
postre(Postre). - valor(Entrada, Principal, Postre, Valor)-
calorias(Entrada, X), calorias(Principal, Y),
calorias(Postre, Z), sumar(X, Y, Z, Valor).
71PROLOG
- comida_equilibrada(Entrada, Principal, Postre)-
comida(Entrada, Principal, Postre),
valor(Entrada, Principal, Postre, Valor),
menor(Valor, 800). - sumar(X, Y, Z, Res)- Res is X Y Z.
- menor(X, Y)- X lt Y.
- dif(X, Y)- X \Y.
72Prolog
- Encontrar Cuántas calorías tiene la combinación
paella, trucha, naranja? Qué comida que tiene
cónsome de entrada es la más balanceada?
73PROLOG
- Se pueden definir funciones recursivas como el
factorial - fac(0,1).
- fac(N,F) - N gt 0, M is N - 1, fac(M,Fm), F is N
Fm. - Cómo se expresa la serie de fibonnaci?
74Tarea
- Práctica Robots Lego
- Traer en conjunto 6 pilas tamaño AA
- Instalar el kit de desarrollo (pasar el jueves o
viernes por el disco).
75Qué es la Robótica?
- Es el área de la Inteligencia Artificial (IA) que
se encarga de los estudios de los robots. - La robótica no sólo incluye elementos de IA sino
también de mecatrónica, computación y otras áreas
de la Ingeniería.
76Qué es un Robot?
- Deriva de la palabra checa robota.
- Literalmente significa esclavitud, servidumbre
forzada - Máquina mecánica o autómata capaz de interactuar
con el entorno y tomar decisiones propias
77Características de un Robot
- Diseñados para sustituir al humano en algunas
tareas.
78Características de un Robot
- Capaces de actuar en función de la información
recibida del mundo real.
79Características de un Robot
- Los robots se clasifican según su forma en
- Androides Imitan la forma humana
- Móviles Se desplazan mediante ruedas
- Zoomórficos Con forma de animales
- Poliarticulados Con partes móviles y poco grado
de libertad.
80Características de un robot
- Un robot se debe componer de
- Mecanismo para desplazarse
- Mecanismo para percibir el mundo exterior
- Mecanismo para interactuar con el entorno
81Funcionamiento de un Robot
- Mecanismo habitual de 3 ruedas
- 2 ruedas motorizadas, con motores independientes.
- 1 rueda muerta para soportar el equilibrio.
82Funcionamiento de un Robot
- Para hacer girar el robot, se modificará la
velocidad y el sentido del giro de cada uno de
los motores por separado. - Se puede captar el entorno a través de los
sensores del robot - Choque Detecta colisiones físicas del robot.
83Funcionamiento de un robot
- Sonar Calcula la distancia del robot a otros
objetos del entorno. - Infrarrojos Detección de colores, etc.
- Cámaras Obtiene los datos mediante visión.
84Funcionamiento de un Robot
- Inicializar el robot Situarlo en el mundo.
- Recibir información por los sensores.
- Procesar la información recibida.
- Desplazar/Activar partes del robot.
85Problemas Principales de un Robot
- Localización Dónde estoy?
- Respuesta de los sensores Hay cuchara?
- Respuesta del sistema Todo ok?
86 Ejemplos de Robots
Robot Lego RCX
87Ejemplos de Robots
88Robot Lego Mindstorms NXT
- Es un Robot construido por la marca de juegos
Lego. - Se caracteriza por que este robot se puede armar
en diversos modelos, además de que es económico
(250 USD), potente y muy versátil. No es un
simple juguete.
89Robot Lego Mindstorms NXY
90NXT
- La unidad central de proceso contiene
- 4 entradas (digital y analógica)
- 3 salidas (soporte para los motores)
- Pantalla LCD Monocromática de 100x64 píxeles
91NXT
- 4 Botones de control
- Sonido
- Interfaces USB y Bluetooth
92Sensores
Tacto
Luz
Servomotor
Ultrasónico
Sonido
93Procesador
- Atmel 32-bit ARM, AT91SAM7S256
- 256 KB FLASH
- 64 KB RAM
- 48 MHz
94Coprocesador
- Atmel 8-bit AVR processor, ATmega48
- 4 KB FLASH
- 512 Byte RAM
- 8 MHz
95Comunicación Bluetooth y USB
- BlueCoreTM 4 v2.0 EDR System
- Soporta el Serial Port Profile (SPP) para
emulación de puertos de comunicación. - USB 2.0 Full speed com port (12 Mbit/s).
96Motores
- Contador de rotaciones.
- Rotación de 360 grados.
- Las posiciones son relativas.
- La velocidad máxima es de 200 RPM.
97Otras características
- Utiliza 6 pilas AA.
- Utiliza cables RJ-12 parecidos a los telefónicos
(aplanados). - Algunos fabricantes realizan otros tipos de
piezas y sensores.
98Herramientas de Programación
- LabVIEW NEXT-G
- Microsoft Robotics Studio
- Otras
- NXC (and NBC)
- Robot C
- pbLua
- Java
99Programación
- Basado en un ambiente gráfico de desarrollado
(programación en bloques) desarrollado por
National Instruments los desarrolladores de
LabView. - Permite el desarrollo rápido de aplicaciones.
Útil para niños.
100Programación
- Está muy limitado para realizar programas más
complejos, por lo que se utilizan otros entornos. - A continuación se listan los pasos para programar
una aplicación en este Robot
101Programación
- Se arma el modelo de robot (se pueden seguir los
pasos indicados en la guía o se desarrolla por
cuenta propia). - Se realiza la programación en bloques.
- Se baja el programa al Robot
102Programación
- Se corre el programa en el Robot y se ven los
resultados obtenidos. - No se cuenta con un emulador para probar los
desarrollos lo que dificulta un poco el proceso
de desarrollo.
103Entorno de Desarrollo
Construcción
Programación
Ejecución
104Entorno de Desarrollo
Guía
Zona de Programación
Bloques
Propiedades
105Otros entornos
- NXC (Not eXactly C) es un lenguaje similar NQC,
el cual es la forma más popular de programar el
RCX. Está basado en el ensamblador NBC (Next
Byte Code). - RobotC es un entorno no gratuito desarrollado por
CMU.
106Programación con NXC
- Se tienen algunas limitaciones como
- No existe pila
- Memoria Limitada
- Limitado a 256 procesos (task)
107Programación con NXC
- include "NXCDefs.h
- task main()
- SetSensor( IN_1, SENSOR_TOUCH )
- while( true )
- if( Sensor( IN_1 ) )
- PlayToneEx(440, 100, 3, false)
- TextOut( 0, LCD_LINE1, "TOUCHING!")
- while( Sensor( IN_1 ) )
-
-
108Programación con NXC
- TextOut( 0, LCD_LINE1, "---------")
- while( !Sensor( IN_1 ) )
-
109Construcción de Pistas de Robots
110Detalles de la Pista
111Competencia de autos
112Evaluación de Obstáculos
113Actividad
- Construir un robot que permita correr en un
circuito. Ganará el robot que haga el recorrido
en el menor tiempo posible. - Construir un robot que pueda salir de un
laberinto o de un cuarto con obstáculos. - Construir un robot que permita cargar un objeto
como una pelota de un contenedor y dejar la misma
pelota en otra ubicación.
114LISP
- Creado por John McCartney en 1958. Viene del
acrónimo LISt Processing. - Su paradigma de programación es la programación
funcional por que todo se basa en el concepto de
función. - Su utilización en Inteligencia Artificial fue su
gran éxito.
115Introducción
- Los Componentes Básicos de LISP son átomos y
listas. - Los átomos pueden ser cualquier combinación de
letras como CASA, ITM, PIEDRA, etc. - Las listas son cualquier combinación de átomos
encerrados entre paréntesis. Se pueden tener
listas anidadas.
116Introducción
- Ejemplos de listas
- (Esta es una lista)
- (EstaEsOtraLista)
- (Lista (anidada))
- El vocablo término se utilizará para
identificar un elemento de una lista ya sea átomo
o sublista.
117Programación Funcional
- Está caracterizada por el principio funcional.
- El valor de una expresión depende sólo de los
valores de sus subexpresiones, si las tiene. - AB es simplemente la suma de A y B.
- Se excluye las asignaciones
118Programación Funcional
- La mayoría de los lenguajes que lo implementan
son impuros. - Permiten asignaciones.
- Estilo de programación funcional.
- Los usuarios no deben preocuparse por el manejo
de memoria. - Ciertas operaciones asignan espacios de
almacenamiento en el momento necesario.
119Programación Funcional
- El almacenamiento que se vuelve inaccesible se
libera. - Recolección de basura.
- Las funciones son valores de primera clase.
- Tienen la misma jerarquía que cualquier otro
valor.
120Programación Funcional
- Puede ser el valor de una expresión.
- Puede pasarse como argumento.
- Puede colocarse en una estructura de datos.
121Programación Funcional
- Lenguajes de Paradigma Funcional.
- LISP
- SCHEME
- COMMON LISP
- ML
- Haskell
122Programación Funcional
- Una función matemática es un mapeo de miembros de
un conjunto llamado dominio, hacia otro conjunto
llamado contra-dominio. - Toda definición de una función debe incluir de
manera explicita o implícita - Dominio (Puede ser el resultado de un producto
cruz) - Contra-dominio
- Mapeo
123Programación Funcional
- Una función regresa solo un valor del
contra-dominio para cada valor del dominio. - Es función?
124Programación Funcional
- El orden de evaluación de sus expresiones de
mapeo, es controlada por expresiones recursivas y
condicionales.
125Programación Funcional
- Siempre definen los mismos valores, para un mismo
conjunto de valores. - Una función define un valor.
- No una serie de operaciones sobre valores de una
memoria, para producir dicho valor. - Esto implica que no hay variables en el sentido
estricto de los lenguajes imperativos.
126Programación Funcional
- Variables que representan una localidad de
memoria. - Definición de funciones
- Nombre.
- Lista de parámetros entre paréntesis.
- Expresión de mapeo.
- cubo(x)xxx
- Donde x es un número real.
127Programación Funcional
- Los lenguajes funcionales, no tienen una
construcción explícita para ciclos tal como FOR,
WHILE, etc., - Utilizan una técnica de programación conocida
como recursividad. - Aplicar una función como parte de la definición
de esa misma función.
128Programación Funcional
- Debe existir una condición terminal, con el
objeto de que la función se bifurque hacia una
resolución no recursiva en algún punto. - De lo contrario, la función entra en un bucle
infinito y nunca finaliza. - Los lenguajes suelen ser tradicionalmente
interpretados. Existen solo algunas opciones para
compilar programas.
129Programación Funcional
- Por qué no todo mundo usa LISP?
- Sintaxis única.
- LISP ? Lots of Silly Parenthesis (Montón de
paréntesis tontos) - Los paréntesis permiten uniformar la sintaxis.
130Programación Funcional
- Facilita la manipulación de los programas como
datos. - No existen los tipos de datos.
- Parte de los errores semánticos permanecen
ocultos hasta la ejecución. - Implantaciones iniciales ineficientes.
131Estructuras
- Átomos.
- Símbolos de Lisp
- Hacen la función de un identificador.
- Las constantes numéricas también son átomos.
- Listas.
- Estructura de datos.
- Su procesamiento rara vez requiere inserciones o
eliminaciones.
132Programación Funcional
- Listas.
- Se especifican delimitando sus elementos entre
paréntesis. - Listas simples.
- Todos sus elementos son átomos.
- (A B C D)
- Listas anidadas.
- Sus elementos pueden ser átomos o sublistas.
- (A (B C) D (E (F G)))
133Programación Funcional
- Listas.
- Internamente se implementan como listas simples
enlazadas. - Cada nodo contiene dos punteros y representa un
elemento. - Un nodo para un átomo contiene su primer puntero
apuntando hacia alguna representación del átomo.
134Programación Funcional
- Un nodo para una sublista contiene su primer
puntero apuntando hacia el primer nodo de la
sublista. - En cualquier caso, el segundo puntero de un nodo,
apunta hacia el nodo siguiente. - A continuación se describen las listas y sus
elementos de forma gráfica.
135Programación Funcional
- (A B C D)
- (A (B C) D (E (F G)))
136Programación Funcional
- Cómo se usa LISP en IA?
- Se pueden codificar listas que pueden
representarnos hechos, se pueden codificar reglas
de inferencias en base a lista por lo que se
puede hacer Programación Lógica. - El motor de inferencia es implementado por el
usuario pudiendo considerar más tipos de lógicas.
137Programación Funcional
- El compilador/intérprete de LISP que se utilizará
en este curso es el newLisp. - newLISP es un proyecto de software libre que cuya
característica principal es que puede correr en
ambientes gráficos y a su vez generar
representaciones visuales.
138Operaciones Básicas
- A continuación se describen las operaciones
básicas sobre LISP. - La Evaluación de expresiones se realiza a través
del Top Level que es muy semejante al shell visto
en Prolog. - Se escriben expresiones Lisp en el Top-Level, y
el sistema despliega sus valores.
139Operaciones Básicas
- El prompt gt indica que Lisp está esperando a que
una expresión sea escrita. - La expresión es evaluada al pulsar enter.
gt 1 1 gt
140Operaciones Matemáticas
- Las operaciones matemáticas son básicas para
poder implementar el paradigma funcional, a
continuación se describen la forma de realizar
operaciones matemáticas. - Se desea evaluar la siguiente expresión
aritmética ( 2 3)
gt ( 2 3) 5 gt
141Operaciones Matemáticas
- es el operador / función.
- Los números 2 y 3 son sus argumentos.
- Notación prefija.
- Sumar tres parámetros en notación infija implica
Utilizar dos veces el operador suma 235
142Operaciones Matemáticas
- Sumar tres parámetros en notación prefija
- Una sola llamada a la función, con tres
parámetros ( 2 3 5) - es una función
- ( 2 3) es una llamada a la función.
gt ( 2 3 5) 10 gt
143Operaciones Matemáticas
- Cuando LISP evalúa una llamada a alguna función,
lo hace en dos pasos - Los argumentos de la llamada son evaluados de
izquierda a derecha. En este caso los valores de
los parámetros serán, 2 y 3 respectivamente. - Los valores de los argumentos son pasados a la
función nombrada por el operador. En este caso la
función que regresa 5.
144Operaciones Matemáticas
gt () 0 gt ( 2) 2 gt ( 2 3) 5 gt ( 2 3 5) 10 gt
145Operaciones Matemáticas
- Como los operadores pueden tomar un número
variable de argumentos, es necesario utilizar los
paréntesis para indicar donde inicia y donde
termina una expresión. - Las expresiones pueden anidarse. Por ejemplo
(7-1)/(4-2)
gt (/ (- 7 1)(- 4 2)) 3
146Operaciones Matemáticas
- Si alguno de los argumentos es una llamada de
función, ésta será evaluada acorde a las reglas. - Los argumentos de la llamada son evaluados de
izquierda a derecha. - Los valores de los argumentos son pasados a la
función nombrada por el operador. - Evaluar (/ (- 7 1) (- 4 2))
147Operaciones Matemáticas
- Lisp evalúa el primer argumento de izquierda a
derecha (-7 1). - 7 es evaluado como 7 y 1 como 1.
- Estos valores son pasados a la función - que
regresa 6. - El siguiente argumento (- 4 2) es evaluado.
148Operaciones Matemáticas
- 4 es evaluado como 4 y 2 como 2.
- Estos valores son pasados a la función - que
regresa 2. - Los valores 6 y 2 son pasados a la función / que
regresa 3.
149Operaciones Matemáticas
- Un operador que no sigue la regla de evaluación
es quote ( ) - La regla de evaluación de quote es
- No hacer nada, solo desplegar lo que el usuario
tecleó. - El operador quote es una forma de evitar que una
expresión sea evaluada.
150Operaciones Matemáticas
gt (quote ( 2 3)) ( 2 3) gt ( 2 3) ( 2 3)
- Tipos de átomos
- Entero Se escribe como una secuencia de dígitos.
Ejemplo 256. - Cadena Secuencia de caracteres que se delimita
por comillas. Ejemplo Carpe Diem.
151Operaciones Matemáticas
- Enteros y cadenas se evalúan a ellos mismos.
- Los símbolos son palabras. Normalmente se evalúan
como si estuvieran escritos en mayúsculas,
independientemente de como fueron tecleados. - Los símbolos por lo general no evalúan a si
mismos. Es necesario referirse a ellos.
gt Amarone AMARONE
152Operaciones Matemáticas
- Las listas se representan como cero o más
elementos entre paréntesis. - Los elementos pueden ser de cualquier tipo,
incluidas las listas. - Se debe usar quote con las listas, pues de otra
forma Lisp las tomaría como una llamada a
función.
153Operaciones Matemáticas
- Un sólo quote protege a toda la expresión,
incluidas las expresiones en ella. - Se puede construir listas usando el operador list
que es una función, y por lo tanto, sus
argumentos son evaluados.
gt (Mis 2 "ciudades") (MIS 2 "CIUDADES") gt (La
lista (a b c) tiene 3 elementos) (LA LISTA (A B
C) TIENE 3 ELEMENTOS)
154Operaciones Matemáticas
- Estética minimalista y pragmática
- Los programas Lisp se representan como listas.
- Un programa Lisp puede generar código Lisp. Por
eso es necesario quote.
gt (list mis ( 4 2) "colegas") (MIS 6 COLEGAS)
155Operaciones Matemáticas
- Si una lista es precedida por el operador quote,
la evaluación regresa la misma lista. - En otro caso, la lista es evaluada como si fuese
código.
gt (list ( 2 3) ( 2 3)) (( 2 3) 5)
156Operaciones Matemáticas
- En Lisp hay dos formas de representar la lista
vacía - Con un par de paréntesis
- Con el símbolo NIL.
gt () NIL gt NIL NIL
157Operaciones Matemáticas
- La función cons construye listas.
- Si su segundo argumento es una lista, regresa una
nueva lista con el primer argumento agregado en
el frente.
gt (cons a (b c d)) (A B C D) gt (cons a (cons
b nil)) (A B)
158Operaciones Matemáticas
- El segundo ejemplo es equivalente a
- Las funciones primitivas para accesar los
elementos de una lista son car y cdr. - El car de una lista es su primer elemento (el más
a la izquierda) .
gt (list a b) (A B)
159Operaciones Matemáticas
- El cdr es el resto de la lista (menos el primer
elemento). - En realidad en newLisp car se hace a través de
first y cdr a través de rest.
gt (first '(a b c)) a gt (rest '(a b c)) (b c)
160Estructuras de Control
- Ya se mencionó que no existen en LISP estructuras
de control semejantes a los lenguajes
procedimentales u orientado a objetos. - Un Predicado es una función cuyo valor de regreso
se interpreta como un valor de verdad (verdadero
o falso). - Es común que el símbolo de un predicado termine
en p.
161Estructuras de Control
- Como nil juega dos roles en Lisp, las funciones
null (lista vacía) y not (negación) hacen
exactamente lo mismo - La condicional (if) Normalmente toma tres
argumentos - una expresión a probar (test)
gt (null nil) T gt (not nil) T
162Estructuras de Control
- una expresión entonces (then) que se evalua si
test es T. - una expresión si no (else) que se evalua si test
es NIL.
gt (if (list? (a b c d)) ( 1 2) ( 3 4)) 3 gt (if
(list? 34) ( 1 2) ( 3 4)) 7
163Estructuras de Control
- La condicional (if) es una macro no una función.
- Los argumentos de una función siempre se evalúan.
If solo evalúa dos test y (then o else) - Si bien el default para representar verdadero es
T, todo excepto nil cuenta como verdadero en un
contexto lógico
gt (if 27 1 2) 1 gt (if nil 1 2) 2
164Estructuras de Control
- Los operadores lógicos (and, or) toman cualquier
número de argumentos, pero solo evalúan los
necesarios para decidir que valor regresar. - Si todos los argumentos son verdaderos
(diferentes de nil), entonces and regresa el
valor del último argumento.
gt (and t ( 1 2)) 3
165Estructuras de Control
- Si uno de los argumentos de and es falso, ninguno
de los operadores siguientes es evaluado, y
regresa nil. - De manera similar, or se detiene en cuanto
encuentra un elemento verdadero. - Los operadores lógicos tampoco se consideran
funciones, sino macros.
gt (or nil nil ( 1 2) nil) 3
166Funciones de Predicados
- Es posible definir nuevas funciones con defun que
toma normalmente tres argumentos - Un nombre.
- Una lista de parámetros
- Una o más expresiones que conforman el cuerpo de
la función.
167Funciones
- El primer argumento de define indica que el
nombre de la función definida será area. - Los demás argumentos allí se muestran.
gt (define (area base altura) ( base
altura)) (lambda (base altura) ( base altura)) gt
(area 2 3) 6
168Funciones
- Cuando la variable representa el argumento de una
función, se conoce como parámetro. - Un símbolo usado de esta forma se conoce como
variable. - El resto de la definición indica lo que se debe
hacer para calcular el valor de la función.
169Funciones
- Símbolos y listas deben protegerse con quote para
ser accedidos. - Una lista debe protegerse porque de otra forma es
procesada como si fuese código. - Un símbolo debe protegerse porque de otra forma
es procesado como si fuese una variable.
170Funciones
- La definición de una función corresponde a la
versión generalizada de una expresión Lisp. - La siguiente expresión verifica si la suma de 1 y
4 es mayor que 3
gt (gt ( 1 4) 3) T
171Funciones
- Substituyendo los números partículares por
variables, podemos definir una función que
verifica si la suma de sus dos primeros
argumentos es mayor que el tercero
gt (define (suma-mayor-que x y z) (gt ( x y)
z)) (lambda (x y z) (gt ( x y) z)) gt
(suma-mayor-que 1 4 3) true
172Funciones
- Lisp no distingue entre programa, procedimiento y
función. - Si se desea considerar una función en particular
como main, es posible hacerlo, pero cualquier
función puede ser llamada desde el top-level. - Entre otras cosas, esto significa que posible
probar un programa, pieza por pieza, conforme se
va escribiendo.
173Funciones
- Programación incremental (bottom-up).
- Las funciones que hemos definido hasta ahora,
llaman a otras funciones para hacer una parte de
sus cálculos. Por ejemplo suma-mayor-que llama a
las funciones y gt. - Una función puede llamar a cualquier otra
función, incluida ella misma.
174Funciones
- Una función que se llama a si misma se conoce
como recursiva. - Recordar que las funciones recursivas tienen
definidas un paso base para poder salir de la
recursión y un paso recursivo. - A continuación se muestra un ejemplo de la
función de Fibonnaci, definir la función
multiplicación de manera recursiva (utilizando
sumas).
175Funciones
- Función Fibonacci
- (define (fibonacci n)
- (if (lt n 2)
- 1
- ( (fibonacci (- n 1))
- (fibonacci (- n 2)))))
- gt_ (fibonacci 10)
- 89
176Funciones
- Metáfora de la recursividad procesos que se van
resolviendo. - Un estudiante está interesado en Lisp.
- Va a la biblioteca y el proceso que utilizaría
para examinar un documento es el siguiente - Obtener una copia del documento que le interesa.
177Funciones
- Buscar en él la información relativa a Lisp.
- Si el documento menciona otros documentos que
puede ser útiles, examinarlos. - También se deben tomar en cuenta algunos factores
no funcionales.
178Funciones
- Uno de los operadores más comunes en Lisp es let,
que permite la creación de nuevas variables
locales. - Una expresión let tiene dos partes
- Primero viene una lista de expresiones definiendo
las nuevas variables locales, cada una de ellas
con la forma (variable expresión).
gt (let ((x 1)(y 2)) ( x y)) 3
179Funciones
- Cada variable es inicializada con el valor que
regrese la expresión asociada a ella. En el
ejemplo anterior se han creado dos variables, x e
y, con los valores 1 y 2 respectivamente. - Esas variables son válidas dentro del cuerpo de
let.
180Funciones
- Una expresión let tiene dos partes
- Después de la lista de variables y valores, viene
el cuerpo de let constituido por una serie de
expresiones que son evaluadas en orden. - En el ejemplo, sólo hay una llamada a ..
181Funciones
- En newLisp el operador de asignación más común es
define. - Se puede usar para asignar valores a cualquier
tipo de variable.
gt (define glob 2000) 2000 gt (let ((n 10))
(define n 2) n) 2
182Funciones
- Cuando el primer argumento de setf es un símbolo
que no es el nombre de una variable local, se
asume que se trata de una variable global.
gt (define x (a b c)) (A B C)
183 GUI en LISP
- (load (append (env "NEWLISPDIR")
"/guiserver.lsp")) - (gsinit)
- (gsframe 'Mixer 200 200 400 300 "Mixer")
- (gsset-resizable 'Mixer nil)
- (gsset-border-layout 'Mixer)
- (gspanel 'SliderPanel)
- (gsset-grid-layout 'SliderPanel 3 1)
- (gspanel 'RedPanel)
- (gspanel 'GreenPanel)
184GUI en LISP
- (gspanel 'BluePanel)
- (gslabel 'Red "Red" "left" 50 10 )
- (gslabel 'Green "Green" "left" 50 10 )
- (gslabel 'Blue "Blue" "left" 50 10 )
- (gsslider 'RedSlider 'slider-handler
"horizontal" 0 100 0) - (gsslider 'GreenSlider 'slider-handler
"horizontal" 0 100 0) - (gsslider 'BlueSlider 'slider-handler
"horizontal" 0 100 0)
185GUI en LISP
- (gslabel 'RedSliderStatus "0" "right" 50 10)
- (gslabel 'GreenSliderStatus "0" "right" 50 10)
- (gslabel 'BlueSliderStatus "0" "right" 50 10)
- (gsadd-to 'RedPanel 'Red 'RedSlider
'RedSliderStatus) - (gsadd-to 'GreenPanel 'Green 'GreenSlider
'GreenSliderStatus) - (gsadd-to 'BluePanel 'Blue 'BlueSlider
'BlueSliderStatus) - (gsadd-to 'SliderPanel 'RedPanel 'GreenPanel
'BluePanel)
186GUI en LISP
- (gscanvas 'Swatch)
- (gslabel 'Value "")
- (gsset-font 'Value "Sans Serif" 16)
- (gsadd-to 'Mixer 'SliderPanel "north" 'Swatch
"center" 'Value "south") - (gsset-visible 'Mixer true)
- (set 'red 0 'green 0 'blue 0)
- (gsset-color 'Swatch (list red green blue))
- (gsset-text 'Value (string (list red green
blue)))
187GUI en LISP
- (define (slider-handler id value)
- (cond
- (( id "MAINRedSlider")
- (set 'red (div value 100))
- (gsset-text 'RedSliderStatus (string red)))
- (( id "MAINGreenSlider")
- (set 'green (div value 100))
- (gsset-text 'GreenSliderStatus (string green)))
188GUI en LISP
- (( id "MAINBlueSlider")
- (set 'blue (div value 100))
- (gsset-text 'BlueSliderStatus (string blue)))
- )
- (gsset-color 'Swatch (list red green blue))
- (gsset-text 'Value (string (list red green
blue)))) - (gslisten)
189GUI en LISP
- Uso de Bibliotecas de Windows
- (import "user32.dll" "MessageBoxA")
- (MessageBoxA 0 "Hola Mundo!"
- "Ejemplo de GUI" 0)
- Se pueden crear DLLs em lenguajes como C y
poder utilizarlo em funciones más complejas.
190Entradas y Salidas
- Para la definición de salidas se puede utilizar
la función print. - La función time devuelve el tiempo en que tarda
una función en evaluarse.
gt (print ( 2 3 4 1)) 1010 gt ( ( 2 3) (/ 3 2)
9) 16 gt ( (print ( 2 3)) (print (/ 3 2))
(print 9)) 6 1 9 16 gt time (promedio 1 2) 0
191Entradas y Salidas
- Se puede guardar programas con la extensión .lsp
para después poderlos ejecutar. - A continuación se muestra una tabla con las
principales funciones definidas en la mayoría de
los dialectos de LISP.
gt (load f/myfile.lisp") Ejecuta todo el
script gt (read-file msgbox.lsp) Visualiza todo
el script
192Funciones
193Más de LISP
- imprimir los primeros 10 números de fibonacci
- (for (n 1 10)
- (println n " " (fibonacci n)))
- (max 1.1 43 23 12 -1 53 4 32) Cuanto da?
- Qué hacen?
- (directory "/")
- (exit)
194Funciones
- Para poder operar aritméticamente con dobles se
ocupan las funciones add, sub, mul y div. - La función list? Permite saber si un argumento es
un lista o no. - Null? Permite saber si una lista está vacía o no.
- La función symbol? Permite determinar si un
argumento es un símbolo o no.
195Funciones
- La función number? Permite saber si un argumento
es numérico o no. - Prototipo de función recursiva
- (define (suma lista)
- (if (null? lista) 0
- ( (first lista) (suma (rest lista)))
- ))
196Funciones
- Cómo se mandaría llamar la función para sumar
números del 1 al 5? - Realizar una función llamada longitud para
definir el número de argumentos que tiene una
lista. (longitud (1 2 4)). Devuelve 3 - Realizar una función llamada miembro para
encontrar la sublista a partir de la cual se
encuentra dicho elemento. (miembro 3 (1 2 3 4
5)) imprime como salida (3 4 5).
197Más de LISP
- (set 'alphabet "abcdefghijklmnopqrstuvwxyz")
- (upper-case alphabet) ?
- (set 'x ( 2 2 )) ?
- (set 'y '( 2 2)) ?
- (dotimes (c 10)
- (println c " por 3 es " ( c 3)))
198Más de LISP
- Ejemplo de un switch
- (if
- (lt x 0) (set 'a "imposible")
- (lt x 10) (set 'a "pequeño")
- (lt x 20) (set 'a "medio")
- (gt x 20) (set 'a "largo")
- )
199Más de LISP
- (set 'counter 1)
- (dolist (i (sequence -5 5))
- (println "Elemento " counter " " i)
- (inc 'counter))
- (dolist (i (sequence -5 5))
- (println "Element " idx " " i))
200Más de LISP
- Switch
- (case n
- (1 (println "un"))
- (2 (println "deux"))
- (3 (println "trois"))
- (4 (println "quatre")))
- (randomize (sequence 1 99))
- (dup 1 6)
201Más de LISP
- (set 'L '(a b c (d e (f g) h i) j k))
- (define (walk-tree tree)
- (cond (( tree '()) true)
- ((atom? (first tree))
- (println (first tree))
- (walk-tree (rest tree)))
- (true (walk-tree (first tree))
- (walk-tree (rest tree)))))
202LISP
- (define (walk-tree tree)
- (dolist (elmnt tree)
- (if (list? elmnt)
- (walk-tree elmnt)
- (println elmnt))))
- gt_ (walk-tree L)
203Bibliografía
- Rico, F. (2007) Programación Funcional, Material
de la Materia Lenguajes de Programación, UVAQ
Noviembre 2007. - Montes, M. y Villaseñor L. (2008) Fundamentos de
Inteligencia Artificial Métodos básicos de
solución de problemas, Instituto Nacional de
Astrofísica, Óptica y Electrónica, Puebla, México.
204Bibliografía
- Decker, R. y Hirshfield, S. (2001). Máquina
Analítica. Introducción a las Ciencias de la
Computación con Uso de Internet, Thomson, México.
Capítulo 9 Inteligencia Artificial pp. 295-325. - Hernández, V. (2007). Mapas Conceptuales La
gestión del Conocimiento en la Didáctica. Segunda
Edición, México Alfaomega.
205Bibliografía
- Montes, M. y Villaseñor L. (2008) Fundamentos de
Inteligencia Artificial Métodos básicos de
solución de problemas, Instituto Nacional de
Astrofísica, Óptica y Electrónica, Puebla, México.
206Preguntas, dudas y comentarios?