IERL 2.1 José Ignacio Aguillo Mendi ISBC Curso 2001-02

Slides:



Advertisements
Presentaciones similares
Rogelio Dávila Pérez Profesor - Investigador
Advertisements

INTEGRANTES Aguilar Pastor, Sara Blancas Tunqui, Alicia
Cómo introducir información y editar contenidos en un curso Esta presentación nos va a permitir realizar la tarea de insertar el título a cada tema que.
Alumno: Roy R. Mercado Núñez
LICENCIATURA EN SISTEMAS COMPUTACIONALES EN ADMINISTRACION
Curso de Java Capitulo 7: Continuación Poo Profesor:
Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
Mercadotecnia Electrónica
ESTRATEGIAS RELACIONADAS CON LOS PARTIDOS. 1.OBJETIVOS 2.ACTITUD DEL ENTRENADOR 3.ACTUACIÓN DEL ENTRENADOR.
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
POO Santiago, Mayo 2004 TRABAJO DE INVESTIGACIÓN POO Programación Orientada a Objetos CENAFOM Carolina Bravo V. Jaime Jofré B.
Combinadores SK.
Tipo de Dato Abstracto Tipos de datos:
Capitulo 4 Excepciones.
Tema II Unidad de memoria. 2 Unidad de memoria 2.1 Definiciones y conceptos básicos Localización Capacidad Unidad de transferencia
Introducción a la programación
Teoría de lenguajes y compiladores
Johanna Lizeth Rodríguez Lorena Fda. Chávarro Ramos
Tema 3. Optimización de Código
Variables e Hipótesis de Investigación
Profesor: Luigi Ceccaroni Curso FIB - UPC
Estructuración y modularidad de los programas Fundamentos de Programación/ Programación I
Tema 6: Clases Antonio J. Sierra.
PROGRAMACIÓN LÓGICA.
TRADUCTOR DE UN PROGRAMA
Temas importantes para el desarrollo de la segunda parte del TPE
Almacenar variables en cookies en PHP
DISEÑO DE LA INTERFAZ DE USUARIO
Estructura de Datos y Algoritmos
Comentarios en PHP Programación en Internet II. Comentarios en PHP Programación en Internet II Universidad de Guadalajara | Centro Universitario de la.
SOFTWARE DE PROGRAMACIÓN
SISTEMAS EXPERTOS 2004 QUÉ ES CLISP ?. INTRODUCCIÓN A CLISP Características Generales: -Fácil implementación y modificación: rapidez para demostrar algoritmos.
SEMANA 9_3.
SISTEMAS ADAPTATIVOS Y FILTRADO
Aplicación de estructuras de datos
Copiando y pegando archivos enteros Programación en Internet II.
Presentado por : paula angélica rodríguez Guillermo paula angélica rodríguez Guillermo Dirigido a Ing. Ariel Almonacid arias Ing. Ariel Almonacid arias.
Lenguajes de programación. Lenguaje máquina El ordenador sólo sabe hacer un número limitado de tareas (muy pocas) definidas electrónicamente en su procesador.
Listas Ligadas Simples. Definíción I  Es, en sencillas palabras. un grupo de datos organizados secuencialmente, pero a diferencia de los arreglos, la.
ANALIS DE METODOS Y MEDIOS
CONTRATOS UML.
El modelo de análisis tiene como objetivo generar una arquitectura de objetos que sirva como base para el diseño posterior del sistema. Dependiendo del.
La pregunta y el problema de investigación
Son estructuras de datos que almacenan y recuperan sus elementos atendiendo a un estricto orden (LIFO Last – in, first –out Ultimo en entrar – primero.
Términos algoritmo diseñar algoritmo implementar algoritmo
Metodología de la programación
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.
Por Carlos Pérez Serrano 1º F nº 21 Segunda Evaluación.
La Cultura de Calidad.
INSTITUTO TECNOLOGICO DE APIZACO
INSTRUCCIONES. El alumno, seguirá los pasos que se le va indicando a continuación. En el recuadro en blanco, debe ir añadiendo un pantallazo con la.
Por Luis Esteban Monsalve Martínez
Crear fuerzas de trabajo multisectoriales o comités de acción para la iniciativa.
Teoría de lenguajes y compiladores
Sistemas Basados en Reglas
Desarrollo de sistemas expertos basados en reglas
Tipos de Lenguajes Ensamblador.
Técnica Profesional en Programación de Sistemas de Información CONSTRUCCIÓN DE ELEMENTOS DE SOFTWARE 1 CURSO CONSTRUCCIÓN DE ELEMENTOS DE SOFTWARE 1 SESIÓN.
MIA - Grupo 5 Unidad 2.
DISPARADORES Y SISTEMAS DE GESTION DE BASE DE DATOS DE SQL
Objetivos del tema. Hemos visto lo que es la estructura de un programa, los datos, que esos datos en realidad se convierten en variables de distinto.
Lenguaje de Programación LISP
También es conocido como proceso ligero. Es una entidad básica de utilización de CPU y esta formado por un contador de programa, algunos registros y una.
Este curso de introducción a Wordpress es un curso de creación un blog desde 0, en el aprenderemos los fundamentos de un blog y por qué son tan famosos.
Curso: Fundamentos de Computación
Desarrollo de Sistemas Expertos
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Prof. Jonathan Silva Ingeniería Civil – Informática I Ingeniería Civil Informática I Clase 3 – Diseño de Programas.
Omar Herrera Caamal Rigoberto Lizárraga Luis Cetina Luna.
Transcripción de la presentación:

IERL 2.1 José Ignacio Aguillo Mendi ISBC Curso

Situación de partida … El sistema experto basado en reglas y encadenamiento progresivo propuesto en el libro de Winston, con sus virtudes y defectos. Otras cosas irrelevantes para las modificaciones realizadas…

Primeras ideas … Añadir la posibilidad de insertar más de un hecho en las poscondiciones de las reglas. Añadir la posibilidad de ejecutar código LISP en las poscondiciones de las reglas.

Pensando un poco más … Añadir la posibilidad de ejecutar código LISP en las poscondiciones de las reglas. La ejecución de código LISP en la poscondición permite la definición de funciones para asertar hechos => en la poscondición podremos ejecutar una sola instrucción LISP (uso de progn para más).

Estructura anterior de una regla ( … )

Nueva estructura de una regla ( … )

Ejemplo de regla (mover-bloque-sobre-bloque (objetivo (? objeto-1) esta-encima-del (? objeto-2)) (bloque (? objeto-1)) (bloque (? objeto-2)) (estado nada esta-encima-del (? objeto-1)) (estado (? objeto-1) esta-encima-del (? objeto-3)) (estado nada esta-encima-del (? objeto-2)) (progn (retract! '(objetivo (? objeto-1) esta-encima-del (? objeto-2))) (retract! '(estado (? objeto-1) esta-encima-del (? objeto-3))) (retract! '(estado nada esta-encima-del (? objeto-2))) (assert! '(estado (? objeto-1) esta-encima-del (? objeto-2))) (assert! '(estado nada esta-encima-del (? objeto-3))) (format t "~&~a movido encima del ~a.~%" '(? objeto-1) '(? objeto-2)))) Observar también la utilización de las funciones assert! (para asertar hechos) y retract! (para retirarlos de la memoria de trabajo).

Cambios en el código … En lugar de intentar recordar la afirmación del consecuente, se evalúa el propio consecuente ya que es código LISP. … (let ((primera-regla (prim-reg-ag *agenda*) (resultado (FC-particulariza-variables (consecuente-de-la-regla regla) (ligaduras-regla-ag primera-regla)))) (eval resultado) …

Más ideas … Implementar variables de patrón de tipo lista como ($ ). Introduce mayor complejidad, debido a la posibilidad de más de una correspondencia entre un mismo patrón y dato.

Variable de patrón de tipo lista … Esto obliga a que la función que realiza la correspondencia de un patrón (antecedente) con un dato (hecho) pueda devolver o bien una lista de ligaduras (si no hay variable lista), o bien una lista de listas de ligaduras (si hay alguna variable de lista en el patrón).

Variable de patrón de tipo lista (2) … Por supuesto, podremos tener predicados sobre las variables de tipo lista, del mismo modo que lo teníamos con las variables normales. ($ x longitud-tres) También podremos utilizar variables de tipo lista anónimas. ($ _)

Ejemplos … > (corresponde '(($ x)($ y)($ z)) '(hola a b c adios)) (((z (hola a b c adios)) (y nil) (x nil)) ((z (a b c adios)) (y (hola)) (x nil)) ((z (b c adios)) (y (hola a)) (x nil)) ((z (c adios)) (y (hola a b)) (x nil)) ((z (adios)) (y (hola a b c)) (x nil)) ((z nil) (y (hola a b c adios)) (x nil)) ((z (a b c adios)) (y nil) (x (hola))) ((z (b c adios)) (y (a)) (x (hola))) ((z (c adios)) (y (a b)) (x (hola))) ((z (adios)) (y (a b c)) (x (hola)))...)

Inconvenientes … La aparición de variables de tipo lista en los antecedentes provocan una explosión combinatoria de posibles valores para dichas variables. Los distintos valores se obtienen con la función genera-posibilidades.

La función genera-posibilidades Toma como argumento una lista y devuelve una lista con todos los posibles valores que puede tomar una variable de tipo lista y el resto de la propia lista. > (genera-posibilidades '(a b c)) ((nil a b c) ((a) b c) ((a b) c) ((a b c))) Esto se realiza cada vez que se encuentra en el patrón una variable de tipo lista => si el dato es muy largo, mayor número de posibilidades, aunque quizá sólo una buena => muy lento.

Más ideas … Ante la ausencia de un control sobre el disparo de las reglas, se plantea la creación de una agenda que mantenga las reglas sensibilizadas, tanto disparadas como no disparadas.

La agenda Implementación de la agenda como una lista, donde cada elemento está formado por el nombre de la regla sensibilizada, los hechos que la sensibilizan, las ligaduras que dan lugar a esos hechos y un valor que indica si la regla ya ha sido disparada o no. Por tanto, se va a considerar la refracción.

La agenda (2) La agenda se ordenará según una estrategia de control (MEA), pudiendo ser implementada cualquier otra con relativa facilidad y teniendo en cuenta que las reglas ya disparadas siempre estarán al final de la agenda.

La agenda (3) La operación de retirar un hecho de la memoria de trabajo (retract!) trae consigo no sólo eliminarlo de la memoria de trabajo, sino también retirar de la agenda aquellas reglas, disparadas o no, que tengan ese hecho como uno de los que la sensibilizan.

Algoritmo principal (defun encadenamiento-progresivo () (prueba-reglas) (do () ((agenda-vacia?) 'HECHO) (ordena-reglas) (dispara-primera-regla) (prueba-reglas)))

Ligar variables con hechos Ligar variables con hechos es muy importante, ya que nos evita tener que escribir, en muchas ocasiones, hechos completos. Si la longitud del hecho es considerable, se apreciará la validez de esta característica.

Ligar variables con hechos (2) Podemos ligar variables con hechos en las precondiciones de una regla de la siguiente forma: ((? ) ) Podemos utilizarlo, por ejemplo, para retirar hechos: (retract! '(? ))

Otras contribuciones Otras funciones realizadas de utilidad para un posible usuario del sistema son: ver-afirmaciones: muestra los hechos de la memoria de trabajo en un momento determinado. clear: borra los hechos de memoria de trabajo y vacía la agenda. watch: permite ver hechos y/o reglas conforme se van asertando, retirando o disparando. unwatch: desactiva la funcionalidad aportada por la función watch. prueba-reglas: introduce en la agenda las instancias de reglas sensibilizadas.

Otras contribuciones (2) ordena-reglas: ordena las instancias de reglas en la agenda según un criterio especificado, dicho criterio puede ser cambiado por el usuario con relativa facilidad. dispara-primera-regla: dispara la primera regla de la agenda. ver-agenda: permite ver la situación de la agenda en un momento determinado.

Ejemplos: el mundo de bloques sin variables $ (defun ejemplo-7 () (clear) (recuerda-afirmacion '(bloque A)) (recuerda-afirmacion '(bloque B)) (recuerda-afirmacion '(bloque C)) (recuerda-afirmacion '(bloque D)) (recuerda-afirmacion '(bloque E)) (recuerda-afirmacion '(bloque F)) (recuerda-afirmacion '(estado nada esta-encima-del A)) (recuerda-afirmacion '(estado A esta-encima-del B)) (recuerda-afirmacion '(estado B esta-encima-del C)) (recuerda-afirmacion '(estado C esta-encima-del suelo)) (recuerda-afirmacion '(estado nada esta-encima-del D)) (recuerda-afirmacion '(estado D esta-encima-del E)) (recuerda-afirmacion '(estado E esta-encima-del F)) (recuerda-afirmacion '(estado F esta-encima-del suelo)) (recuerda-afirmacion '(objetivo C esta-encima-del E)) A B C D E F

Ejemplos: el mundo de bloques sin variables $ (2) (recuerda-regla '(mover-bloque-sobre-bloque ((? objetivo)<-(objetivo (? objeto-1) esta-encima-del (? objeto-2))) (bloque (? objeto-1)) (bloque (? objeto-2)) (estado nada esta-encima-del (? objeto-1)) ((? pila-1)<-(estado (? objeto-1) esta-encima-del (? objeto-3))) ((? pila-2)<-(estado nada esta-encima-del (? objeto-2))) (progn (retract! '(? objetivo)) (retract! '(? pila-1)) (retract! '(? pila-2)) (assert! '(estado (? objeto-1) esta-encima-del (? objeto-2))) (assert! '(estado nada esta-encima-del (? objeto-3))) (format t "~&~a movido encima del ~a.~%" '(? objeto-1) '(? objeto-2)))))

Ejemplos: el mundo de bloques sin variables $ (3) (recuerda-regla '(mover-bloque-al-suelo ((? objetivo)<-(objetivo (? objeto-1) esta-encima-del suelo)) (bloque (? objeto-1)) (estado nada esta-encima-del (? objeto-1)) ((? pila)<-(estado (? objeto-1) esta-encima-del (? objeto-2))) (progn (retract! '(? objetivo)) (retract! '(? pila)) (assert! '(estado (? objeto-1) esta-encima-del suelo)) (assert! '(estado nada esta-encima-del (? objeto-2))) (format t "~&~a movido encima del suelo.~%" '(? objeto-1)))))

Ejemplos: el mundo de bloques sin variables $ (4) (recuerda-regla '(libera-bloque-movible (objetivo (? objeto-1) esta-encima-del (? _)) (bloque (? objeto-1)) (estado (? objeto-2) esta-encima-del (? objeto-1)) (bloque (? objeto-2)) (assert! '(objetivo (? objeto-2) esta-encima-del suelo)))) (recuerda-regla '(libera-bloque-soporte (objetivo (? _) esta-encima-del (? objeto-1)) (bloque (? objeto-1)) (estado (? objeto-2) esta-encima-del (? objeto-1)) (bloque (? objeto-2)) (assert! '(objetivo (? objeto-2) esta-encima-del suelo)))))

Ejemplos: el mundo de bloques sin variables $ (5) > (ejemplo-7) … > (watch ' afirmaciones) … > (encadenamiento-progresivo) => (objetivo d esta-encima-del suelo) <= (objetivo d esta-encima-del suelo) <= (estado d esta-encima-del e) => (estado d esta-encima-del suelo) => (estado nada esta-encima-del e) d movido encima del suelo.

Ejemplos: el mundo de bloques sin variables $ (6) => (objetivo b esta-encima-del suelo) => (objetivo a esta-encima-del suelo) <= (objetivo a esta-encima-del suelo) <= (estado a esta-encima-del b) => (estado a esta-encima-del suelo) => (estado nada esta-encima-del b) a movido encima del suelo. <= (objetivo b esta-encima-del suelo) <= (estado b esta-encima-del c) => (estado b esta-encima-del suelo) => (estado nada esta-encima-del c) b movido encima del suelo. <= (objetivo c esta-encima-del e) <= (estado c esta-encima-del suelo) <= (estado nada esta-encima-del e) => (estado c esta-encima-del e) => (estado nada esta-encima-del suelo) c movido encima del e. hecho

Ejemplos: el mundo de bloques con variables $ (defun ejemplo-8 () (clear) (recuerda-afirmacion '(pila A B C)) (recuerda-afirmacion '(pila D E F)) (recuerda-afirmacion '(objetivo C esta-encima-del E)) A B C D E F

Ejemplos: el mundo de bloques con variables $ (2) (recuerda-regla '(mover-bloque-sobre-bloque ((? objetivo)<-(objetivo (? bloque-1) esta-encima-del (? bloque-2))) ((? pila-1)<-(pila (? bloque-1) ($ resto-1))) ((? pila-2)<-(pila (? bloque-2) ($ resto-2))) (progn (retract! '(? objetivo)) (retract! '(? pila-1)) (retract! '(? pila-2)) (assert! '(pila ($ resto-1))) (assert! '(pila (? bloque-1) (? bloque-2) ($ resto-2))) (format t "~&~a movido encima del ~a.~%" '(? bloque-1) '(? bloque-2)))))

Ejemplos: el mundo de bloques con variables $ (3) (recuerda-regla '(mover-bloque-al-suelo ((? objetivo)<-(objetivo (? bloque-1) esta-encima-del suelo)) ((? pila)<-(pila (? bloque-1) ($ resto))) (progn (retract! '(? objetivo)) (retract! '(? pila)) (assert! '(pila (? bloque-1))) (assert! '(pila ($ resto))) (format t "~&~a movido encima del suelo.~%" '(? bloque-1)))))

Ejemplos: el mundo de bloques con variables $ (4) (recuerda-regla '(libera-bloque-movible (objetivo (? bloque) esta-encima-del (? _)) (pila (? cima) ($ _) (? bloque) ($ _)) (assert! '(objetivo (? cima) esta-encima-del suelo)))) (recuerda-regla '(libera-bloque-soporte (objetivo (? _) esta-encima-del (? bloque)) (pila (? cima) ($ _) (? bloque) ($ _)) (assert! '(objetivo (? cima) esta-encima-del suelo)))))

Ejemplos: el mundo de bloques con variables $ (5) > (ejemplo-8) … > (watch 'afirmaciones) … > (encadenamiento-progresivo) => (objetivo d esta-encima-del suelo) <= (objetivo d esta-encima-del suelo) <= (pila d e f) => (pila d) => (pila e f) d movido encima del suelo.

Ejemplos: el mundo de bloques con variables $ (6) => (objetivo a esta-encima-del suelo) <= (objetivo a esta-encima-del suelo) <= (pila a b c) => (pila a) => (pila b c) a movido encima del suelo. => (objetivo b esta-encima-del suelo) <= (objetivo b esta-encima-del suelo) <= (pila b c) => (pila b) => (pila c) b movido encima del suelo. <= (objetivo c esta-encima-del e) <= (pila c) <= (pila e f) => (pila) => (pila c e f) c movido encima del e. hecho

Para saber más … Temas 24, 25, 26 y 27 del libro “LISP” 3ª edición de Patrick Henry Winston & Berthold Klaus Paul Horn

FIN IERL 2.1 José Ignacio Aguillo Mendi ISBC Curso