Mostrando las entradas con la etiqueta clips. Mostrar todas las entradas
Mostrando las entradas con la etiqueta clips. Mostrar todas las entradas

sábado, 4 de junio de 2011

Como usar CLIPSJNI junto con Java


"Fin de semestre: tres palabras que te hacen feliz", y más aun cuando el resultado de las notas y las materias salen bien. Como vieron en el post anterior, estuve ocupado haciendo un sistema experto para el curso de inteligencia artificial, al final, hasta hice una guía de como hacerlo funcionar correctamente (con base en los ejemplos con los que viene el CLIPSJNI)... cabe anotar que me dieron una buena bonificación en la calificación final del curso por hacerlo ^_^ .
Como buen seguidor del Software Libre, dejo el link al repositorio del código del sistema experto, bajo licencia GPLv2. En la carpeta docs, está el PDF y el ODT de la guía que he hecho.
Espero que quien encuentre esto, le sea de mucha utilidad:

sábado, 23 de abril de 2011

Sistemas expertos con CLIPS y Java mediante CLIPSJNI


Estoy viendo en la universidad Inteligencia artificial. En mi universidad, es la materia básica que sienta las bases para los demás cursos sobre el tema. El tema principal de la materia, en mi caso, es sobre los sistemas expertos, que son eso, sistemas que pueden razonar como un experto en un tema especifico.
Para poder crear un sistema de razonamiento de este estilo, se hace necesario lo que se conoce como un “motor de inferencias”, el motor permite analizar los datos (hechos) y tomar decisiones sobre ellos (usando reglas). Su funcionamiento es sencillo realmente, ya que simplemente hacen algo como: “si este hecho, o estos hechos en conjunto, se dan, entonces hay que hacer esto otro...”.

La teoría es fácil, y ya existen herramientas para crearlos más abstractamente (es decir: fácilmente). Una de ellas es CLIPS, una biblioteca escrita en C que es un motor de inferencias creado para la Nasa. El problema es que para una aplicación real para usuarios reales CLIPS solo no puede usarse (amenos que queramos volverlos locos ;D ). Hay que combinarlo con otros lenguajes que permitan hacer cosas útiles con el motor, y que escondan lo suficiente las cosas aburridas a los usuarios finales. En mi caso, desdí usar java (#fail), ya que el profesor nos daría una bonificación en la nota por eso D:

Para eso hay dos posibilidades: usar JESS, una implementación del lenguaje de CLIPS pero hecho en java, o usar CLIPSJNI... por el titulo ya saben que opté por usar este ultimo, ya que el JESS me parece más “sucio”, ya que tocaría mezclar muchos conceptos de CLIPS y de java. En cambio con CLIPSJNI es más separado en ese aspecto y a mi criterio, más limpio.

Lamentablemente a la hora de bajarlo para usarlo, me di por enterado que solo daban los binarios para Winbug y para Mac... y para linux debía ser compilado.
La verdad es la cosa más sencilla del mundo, nada fuera de lo común, un simple make -f makefile.linux y ya... “ja ja”, la verdad es que no; salió un error que decía que tenía problemas y que debía re-compilar usando el parámetro -fPIC en el gcc... además de eso hay que especificar donde está java en el computador.

/usr/bin/ld: agenda.o: relocation R_X86_64_32 against `.text' can not be used when making a shared object; recompile with -fPIC
agenda.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [libCLIPSJNI.so] Error 1

En debian hice así:

En la linea 33 es donde está especificado los argumento que debe usar el gcc para la compilación general, solo se le anexa el -fPIC en cualquier lado(obviamente un lugar valido...).
Y en la linea 39, que es donde se arma el libCLIPSJNI.so también debe anexarse el -fPIC y debe especificarse el path de Java, en mi caso quedó así:

gcc -o libCLIPSJNI.so -fPIC -shared -Wall -I/usr/lib/jvm/java-6-sun/include -I/usr/lib/jvm/java-6-sun/include/linux -lm $(OBJS) CLIPSJNI_Environment.c
El error que sale está explicado en esta pagina del wiki de gentoo, y se da por la arquitectura de 64bits... Espero que les sirva esto por si tienen problemas ^_^