Programación en Prolog para Inteligencia Artificial

41
Programación en Prolog para Inteligencia Artificial Presentado por: Egdares Futch H.

description

Presentación para el congreso IEEE CONESCAPAN XXIII, Tegucigalpa, Honduras

Transcript of Programación en Prolog para Inteligencia Artificial

Page 1: Programación en Prolog para Inteligencia Artificial

Programación en Prolog para Inteligencia Artificial

Presentado por:

Egdares Futch H.

Page 2: Programación en Prolog para Inteligencia Artificial

Qué dicen los expertos sobre IA

El arte de crear máquinas con capacidad de realizar funciones que realizadas por personas requieren de inteligencia. (Kurzweil, 1990). El estudio de cómo lograr que las computadoras realicen tareas que por el momento, los humanos hacen mejor. (Rich, Knight, 1991). La rama de la ciencia de la computación que se ocupa de la automatización de la conducta inteligente (Luger y Stubblefield, 1993). Un campo de estudio que se enfoca a la explicación y emulación de la conducta inteligente en función de procesos computacionales (Schalkoff, 1990).

Page 3: Programación en Prolog para Inteligencia Artificial

Qué dice el Web sobre la IA

IA es la reproducción de los métodos de razonamiento o intuición humanosUsar modelos computacionales para simular comportamiento (humano) y procesos inteligentesIA es el estudio de las facultades mentales a través del uso de métodos computacionales

Comportamientointeligente

Humanos

Computadora

Page 4: Programación en Prolog para Inteligencia Artificial

¿ Qué es la IA ?

Disciplina que sistematiza y automatiza tareas intelectuales

para crear máquinas que:

Actúen como humanos

Actúen racionalmente

Piensen como humanos

Piensen racionalmente

Page 5: Programación en Prolog para Inteligencia Artificial

Actuar como humanos

IA es el arte de crear máquinas que realicen funciones que requieren de inteligencia cuando la realizan humanosMetodología: Elija una tarea intelectual en la que los humanos son mejores y ponga a una computadora a hacerloTest de Turing

•Demostrar un teorema•Jugar ajedrez•Planear operación•Diagnosticar enfermedad•Navegar en el edificio

Page 6: Programación en Prolog para Inteligencia Artificial

El caso del Ajedrez

Pro: “Decir que Deep Blue no piensa realmente sobre el

ajedrez es como decir que un avión realmente no vuela porque no aletea” – Drew McDermott

Contra: “El ajedrez es la Drosophila de la IA. Si los geneticistas

se hubieran aplicado de esa manera, tendríamos ahora moscas muy rápidas” – John McCarthy

Autista vs. Sentido común

Page 7: Programación en Prolog para Inteligencia Artificial

Pensar como humanos

La forma en la que la computadora hace sus funciones importaComparación de los pasos para hacer un razonamientoCiencias cognoscitivas teorías verificables de la mente humana

Pero, ¿queremos duplicar las imperfecciones humanas?

Page 8: Programación en Prolog para Inteligencia Artificial

Pensar y actuar racionalmente

Siempre tomar la mejor decisión con lo que se tenga a mano (tiempo, conocimiento, recursos)Conocimiento perfecto, recursos ilimitados razonamiento lógicoConocimiento imperfecto, recursos limitados racionalidad limitada

•Conexión a la economía, investigación de operaciones, y teoría de control•Pero ignora el rol de la conciencia, emociones, miedos, etc.

Page 9: Programación en Prolog para Inteligencia Artificial

Pensar (meditación de Feynman)

Todos conocemos la mente humana porque tenemos unaPensar no requiere instrucciones “Pensar no es más que hablarse a sí

mismo” dijo Richard. John contestó: “Trata de pensar en un engranaje…cómo te lo contaste?”

Page 10: Programación en Prolog para Inteligencia Artificial

Algunas características Frontera entre programación tradicional e IA

La IA es programación Frontera se mueve: cuando algo funciona ya no es IA La IA se ocupa de aquellos problemas para los que no existen

soluciones algorítmicas satisfactorias y de aquellos que requieren el manejo explícito del conocimiento

La IA se ocupa de tareas que, de momento, la gente realiza mejor Técnicas de la Inteligencia Artificial

Métodos generales de la computación+ técnicas específicas Enfoque algorítmico clásico da por hecho que se dispone de toda la

información necesaria para llegar a una solución óptima del problema abordado

En Inteligencia Artificial, las decisiones se basan en un conocimiento parcial que no garantiza encontrar el óptimo

La inteligencia consiste precisamente en saber sacar el máximo provecho a la información disponible para tratar de obtener el resultado deseado e.d compromiso entre exhaustividad del análisis y calidad del resultado

Las técnicas computacionales desarrolladas dentro de este marco metodológico son llamadas heurísticas

Page 11: Programación en Prolog para Inteligencia Artificial

Introducción a Prolog

Prolog es el lenguaje más difundido en la programación lógica. Algunas de sus características son: Prolog usa variables lógicas, las cuales

no son comparables a las de otros lenguajes. Los programadores las pueden usar como “blancos” en estructuras de datos que se llenan gradualmente mientras corre el proceso.

Page 12: Programación en Prolog para Inteligencia Artificial

…Más

La unificación es un método interno de manipulación de datos que pasa parámetros, retorna resultados, selecciona y construye estructuras de datos.

El modelo de control de flujo básico es la reevaluación (backtracking).

Las claúsulas de programa y los datos tienen la misma forma.

La forma relacional de los procedimientos hace posible definirlos de forma que sean “reversibles”

Page 13: Programación en Prolog para Inteligencia Artificial

…Más

Las claúsulas proveen de una forma conveniente para analizar casos e indeterminismo. Algunas veces se requiere de características que no pertenecen a la lógica pura.Un programa en Prolog puede ser considerado como una base de datos relacional que contiene reglas y hechos.

Page 14: Programación en Prolog para Inteligencia Artificial

Nuestro primer programa

/* En el zoologico */

elefante(jorge).elefante(maria).

panda(chi_chi).panda(ming_ming).

peligroso(X) :- dientes_grandes(X).peligroso(X) :- venenoso(X).

suponga(X, tiger) :- rayas(X), dientes_grandes(X), esFelino(X).suponga(X, zebra) :- rayas(X), esEquino(X).

Page 15: Programación en Prolog para Inteligencia Artificial

Prolog es un lenguaje declarativo

Las claúsulas muestran lo que es cierto sobre un problema, en vez de instrucciones de cómo lograr la solución.El sistema interno de Prolog usa las claúsulas para buscar como lograr la solución buscando en el espacio de soluciones.No todos los problemas pueden ser resueltos de esta forma, por lo que incorpora sentencias extralógicas.

Page 16: Programación en Prolog para Inteligencia Artificial

Ejemplo: concatenar listas A y B

list procedure cat(list a, list b){ list t = list u = copylist(a); while (t.tail != nil) t = t.tail; t.tail = b; return u;}

En un lenguaje imperativo

En un lenguaje declarativo

En un lenguaje funcionalcat(a,b) if b = nil then aelse cons(head(a), cat(tail(a),b))

cat([], Z, Z).cat([H|T], L, [H|Z]) :- cat(T, L, Z).

Page 17: Programación en Prolog para Inteligencia Artificial

Sintaxis completa de Prolog

Término

Constante VariableTérmino compuesto

Atomo Númeroalpha17pagojuan_perezgripe+=/=’12Q&A’

01571.6182.04e-27-13.6

gusta(juan, maria)libro(cervantes, quijote)f(x)[1, 3, g(a), 7, 9]-(+(15, 17), t)15 + 17 - t

XQuincenaEnfermedad_257_

Nombra un individuo Reemplaza un individuoque no puede ser nombradocuando el programa seescribe

Nombra un individuo quetiene partes

Page 18: Programación en Prolog para Inteligencia Artificial

Términos compuestos

padres(manchas, pongo, perdita)

Functor (un átomo) de arity 3. componentes (términos)

Se puede mostrar el término como un árbol

padres

perditapongo

manchas

Page 19: Programación en Prolog para Inteligencia Artificial

Estructura de los programas

Los programas consisten en procedimientosLos procedimientos consisten en claúsulasCada claúsula es un hecho o una reglaLos programas se ejecutan haciendo preguntas

Por ejemplo…

Page 20: Programación en Prolog para Inteligencia Artificial

Ejemplo

elefante(dumbo).elefante(jumbo).elefante(X) :- gris(X), mamifero(X), tieneTrompa(X).

Procedimiento para elefante

Predicado

Claúsulas

Regla

Hechos

Page 21: Programación en Prolog para Inteligencia Artificial

Ejemplo

?- elefante(jumbo).

yes

?- elefante(pongo).

no

Pregunta

Respuesta

Page 22: Programación en Prolog para Inteligencia Artificial

Interpretación de las claúsulas

Las claúsulas pueden leerse de forma declarativa o procedimental

H :- G1, G2, …, Gn.

“Se puede demostrar H ssi G1, G2, …, Gn también puedan demostrarse.”

“Para evaluar el procedimiento H, se ejecutan los procedimientos G1, G2, …, Gn previamente.”

Interpretacióndeclarativa

Interpretaciónprocedimental

Page 23: Programación en Prolog para Inteligencia Artificial

Unificación

Dos términos se unifican si pueden sustituirse variables de tal forma que los términos se hacen idénticos.El algoritmo de unificación procede por descenso recursivo de los dos términos. Constantes unifican si son idénticas Variables unifican con cualquier término,

incluyendo otras variables Términos compuestos unifican si el functor

y componentes unifican.

Page 24: Programación en Prolog para Inteligencia Artificial

EjemplosLos términos f(X, a(b,c)) y f(d, a(Z, c)) unifican.

Z c

ad

f

b c

aX

f

Los términos unifican si se sustituye d por X, y b se sustituye por Z. Esta sustitución también se denomina instanciación.

Page 25: Programación en Prolog para Inteligencia Artificial

EjemplosLos términos f(X, a(b,c)) y f(Z, a(Z, c)) se unifican.

Z c

aZ

f

b c

aX

f

Nótese que Z se comparte dentro del mismo término.

Page 26: Programación en Prolog para Inteligencia Artificial

EjemplosLos términos f(c, a(b,c)) y f(Z, a(Z, c)) no se unifican

Z c

aZ

f

b c

ac

f

Estos dos términos no pueden hacerse idénticos sustituyendo variables.

Page 27: Programación en Prolog para Inteligencia Artificial

ListasLas listas en Prolog son similares a las de otros lenguajes ya que se compone de términos de cualquier tamaño agrupados.La lista de largo 0 se llama nil, y se escribe [].La lista de largo n es [cabeza,cola], donde cola es una lista de largo n-1.

Page 28: Programación en Prolog para Inteligencia Artificial

Sintaxis de Prolog para listas

Nil se escribe [].La lista de n elementos t1, t2, …,tn se escribe así: [t1, t2, …,tn]

[X|[]] se escribe [X]

Para la lista [X|Z] , X es un átomo y Z es una lista, con la cabeza X removida

Page 29: Programación en Prolog para Inteligencia Artificial

Trabajando con listas

/* miembro(Termino, Lista) */

miembro(X, [X|T]).

miembro(X, [H|T]) :- miembro(X, T).

Ejemplos:

?- miembro(john, [paul, john]).

?- miembro(X, [paul, john]).

?- miembro(yo, [marx, darwin, freud]).

?- miembro(quien, X).

Page 30: Programación en Prolog para Inteligencia Artificial

Reevaluación (backtracking) y no determinismomiembro(X, [X|_]).

miembro(X, [_|T]) :- miembro(X, T).

?- miembro(fred, [john, paul, fred, ringo]).yes

?- miembro(X, [john, paul, fred, ringo]).X = john;

X = paul;

X = fred;

X = ringo;

no

Determinístico

No determinístico

Page 31: Programación en Prolog para Inteligencia Artificial

Controlando la reevaluación

color(cereza, rojo).

color(banana, amarillo).

color(manzana, rojo).

color(manzana, verde).

color(naranja, naranja).

color(X, desconocido).

?- color(banana, X).

X = amarillo

?- color(sandia, X).

X = desconocido

?- color(cereza, X).

X = rojo;

X = desconocido;

no

Page 32: Programación en Prolog para Inteligencia Artificial

Claúsulas y bases de datosEn una base de datos relacional, las relaciones se consideran tablas, en los que cada elemento de una relación n-aria se almacena como una fila de la tabla, que cuenta con n columnas.

proveedorperez silla rojo 10lopez mesa negro 50

Usando claúsulas, se puede representar de la siguiente forma:

proveedor(perez, silla, rojo, 10).proveedor(lopez, mesa, negro, 50).

Page 33: Programación en Prolog para Inteligencia Artificial

Claúsulas y bases de datos

Ventajas de usar claúsulas:1. Reglas y hechos coexisten.2. Se permiten definiciones recursivas.3. Se permiten múltiples respuestas a la

misma consulta.4. No hay distinción de rol entre el input y

el output.5. La inferencia ocurre automáticamente.

Page 34: Programación en Prolog para Inteligencia Artificial

Casos de aplicación

Sistemas expertos Un sistema informático que simula el

proceso de aprendizaje, de memorización, de razonamiento, de comunicación y de acción de un experto humano en una determinada rama de la ciencia, suministrando, de esta forma, un consultor que puede sustituirle con unas ciertas garantías de éxito

Page 35: Programación en Prolog para Inteligencia Artificial

Casos de aplicación

Sistemas expertos Estas características le permiten

almacenar datos y conocimiento, sacar conclusiones lógicas, tomar decisiones, aprender de la experiencia y los datos existentes, comunicarse con expertos humanos u otros Sistemas Expertos, explicar el porqué de las decisiones tomadas y realizar acciones como consecuencia de todo lo anterior

Page 36: Programación en Prolog para Inteligencia Artificial

Casos de aplicación

Procesamiento de lenguaje natural (NLP) Prolog es un lenguaje muy expresivo para

plantear algoritmos de lingüística computacional. Para el Procesamiento de Lenguaje Natural (NLP), se requiere la manipulación de símbolos (palabras, fonemas y otras partes del lenguaje), basados en objetos estructurados (secuencias, árboles, grafos). Prolog facilita la expresión de operaciones sobre los símbolos y estructuras sin preocuparse de la representación y manipulación interna del computador.

Page 37: Programación en Prolog para Inteligencia Artificial

Casos de aplicación

Asignación de recursos limitados El laboratorio de investigación de la IBM Haifa

ha desarrollado un sistema en Prolog para asignar aviones en las líneas aéreas israelíes El-Al. Este proyecto se llevó a cabo para ahorrar costos operativos y para reducir el uso de los espacios de las compuertas del aeropuerto, que tienen un costo elevado por ocupación.

El sistema está conectado en línea con el sistema de programación del El-Al y se actualiza en tiempo real en cuanto a cambios de horarios de vuelo.

Page 38: Programación en Prolog para Inteligencia Artificial

Casos de aplicación

Diseño experto de productos

En este sistema, el diseño de anteojos se hace a la medida. Una fotografía de la cara del cliente se alimenta como datos de entrada. El sistema experto en Prolog propone un diseño y si el cliente aprueba el diseño, éste se transmite desde las estaciones gráficas a la fábrica usando una red. El tiempo promedio de entrega es de una hora

La base de conocimiento para proponer el diseño incluye entre otros, datos sobre el color de la piel y del pelo del cliente, preferencias individuales, conocimientos técnicos ópticos, conocimiento del diseñador de proponer forma y los colores y formas de moda .

Page 39: Programación en Prolog para Inteligencia Artificial

Casos de aplicación

Verificación de circuitos digitales

Siemens ha desarrollado en Prolog el sistema CVE, el cual es utilizado para verificar de forma automática el comportamiento de salida de un circuito digital como una función Booleana como una función de la entrada. Las funciones que se obtienen se comparan de manera simbólica con las funciones correspondientes del circuito usando algoritmos especializados que garantizan que se detectan las diferencias encontradas

El sistema garantiza 100% de seguridad, ya que la comparación simbólica es equivalente a simular un circuito con todos los posibles patrones de entrada, verificando todas las salidas de la simulación

Page 40: Programación en Prolog para Inteligencia Artificial

Casos de aplicación

Configurador (Wizard) de red de Windows NT

El sistema operativo Microsoft Windows NT utiliza un intérprete interno de Prolog para configurar sus sistemas de red de área local (LAN) y de la red de área amplia (WAN). Los componentes interdependientes del software y de hardware se abstraen en un marco orientado a objetos simplificado usando la información declarativa proporcionada por el script de instalación de cada componente. Esta información, se almacena junto al intérprete interno, que es consultada para generar la mejor configuración.

Los resultados de la consulta, almacenados en la base de datos de la configuración del NT (registry), informan a cada componente o driver su orden de la carga y asociación de componentes

Page 41: Programación en Prolog para Inteligencia Artificial

Muchas gracias!

[email protected]://maestros.unitec.edu/~efutch