Está en la página 1de 14

John Carlos Arrieta Arrieta – Universidad de Cartagena

Instructivo para integrar CLIPS con Java usando CLIPSJNI

INTEGRAR JAVA CON CLIPS (POR JOHN CARLOS ARRIETA ARRIETA)


INTRODUCCIÓN:
Este breve instructivo tiene como propósito enseñar los pasos necesarios para
poder integrar el dos lenguajes de programación Java, de uso multifuncional y
CLIPS especializado para desarrollar y ejecutar Sistemas Expertos.
Este instructivo no pretende ser un manual de programación en Java o CLIPS,
puesto que solo se limita explicar los pasos para poder integrar estos dos
lenguajes de programación ejemplificando el proceso mediante el desarrollo de
una aplicación muy simple, de tal manera que podamos tener el conocimiento que
nos permita dar mayores prestaciones de usabilidad y portabilidad a cualquier
aplicación tipo Sistema Experto que en el futuro deseemos construir.

HERRAMIENTAS:
PC con Sistema Operativo Windows XP o superior, preferiblemente en 64bits
JDK (Herramientas de Desarrollo Java) versión 1.5 o superior.
Descargar:
http://www.oracle.com/technetwork/es/java/javase/downloads/index.html
CLIPS: Sistema de Producción Integrado en Lenguaje C)
Descargar: http://clipsrules.sourceforge.net/
IDE Netbeans Versión 6 o superior.
Descarga: https://netbeans.org/
Descarga Alternativa:
http://www.oracle.com/technetwork/es/java/javase/downloads/index.html
IDE Eclipse Versión 3.5 Elios o superior
Descarga: https://www.eclipse.org/

PROCEDIMIENTO:
Nota: Las imágenes de recortes sobre Páginas Web y Ventanas de las
Aplicaciones mencionadas en este instructivo corresponden a las que estaban
disponibles en la fecha de creación de este documento, 19/09/2014.
Descargar e instalar el CLIPS: Descargar la vieron para Windows, para ellos
sugiero seguir los siguientes pasos:
John Carlos Arrieta Arrieta – Universidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI

Recorte tomado de: http://clipsrules.sourceforge.net/

Recorte tomado de http://clipsrules.sourceforge.net/Version63Beta.html

Recorte tomado de http://sourceforge.net/projects/clipsrules/files/CLIPS/6.30/


John Carlos Arrieta Arrieta – Universidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI

Ejecutar e iniciar la instalación siguiendo los pasos del asistente presentados por
el programa de instalación, los cuales se resumen en aceptar la licencia y pulsar el
botón siguiente hasta que termine el proceso.

Recorte tomado del Menú Inicio de Windows 7


Si la instalación fue correcta, en el menú inicio de Windows podremos encontrar
los accesos directos a la herramienta CLIPS, sugiero seleccionar la opción
CLIPSWin para que nos muestre un entorno simple de trabajo basado en
ventanas y no en consola de D.O.S.

Recorte tomado de CLIPSWin en ejecución.


CLIPS Win es un entorno básico que provee un editor de texto sobre el cual
podemos escribir nuestra Base de Conocimientos basada en Hechos, Clases y
Reglas.
En este entorno podemos editar, cargar, ejecutar y probar las bases de
conocimiento de los sistemas Expertos que pensemos construir [1]. Una vez
diseñada y probada nuestra base de conocimientos, procedemos a recuperar el
John Carlos Arrieta Arrieta – Universidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI

archivo con extensión .clp donde esta almacenada dicha Base de conocimientos,
hasta este punto ya no es necesario tener instalado o ejecutado el entorno de
desarrollo CLIPS.
El siguiente paso es proceder a descargar los siguientes archivos:
CLIPSJNI_0.3.zip

Recorte tomado de: http://sourceforge.net/projects/clipsrules/files/CLIPS/6.30/


El cual debemos descomprimir y recuperar en otra carpeta cualquiera los archivos
CLIPSJNI.jar y CLIPSJNI.dll, para el case de los PC con MacOS, se debe
recuperar también el archivo libCLIPSJNI.jnilib, el caso de los PC con GNU/Linux
es necesario CLIPSJNI.jar y la carpeta library-src, esta última carpeta se debe
recompilar con algún compilador de C para obtener el archivo libCLIPSJNI.so, el
cual es el equivalente a que es el CLIPSJNI.dll para Windows o libCLIPSJNI.jnilib
para MacOS.

El próximo paso es descargar el JDK y un IDE (Entorno de Desarrollo Integrado)


para Java, por ejemplo NetBeans o Eclipse:
John Carlos Arrieta Arrieta – Universidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI

Recorte tomado de:


http://www.oracle.com/technetwork/es/java/javase/downloads/index.html
Para el caso de NetBeans en el mismo sitio de descarga del JDK está disponible
un instalador de JDK que trae incluido el IDE Netbeans en su última versión
estable, pero si ya tienen el JDK o desean otra versión disponible del IDE por
ejemplo en español, esta se puede descargar desde su sitio web oficial.

Según nuestras necesidades de desarrollo podemos escoger una distribución


especifica. Recorte tomado de https://netbeans.org/downloads/
John Carlos Arrieta Arrieta – Universidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI

Para el caso de eclipse, en su sitio web oficial existen igualmente varias opciones
descarga según nuestras necesidades:

Recorte tomado de https://www.eclipse.org/downloads/

El proceso de instalación requeriré tener instalado el JDK [2] luego ambos solo
hay que descargar una distribución con asistente de instalación para cada IDE,
aceptar las términos de licencia (ambos Software Libre), seguir los pasos del
asistente y listo de Netbeans [3] o los de Eclipse [4].
A continuación procedemos a crear un proyecto nuevo tipo aplicación Java en
cualquiera Netbeans[5] o Eclipse[6].
Una vez creado el proyecto, debemos incluir copiar en la carpeta principal (raiz)
del proyecto los archivos CLIPSJNI.jar y CLIPSJNI.dll. Para ello usando Netbeans
nos colocamos en el panel de archivos, damos clic derecho sobre la carpeta raíz
del proyecto y pegamos los archivos previamente copiados desde la carpeta
donde descomprimimos el archivo CLIPSJNI.zip, igual se hace con Eclipse.
John Carlos Arrieta Arrieta – Universidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI

El mismo proceso debemos hacerlo sobre el archivo que contiene nuestra base de
conocimientos, en nuestro ejemplo este archivo se llama diagnostico-
automovil.clp, recuerden que para garantizar que la Base de Conocimientos esta
bien construida debemos editarla, depurarla, ejecutarla y probarla con el entorno
CLIPSDOS.exe o CLIPSWin.exe instalado y presentado anteriormente

Por último, debemos agregar la biblioteca del proyecto el archivo CLIPSJNI.jar, el


cual contiene las clases Java/CLIPS, quienes son las que verdaderamente nos
permiten interactuar con CLIPS, dialogando con la base de conocimiento, el motor
de inferencia, generando entradas y salidas desde Java. Para logar esta operación
usando Nebeans debemos colocarnos en el panel de Proyectos, hacer clic
derecho sobre el ítem Bibliotecas y escoger la opción Agregar archivo
JAR/Carpeta

Seguidamente debemos entrar buscar el archivo CLIPSJNI.jar ubicado en el


proyecto y pulsar Abrir.
John Carlos Arrieta Arrieta – Universidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI

Completado estos pasos la estructura del proyecto en Netbeans debe quedar


parecida a la siguiente imagen:

Posibles problemas:
1. Si durante la ejecución de la aplicación presenta algún probar las siguientes
posibles soluciones:
 Si su S.O es de 32bit copiar el archivo CLIPSJNI.dll en
C:\windows\system32
 Si su S.O es de 64bit copiar el archivo CLIPSJNI.dll en
C:\Windows\SysWOW64
 Para S.O GNU/Linux: copiar libCLIPSJNI.so en /usr/lib/
 Para S.O MacOSX: copiar libCLIPSJNI.jnilib en /usr/lib/java/

2. Una vez creado el paquete de distribución de la aplicación, es decir la


carpeta dist con su subcarpeta lib y su archivo.jar, se deben colocar los
archivos CLIPSJNI.dll y la base de conocimientos.clp junto al archivo
John Carlos Arrieta Arrieta – Universidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI

ejecutable.jar de la aplicación y dentro de la subcarpeta lib debe estar el


archivo CLIPSJNI.jar:

Esto se hace, ya que aunque el CLIPSJNI.jar contiene clases Java compiladas


para multiplataformidad, por ende JDNI (arquitectura java que le permite
combinarse con código nativo compilado de forma nativa en otros lenguajes con
C, CLIPS, etc) necesita los binarios nativos para poder ejecutarse. Dichos binario
Java los busca primero en el directorio actual de ejecución de la aplicación, si no
los encuentra entonces pasa a buscarlo en directorio de bibliotecas binarias
nativas del sistema, información que se puede consultar mediante
System.out.println(System.getProperty("java.library.path")); en
código Java.

Utilización de las clases que se encuentran dentro de la biblioteca


CLIPSJNI,jar:
Para interactuar con la base de conocimientos y la máquina de inferencia de clips,
CLIPSJNI proporciona un conjunto de clases entre las que se encuentran
envueltas en un único paquete llamado CLIPSJNI, las más importantes son;
John Carlos Arrieta Arrieta – Universidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI

Environment (Crea una especie de entorno de trabajo entre CLIPS y Java), el uso
más común de esta clase puede ser por ejemplo:
import CLIPSJNI.*;
// …

Environment clips = new Environment();


clips.load("ejemplo.clp");
clips.build("(defrule prueba (ejemplo ?x)=>(assert (auch ?x))) ");
clips.eval("(+ 3 4)");
clips.reset();
clips.assertString("(ejemplo acertado)");
clips.run();
clips.clear();
clips.destroy();

//…
Como verán existen métodos con los mismos nombres de comandos CLIPS como
son load, assert, eval, build, reset, run, clear, entro otros, los cuales
realizan una operación equivalente a su respectivo omologo en CLIPS, por
ejemplo.
clips.load("ejemplo.clp");
Carga la Base de Conocimientos en la Memoria de trabajo CLIPS, esta BC se
encuentra en un archivo llamado ejemplo.clp, que como lo vimos anteriormente
debe estar ubicado en el mismo sitio donde se encuentra la CLIPSJNI.dll.
clips.build("(defrule prueba (ejemplo ?x)=>(assert (auch ?x)))");
Ingresa estructuras de construcción en la BC, en este ejemplo se ingresa una
regla llamada prueba cuyo antecedente es un Patron que espera el valor de una
variable, si el Patron concuerda con algún hecho afirmado en la BD entonces se
ejecuta el consecuente, que en este caso afirma otro hecho que toma como valor
el contenido de la variable.
clips.eval("(+ 3 4)");
John Carlos Arrieta Arrieta – Universidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI

Evalúa la ejecución de alguna consulta o comando sobre la BD o la Maquina de


inferencia, en este caso evaluamos la suma de dos constantes literales enteras,
este método retorna una instancia de la clase PrimitiveValue, la cual tiene
métodos para obtener el resultado devuelto por la máquina de inferencia.
clips.reset();
Reinicia la Memoria de Trabajo a los valores por defecto (hechos iníciales)
clips.run();
Ejecuta las primeras reglas disponibles en la Memoria de Trabajo
Métodos de la clase Environment
John Carlos Arrieta Arrieta – Universidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI

La clase PrimitiveValue
Permite consultar el estado de los hechos y el valor de sus slots (campos o
casillas), cada slot es tratado e si mismo como una instancia de PrimitiveValue.
Para recuperar los hechos o sus slots se puede hacer de dos formas:
Invocando el método assert(String hecho) mediante una instancia de
Environment, recordemos que este comando agrega o afirma un hecho en la
BC, este método retorna una referencia ( o puntero en C) hacia el hecho agregado
a la BD, referencia representado por una clase java llamada FactAddressValue,
hija de la clase abstracta PrimitiveValue
Invocando el método eval(String instrucción), igualmente usando una
instancia de Environment. Este método evalúa la ejecución de una instrucción
en lenguaje CLIPS sobre la BC o la Maquina de inferencia, generalmente se
invoca mediante el uso de comandos para consultar hechos como por ejemplo
find-fact o find-all-facts.

Métodos de la clase PrimitiveValue


John Carlos Arrieta Arrieta – Universidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI

Otra forma de hacerlo es:


String comandoCLIPS = "(find-all-facts ((?f state-list))
TRUE)";
PrimitiveValue slot = clips.eval(comandoCLIPS);
slot = slot.get(0);
slot = slot.getFactSlot("current");
Sting valorSlot = slot.toString();
Y en una sola línea siria:
PrimitiveValue slot = clips.eval(comandoCLIPS).slot.get(0).
getFactSlot("current").slot.toString();

Una vez se tenga la instancia del hecho ya sea mediante una llamada al método
assert o al método eval, se puede conocer el valor de sus slot igualmente de
dos maneras:
Forma A:
FactAddressValue punteroSlot = clips.assert(“(auto(placa kkc))”);
PrimitiveValue slot = clips.getFactSlot(punteroSlot, “placa”) ;
Forma B:
PrimitiveValue slot = punteroSlot.getFactSlot(“placa”) ;

Para poder obtener el valor de una forma más simple desde java, se puede utilizar
un método por cada tipo de dato Java:

FactAddressValue punteroSlot = clips.assert(“(llantas 4)”);


PrimitiveValue slot = clips.getFactSlot(punteroSlot, “llantas”) ;
int cantidadLlantas = slot.intValue(“llantas”);

Los métodos son:


 intValue
 stringValue
John Carlos Arrieta Arrieta – Universidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI

 floatValu
 integerValue
 instanceValue,
 instanceAddressValue
 multifieldValue
 primitiveValue
 stringValue
 symbolValue
 voidValue
El uso de cada método se debe hacer si el tipo de dato del slot es compatible con
el tipo de datos java, si este dato se desconoce, entonces todos los valores sin
importar su tipo se pueden recuperar con stringValue.
En caso de que la consulta retorne más de un hecho o el hecho tenga más de un
slot, se puede utilizar el método size() de la instancia de PrimitiveValue, quien
retorna el numero de slot que tiene el hecho devuelto por la consulta. Para obtener
uno de los slot se utiliza el método get(int pos), quien retorna una instancia de
PrimitiveValue que hace referencia al slot en la posición indicada por el
parámetro pos.

BIBLIOGRAFIA
[1] SISTEMAS DE GESTION INTELIGENTES - MANUAL DE CLIPS
http://elvex.ugr.es/decsai/intelligent/workbook/ai/CLIPS.pdf
[2] INSTALACION DEL JDK
http://www.luiskano.net/blog/2010/04/28/tutorial-instalar-java-jdk-en-windows-7/
[3] Instalación del IDE Netbeans
https://netbeans.org/community/releases/80/install.html
[4] Instalación del IDE Eclipse
http://jarroba.com/instalar-bien-eclipse-un-ide-de-muchos/
[5] Tutorial de Netbenas (Inicio)
http://panamahitek.com/como-crear-nuestro-primer-programa-en-java-con-
netbeans/
[6] Tutorial de Eclipse
http://www.tutorialspoint.com/eclipse/eclipse_create_java_project.htm

También podría gustarte