DOSSIER
“PROGRAMACION BASADA EN REGLAS DE
INFERENCIA PROGRAMACION LOGICA”
Ing. Carlos Arturo Gutiérrez González
Ing. Juan Favio Robles De Lira
Dr. Jose Eder Guzman Mendoza
Lógica y Programación
Maestría en Ciencias de la Ingeniería
Control y Automatización
Primer cuatrimestre
26 de mayo de 2018
PROGRAMACIÓN BASADA EN REGLAS DE INFERENCIA
Un sistema basado en reglas está compuesto por un conjunto de reglas que definen acciones o
conclusiones si se cumplen determinadas condiciones y un mecanismo de control de inferencia que
determina la manera y orden de ejecución de las reglas. Los sistemas basados en reglas son
probablemente la herramienta más general y más popular de la Inteligencia Artificial
Está compuesto, en principio, por dos partes principales: un conjunto de reglas que definen su base
de reglas (la parte básica de la base de conocimiento) y el mecanismo apropiado de interpretación
de las reglas llamado motor de inferencia. Las reglas definen las variantes del comportamiento
mientras que el mecanismo de control de inferencia se encarga de la selección y ejecución de las
mismas. En su forma más popular, el formato de reglas se define como
Sí < antecedente > entonces < consecuente >
Considerándola una inferencia, razonamiento o regla de producción; en la práctica semejante regla
es similar o equivalente a la implicación lógica y también es llamada regla si-entonces. El
<antecedente> también puede ser llamado condiciones previas, parte condicional, condiciones,
etc., mientras que el <consecuente> también puede ser nombrado conclusión, hipótesis, acción,
etc., dependiendo a veces del contexto y del significado específico. Si se define una regla: si
<antecedente> entonces <consecuente>, entonces <antecedente> = LHS (regla) (parte izquierda),
mientras <consecuente> = RHS 6(rule) (parte derecha). El significado básico de cualquier regla de
este tipo es que si las condiciones definidas por el <antecedente> se satisfacen, entonces las
conclusiones o acción definidas por el <consecuente> se cumplen o pueden ejecutarse. En ciertos
trabajos, el formato básico está a veces extendido, por ejemplo:
Sí <antecedente> entonces <consequent_1> de lo contario <consequent_2>
En este caso si el <antecedente> es verdad el <consequente_1> se cumple o se realiza (si es una
acción), pero si el <antecedente> no es satisfecho, entonces se cumple o se realiza el
<consequente_2>.
Son posibles muchas otras extensiones del formato básico. Por ejemplo, aparte de especificar el
nombre y la numeración de las reglas, es posible definir lo siguientes elementos adicionales de
definición:
Recursos: son los recursos necesarios para ejecutar la acción descrita por una regla. Por
ejemplo, en el caso de ejecución de reglas en paralelo, algunas pueden requerir un uso
26 de mayo de 2018
exclusivo de ciertos recursos (pueden bloquear su uso por parte de otras reglas). Esta
información puede ser necesaria para el mecanismo de control de inferencia para resolver
algunos conflictos potenciales.
Condiciones excluyentes: esta parte proporciona información sobre cuando no puede
usarse la certidumbre de la regla. Respecto al hecho que se especifican condiciones previas
explícitamente, esto puede introducir cierta información redundante. Sin embargo, en
ciertos casos puede ser útil para desestimar algunas o la mayoría de las reglas de una
manera simple y eficaz, ya que encontrar que una regla es a veces inaplicable puede ser
mucho más rápido. Éste sería el caso de reglas raramente usadas, el uso de las cuales puede
ser excluido por una simple condición, un solo hecho.
Retractar-anular resultados: en el caso de sistemas que se modifican dinámicamente puede
ser necesario incluir estos cambios directamente en la memoria del sistema; esta parte
especifica qué hechos no son verdad después de la aplicación de determinadas reglas y
deben retractarse de la base de conocimiento,
Afirmar-agregar resultados: como la anterior, después de la aplicación de una regla, nuevos
hechos pueden volverse verdaderos; esta parte de la regla especifica qué hechos deben
afirmarse en la base de conocimiento después de la aplicación exitosa de la misma,
Acciones: en el caso que las reglas de control, esta parte especifica las acciones u
operaciones que deben ser realizadas.
Informes: en sistemas de monitorización y supervisión con operadores humanos puede ser
útil especificar una parte adicional que contenga mensajes para éstos. La información dada,
enviada a la consola o a un archivo, puede estar parametrizada, conteniendo algún
conocimiento o incluso los parámetros actuales del proceso.
regla(s) siguiente(s): en ciertos casos, después de la aplicación de alguna regla puede ocurrir
que la próxima regla (o reglas) candidata(s) a ser aplicada(s) sea muy probable (o incluso
seguro). Así, puede ser razonable especificar esta regla (estas reglas) explícitamente, para
permitir al mecanismo de control del razonamiento cambiar el orden de examen de las
reglas. Esta especificación puede acelerar la ejecución de las reglas significativamente, y así
mejorar el rendimiento total del sistema.
Son posibles muchas otras modificaciones y extensiones; sin embargo, estas no cambian el concepto
básico de las reglas si-entonces, sino que constituyen algún mecanismo auxiliar conveniente en
aplicaciones prácticas.
INFERENCIA EN SISTEMAS BASADO EN REGLAS
La inferencia en sistemas basados en reglas está basada en la lógica. Básicamente, el esquema de
las reglas es similar a la implicación en sintaxis y en semántica. La aplicación de cualquier regla,
siendo el paso básico de cualquier paradigma de razonamiento, es así análoga al modus ponens. El
26 de mayo de 2018
chequeo de satisfacción de la condición previa es un caso específico de emparejamiento de formas;
de hecho también es un emparejamiento de términos o de condiciones previas. Como la aplicación
de una sola regla ya se ha descrito en la subsección anterior, aquí nos centraremos en los problemas
que involucran aspectos más avanzados de la inferencia basada en reglas. En primer lugar el llamado
problema de resolución de conflictos.
Consideremos un sistema dinámico compuesto de n reglas. El problema de resolución de conflictos
puede declararse como: dado un conjunto de n reglas, si dos o más reglas son potencialmente
aplicables, seleccionar una sola regla para ser aplicada en el estado actual del sistema bajo
control/supervisión. El problema de la resolución de conflictos no existe en sistemas
determinísticos, para los que sólo una regla puede aplicarse en cualquier estado. El problema ocurre
si para algún estado puede aplicarse más de una la regla; en la mayoría de sistemas se selecciona
una sola regla con respecto a algún criterio auxiliar, diferente del consistente en que satisfagan las
condiciones previas. Dependiendo de la complejidad de la estructura del mecanismo de control de
inferencia son posibles dos formulaciones, una básica y otra avanzada.
La formulación básica es como sigue. Considérese un sistema de control basado en reglas
compuesto de n reglas. Supongamos que las reglas están linealmente ordenadas según un índice. El
problema de la resolución de conflictos consiste ahora en seleccionar exactamente una regla
aplicable en el estado actual. La regla seleccionada debe aplicarse y el proceso repetirse desde el
principio.
Las estrategias básicas para atacar el problema anterior pueden variar dependiendo de la
especificación del sistema y de la aplicación. Hay, sin embargo, dos posibilidades básicas:
Puede seleccionarse primero una regla apropiada para lograr el objetivo deseado y luego puede
intentarse satisfacer sus condiciones; este enfoque se aplica principalmente en sistemas de
planificación,
Pueden probarse secuencialmente las reglas mediante la satisfacción de sus condiciones previas, y
la primera cuyas condiciones previas sean satisfechas (y destinada a la tarea específica de interés,
sobre todo si se especifican requisitos adicionales) se selecciona y se ejecuta.
Principalmente en control y supervisión se aplica el segundo enfoque. Con respecto a la organización
del intérprete de reglas pueden distinguirse tres estrategias básicas de atacar el problema:
las reglas se ordenan linealmente y la satisfacción de sus condiciones previas se prueba
secuencialmente en un lazo cerrada; después de la regla i, se prueba la regla número i+1 y
posiblemente se ejecuta, y después de la regla n se prueba la regla 1 (ejecución lineal), se asume
una jerarquía entre las reglas; las reglas se prueban secuencialmente según su jerarquía hasta que
se encuentra una cuyas condiciones previas se satisfacen - entonces la regla se ejecuta y el proceso
se reanuda en la regla 1 (ejecución jerárquica), se preselecciona un subconjunto del conjunto inicial
26 de mayo de 2018
de reglas y se ordena de nuevo según algunas de prioridades (dependiendo de contexto); las reglas
se inspeccionan entonces con respecto a cualquiera de los dos esquemas anteriores.
Por supuesto, los enfoques anteriores pueden modificarse y extenderse con el uso de mecanismos
de control de razonamiento auxiliares, herramientas de preselección de reglas, etc., Por ejemplo,
un mecanismo útil lo constituye una modificación que consiste en la utilización de un mecanismo
para el cambio jerárquico de valores dependiendo del contexto mediante el uso de una pila de
memoria.
La forma avanzada de declaración del problema de resolución de conflictos incluye la selección del
conjunto de conflictos y la selección y ejecución de regla/reglas posiblemente pasando el control a
otros mecanismos. De nuevo, consideremos un sistema compuestos de n reglas, La formulación
avanzada de la tarea de resolución de conflictos consiste en seleccionar reglas que satisfagan las
condiciones y, si hay dos o más reglas, seleccionar una de ellas que satisfaga algún criterio auxiliar.
Este enfoque consiste en dos fases: (1) eliminación inicial de las reglas que no pueden aplicarse, y
(2) selección de la mejor regla, o probablemente la más apropiada para realizar la tarea del control
en curso. Para el caso avanzado, pueden establecerse varias clasificaciones de estrategias de
resolución de conflictos:
Estáticas vs. Dinámicas; las estrategias estáticas están basadas en criterios constante en el tiempo,
mientras que las dinámicas pueden tener en cuenta el contexto, tiempo, el número de repeticiones
(exitosas) de una regla, etc.,
Sintácticas vs. Semánticas; las primeras se basan en "la forma" de las condiciones previas de la regla,
mientras que las segundas pueden tener en cuenta el contexto actual, el objetivo deseado, y evaluar
criterios especificados por el usuario,
Directas vs. Indirectas; las directas se basan en la comparación simple de reglas y la asignación de
"factores de orden", prioridades, mientras que las estrategias indirectas pueden llevarse a cabo
mediante sistemas basados en conocimiento auxiliar, meta-reglas y esquemas complejos de
inferencia,
Basadas en criterios simples pre especificados vs. Modificables, adaptables, y basadas en
mecanismos de aprendizaje.
Dependiendo del problema, de su especificación y de los recursos disponibles pueden aplicarse
varias estrategias; no puede darse ningún criterio general. Las combinaciones de varias estrategias
también pueden ser útiles.
26 de mayo de 2018
MODUS PONENS Y MODUS TOLLENS
Regla de inferencia derivada: que se simboliza de la siguiente manera:
A→B Si A, entonces B.
¬B No B.
-----, que se lee -----------------
¬A Por tanto, no A.
Dada una fórmula condicional y la negación de su consecuente, esta regla nos permite pasar a la
negación de su antecedente.
Ejemplo: Por modus Tollens, de las fórmulas (p ^ q) → r y ¬r obtenemos ¬ (p ^ q). En lenguaje
ordinario: Si es domingo y hace buen tiempo, seguro que nos vamos a la playa; no nos vamos a la
playa; por tanto, no es verdad que sea domingo y que haga buen tiempo.
Regla de inferencia: que se halla en todos los cálculos deductivos y que se simboliza como
A→B Si A, entonces B.
A A.
-----, que se lee -----------------
B Por tanto, B.
Esto significa que a partir de una fórmula condicional y su antecedente, podemos pasar a su
consecuente.
Ejemplo: De las fórmulas p → (q ^ r) y p, podemos llegar a q ^ r. En lenguaje ordinario: Si el número
cuatro es par, entonces es múltiplo de dos y su doble también es un número par; el número cuatro
es un número par; por tanto, es múltiplo de dos y su doble también es un número par.
El modus ponens, como regla de inferencia primitiva del cálculo proposicional, también recibe el
nombre de regla de eliminación del condicional.
El Modus Ponens y Modus Tollens se corresponden con los siguientes esquemas básicos de
inferencia. Obsérvese que el Modus Tollens se deduce del Modus Ponens teniendo en cuenta que
la lógica que usamos es bi-valuada (una afirmación, o es verdadera o es falsa, no hay una tercera
opción).
26 de mayo de 2018
ENCADENAMIENTO DE REGLAS
El encadenamiento de reglas hacia delante puede utilizarse cuando las premisas de algunas reglas
coinciden con las conclusiones de otras, de forma que al aplicarlas sucesivamente sobre los hechos
iniciales podemos obtener nuevos hechos. A medida que obtenernos más hechos, podemos repetir
el proceso hasta que no pueden obtenerse más conclusiones.
El encadenamiento de reglas hacia atrás parte del hecho que se quiere concluir y se mira qué reglas
lo tienen como conclusión, se toman las premisas de estas reglas y se consideran como objetivos
parciales que se quieren verificar. Por un proceso de comparación con los hechos de la base de
conocimiento un proceso de back tracking, se va decidiendo cuáles de los objetivos parciales se van
cumpliendo y cuáles quedan pendientes.
PROGRAMACION LOGICA
Uno de los precursores de la lógica matemática y en consecuencia de la Programación lógica fue
Aristóteles (384-322 a.C.) con su teoría silogística. Esta teoría estudia una clase particular de
implicaciones con dos premisas y una conclusión. También fue tratada por los filósofos
26 de mayo de 2018
contemporáneos a Aristóteles y largamente estudiada en siglos posteriores, aunque no se
produjeron innovaciones de interés hasta el siglo XVII con los trabajos de Descartes y Leibnitz.
Dos siglos después Boole dio un paso importante en el sistema de razonamiento aristotélico
poniendo en relación la lógica y el álgebra. Los trabajos de Boole fueron modificados y ampliados
mas tarde por los lógicos y matemáticos como Jevon, Pierce, Schroeder y Huntington, entre otros.
Llegamos así a finales del siglo XIX y principios del XX con la revolución de la fundamentacion de las
Matemáticas gracias a los trabajos de Frege, Cantor, Peano, Russell, Whitehead, entre otros, que
marcan el periodo más apasionante y de mayor actividad en la historia de la lógica matemática.
En la mitad del siglo XX descubrimos que de forma paralela al desarrollo de la lógica se ha producido
un espectacular avance de las llamadas “máquinas de calcular”, avance sobre el que reflexiona Alan
Turing en un articulo titulado “¿Pueden pensar las máquinas?”, publicado en 1950 y que podemos
dar como punto de partida de lo que después se llamará Inteligencia Artificial.
El primer momento en el que se usa la lógica matemática para representar y ejecutar programas es
en 1930 cuando aparece como una caracteristica de los cálculos lamba desarrollados por Allonzo
Church.
Sin embargo, la primera propuesta para usar la forma causal de la lógica para representar
programas de cómputo fue propuesta por Cordell Green en 1969. Esto utilizó una axiomatización
de un subconjunto de LISP(es una familia de lenguajes de programación de computadora de tipo
multiparadigma con una larga historia y una sintaxis completamente entre paréntesis), junto con
una representación de una relación de entrada-salida, para calcular la relación simulando la
ejecución del programa en LISP.
Por otro lado, Fyster y Elcock's Absys emplearon una combinación de ecuaciones y cálculos
lamba en un lenguaje de programación asercional que no impone restricciones en el orden en que
se realizan las operaciones.
A principios de los 70's en la Universidad de Aix-Marseille I (Marsella, Francia) fue ideado un lenguaje
de programación por los estudiantes Alain Colmerauer y Philippe Roussel. Éste nació de un
proyecto que no tenía como objetivo la traducción de un lenguaje de programación, sino la
clasificación algorítmica de lenguajes naturales. Alain Colmerauer y Robert Pasero trabajaban en la
parte del procesado del lenguaje natural y Jean Trudel y Philippe Roussel en la parte de deducción
e inferencia del sistema. Interesado por el método de resolución SL, Trudel persuadió a Robert
Kowalski para que se uniera al proyecto, dando lugar a una versión preliminar del lenguaje Prolog
a finales de 1971 y apareciendo la versión definitiva en 1972. Esta primera versión de Prolog fue
programada en ALGOL W.
26 de mayo de 2018
A Finales de los 70's Robert Kowalski crea el método de prueba por refutación que emplea el
algoritmo de unificación como mecanismo de base y permite la extracción de respuestas SLD
(Selective Linear Definite clause resolution).
Inicialmente se trataba de un lenguaje totalmente interpretado hasta que en 1983, David H.D.
Warren desarrolló un compilador capaz de traducir Prolog en un conjunto de instrucciones de una
máquina abstracta denominada Warren Abstract Machine, o abreviadamente, WAM. Desde
entonces Prolog es un lenguaje semi-interpretado.
Por lo tanto, se puede concluir que el desarrollo de la programación lógica estuvo motivado por los
investigadores para poder procesar el lenguaje natural y la demostración de teoremas de manera
automática. Actualmente las principales aplicaciones en las que se centra este tipo de programación
es:
- procesamiento del lenguaje natural
- razonamiento automático
- demostración de teoremas
- investigación de base de datos
- sistemas expertos
PROLOG es uno de los lenguajes más representativos de la programación lógica utilizados en
inteligencia artificial.
La programación lógica, junto con la funcional, forma parte de lo que se conoce como programación
declarativa. En los lenguajes tradicionales, la programación consiste en indicar cómo resolver un
problema mediante sentencias; en la programación lógica, se trabaja de una forma descriptiva,
estableciendo relaciones entre entidades, indicando no cómo, sino qué hacer. La ecuación de Robert
Kowalski (Universidad de Edimburgo) establece la idea esencial de la programación lógica:
Algoritmos = lógica + control.
26 de mayo de 2018
Es decir, un algoritmo se construye especificando conocimiento en un lenguaje formal (lógica de
primer orden), y el problema se resuelve mediante un mecanismo de inferencia (control) que actúa
sobre aquél.
PROGRAMACION DECLARATIVA´
Existen una gran cantidad de lenguajes declarativos. En el caso de los funcionales, entre los más
populares están Scheme, Erlang, y otros más nuevos como F#. Para cierto dominio específico. Los
lenguajes de dominio específico comúnmente son utilizados para declarar formulario, por ejemplo
HTML, XAML, XUL e incluso las hojas de cálculo.
En Artech, la empresa donde laboro, tenemos un producto llamado GeneXus que permite crear
aplicaciones de negocio utilizando programación declarativa. La herramienta utiliza lenguajes
declarativos para el modelado de las entidades de negocio, la declaración de reglas de negocio, la
especificación de formularios, y la exposición de datos.
Veamos un ejemplo de cómo nos puede ayudar la programación declarativa. Supongamos un caso
sencillo de un programa que suma los números del 1 al 100. Una posible solución procedural podría
ser un programa similar al siguiente:
int suma = 0;
for (int i = 1 to 100)
suma += i;
return suma;
Una solución declarativa podría ser simplemente:
suma = Sum(1, 100)
Dado este ejemplo sencillo, lo primero que uno advierte es que se necesita un lenguaje de más alto
nivel que dé soporte a las cosas que declaramos: en este caso alguien tiene que implementar el
Sum, y el programador no tiene idea cómo se está resolviendo el proceso de la suma.
26 de mayo de 2018
Referencias
- http://eia.udg.es/~iitap/monografia/esp/arl4_8.html
- http://www.amzi.com/articles/code07_whitepaper.pdf
- http://www.cs.us.es/~fsancho/?e=103
- http://princesas-guapetones.blogspot.mx/2010/09/modus-tollens-i-modus-
ponens_29.html
- https://sg.com.mx/revista/24/programacion-declarativa
-
26 de mayo de 2018