Date post: | 07-Aug-2018 |
Category: |
Documents |
Upload: | arrietajohn |
View: | 235 times |
Download: | 1 times |
of 14
8/21/2019 Integrar Java con CLIPS.docx
1/14
John Carlos Arrieta ArrietaUniversidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI
INTEGRAR JAVA CON CLIPS (POR JOHN CARLOS ARRIETA ARRIETA)
INTRODUCCIN:
Este breve instructivo tiene como propsito ensear los pasos necesarios para
poder integrar el dos lenguajes de programacin Java, de uso multifuncional y
CLIPS especializado para desarrollar y ejecutar Sistemas Expertos.
Este instructivo no pretende ser un manual de programacin en Java o CLIPS,
puesto que solo se limita explicar los pasos para poder integrar estos dos
lenguajes de programacin ejemplificando el proceso mediante el desarrollo de
una aplicacin muy simple, de tal manera que podamos tener el conocimiento que
nos permita dar mayores prestaciones de usabilidad y portabilidad a cualquier
aplicacin 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) versin 1.5 o superior.
Descargar:
http://www.oracle.com/technetwork/es/java/javase/downloads/index.html
CLIPS: Sistema de Produccin Integrado en Lenguaje C)
Descargar:http://clipsrules.sourceforge.net/
IDE Netbeans Versin 6 o superior.
Descarga:https://netbeans.org/
Descarga Alternativa:
http://www.oracle.com/technetwork/es/java/javase/downloads/index.html
IDE Eclipse Versin 3.5 Elios o superior
Descarga:https://www.eclipse.org/
PROCEDIMIENTO:
Nota: Las imgenes de recortes sobre Pginas Web y Ventanas de lasAplicaciones mencionadas en este instructivo corresponden a las que estaban
disponibles en la fecha de creacin de este documento, 19/09/2014.
Descargar e instalar el CLIPS: Descargar la vieron para Windows, para ellos
sugiero seguir los siguientes pasos:
http://www.oracle.com/technetwork/es/java/javase/downloads/index.htmlhttp://www.oracle.com/technetwork/es/java/javase/downloads/index.htmlhttp://clipsrules.sourceforge.net/http://clipsrules.sourceforge.net/http://clipsrules.sourceforge.net/https://netbeans.org/https://netbeans.org/https://netbeans.org/http://www.oracle.com/technetwork/es/java/javase/downloads/index.htmlhttp://www.oracle.com/technetwork/es/java/javase/downloads/index.htmlhttps://www.eclipse.org/https://www.eclipse.org/https://www.eclipse.org/https://www.eclipse.org/http://www.oracle.com/technetwork/es/java/javase/downloads/index.htmlhttps://netbeans.org/http://clipsrules.sourceforge.net/http://www.oracle.com/technetwork/es/java/javase/downloads/index.html8/21/2019 Integrar Java con CLIPS.docx
2/14
John Carlos Arrieta ArrietaUniversidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI
Recorte tomado de:http://clipsrules.sourceforge.net/
Recorte tomado dehttp://clipsrules.sourceforge.net/Version63Beta.html
Recorte tomado dehttp://sourceforge.net/projects/clipsrules/files/CLIPS/6.30/
http://clipsrules.sourceforge.net/http://clipsrules.sourceforge.net/http://clipsrules.sourceforge.net/http://clipsrules.sourceforge.net/Version63Beta.htmlhttp://clipsrules.sourceforge.net/Version63Beta.htmlhttp://clipsrules.sourceforge.net/Version63Beta.htmlhttp://sourceforge.net/projects/clipsrules/files/CLIPS/6.30/http://sourceforge.net/projects/clipsrules/files/CLIPS/6.30/http://sourceforge.net/projects/clipsrules/files/CLIPS/6.30/http://sourceforge.net/projects/clipsrules/files/CLIPS/6.30/http://clipsrules.sourceforge.net/Version63Beta.htmlhttp://clipsrules.sourceforge.net/8/21/2019 Integrar Java con CLIPS.docx
3/14
John Carlos Arrieta ArrietaUniversidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI
Ejecutar e iniciar la instalacin siguiendo los pasos del asistente presentados por
el programa de instalacin, los cuales se resumen en aceptar la licencia y pulsar el
botn siguiente hasta que termine el proceso.
Recorte tomado del Men Inicio de Windows 7
Si la instalacin fue correcta, en el men inicio de Windows podremos encontrar
los accesos directos a la herramienta CLIPS, sugiero seleccionar la opcin
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 ejecucin.
CLIPS Win es un entorno bsico 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
diseada y probada nuestra base de conocimientos, procedemos a recuperar el
8/21/2019 Integrar Java con CLIPS.docx
4/14
John Carlos Arrieta ArrietaUniversidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI
archivo con extensin .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 tambin 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 algn 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 prximo paso es descargar el JDK y un IDE (Entorno de Desarrollo Integrado)
para Java, por ejemplo NetBeans o Eclipse:
http://sourceforge.net/projects/clipsrules/files/CLIPS/6.30/CLIPSJNI_0.3.zip/downloadhttp://sourceforge.net/projects/clipsrules/files/CLIPS/6.30/CLIPSJNI_0.3.zip/downloadhttp://sourceforge.net/projects/clipsrules/files/CLIPS/6.30/http://sourceforge.net/projects/clipsrules/files/CLIPS/6.30/http://sourceforge.net/projects/clipsrules/files/CLIPS/6.30/http://sourceforge.net/projects/clipsrules/files/CLIPS/6.30/http://sourceforge.net/projects/clipsrules/files/CLIPS/6.30/CLIPSJNI_0.3.zip/download8/21/2019 Integrar Java con CLIPS.docx
5/14
John Carlos Arrieta ArrietaUniversidad 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 versin
estable, pero si ya tienen el JDK o desean otra versin disponible del IDE por
ejemplo en espaol, esta se puede descargar desde su sitio web oficial.
Segn nuestras necesidades de desarrollo podemos escoger una distribucin
especifica. Recorte tomado dehttps://netbeans.org/downloads/
O
http://www.oracle.com/technetwork/es/java/javase/downloads/index.htmlhttp://www.oracle.com/technetwork/es/java/javase/downloads/index.htmlhttps://netbeans.org/downloads/https://netbeans.org/downloads/https://netbeans.org/downloads/https://netbeans.org/downloads/http://www.oracle.com/technetwork/es/java/javase/downloads/index.html8/21/2019 Integrar Java con CLIPS.docx
6/14
John Carlos Arrieta ArrietaUniversidad 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 segn nuestras necesidades:
Recorte tomado dehttps://www.eclipse.org/downloads/
El proceso de instalacin requerir tener instalado el JDK [2] luego ambos solo
hay que descargar una distribucin con asistente de instalacin para cada IDE,
aceptar las trminos de licencia (ambos Software Libre), seguir los pasos del
asistente y listo de Netbeans [3] o los de Eclipse [4].
A continuacin procedemos a crear un proyecto nuevo tipo aplicacin 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 raz
del proyecto y pegamos los archivos previamente copiados desde la carpeta
donde descomprimimos el archivo CLIPSJNI.zip, igual se hace con Eclipse.
https://www.eclipse.org/downloads/https://www.eclipse.org/downloads/https://www.eclipse.org/downloads/https://www.eclipse.org/downloads/8/21/2019 Integrar Java con CLIPS.docx
7/14
John Carlos Arrieta ArrietaUniversidad 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 operacin
usando Nebeans debemos colocarnos en el panel de Proyectos, hacer clic
derecho sobre el tem Bibliotecas y escoger la opcin Agregar archivo
JAR/Carpeta
Seguidamente debemos entrar buscar el archivo CLIPSJNI.jar ubicado en el
proyecto y pulsar Abrir.
8/21/2019 Integrar Java con CLIPS.docx
8/14
John Carlos Arrieta ArrietaUniversidad 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 ejecucin de la aplicacin presenta algn probar las siguientes
posibles soluciones:
Si su S.O es de 32bit copiar el archivo CLIPSJNI.dll enC:\windows\system32
Si su S.O es de 64bit copiar el archivo CLIPSJNI.dll enC:\Windows\SysWOW64
Para S.O GNU/Linux: copiar libCLIPSJNI.soen/usr/lib/ Para S.O MacOSX: copiar libCLIPSJNI.jniliben/usr/lib/java/
2. Una vez creado el paquete de distribucin de la aplicacin, es decir la
carpeta dist con su subcarpeta liby su archivo.jar, se deben colocar losarchivos CLIPSJNI.dll y la base de conocimientos.clp junto al archivo
8/21/2019 Integrar Java con CLIPS.docx
9/14
John Carlos Arrieta ArrietaUniversidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI
ejecutable.jarde la aplicacin y dentro de la subcarpeta libdebe estar elarchivo CLIPSJNI.jar:
Esto se hace, ya que aunque el CLIPSJNI.jar contiene clases Java compiladas
para multiplataformidad, por ende JDNI (arquitectura java que le permitecombinarse con cdigo 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 ejecucin de la aplicacin, si no
los encuentra entonces pasa a buscarlo en directorio de bibliotecas binarias
nativas del sistema, informacin que se puede consultar mediante
System.out.println(System.getProperty("java.library.path")); en
cdigo Java.
Utilizacin de las clases que se encuentran dentro de la bibliotecaCLIPSJNI,jar:
Para interactuar con la base de conocimientos y la mquina de inferencia de clips,
CLIPSJNI proporciona un conjunto de clases entre las que se encuentran
envueltas en un nico paquete llamado CLIPSJNI, las ms importantes son;
8/21/2019 Integrar Java con CLIPS.docx
10/14
John Carlos Arrieta ArrietaUniversidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI
Environment(Crea una especie de entorno de trabajo entre CLIPS y Java), el uso
ms comn 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 vern existen mtodos con los mismos nombres de comandos CLIPS como
son load, assert, eval, build, reset, run, clear, entro otros, los cualesrealizan una operacin 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 construccin en la BC, en este ejemplo se ingresa unaregla llamada prueba cuyo antecedente es un Patron que espera el valor de una
variable, si el Patron concuerda con algn 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)");
8/21/2019 Integrar Java con CLIPS.docx
11/14
John Carlos Arrieta ArrietaUniversidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI
Evala la ejecucin 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 mtodo retorna una instancia de la clase PrimitiveValue, la cual tiene
mtodos para obtener el resultado devuelto por la mquina de inferencia.
clips.reset();
Reinicia la Memoria de Trabajo a los valores por defecto (hechos inciales)
clips.run();
Ejecuta las primeras reglas disponibles en la Memoria de Trabajo
Mtodos de la clase Environment
8/21/2019 Integrar Java con CLIPS.docx
12/14
John Carlos Arrieta ArrietaUniversidad 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 mtodo assert(String hecho) mediante una instancia de
Environment, recordemos que este comando agrega o afirma un hecho en la
BC, este mtodo 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 abstractaPrimitiveValue
Invocando el mtodo eval(String instruccin), igualmente usando una
instancia de Environment. Este mtodo evala la ejecucin de una instruccin
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 ofind-all-facts.
Mtodos de la clase PrimitiveValue
8/21/2019 Integrar Java con CLIPS.docx
13/14
John Carlos Arrieta ArrietaUniversidad 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");
StingvalorSlot = slot.toString();
Y en una sola lnea 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 mtodo
assert o al mtodo 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 ms simple desde java, se puede utilizar
un mtodo por cada tipo de dato Java:
FactAddressValue punteroSlot= clips.assert((llantas 4));
PrimitiveValue slot= clips.getFactSlot(punteroSlot, llantas) ;
int cantidadLlantas = slot.intValue(llantas);
Los mtodos son:
intValue
stringValue
8/21/2019 Integrar Java con CLIPS.docx
14/14
John Carlos Arrieta ArrietaUniversidad de Cartagena
Instructivo para integrar CLIPS con Java usando CLIPSJNI
floatValu
integerValue
instanceValue,
instanceAddressValue
multifieldValue
primitiveValue
stringValue
symbolValue
voidValue
El uso de cada mtodo 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 ms de un hecho o el hecho tenga ms de un
slot, se puede utilizar el mtodo size() de la instancia de PrimitiveValue, quien
retorna el numero de slot que tiene el hecho devuelto por la consulta. Para obteneruno de los slot se utiliza el mtodo get(int pos), quien retorna una instancia de
PrimitiveValue que hace referencia al slot en la posicin indicada por el
parmetro 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] Instalacin del IDE Netbeans
https://netbeans.org/community/releases/80/install.html
[4] Instalacin 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
http://elvex.ugr.es/decsai/intelligent/workbook/ai/CLIPS.pdfhttp://elvex.ugr.es/decsai/intelligent/workbook/ai/CLIPS.pdfhttp://www.luiskano.net/blog/2010/04/28/tutorial-instalar-java-jdk-en-windows-7/http://www.luiskano.net/blog/2010/04/28/tutorial-instalar-java-jdk-en-windows-7/https://netbeans.org/community/releases/80/install.htmlhttps://netbeans.org/community/releases/80/install.htmlhttp://jarroba.com/instalar-bien-eclipse-un-ide-de-muchos/http://jarroba.com/instalar-bien-eclipse-un-ide-de-muchos/http://panamahitek.com/como-crear-nuestro-primer-programa-en-java-con-netbeans/http://panamahitek.com/como-crear-nuestro-primer-programa-en-java-con-netbeans/http://panamahitek.com/como-crear-nuestro-primer-programa-en-java-con-netbeans/http://www.tutorialspoint.com/eclipse/eclipse_create_java_project.htmhttp://www.tutorialspoint.com/eclipse/eclipse_create_java_project.htmhttp://www.tutorialspoint.com/eclipse/eclipse_create_java_project.htmhttp://panamahitek.com/como-crear-nuestro-primer-programa-en-java-con-netbeans/http://panamahitek.com/como-crear-nuestro-primer-programa-en-java-con-netbeans/http://jarroba.com/instalar-bien-eclipse-un-ide-de-muchos/https://netbeans.org/community/releases/80/install.htmlhttp://www.luiskano.net/blog/2010/04/28/tutorial-instalar-java-jdk-en-windows-7/http://elvex.ugr.es/decsai/intelligent/workbook/ai/CLIPS.pdf