Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programación Lógica Inductiva
por Emmanuel Luján
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
Fecha: Julio de 2008
Tema: Programación Lógica Inductiva
Materia: Programación Exploratoria
Universidad: Universidad Nacional del Centro de
la Provincia de Buenos Aires
Docente: Dra. Analía Amandi
Autor: Emmanuel Luján
Correo electrónico: info@emmanuellujan.com.ar
Sitio web: www.emmanuellujan.com.ar
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
LEGALES
Programación Lógica Inductiva, por Emmanuel Luján is licensed under a
Creative Commons Reconocimiento 2.5 Argentina License.
Based on a work at www.emmanuellujan.com.ar/downloads/pli.pdf.
OBJETIVOS
Describir en aproximadamente 15 páginas de contenido (esto es, sin contar la
estructura monográfica) los aspectos más trascendentes relacionados con la programación
lógica inductiva (PLI).
Brindar al lector un enfoque ameno de aprendizaje. O sea, dar una introducción de
conceptos teóricos previos para ayudar a la comprensión de los nuevos conocimientos. Dar
ejemplos, de manera de lograr un mayor grado de atención sobre el lector e introducir los
fundamentos de una manera más arraigada y perdurable.
Discriminar las cuestiones de carácter pragmático. Enfatizar en la transversalidad de
la PLI sobre problemas concernientes a otras áreas del conocimiento, tangible a situaciones
enfrentadas por profesionales informáticos.
Proponer una actividad de investigación.
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
ÍNDICE DE CONTENIDO
1. Introducción......................................................................................................... 1
1.1. Conceptos generales............................................................................... 1
1.2. Programación Lógica Inductiva............................................................. 1
1.2.1. Una representación simple........................................................ 2
1.2.2. Ejemplos................................................................................... 3
2. Un poco de historia.............................................................................................. 4
1.1. Lógica deductiva..................................................................................... 4
1.2. Inducción................................................................................................ 4
3. Teoría ................................................................................................................... 5
3.1. Conceptos de lógica de primer orden..................................................... 5
3.2. Conceptos de inducción......................................................................... 6
3.3. Inferencia inductiva............................................................................... 7
3.4. Estructurando el espacio de hipótesis.................................................... 8
3.5. Predisposición del lenguaje (Lenguage bias)......................................... 8
3.6. Subsumpción.......................................................................................... 8
4. Sistemas PLI........................................................................................................ 9
4.1. Características......................................................................................... 9
4.2. Datos espúreos...................................................................................... 10
4.2. Técnicas PLI......................................................................................... 10
4.1. Sistemas BottonUp.............................................................................. 10
4.1.1. LGG........................................................................................ 10
4.1.2. RLGG..................................................................................... 11
4.1.3. Resolución inversa.................................................................. 12
4.1.3. Relación entre rlgg y resolución inversa................................. 13
4.2. Sistemas TopDown............................................................................... 13
4.5.1 Operador de refinamiento......................................................... 13
4.5.2 Algoritmo MSI......................................................................... 14
6. Aplicación........................................................................................................... 15
7. Conclusiones.........................................................................................................16
A. Apéndice............................................................................................................. 17
A.1. Guía práctica......................................................................................... 17
A.2. Ejemplos de aplicaciones...................................................................... 18
A.2.1. Diseño de redes de elementos finitos....................................... 18
A.2.2. Clasificación biológica de la calidad de agua de río............... 19
Bibliografía............................................................................................................... 20
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
ÍNDICE DE FIGURAS
Figura 1.1 Definición de PLI............................................................................................ 1
Figura 1.3 Grafo conectado.............................................................................................. 3
Figura 3.1 Árbol de derivación lineal de primer orden.................................................... 6
Figura 3.2 Completitud y Consistencia............................................................................ 7
Figura 4.1 Técnicas de PLI.............................................................................................. 10
Figura 4.2 – LGG............................................................................................................... 10
Figura 4.3 Árbol de derivación inversa........................................................................... 12
Figura 4.4 Esquema común de generalización................................................................ 13
Figura 4.5 Algoritmo topdown genérico......................................................................... 14
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
INTRODUCCIÓN
1.1. CONCEPTOS GENERALES
[WKP]
1.2. PROGRAMACIÓN LÓGICA INDUCTIVA
La programación lógica inductiva
(PLI) es un área de investigación que Programación Aprendizaje
PLI
está formada por la intersección entre la Lógica Máquina
programación lógica y el aprendizaje
máquina (métodos inductivos).
Figura 1.2 Definición de PLI
La meta de la PLI debería ser producir una tecnología de amplio uso con fundamentos
teóricos firmes.
[ILPSM]
1
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
1.2.1. Una representación simple
Supóngase que se quiere representar los movimientos de una torre de ajedrez, en
dónde cada movimiento de la pieza queda determinado por (F1, C1) y (F2, C2), la posición
antes y después del movimiento.
Supóngase además que para hacer ésto se usa la lógica proposicional. La
representación obtenida sería :
if (C1=1) and (C2=1) then mov_torre = true
if (C1=2) and (C2=2) then mov_torre = true
...
if (C1=8) and (C2=8) then mov_torre = true
if (F1=1) and (F2=1) then mov_torre = true
if (F1=2) and (F2=2) then mov_torre = true
...
if (F1=8) and (F2=8) then mov_torre = true
El dominio del problema es acotado, y sin embargo la representación proposicional
es extensa, y a partir de esto, deficiente en un sentido práctico. Sin embargo, si se usa la
lógica de primer orden para establecer la representación; y para esto se define un predicado
mov(F1,C1,F2,C2) que se interpreta como el movimiento de una torre desde (F1,C1) hasta
(F2,C2) ; se obtiene:
mov(F1,C,F2,C) : F1 != F2
mov(F,C1,F,C2) : C1 != C2
Como se puede ver, una notación mucho más compacta, y simple de mayor poder
expresivo.
[ILPEM]
2
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
1.2.2. Ejemplos
Un sistema PLI puede incluir conocimiento del dominio dentro del proceso de
aprendizaje. Considérese los siguientes ejemplos conocidos:
Ejemplo 1:
El problema de aprender el concepto de hija definida entre dos personas. hija(X,Y)
es verdadero si X es hija de Y. Podemos definir la relación hija(X,Y), en términos de
las relaciones como padre y femenino. En PLI, el problema se plantea de la siguiente
forma:
Ejemplos positivos (+) o verdaderos y Conocimiento del dominio:
negativos () o falsos:
femenino(fernanda).
hija(fernanda,eduardo). (+) femenino(camila).
hija(camila,rodrigo). (+) femenino(eugenia).
hija(eugenia,ernesto). () femenino(valentina).
hija(valentina,roberto). () ...
... padre(eduardo,fernanda).
padre(rodrigo,camila).
padre(roberto,eugenia).
padre(ernesto,valentina).
...
Resultado: hija(X,Y) : femenino(X), padre(Y,X).
Ejemplo 2:
Ejemplos (+) y (): Conocimiento del dominio:
Resultado:
existe_camino(X,Y) :
conectado(X,Y).
existe_camino(X,Y) :
conectado(X,Z),
existe_camino(Z,Y). Figura 1.3 Grafo conectado
[ILPEM]
3
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
UN POCO DE HISTORIA
2.1. LÓGICA DEDUCTIVA
La lógica ha sido estudiada desde los tiempos de Aristóteles, pero no fue hasta que teóricos
del siglo XIX y XX, cómo Bool y Frege, la formalizaron como una rama de la matemática.
Para este tiempo, se promueve la visión lógico positivista: la lógica es una ciencia que no
solo brinda los fundamentos o bases a la matemática sino que, además, los brinda transversalmente
a todas las otras ciencias. Ésta visión fue sostenida por demostraciones de Gödel (teorema de la
completitud). Luego, los aportes de Robinson, acerca de la inferencia por resolución, serían de
vital importancia en la aplicación de la lógica en las ciencias de la computación. A principios de
1970 Colmerauer y Kowalski fueron claves en el desarrollo del lenguaje de programación basado en
lógica llamado Prolog.
2.2. INDUCCIÓN
El éxito de la lógica deductiva era evidente. Sin embargo surgió una nueva interrogante: si el
razonamiento del hombre y la máquina provienen de axiomas lógicos, ¿de dónde provienen esos
axiomas?. La respuesta mas aceptada es que esos axiomas, que representan creencias generalizadas,
pueden ser construidos mediante hechos particulares (que se derivan de los sentidos) usando el
razonamiento inductivo. Este razonamiento, nuevamente, se remonta al período de la antigua
Grecia, de Sócrates y Platón. Esta disciplina analiza un conjunto de ejemplos y contra ejemplos
particulares, refinándolos hasta obtener un concepto que los describa.
En el siglo XVIII Bacon da la primera descripción detallada del método científico de
inducción.
En 1931 Gödel publica su famoso teorema de la incompletitud. Posteriormente, Turing
señala que el teorema de Gödel requiere que las máquinas sean capaces de aprender en base a
ejemplos.
Varios lógicos positivistas, incluyendo a Carnap, han desarrollado teorías estáticas basadas
en la lógica de primer orden. Otros teóricos, como Plotkin (en los 70's) y Shapiro (en los 80's)
trabajaron en sistemas inductivos basados en computadoras dentro de un marco de trabajo
completamente orientado en la lógica de primer orden, sin embargo, los mayores éxitos dentro del
campo del Aprendizaje de Máquinas fueron derivados de sistemas que construyen hipótesis dentro
de los límites de la lógica proposicional. Ejemplo de esto es la construcción inductiva de sistemas
expertos.
[ILPSM]
4
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
TEORÍA
3.1. CONCEPTOS DE LÓGICA DE PRIMER ORDEN
● una cláusula se dice “cláusula de Horn”, si cumple con una de las siguiente formas:
1. Regla (rule): ∀x1..∀xn(~P1 ٧...٧~Pn ٧ Q)
≡ ∀x1..∀xn ( (P1 ʌ ...ʌ Pn) → Q )
2. Hecho (fact) o cláusula unitaria: ∀x1..∀xn Q
3. Cláusula objetivo (goal): ∀x1..∀xn(~P1 ٧...٧Pn)
≡ ∃x1..∃xn ~(P1 ʌ ...ʌ Pn)
Dónde Pi y Q son fórmulas atómicas.
● Una “cláusula de programa” es una cláusula de tipo 1 ó 2.
● Un “programa lógico” (o programa Prolog) es un conjunto de cláusulas de
programa.
Por ejemplo,
∀x cargado(celular) (Hecho)
∀x encendido(celular) (Hecho)
∀x ( (cargado(x) ʌ encendido(x)) → activo(x)) (Regla)
ó en la sintaxis de Prolog:
cargado(celular). (Hecho)
encendido(celular). (Hecho)
activo(x) : cargado(x),encendido(x). (Regla)
O sea, cualquier x que este cargado y encendido esta activo.
● Dado un programa lógico P y una cláusula objetivo G,
el problema básico en programación lógica es: P ⊨ ~G .
En el ejemplo,
~G = ∃x activo(celular) (Objetivo)
ó en la sintaxis de Prolog:
? activo(celular). (Objetivo)
De aquí que,
P ⊨ ~G sii P U {G} es instisfacible sii P U {G} ⊢R ⊥.
En otras palabras, para probar que ~G se deduce semánticamente de P se debe construir una
deducción por resolución del conjunto P U {G}.
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
femenino(ana). hija(X,Y) : femenino(X), padre(Y,X).
u = {X/ana}
padre(juan,ana). hija(ana,Y) : padre(Y,ana).
u = {Y/juan}
hija(ana,juan).
Figura 3.1 – Árbol de derivación lineal de primer orden
3.2. CONCEPTOS DE INDUCCIÓN:
La palabra inducción se refiere al estudio de la derivación de enunciados generales a partir
de ejemplos específicos. Por ejemplo, inductivamente podríamos decir: “todos los cisnes son
blancos” de la observación “todos los cisnes en ese estanque son blancos”. El pensamiento
inductivo puede ser visto como el inverso al pensamiento deductivo.
En una configuración inductiva general se proveen tres lenguajes:
LO: el lenguaje de observaciones o ejemplos.
LB: el lenguaje del conocimiento base.
LH: el lenguaje de hipótesis.
El problema inductivo general es el siguiente:
● dado un conjunto consistente de observaciones o ejemplos O ϵ LO
● y un conjunto consistente de conocimiento base B ϵ LB
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
F1 implica sintácticamente F2 ( F1 ⊢ F2) sii F2 puede derivarse de F1 usando reglas de
inferencia deductivas. Dónde F1 y F2 son fórmulas.
Sea P un programa lógico, en nuestro caso B ʌ H:
P se dice completo con respecto a E+ sii ∀ e ϵ E+, P ⊢ e .
P se dice consistente con respecto a E sii ∄ e ϵ E, P ⊢ e .
Figura 3.2
Completitud y
Consistencia
3.3. INFERENCIA INDUCTIVA
La inferencia inductiva deriva una creencia general de creencias específicas.
Refiriéndonos al problema inductivo, el mismo se encuentra bajo restricciones: a LO se le
requiere que sólo contenga cláusulas unitarias no ligadas. Pero esto, aún, deja una elección sin
restricciones para H. La inducción no es consistente desde un sentido lógico. O sea, H no es
necesariamente una conclusión de conocer B y E. En el peor de los casos, por ejemplo, podría
haber un conjunto infinito de hipótesis que coincidan con el problema planteado (B ʌ H ⊢ E ). Por
este motivo se necesitan algunas restricciones no lógicas para justificar cualquier hipótesis
particular. Es así que, en lo 50's Carnap y otros sugirieron las “teorías de la confirmación” que
darían un punto de vista probabilístico al problema de la inferencia inductiva. Varias dificultades y
paradojas se encontraron con estas aproximaciones debido a que nunca habían sido aplicadas a la
programación de aprendizaje máquina. Refiriéndonos a estas restricciones, por ejemplo, PAC
learning (probably approximately correct learning), está basado en la lógica proposicional, se
objetivo es dado un conjunto de muestras seleccionar una función de generalización o hipótesis, de
una acertada clase de funciones posibles. La meta, entonces es que con un alto grado de
probabilidad (la parte “probably”) la función seleccionada tendrá un bajo error de generalización (la
parte “approximately correct”).
7
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
3.4. ESTRUCTURANDO EL ESPACIO DE HIPÓTESIS
Como antes se dijo antes, la búsqueda de una hipótesis puede dar muchos resultados (incluso
infinitos) si no se definen las restricciones adecuadas. Llamaremos, entonces espacio de hipótesis a
todas las posibles hipótesis que se pueden derivar del problema B ʌ H ⊢ E. Y la notaremos como
HS = {H1,H2,...Hn}. Para solventar este problema se usan estrategias que estructuran HS. Esto es,
conocer qué hipótesis es más general que otra. Luego se puede eliminar la menos general ya que la
más general cubrirá los ejemplos de la primera. O también, si una hipótesis cubre algún ejemplo
negativo (lo cual es indeseable porque provoca inconsistencia) se puede eliminar a ella y a todas sus
generalizaciones, ya que estas últimas también lo cubrirán. El resultado es un HS más acotado.
3.5.– PREDISPOSICIÓN DEL LENGUAJE (LENGUAGE BIAS)
Cualquier mecanismo usado por un sistema de aprendizaje para restringir la búsqueda de
hipótesis es es llamado bias. Las mismas pueden determinar como el HS es buscado o bien (bias de
búsqueda) o determinar el HS en sí mismo (predisposición o bias del lenguaje). Seleccionando unas
bias del lenguaje fuertes, esto es, un lenguaje de hipótesis menos expresivo, es espacio de búsqueda
se convierte en algo más pequeño y el aprendizaje es más eficiente.
3.6.– SUBSUMPCIÓN
Sean C y C' dos cláusulas de programa C y C' . Se dice que: C esubsume a C' si existe una
substitución e tal que ce esté contenido en C'. Se denota C ≼ C' .
Se introduce la noción de generalización, se dice que que C es más general que C', C < C' si
C esubsume a C' y no al revés. Y, en este caso, que C' es una especialización o refinamiento de C.
Se introduce también, en relación a lo anterior, la noción de enrejamiento (lattice) de HS.
Dicho enrejado posee nodos que son las hipótesis y uniones entre ellas basadas en el concepto de
generalidad. Por ejemplo h1<h2, h2<h3, h2<h4, etc. En base a esto último luego se definirá el
concepto de grafo de refinamiento.
[ILPSM],[ILPMIT],[ILPNLSD],[CC2]
8
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
SISTEMAS PLI
4.1. CARACTERÍSTICAS
Los sistemas de aprendizaje PLI pueden dividirse por las siguientes taxonomías:
Incrementales / No incrementales: Esta dimensión describe la forma en que los ejemplos son
obtenidos.
● No incrementales: Los ejemplos son dados al comienzo y no cambia en el proceso. Buscan
típicamente de una manera topdown, o bien de una manera bottonup. Incluyen: GOLEM,
FOIL, FOCL, IFOIL, ILPR, RICH y LINUS.
● Incrementales: Los ejemplos son introducidos por el usuarios uno a uno, de una forma
prudente. Buscan empleando una mezcla de estrategias topdown y bottonup. Incluyen:
FORTE. LFP2, MARVIN, RINCON, CIGOL.
Interactivos / No interactivos:
● Interactivos: El que aprende puede hacer preguntas (p.e. el usuario) acerca de la
interpretación pretendida, lo que permite podar grandes partes del espacio de búsqueda. Son
incrementales. Incluyen: CIGOL, MARVIN, IRES y ITOU.
● No interactivos: La mayoría de los sistemas son no interactivos
Revisión de teoría: Aquellos sistemas que permiten que el B sea corregido durante el proceso de
aprendizaje. Se trata que dichas correcciones sean mínimas. Usualmente son incrementales y de
aprendizaje de predicados múltiples. Incluyen: MARVIN, CIGOL, MACL
Estas clasificaciones dejan a los sistemas PLI a en dos extremos:
[OILPSB]
9
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
4.2. DATOS ESPÚREOS
En la definición teórica de PLI tanto B y H deben “concordar” con los ejemplos E. Sin
embargo pueden existir errores en los datos, se estará lideando con datos espúreos entonces. Los
mismo pueden clasificarse en:
● Ruido. Por ejemplo errores aleatorios en E o en B.
● Espacio de ejemplos insuficientemente cubierto. Por ejemplos: pocos ejemplos en E, lo que
hace difícil detectar confiablemente la correlación entre los mismos.
● Inexactitud. Por ejemplo: descripción inapropiada o insuficiente del lenguaje, se carece de
una descripción exacta del concepto objetivo.
● Valores erróneos en E.
Los sistemas de aprendizaje generalmente tienen un mecanismo para tratar los primeros tres
tipos y otro diferente para tratar el último.
[ILPNLSD]
4.3. TÉCNICAS DE PLI
10
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
Para definir correctamente el lgg entre dos cláusulas es necesario definirlo para términos
átomos y literales primero:
lgg de términos: lgg de átomos:
1. lgg(t,t) = t 1. lgg( p(s1, ...,sn), p(t1, ...,tn) ) =
2. lgg( f(s1, ...,ssn), f(t1, ...,tn) ) = p( lgg(s1,t1), ..., lgg(sn,tn) ) .
f( lgg(s1,t1), ..., lgg(sn,tn) ) Si lo átomos tienen el mismo
3. lgg( f(s1, ...,sn), g(t1, ...,tn) ) = V. Donde símbolo de predicado.
f≠g y V es sólo una variable que representa a 2. lgg( p(s1, ...,sn), q(t1, ...,tn) )
4. lgg( f(s1, ...,sn), g(t1, ...,tn) ) no esta definida si p≠q
lgg(s,t) = V. Donde s≠t y al menos uno, s o t
es una variable. V es sólo una variable que
representa a lgg(s,t)
Ejemplos:
*lgg([a,b,c],[a,d,e])=[a,X,Y]
*lgg( f(a,a), f(b,b) ) = f( lgg(a,b),lgg(a,b) ) = lgg( V, V ) . Cuando se calcula lgg se debe
tener cuidado de usar la misma variable para las múltiples ocurrencias de los lggs de sub
términos.
lgg de literales
1. lgg(l1,l2), si l1 y l2 son átomos se computa como se definió arriba.
2. lgg(l1,l2), si l1=~l1' y l2=~l2' entonces, lgg(l1,l2) = ~lgg(l1',l2')
3. lgg(l1,l2), si l1=~l1' o bien l2=~l2' entonces, lgg(l1,l2) no esta definido
Ejemplos: *lgg(padre(ana,maría),padre(ana,tomás)) = padre(ana,X)
*lgg(padre(ana,maría),~padre(ana,tomás)) = no esta definido
*lgg(padre(ana,X),hija(maría,ana)) = no esta definido
lgg de cláusulas. Dado lgg(C1,C2), si C1={l1,...,ln} y C2={k1,...,kn}, entonces
lgg(C1,C2)={Lij = lgg(li,kj) | li ϵ C1, kj ϵ C2 y lgg(li,kj) esta definido}.
Ejemplo: si C1= femenino(maría),padre(ana,maría) > hija(ana,maría)
y C2= femenino(ivana),padre(tomás,ivana) > hija(ivana,tomás) entonces
lgg(C1,C2) = femenino(X),padre(Y,X) > hija(X,Y)
4.4.2. – Generalización menos general relativa (rlgg)
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
rlgg(e1,e2) = lgg( (K>e1) , (K>e2) )
= femenino(X), padre(YX) > hija(X,Y)
4.4.3. – Resolución inversa
La idea básica es la de invertir la regla de resolución basada en inferencia deductiva. Para
esto se necesita definir una función sustitución inversa e1 . No se tratará a la resolución inversa
desde un punto de vista formal, en cambio se expondrá una ejemplificación de la misma:
Dados: B = {B1,B2} = {femenino(maría), padre(ana,maría)}
H = vacío
E = {E1} = {hija(maría,ana)}
La resolución inversa sigue los siguientes pasos:
● Primeramente se tratará de encontrar una cláusula c, que en conjunto con B2 defina a
E1, y pueda ser agregada a H en vez de E1. Eligiendo la substitución inversa e11
={ana/Y}, el paso de resolución inversa genera a cláusula C1 = res_inv(B2,E1) =
hija(maría,Y) : padre(Y/maría). La cláusula C1 se convierte en la actual hipótesis H,
esto es {B1}U H ⊢ E1 .
femenino(maría). hija(X,Y) : femenino(X), padre(Y,X).
e21 = {maría/X}
padre(ana,maría). hija(maría,Y) : padre(Y,maría).
e11 = {ana/Y}
hija(maría,ana).
Figura 4.3 – Árbol de derivación inversa
12
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
● En el segundo paso se toma B1 = femenino(maría) y la hipótesis actual H = C1. Se
resuelve, entonces, C'= res_inv (B1,C1) usando las sustitución e21 ={maría/X}, esto
generaliza la cláusula C1 con respecto a B, resultando C1= hija(X,Y) : femenino(X),
padre(Y,X). En la hipótesis actual, la cláusula C1 puede ser reemplazada por la
cláusula más general C', la cual en conjunto con B define al ejemplo E1. Así la
hipótesis inducida es H={hija(X,Y) : femenino(X), padre(Y,X)}
4.4.4. – Relación entre resolución inversa y rlgg
Para ejemplificar lo expuesto:
Figura 4.4 – Esquema común de generalización. f es femenino, h es hija y p es padre.
4.5.– SISTEMAS TOPDOWN
Los algoritmos que responden a este modo son derivaciones de MIS. De forma general se
explicará el mismo. Primero se deberá introducir el concepto de operador de refinamiento.
4.5.1 Operador de refinamiento
Dado una bia de lenguaje L, un operador de refinamiento p mapea una cláusula C a una
conjunto de cláusulas p(C) las cuales son especializaciones (refinamientos) de c:
p(C) = {C' | C' ϵ L, C < C' } . Generalmente se computan los refinamientos más generales.
13
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
4.5.2 Algoritmo MSI
Un grafo de refinamiento es un grafo formado por un enrejado (lattice) al usar subsupciones
sobre un conjunto de cláusulas. El mismo es direccionado y acíclico, Sus nodos son cláusulas y sus
arcos relaciones de especialización.
El siguiente pseudocódigo ejemplifica el algoritmo MSI:
Inicializar la hipótesis H a un conjunto (posiblemente vacío) de cláusulas en L
repetir
Leer el siguiente ejemplo (positivo o negativo)
repetir
si exise una cobertura negativa del ejemplo e entonces
Borra la cláusulas incorrectas de H
si el ejemplo e es positivo y no es cubierto por H entonces
Con BFS sobre el grafo de refinamiento, desarrollar una cláusula c
que cubra a e y agregarla a H
hasta que H sea completo y consistente
retornar H
para siempre
Figura 4.5 Algoritmo topdown genérico
En el primer si , C en H es incorrecta si C es responsable de que H sea inconsistente.
En el segundo si, la búsqueda en el grafo de refinamiento comienza con la cláusula más
general y continúa buscando refinamientos de cláusulas mediante BFS (breadth first search). En
cada paso todos lo mínimos refinamientos son generados y testeados por cobertura. El refinamiento
aceptado debe cubrir el ejemplo positivo selecto. El proceso termina cuando la primera cláusula
consistente es encontrada.
[ILPNLSD],[ILPEM]
14
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
APLICACIÓN
Existen muchísimas aplicaciones de la PLI en áreas prácticas e investigativas, tales como:
definición de lenguajes de abajo nivel en base a lenguajes de alto nivel, aprendizaje de modelos
cualitativos de sistemas dinámicos; predicción de mutagénesis, lo cual, tiene implicancias en la
prevención de cánceres; creación de drogas, por ejemplo contra el mal de Alzheimer; diagnósticos
médicos; análisis de calidad de aguas de río; redes de elementos finitos; etc. Particularmente las
últimas dos se desarrollan en el apéndice con más detalle. Se citarán ejemplos a continuación:
Comparar actividades de drogas
Se desean encontrar variantes mejoradas de drogas. Para hacerlo se necesita encontrar la
relación entre la estructura química y la actividad de la droga. En la mayoría de los casos esta
relación no se deriva de la teoría, sino de la experimentación. Estas relaciones empíricas son
llamadas Relaciones de Actividad Estructural (SAR). El problema clásico es dado un conjunto de
químicos con su estructura y actividad, encontrar una teoría que prediga la actividad de un químico
en base a su estructura. PLI resuelve este problema con grandes beneficios sobre los métodos
convencionales. Proveyendo mayor precisión, menores restricciones y haciendo más fácil su
entendimiento.
Diagnóstico de fallas temporal en satélites
Diseño desde primero principios
[SDIBAP], [EAIBSD], [SMIBAP],[DOC]
15
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
CONCLUSIONES
El aprendizaje automático (machine lerning) es un subcampo de la IA, se concentra en el
diseño y desarrollo de algoritmos y técnicas que permitan a las computadoras "aprender". A un
nivel general, hay dos tipo de aprendizaje: inductivo y deductivo. La inducción se refiere al estudio
de la derivación de enunciados generales a partir de ejemplos específicos. El pensamiento inductivo
puede ser visto como el inverso al pensamiento deductivo.
Por su lado, en programación lógica, un programa consiste en un conjunto de axiomas y
reglas. Los sistemas de programación lógica, como Prolog, computan las consecuencias de estos
axiomas y reglas para responder una pregunta.
La programación lógica inductiva (PLI) es un área de investigación que está formada por la
intersección entre la programación lógica y el aprendizaje automático (métodos inductivos). La
misma consiste en tres componentes básicos: un conocimiento de base B (ej.: las cosas no pueden
ser completamente blancas y completamente negras), un conjunto de ejemplos E (ej.: el primer
cisne en el estanque es blanco) y una hipótesis H (ej.: todos los cisnes son blancos). La relación
principal entre ellos es que B en conjunto con H deberían permitir la derivación de E. Lo que se
puede escribir como B ʌ H ⊢ E.
Este problema inductivo no es consistente desde un sentido lógico. O sea, H no es
necesariamente una conclusión de conocer B y E. La búsqueda de una hipótesis puede dar muchos
resultados (incluso infinitos) si no se definen las restricciones adecuadas. Para solventar este
problema se usan estrategias que estructuran el espacio de hipótesis (HS), o sea todas las posibles
hipótesis de un problema en particular. Dicho estructuramiento se realiza mediante técnicas que van
de lo específico a lo general o viceversa. Entre las primeras se encuentran la generalización menos
general (lgg), generalización relativa menos general (rlgg) y resolución inversa. Entre las segundas
encontramos: FOIL, FOCL, INDUCE, HYDRA, entre otros.
Existen implementaciones de los anteriores conceptos, las mismas están sujetas a
clasificaciones que las posicionan en uno de dos polo: por un lado los sistemas empíricos que a
aprenden una definición de un solo predicado en base a una gran colección de ejemplos. Y por otro
lado los sistemas interactivos que aprenden definiciones de múltiples predicados de un conjunto
pequeño de ejemplos y consultas al usuario.
Existen muchísimas aplicaciones de la PLI en áreas prácticas e investigativas, tales como:
definición de lenguajes de bajo nivel en base a lenguajes de alto nivel, aprendizaje de modelos
cualitativos de sistemas dinámicos; predicción de mutagénesis, lo cual, tiene implicancias en la
prevención de cánceres; creación de drogas, por ejemplo contra el mal de Alzheimer; diagnósticos
médicos; análisis de calidad de aguas de río; redes de elementos finitos; etc.
Finalmente, PLI es un área creciente cuyo objetivo ronda a producir una tecnología de
amplio uso con fundamentos teóricos firmes.
16
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
APÉNDICE
A.1. GUÍA PRÁCTICA
1) Conceptos: luego de leer este informe e investigando un poco más, responda:
1.1 ¿Qué ventajas tiene la lógica de primer orden con respecto a la proposicional?
1.2 ¿En qué se basan los razonamientos ductivos e inductivos?
1.3 ¿Qué es la PLI? ¿Cuál es el problema que plantea?
1.4 ¿Cuál es el problema plantea la inferencia inductiva?, ¿qué solución existe?.
1.5 Enuncie diferencias entre sistemas PLI topdown y bottonup.
1.6 Explique, conceptualmente, cada una de las técnicas PLI.
2) Aplicación: se propone la siguiente actividad de investigación e implementación:
Elija una de las aplicaciones PLI que conozca e investigue acerca de la misma. Luego
realice un programa usando el sistema PLI idóneo a esa aplicación para ejecutarlo. Analice
los resultados obtenidos. Se pretende el código de la aplicación y un pequeño informe,
describiendo y analizando el proceso y las experiencias.
Por ejemplo: si la elección es la construcción de una red de elementos finitos ( uno de los
ejemplos que se expone con más detalle al fin del apéndice ) se deberá escoger una figura
simple para representar, crear el programa correspondiente, basándose en algún ejemplo
existente, y luego correr dicho programa con el sistema ( herramienta de software )
GOLEM. Al finalizar el mismo arrojará un conjunto de hipótesis que deberán ser analizadas.
– 17
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
A.2. EJEMPLOS DE APLICACIONES
A.2.1. Ingeniería mecánica – Diseño de redes de elementos finitos
Dado un objeto y fuerzas físicas, se desea saber que efectos se producirán sobre éste al
actuar dichas fuerzas. Por ejemplo la fuerza del viento aplicada sobre un puente puede generar
deformaciones en la estructura del mismo. Un método basado en aproximaciones numéricas para
resolver este problema es tratar al objeto en forma particionada, como una red de objetos finitos más
pequeños. Mientras más pequeñas sean las particiones mayor grado de exactitud se obtendrá en los
cálculos. Sin embargo, una cantidad alta de particiones podría llegar a ser imposible de calcular
computacionalmente. El problema se transforma en buscar una red que proporcione una buena
aproximación sin irse de los limites computacionales. No existen reglas absolutas para ello, pero sí
existen casos documentados en los cuales basarse.
El problema puede ser resuelto con PLI tratando al objeto a ser particionado como un
conjunto de márgenes, sus propiedades y relaciones entre ellos. Para resolver esto con GOLEM
necesitamos:
● Ejemplos positivos: son ejemplos documentados de geometrías conocidas (cilindro, gancho,
etc.). Son de la forma red(a1,7), o sea que el margen “a1” esta compuesto por otros “7”
márgenes (o sea cada margen es visto como un conjunto de márgenes).
● Ejemplos negativos: son el complemento de los ejemplos positivos. Por ejemplo: para
red(a1,7) serían {red(a1,1) ,red(a1,2) ,...,red(a1,6) ,red(a1,8) ,....red(a1,17)}. Estamos
suponiendo que 1 y 17 son las cotas de composición de un margen, estos valores son
empíricos. Los ejemplos negativos son necesarios para acotar la búsqueda.
● Conocimiento base: contiene las definiciones que describen las propiedades de las redes y
sus relaciones (ejemplos positivos y negativos) para formar la estructura deseada. Esta
información es la más importante. Esta dividida en: declaraciones (modos y determinación),
tipos de márgenes, condiciones de bordes, caga y representación geométrica. Por las
dimensiones de este informe no se podría llegar a hacer una descripción más detalla de cada
uno, pero podemos ejemplificar algunos predicados como: corto(M), cargado(M),
corregido_en_ambos_lados(M), vecino_xy(M,M2), vecino_xz(M,M2), etc.
● Resultado: al correr el algoritmo obtenemos reglas que nos explicitan la cantidad deseada de
particiones para una estructura dada (recordemos que una estructura es, en nuestra
representación, un margen que a su vez se compone de otros recursivamente).
Es así que, para cada N (cantidad de red(M,7):
particiones), tenemos una o mas reglas tamaño_usual(M),
que dicen si es propicio construir una vecino_xy(M,MY),
estructura con esa cantidad de particiones. corregido_en_ambos_lados(MY),
Ejemplo de un resultado para N=7 es : vecino_zx(MZ,M)
sin_cargar(MZ).
De esta manera, cada regla generada, nos dice si al objeto dado es propicio particionarlo en
N márgenes o no. Si el lector se interesa por cualquiera de las aplicaciones aquí citadas puede
remitirse a la bibliografía para obtener ejemplos completos.
[FEMBDSM],[APSDIB]
18
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
A.2.1. Ingeniería ambiental – Clasificación biológica de la calidad de agua de río
Las variedades biológicas de flora y fauna en un río son vistas como continuos monitores de
la “salud” de ese río. Como alternativa a el uso de productos químicos para determinar la calidad
del agua se muestrean organismos macro invertebrados conocidos como “cama de río”. Los mismos
están presentes en todos los ríos y la tarea de su clasificación no es una actividad demandante.
Las diferentes especies son conocidas por tener distintas sensibilidades a los contaminantes
(algunas residuales, tóxicos, etc), debidos a que estos modifican su estructura taxonómica, es así que
existen diferente categorías (o familias) en donde son clasificados dependiendo de dicha estructura
El trabajo aquí es, dado una muestra de camas de río, clasificarla en una de las cinco clases
de calidad del agua (b1a, b1b, b2 y b4). Para esto se utiliza el sistema PLI que deduce reglas
generales de clasificación. Dos sistemas abordan este problema: GOLEM y CLAUDIEN. Para
ejemplificar veremos como trabaja el primero. Ejemplo:
Por cada clase de la cual se desea generar reglas de clasificación se crea un problema PLI
distinto. Supongamos en este caso se quiere generar una regla para clasificar la mejor clase de
calidad de agua, o sea, la clase “b1a”. Se toman muestras de un río arbitrario y se las clasifica. Las
muestras m1y m2 son de clase “b1a”. La muestra m3 es de clase “b1b” y m4 de clase “b2”. Los
componentes del problema PLI son:
● Un conjunto de ejemplos (positivos y negativos) de la forma clase(M), que quiere decir que
la muestra “M” pertenece a la clase de calidad de agua “clase”:
b1a(m1). (+) b1a(m3). ()
b1a(m2). (+) b1a(m4). ()
● Conocimiento base:
○ Conjunto de predicados de la forma familia(M,N). Quiere decir que la muestra “M”
pertenece a la familia de organismos “familia” y que su nivel en la muestra es “N”.
Todas las muestras acaban de ser clasificadas.
leuctridae(m1,n2). leuctridae(m3,n2).
gamaridae(m1,n2). gamaridae(m3,n1).
leuctridae(m2,n1). leuctridae(m4,n3).
gamaridae(m2,n2). gamaridae(m4,n1).
○ El predicado mayor_que(A,B), significa que la abundancia de nivel A es mayor que la
abundancia de nivel B.
Podemos suponer que n1 representa, en
mayor_que(n1,n2). una muestra de una cantidad definida, más del
mayor_que(n2,n3). 80% del contenido. Que n2 representa entre un
mayor_que(n1,n3). 60% y un 80%. Y n3 de un 20% a un 60%. En
pos de hacer más claro el ejemplo.
● Resultado: Las reglas de clasificación obtenidas para la clase “b1a” son:
○ b1a(M) : leuctridae(M,N), gamaridae(M,N).
○ b1a(M) : leuctridae(M,N1), gamaridae(M,N2), mayor_que(N1,N2)
Nota: el ejemplo no tiene una exacta correspondencia
biológica, está pensado sólo en forma didáctica. [APSDIB]
19
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján
Programación Lógica Inductiva | Programación Exploratoria | Ingeniería de Sistemas | UNICEN
BIBLIOGRAFÍA
[ILPSM] Inductive Logic Programming.
Stephen Muggleton.
[ILPMIT] Inductive Logic Programming:
entry for de MIT encyclopedia of Cognitive Sciences
Stephen Muggleton.
[ILPNLSD] Inductive Logic Programming.
Nada Lavrac y S. Dzeroski
[APSDIB] Application of inductive logic programming.
S. Dzeroski e I. Bratko.
[EAIBSD] Engineering Aplication of ILP
S. Dzeroski e I. Bratko.
[APSMIB] Application of inductive logic programming.
S. Muggleton e I. Bratko.
[OILPSB] Overview of Inductive Logic Programming (ILP) Systems
Svetla Boytcheva
[FEM BDSM] The application of inductive logic programming to finite element mesh
design. B. Dolsak e S. Muggleton.
[ILPEM] Programación Lógica Inductiva (ILP)
Eduardo F. Morales
[WKP] Wikipedia. www.wikpedia.org
[DOC] http://www.cs.york.ac.uk/%7Estephen/index.html
[CC2] Apunte teórico de la cátedra Ciencias de la Computación II, UNICEN.
20
Docente: Dra. Analía Amandi | Autor: Emmanuel Luján