Publicado el 2 de Diciembre del 2018
2.035 visualizaciones desde el 2 de Diciembre del 2018
104,2 KB
34 paginas
Creado hace 7a (06/02/2017)
El lenguaje CLIPS
Javier Béjar
Intel·lig`encia Artificial 2016/2017
Facultat d’Inform`atica de Barcelona
El sistema CLIPS
El sistema CLIPS
• CLIPS es un entorno para desarrollar sistemas expertos
• Este define un lenguaje que permite la representación de
conocimiento declarativo y procedimental
• Su lenguaje permite representar reglas de producción y frames
• Su base es un motor de inferencias con razonamiento hacia
adelante
• El motor de inferencias esta implementado sobre un intérprete
del lenguaje
IA 2016/2017 - Facultat d’Inform`atica de Barcelona
1
El lenguaje de CLIPS
• El lenguaje CLIPS deriva su sintaxis del lenguaje LISP
• Se trata de un lenguaje parentizado con notación prefija
• Los tipos de datos predefinidos que nos interesarán son:
reales, enteros, strings, símbolos, apuntador a hechos, nombre
de instancia y apuntador a instancia.
• Los tipos habituales poseen los operadores mas comunes
• El lenguaje de CLIPS auna tres paradigmas de programación:
lenguaje de reglas, lenguaje funcional, lenguaje orientado a
objetos
IA 2016/2017 - Facultat d’Inform`atica de Barcelona
2
El leguaje de reglas
El lenguaje de reglas de CLIPS - Hechos
• Los dos elementos que permiten representar problemas
utilizando reglas de producción son los hechos y las reglas.
• Los hechos en CLIPS pueden ser de dos tipos ordered facts y
deftemplate facts
• Los Ordered Facts tienen formato libre, por lo tanto no tienen
una estructura predefinida, siguen el esquema:
(relacion p1 p2 ... pn)
• relación ha de ser un símbolo, el resto de parámetros puede
ser de cualquier tipo, por ejemplo
(padre juan pedro)
(num-hijos juan 2)
IA 2016/2017 - Facultat d’Inform`atica de Barcelona
3
El lenguaje de reglas de CLIPS - deftemplates
• Los deftemplate facts tienen una estructura predefinida,
podrían asimilarse a representaciones al estilo de los frames.
• Definimos una serie de campos (slots). Cada campo puede
tener una serie de restricciones como tipo, cardinalidad y un
valor por defecto (constante o función para calcularlo)
(deftemplate nombre-template "comentario"
(slot nombre-slot)
(multislot nombre-slot))
• Por ejemplo:
(deftemplate persona
(slot nombre (type STRING))
(slot edad (type INTEGER) (default 0)))
IA 2016/2017 - Facultat d’Inform`atica de Barcelona
4
El lenguaje de reglas de CLIPS - crear hechos
• La creación de hechos se realiza mediante la sentencia assert
(uno solo) o deffacts (un conjunto), por ejemplo:
(assert (padre pepe juan))
(assert (persona (nombre "pedro") (edad 25)))
(deffacts mis-hechos
(casa roja) (pelota verde)
(persona (nombre "luis") (edad 33)))
IA 2016/2017 - Facultat d’Inform`atica de Barcelona
5
El lenguaje de reglas de CLIPS - hechos
• (facts) permite saber que hechos hay definidos
• (clear) borra todos los hechos definidos
• (retract <indice-hecho>) elimina el hecho identificado
por el indice dado
• (get-deftemplate-list) retorna la lista de deftemplates
definidos
IA 2016/2017 - Facultat d’Inform`atica de Barcelona
6
El lenguaje de reglas de CLIPS - reglas
• Las reglas en CLIPS estan formadas por:
• Una parte izquierda (LHS) que define las condiciones a cumplir
• Una parte derecha (RHS) que define las acciones a realizar
• Sintaxis:
(defrule nombre-regla "comentario"
(condicion-1) (condicion-2) ...
=>
(accion-1) (accion-2) ...)
IA 2016/2017 - Facultat d’Inform`atica de Barcelona
7
El lenguaje de reglas de CLIPS - variables
• Las variables definen patrones en las condiciones de las reglas
• Se denotan poniendo un interrogante delante del nombre
(?variable)
• Existen variables anónimas (no importa su valor) para un valor
? o para múltiples valores $?
• Durante la ejecución se nstanciarán las variables de las reglas
con valores que permitan cumplir sus condiciones
• Las variables de las reglas son locales, si queremos definir
variables globales debemos usar la construcción defglobal
(las variables globales se denotan ?*variable*)
IA 2016/2017 - Facultat d’Inform`atica de Barcelona
8
El lenguaje de reglas de CLIPS - LHS
• En la parte izquierda de una regla pueden aparecer diferentes
tipos de condiciones
• Patrones constantes, con variables o con wildcards: se
instancian directamente con hechos en la base de hechos
• Expresiones not, and, or, exist y forall con patrones
• Tests de expresiones sobre las variables vinculadas (test)
• Los patrones indican qué tipo de hechos deben instanciar las
reglas, estos se establecen a través de restricciones sobre
variables o valores constantes
• Estas restricciones se pueden combinar mediante conectivas
logicas ~ (no), & (y) y | (o)
• También se pueden usar condiciones complejas precedidas de :
IA 2016/2017 - Facultat d’Inform`atica de Barcelona
9
El lenguaje de reglas de CLIPS - ejemplos
• Persona mayor de 18 años:
(persona (edad ?x&:(> ?x 18)))
• Persona de nombre juan o pedro:
(persona (nombre juan|pedro))
• Dos personas con nombres diferentes:
(persona (nombre ?x))
(persona (nombre ?y&~?x))
• Nadie se llama pedro: (not (persona (nombre pedro)))
• Todo el mundo es mayor de edad:
(forall (persona (nombre ?n) (edad ?x)) (test (> ?x 18)))
IA 2016/2017 - Facultat d’Inform`atica de Barcelona
10
El lenguaje de reglas de CLIPS
• Podemos obtener la dirección del hecho que instancia un
patrón mediante el operador <-, por ejemplo:
(defrule mi-regla
?x <- (persona (nombre juan))
=>
(retract ?x)
)
• En la parte derecha de las reglas podemos poner cualquier
sentencia válida en clips (ver manual)
IA 2016/2017 - Facultat d’Inform`atica de Barcelona
11
El lenguaje de reglas de CLIPS - módulos
• Las reglas de CLIPS se organizan en módulos
• Permiten estructurar el conocimiento y poder focalizar la
ejecución de las reglas según su objetivo
• La definición de un módulo se realiza mediante la construcción
(defmodule <nombre> "comentario" <export-import>)
• Nada de lo definido en un módulo es visible salvo que lo
exportemos
• Para utilizar construcciones de otro módulo tambien tenemos
que importarlas explícitamente
• Existe un módulo por defecto llamado MAIN al que pertenece
todo lo no definido en otro módulo
IA 2016/2017 - Facultat d’Inform`atica de Barcelona
12
El lenguaje de reglas de CLIPS - módulos
• La exportación de construcciones de un módulo se realiza
incluyendo la sentencia export en su definición. Podemos
exportar cualquier cosa que definamos, por ejemplo:
(defmodule A (export deftemplate cubo))
(defmodule A (export deftemplate ?ALL))
• La importación de construcciones a un módulo se realiza
incluyendo la sentencia import en su definición. Podemos
importar cualquier cosa visible que este definida en otro
módulo, por ejemplo:
(defmodule B (import A deftemplate cubo))
IA 2016/2017 - Facultat d’Inform`atica de Barcelona
13
El lenguaje de reglas de CLIPS - foco
• Podemos restringir qué módulos se usan para la ejecución de
reglas mediante la sentencia (focus <modulo>*)
• Esta sentencia se puede incluir en la parte derecha de una
regla para poder cambiar explícitamente de módulo
• Se puede hacer que la ejecución se focalice en el módulo de la
última regla ejecutada declarando la propiedad auto-focus
en una regla, por ejemplo:
(defrule JUAN::mi-regla
(declare (auto-focus TRUE))
(persona (nombre juan))
=> ...
IA 2016/2017 - Facultat d’Inform`atica de Barcelona
14
Estrategias de resolución de conflicto
El intérprete de reglas tiene definidas unas estrategias de resolución
de conflicto
• Profundidad, las nuevas activaciones pasan al principio
• Anchura, las nuevas activaciones pasan al final
• Simplicidad, ante la misma posibilidad de activar, se prefiere
las menos específicas (especificidad medida respecto a la
complejidad de las condiciones)
• Complejidad, tienen preferencia las reglas más específicas
IA 2016/2017 - Facultat d’Inform`atica de Barcelona
15
Estrategias de resolución de conflicto
• Estrategia LEX, recencia de los hechos instanciados, tomando
los hechos instanciados ordenadamente en cada regla y
siguiendo orden lexicográfico de recencia
• Estrategia MEA, Se ordenan por recencia respecto al hecho
que instancia la primera condición, en caso de empate se sigue
la estrategia LEX
• Aleatoria, se disparan las reglas en orden aleatorio
IA 2016/2017 - Facultat d’Inform`atica de Barcelona
16
El lenguaje funcional de CLIPS
El lenguaje de programación de CLIPS
• CLIPS incluye un lenguaje de programación funcional
• Éste permite definir nuevas funciones o programar las acciones
a realizar en la parte derecha de las reglas
• Toda sentencia o estructura de control es una función que
recibe unos parámetros y retorna un resultado (paradigma
funcional)
IA 2016/2017 - Facultat d’Inform`atica de Barcelona
17
El lenguaje de programación de CLIPS - Sentencias
• Asignación a una variable, retorna el valor asignado
• Sentencia alternativa, retorna el valor de la última acción
(bind <var> <valor>)
evaluada
(if <exp> then <accion>* [else <accion>*])
• Bucle condicional, retorna falso, excepto si hay una sentencia
de retorno que rompa el bucle
(while <exp> do <accion>*)
• Bucle sobre un rango de valores, retorna falso, excepto si hay
una sentencia de retorno
(loop-for-count (<var> <v-i> <v-f>) do <accion>*)
IA 2016/2017 - Facultat d’Inform`atica de Barcelona
18
El lenguaje de programación de CLIPS - Sentencias
• Ejecuta un conjunto de sentencias secuencialmente, retorna el
valor de la última
• Romper la ejecución de la estructura de control retornando el
(progn <accion>*)
valor de la expresión
• Romper la ejecución de una estructura de control
(return <expr>)
(break)
• Estructura alternativa caso, cada case hace una comparación
con el valor evaluado. Retorna la última expresión evaluada o
falso si ninguna sentencia case se cumple
(switch <expr> (case (<comp>) then <accion>*)*
[(default <accion>*)])
IA 2016/2017 - Facultat d’Inform`atica de
Comentarios de: El lenguaje Clips (0)
No hay comentarios