Introduccion clips

Preview:

Citation preview

INTELIGENCIA ARTIFICIAL

Introducción a CLIPS

Oscar Mauricio Salazar Ospina.

Correo: omsalazaro@gmail.com

¿QUÉ ES CLIPS?Herramienta para la construcción de sistemas expertos.

Creado en 1984 en el centro de Investigaciones Espaciales Johnson de la Nasa en USA.

CLIPS La versión mas reciente es la 6.30

Desde la versión 6.21 soporta paradigmas de programación:

Basado en reglasProceduralOrientado a objetos

VENTAJAS

Portable Bajo Costo Integración con otros lenguajes

CARACTERÍSTICAS

Diseñado para facilitar integración con otros lenguajes.

Puede llamarse desde otros lenguajes.

Puede llamar a funciones externas, que devuelven la salida y el control a CLIPS.

COMPONENTES BÁSICOS

Base de Hechos: Lista de datos introducidos e inferidos.

Base de Conocimiento: Reglas, funciones, ...

Mecanismo de Inferencias: Controla la ejecución.

NOTACIÓN Las palabras claves y las funciones propias de CLIPS van en minúsculas

Distingue mayúsculas y minúsculas. Ej: jUAN, Juan, JUAN

CARACTERES DELIMITADORES

CARACTER

USO

; COMENTARIO“ INICIO O FINAL DE UN

STRING( INICIO DE UNA EXPRESIÓN) FINAL DE UNA EXPRESIÓN? INICIO DE UNA VARIABLE

COMODÍN$ INICIO DE UNA VARIABLE

MULTICAMPO

TIPOS DE DATOSNuméricos

Reales (FLOAT): Ej.: 1.5, -0.7, 3.5e-10 Enteros (INTEGER): Ej.: 1, -1, +3, 65

Simbólicos Símbolos (SYMBOL): Cualquier secuencia

de caracteres que no siga el formato de un número, excluyendo ciertos caracteres. Ej: casa, arbol, perro

Cadenas (STRING): Cualquier secuencia de caracteres entre comillas. Ej: “Juan Molina”, “Casa del árbol”

VALORES UNICAMPO Y MULTICAMPO

Valor Unicampo: Cualquier valor de los tipos de datos anteriores.

Valor Multicampo: Secuencia de cero o más valores Unicampo entre paréntesis.

Ejemplos de Valores Multicampo: ( ) (x) (hola) (hola “rojo” 23) No es lo mismo el valor Unicampo

hola que el valor Multicampo (hola).

FUNCIÓN

Algoritmo identificado con un nombre que puede o no devolver valores (Unicampo o Multicampo) a otras partes del programa

Funciones internas: Definidas en CLIPS.

Funciones externas: Escritas en un lenguaje distinto a CLIPS.

Se definen con el constructor: deffunction

FUNCIONES MATEMÁTICAS

+, -, *, /, div, max, min, abs, float, integer.

Ejemplos de llamadas a las funciones + y *: (+ 34 5 1.3) (* 2 3) (+ 3 (* 5 2) 10)

CONSTRUCTORES (1/3)Permite al programador añadir elementos a la base de hechos y a la base de conocimiento (funciones, reglas, hechos, clases).

CONSTRUCTORES (2/3)Los más importantes son: deffunction: Para definir funciones defglobal: Para definir variables globales deftemplate: Para definir plantillas deffacts: Para definir hechos defrule: Para definir reglas defmodule: Para definir módulos

CONSTRUCTORES (3/3)Para definir objetos:

defclass definstances defmessage-handler defgeneric defmethod

COMANDOS (1/2)Realizan acciones con efectos colaterales sin devolver valor alguno y son llamados entre paréntesis

COMANDOS (2/2)Ejemplos:

• (exit)• (assert ...)• (watch ...)• (run)• (reset)• (clear)

HECHOS (1/4)Un hecho (fact) es una pieza de

información que se almacena en la llamada lista de hechos (fact-list)

Adicionar Hechos a la base de conocimiento(assert <hecho>)

HECHOS (2/4) Ejemplos:

(assert (casa blanca)) (assert (calidad impresora “aceptable”))

(assert (amigo Juan Maria))

HECHOS (3/4)

A cada hecho en la lista se le asocia un identificador (fact identifier) de la forma f-XXX, donde el entero XXX es un índice de hecho (fact index), que indica la posición del hecho en la lista.

HECHOS (4/4)

Mirar los hechos insertados• Ver los hechos entre dos índices:

(facts ini fin)Donde:

o ini es el índice del hecho de Inicio

o fin es el índice del hecho de Terminación

• Ver todos los hechos: (facts)

PLANTILLAS (1/6) Son estructuras de datos.

(deftemplate<nombre-relacion>[comentario]<definición-slot>

)donde:

<definición-slot> puede ser:• (slot <nombre-slot>)• (multislot <nombre-slot>)

PLANTILLAS (2/6)

Para mostrar las plantillas definidas con un constructor deftemplate se utiliza el comando:

(ppdeftemplate [<nombre-de-la-plantilla>])Para mostrar todos los nombres de las

plantillas almacenadas en un módulo se utiliza el comando:

(list-deftemplates [<nombre-del-modulo>])

PLANTILLAS (3/6)

(deftemplate persona (slot nombre) (slot apellido))(assert (persona (nombre "Helenita") (apellido "Vargas")))(assert (persona (nombre "Vicente") (apellido "Fernandez")))

PLANTILLAS (4/6)

Ejemplos Multislots

PLANTILLAS (5/6)

Deftemplate: Permite definir atributos para cada slot:

• Tipo de datos• Valor por defecto• Valores permitidos• Rango de valores numéricos• Cardinalidad (para multislot)

PLANTILLAS (6/6)

(deftemplate carro(slot color

(type STRING))(slot marca

(type STRING)(default "Renault")

))

SLOTS (1/4)Restricciones sobre los valores para los slots:

allowed-symbols <palabras de caracteres sin comillas>allowed-strings <cadenas de caracteres entre comillas>allowed-numbers <números enteros, reales y exponenciales>allowed-integers <números enteros>allowed-floats <números reales>allowed-values <cualquier tipo de valor>

SLOTS (2/4)(deftemplate carro(slot color(type STRING)(allowed-strings “rojo” “azul” “negro” “gris”))(slot marca(type STRING)(allowed-strings “Renault” “Mazda” “Toyota” “Fiat”)(default "Renault")))

SLOTS (3/4) Rangos y Cardinalidad

(range <inicio> <fin>) <inicio> y <fin> son valores numéricos

(cardinality <limite-inferior> <limite-superior>)

<limite-inferior> y <limite-superior> son valores numéricos positivos

SLOTS (4/4)(deftemplate persona

(multislot nombres (type STRING) (cardinality 1 2)

) (multislot apellidos

(type STRING) (cardinality 2 2)

) (slot edad

(type NUMBER) (range 10 30)

) )

BIBLIOGRAFÍA

Curso de construcción de sistemas expertos usando CLIPS – Clase 1