IERL 2.1 - PowerPoint PPT Presentation

About This Presentation
Title:

IERL 2.1

Description:

IERL 2.1 Jos Ignacio Aguillo Mendi pantic_at_infonegocio.com 452446_at_cepsz.unizar.es ISBC Curso 2001-02 Situaci n de partida El sistema experto basado en reglas y ... – PowerPoint PPT presentation

Number of Views:22
Avg rating:3.0/5.0
Slides: 38
Provided by: Jos996
Category:
Tags: ierl | henry | patrick

less

Transcript and Presenter's Notes

Title: IERL 2.1


1
IERL 2.1
  • José Ignacio Aguillo Mendi

pantic_at_infonegocio.com 452446_at_cepsz.unizar.es
ISBC Curso 2001-02
2
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

3
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.

4
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 gt en la poscondición podremos ejecutar
una sola instrucción LISP (uso de progn para
más).
5
Estructura anterior de una regla
  • (ltnombregt
  • ltafirmación antecedente 1gt
  • ltafirmación antecedente 2gt
  • ltafirmación antecedente ngt
  • ltafirmación consecuentegt)

6
Nueva estructura de una regla
  • (ltnombregt
  • ltafirmación antecedente 1gt
  • ltafirmación antecedente 2gt
  • ltafirmación antecedente ngt
  • ltinstrucción LISPgt)

7
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).

8
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)

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

10
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).

11
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.
  • ( _)

12
Ejemplos
  • gt (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))) ...)

13
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.

14
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.
  • gt (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 gt si el dato
    es muy largo, mayor número de posibilidades,
    aunque quizá sólo una buena gt muy lento.

15
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.

16
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.

17
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.

18
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.

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

20
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.

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

22
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.

23
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.

24
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))

25
Ejemplos el mundo de bloques sin variables (2)
  • (recuerda-regla
  • '(mover-bloque-sobre-bloque
  • ((? objetivo)lt-(objetivo (? objeto-1)
    esta-encima-del (? objeto-2)))
  • (bloque (? objeto-1))
  • (bloque (? objeto-2))
  • (estado nada esta-encima-del (? objeto-1))
  • ((? pila-1)lt-(estado (? objeto-1)
    esta-encima-del (? objeto-3)))
  • ((? pila-2)lt-(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)))))

26
Ejemplos el mundo de bloques sin variables (3)
  • (recuerda-regla
  • '(mover-bloque-al-suelo
  • ((? objetivo)lt-(objetivo (? objeto-1)
    esta-encima-del suelo))
  • (bloque (? objeto-1))
  • (estado nada esta-encima-del (? objeto-1))
  • ((? pila)lt-(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)))))

27
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)))))

28
Ejemplos el mundo de bloques sin variables (5)
  • gt (ejemplo-7)
  • gt (watch 'afirmaciones)
  • gt (encadenamiento-progresivo)
  • gt (objetivo d esta-encima-del suelo)
  • lt (objetivo d esta-encima-del suelo)
  • lt (estado d esta-encima-del e)
  • gt (estado d esta-encima-del suelo)
  • gt (estado nada esta-encima-del e)
  • d movido encima del suelo.

29
Ejemplos el mundo de bloques sin variables (6)
  • gt (objetivo b esta-encima-del suelo)
  • gt (objetivo a esta-encima-del suelo)
  • lt (objetivo a esta-encima-del suelo)
  • lt (estado a esta-encima-del b)
  • gt (estado a esta-encima-del suelo)
  • gt (estado nada esta-encima-del b)
  • a movido encima del suelo.
  • lt (objetivo b esta-encima-del suelo)
  • lt (estado b esta-encima-del c)
  • gt (estado b esta-encima-del suelo)
  • gt (estado nada esta-encima-del c)
  • b movido encima del suelo.
  • lt (objetivo c esta-encima-del e)
  • lt (estado c esta-encima-del suelo)
  • lt (estado nada esta-encima-del e)
  • gt (estado c esta-encima-del e)
  • gt (estado nada esta-encima-del suelo)
  • c movido encima del e.
  • hecho

30
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))

31
Ejemplos el mundo de bloques con variables (2)
  • (recuerda-regla
  • '(mover-bloque-sobre-bloque
  • ((? objetivo)lt-(objetivo (? bloque-1)
    esta-encima-del (? bloque-2)))
  • ((? pila-1)lt-(pila (? bloque-1) (
    resto-1)))
  • ((? pila-2)lt-(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)))))

32
Ejemplos el mundo de bloques con variables (3)
  • (recuerda-regla
  • '(mover-bloque-al-suelo
  • ((? objetivo)lt-(objetivo (? bloque-1)
    esta-encima-del suelo))
  • ((? pila)lt-(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)))))

33
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)))))

34
Ejemplos el mundo de bloques con variables (5)
  • gt (ejemplo-8)
  • gt (watch 'afirmaciones)
  • gt (encadenamiento-progresivo)
  • gt (objetivo d esta-encima-del suelo)
  • lt (objetivo d esta-encima-del suelo)
  • lt (pila d e f)
  • gt (pila d)
  • gt (pila e f)
  • d movido encima del suelo.

35
Ejemplos el mundo de bloques con variables (6)
  • gt (objetivo a esta-encima-del suelo)
  • lt (objetivo a esta-encima-del suelo)
  • lt (pila a b c)
  • gt (pila a)
  • gt (pila b c)
  • a movido encima del suelo.
  • gt (objetivo b esta-encima-del suelo)
  • lt (objetivo b esta-encima-del suelo)
  • lt (pila b c)
  • gt (pila b)
  • gt (pila c)
  • b movido encima del suelo.
  • lt (objetivo c esta-encima-del e)
  • lt (pila c)
  • lt (pila e f)
  • gt (pila)
  • gt (pila c e f)
  • c movido encima del e.
  • hecho

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

37
FIN
IERL 2.1
José Ignacio Aguillo Mendi
pantic_at_infonegocio.com 452446_at_cepsz.unizar.es
ISBC Curso 2001-02
Write a Comment
User Comments (0)
About PowerShow.com