Vous êtes sur la page 1sur 15

UNIVERSIDAD TECNICA DE MANABI

FACULTAD DE CIENCIAS INFORMATICAS


CARRERA DE INGENIERIA EN SISTEMAS INFORMATICOS
INTELIGENCIA ARTIFICIAL II
TRABAJO DE INVESTIGACIN DEL PRIMER PARCIAL


TEMAS:
Desarrollo de un Sistema Experto para la recomendacin de libros


AUTORES:
Morrillo Saltos John Jairo
Zamora Intriago Joaqun


FECHA:
Mircoles, 09 de julio 2014




PERIODO:
Mayo Octubre 2014








PORTOVIEJO MANAB - ECUADOR

1. Introduccin

La Inteligencia Artificial comenz como el resultado de la investigacin en psicologa
cognitiva y lgica matemtica. Se ha enfocado sobre la explicacin del trabajo mental y
construccin de algoritmos de solucin a problemas de propsito general. Punto de vista
que favorece la abstraccin y la generalidad.
La Inteligencia Artificial es una combinacin de la ciencia del computador, fisiologa y
filosofa, tan general y amplio como eso, es que rene varios campos (robtica, sistemas
expertos, por ejemplo), todos los cuales tienen en comn la creacin de mquinas que
pueden "pensar".
La idea de construir una mquina que pueda ejecutar tareas percibidas como requerimientos
de inteligencia humana es un atractivo. Las tareas que han sido estudiadas desde este punto
de vista incluyen juegos, traduccin de idiomas, comprensin de idiomas, diagnstico de
fallas, robtica, suministro de asesora experta en diversos temas.
En el presente documento se redacta de manera clara y sencilla como se realizaron los
distintos procesos que posee el sistema experto que le permite obtener una recomendacin
bibliogrfica
Se explicar de manera detallada el funcionamiento de la aplicacin; as como tambin el
marco terico relacionado con la ejecucin de la misma, lo que permitir un mayor
entendimiento, al momento de la implementacin del software
EL lenguaje de programacin utilizado para el proyecto son Java Netbeans para el entorno
de desarrollo, Prolog y el gestor de base de datos Mysql








2. OBJETIVOS
2.1 Objetivo general
Desarrollar un sistema experto que permita recomendar bibliografa
2.2 Objetivos especficos
Investigar la como se realiza la conexin entre Prolog, Netbeans y Mysql
Desarrollar el sistema experto mediante la ayuda del entorno de desarrollo de
Netbeans, la base de conocimiento de Prolog y el gestos de base de datos
Reforzar los conocimientos adquiridos durante el curso de Inteligencia Artificial II
mediante el desarrollo de la aplicacin


















3. Marco Terico
3.1 Prolog
Prolog es un lenguaje de programacin creado para representar y utilizar el conocimiento
que se tiene sobre un determinado dominio. Ms exactamente, el dominio es un conjunto de
objetos y el conocimiento se representa por un conjunto de relaciones que describen las
propiedades de los objetos y sus interrelaciones. Un conjunto de reglas que describa estas
propiedades y estas relaciones es un programa PROLOG. Una definicin ms accesible
para el usuario comn sera:
Prolog es un lenguaje de programacin que es usado para resolver problemas que
envuelven objetos y las relaciones entre ellos.
Su definicin basada en la lgica formal, permite ejecutar estatutos que no son otra cosa
que oraciones de un lenguaje lgico elemental particular de clusulas. Prolog por su
naturaleza muestra una habilidad para describir gramticas, en particular gramticas libres
de contexto.
Un programa Prolog est formado por una secuencia de enunciados (clusulas): hechos,
reglas y variables.

3.1.1 Hechos
Expresan relaciones entre objetos.
Supongamos que queremos expresar el hecho de que "un coche tiene ruedas". Este hecho,
consta de dos objetos, "coche" y "ruedas", y de una relacin llamada "tiene".
La forma de representarlo en PROLOG es:
tiene(coche,ruedas).

3.1.2 Reglas
Las reglas se utilizan en Prolog para significar que un hecho depende de uno o ms hechos.
Es la representacin de las implicaciones lgicas del tipo p ---> q (p implica q).
Algunas caractersticas son:
Una regla consiste en una cabeza y un cuerpo, unidos por el signo " :- ".
La cabeza esta formada por un nico hecho.
El cuerpo puede ser uno o ms hechos (conjuncin de hechos), separados por una coma
(","), que acta como el "y" lgico.
Las reglas finalizan con un punto (".").

3.1.3 Variables
Representan objetos que el mismo PROLOG determina. Una variable puede estar
instanciada o no instanciada. Esta instanciada cuando existe un objeto representado por una
variable. De este modo, cuando preguntamos Un coche tiene X ?,
Prolog busca en los hechos cosas que tiene un coche y respondera:
X = ruedas. Instanciando la variable X con el objeto ruedas.
Los nombres de variables comienzan siempre por una letra mayscula.

3.2 Netbeans
Es un entorno integrado de desarrollo o IDE (Integrated Development Environment) En l
podemos realizar todas las tareas asociadas a la programacin
Editar el cdigo
Compilarlo
Ejecutarlo
Depurarlo
Simplica alguna de las tareas que, sobre todo en proyectos grandes, son tediosas
Nos asiste (parcialmente) en la escritura de cdigo, aunque no nos libera de aprender el
lenguaje de programacin
Nos ayuda en la navegacin de las clases predenidas en la plataforma (miles)
Aunque puede ser costoso su aprendizaje, los benecios superan las dicultades

3.3 MySQL
Es un sistema de administracin de bases de datos (Database Management System, DBMS)
para bases de datos relacionales. As, MySQL no es ms que una aplicacin que permite
gestionar archivos llamados de bases de datos.

Existen muchos tipos de bases de datos, desde un simple archivo hasta sistemas
relacionales orientados a objetos. MySQL, como base de datos relacional, utiliza multiples
tablas para almacenar y organizar la informacin. MySQL fue escrito en C y C++ y destaca
por su gran adaptacin a diferentes entornos de desarrollo, permitiendo su interactuacin
con los lenguajes de programacin ms utilizados como PHP, Perl y Java y su integracin
en distintos sistemas operativos.

Tambin es muy destacable, la condicin de open source de MySQL, que hace que su
utilizacin sea gratuita e incluso se pueda modificar con total libertad, pudiendo descargar
su cdigo fuente. Esto ha favorecido muy positivamente en su desarrollo y continuas
actualizaciones, para hacer de MySQL una de las herramientas ms utilizadas por los
programadores orientados a Internet.

3.4 Sistema experto
Los sistemas expertos se pueden considerar como el primer producto verdaderamente
operacional de la inteligencia artificial. Son programas de ordenador diseados para actuar
como un especialista humano en un dominio particular o rea de conocimiento. En este
sentido, pueden considerarse como intermediarios entre el experto humano, que transmite
su conocimiento al sistema, y el usuario que lo utiliza para resolver un problema con la
eficacia del especialista. El sistema experto utilizar para ello el conocimiento que tenga
almacenado y algunos mtodos de inferencia.
A la vez, el usuario puede aprender observando el comportamiento del sistema. Es decir,
los sistemas expertos se pueden considerar simultneamente como un medio de ejecucin y
transmisin del conocimiento.
Lo que se intenta, de esta manera, es representar los mecanismos heursticos que
intervienen en un proceso de descubrimiento. stos mecanismos forman ese conocimiento
difcil de expresar que permite que los expertos humanos sean eficaces calculando lo menos
posible. Los sistemas expertos contienen ese "saber hacer".
La caracterstica fundamental de un sistema experto es que separa los conocimientos
almacenados (base de conocimiento) del programa que los controla (motor de inferencia).
Los datos propios de un determinado problema se almacenan en una base de datos aparte
(base de hechos).
Una caracterstica adicional deseable, y a veces fundamental, es que el sistema sea capaz de
justificar su propia lnea de razonamiento de forma inteligible por el usuario.






4. Configuracin para la conexin de Prolog, MySQL y Netbeans
1. Creamos una base de datos en Mysql (en nuestro caso sern 3 tablas: libro, categora y
una entidad dbil llamada lib_cat)
2. Realizamos el origen de datos a travs de ODBC. Una conexin DNS del sistema
2.1 Nos dirigimos a panel de control >> herramientas administrativas >> orgenes de datos
ODBC










2.2 Nos dirigimos hacia la pestaa DNS de sistema y hacemos click en el botn Agregar








2.3 Para agregar el nuevo origen de datos debemos instalar el Driver Connector/ODBC de
Mysql, el cual lo podemos descargar en la siguiente direccin web:
http://dev.mysql.com/downloads/connector/odbc/ y lo instalamos

2.4 Una vez agregado el driver lo seleccionamos (lo encontramos con el nombre MySQL
ODBC 5.3 Driver) y damos click en finalizar


2.4 Se abrir una ventana de configuracin de MySQL donde ingresamos el nombre de la
conexin, el servidor (localhost), el usuario Mysql con su respectivo password y la base de
datos con la cual deseamos realizar la conexin y damos clik en el botn <<Ok>>


3. Realizamos un archivo en Prolog donde mediante reglas establecemos la conexin
sentencias sql (inserciones y busqueda) (Ver cdigo en la seccin de anexos)
4. Realizamos las interfaces en Netbeans IDE, para realizar la conexin con Prolog
debemos agregar las libreras del mismo paraa ello damos click derecho en la carpeta de
libreras del proyecto y escogemos la opcin Add JAR/Folder y buscamos el archivo jpl.jar
en la siguiente ruta C:\Program Files\pl\lib y lo agregamos








5. Manual de uso del sistema experto
Al ejecutar el programa de muestra la siguiente venta principal donde podemos observar las
funciones que realiza el sistema

Fig. 1 Ventana principal del sistema experto
1. Para realizar el ingreso de libros damos click en el botn <<Ingresar libros>>, se
muestra una nueva ventana donde podemos ingresar el nombre del libro, el nombre del
autor y podemos escoger la categora a la que pertenece, damos click en el botn
<<Registrar libro>>. En la barra de informacin podemos observar el estado del ingreso
del libro









Fig. 2 Ventana de ingreso de libros
2. Para solicitar la recomendacin de un libro damos clik en el botn <<Pedir
recomendacin>>, se muestra una nueva ventana donde podemos escoger la categora del
libro que deseamos y damos click en el botn <<Ver recomendacin>>. En la parte
derecha de la pantalla podemos observar la lista de libros recomendados para la categora
seleccionada

Fig. 3 Ventana de recomendacin de libros












6. Conclusiones
Al finalizar la presente investigacin se puede concluir que:
La conexin entre Mysql, Prolog y Netbeans no es compleja, solo debemos
configurar la conexin ODBC, agregar las libreras de Prolog en Netbeans y luego
realizar las reglas que permitan la conexin con la base de datos , las sentencias
SQL y las reglas que permitan realizar la inferencia del sistema experto

El sistema experto desarrollado permite mediante la seleccin de una categora de
libros la recomendacin de bibliografa, lo cual conlleva a la reduccin de tiempos
de bsqueda manuales sobre los mismos

Mediante la implementacin del presente sistema experto podemos reforzar los
conocimientos tericos impartidos en el cuso de Inteligencia Artificial II y asi poder
obtener una mejor comprensin de los mismos

7. Recomendaciones:
Al concluir la presente investigacin se puede recomendar lo siguiente:
El uso de Mysql, Prolog y Netbeans para la realizacin de sistemas expertos, ya que
Mysql es un gestor de base de datos muy fcil de usar en Prolog la podemos realizar
las reglas y hechos que permiten al sistema experto tomar decisiones, de una manera
muy sencilla, y Netbeans es un IDE muy flexible para el desarrollo de interfaces
grficas

El sistema experto permite reducir de tiempos de bsqueda sobre libros, y ayuda en
la toma de decisiones para la recomendacin de bibliografa

Implementar la parte prctica de la materia mediante la realizacin de sistemas
expertos o cualquier otro tipo de sistemas para la comprensin de la parte terica de
la misma





8. Bibliografa:
La presente investigacin tuvo como principal fuente de informacin las siguientes
direcciones web:

https://www.youtube.com/watch?v=Gb5qxWT4p2M
http://www.monografias.com/trabajos12/inteartf/inteartf.shtml
http://ocw.udl.cat/enginyeria-i-arquitectura/programacio-2/continguts-1/1-
introduccioi81n-a-netbeans.pdf
http://www.esepestudio.com/noticias/que-es-mysql
http://www.redcientifica.com/doc/doc199908210001.html
http://dev.mysql.com/downloads/connector/odbc/

















9. Anexos
Cdigo del archivo de conexin en Prolog
abrir_conexion :-odbc_connect('swiprolog', _, [ user(root), %password(root),
alias(swiprolog), open(once) ]).
cerrar_conexion :-odbc_disconnect('swiprolog').
%Artificio para conseguir la cadena de Insercion para la tabla libros
cadenaPH(A,B,C):- concat(A,'","',Z),concat(Z,B,W),concat('INSERT INTO
libros(nombre,autor) VALUES("',W,D), concat(D,'")',C).
inserta_datos_PH(P,H,X) :-cadenaPH(P,H,Cadena), odbc_query('swiprolog', Cadena,
affected(X)).
%Obtener el ultimo registro de la base de datos
ultimo_ingresado(N) :- odbc_query('swiprolog', 'SELECT MAX(id) FROM
libros',row(N)).
%Artificio para conseguir la cadena de Insercion para la tabla lib_cat
cadena_lib_cat(A,B):- ultimo_ingresado(N), concat(N,'","',Z),concat(Z,A,W),
concat('INSERT INTO lib_cat(id_lib,id_cat) VALUES("',W,D), concat(D,'")',B).
inserta_datos_lib_cat(H,X) :- cadena_lib_cat(H,Cadena), odbc_query('swiprolog', Cadena,
affected(X)).
%crea una lista de todos los libros almacenados
libros(X) :- odbc_query('swiprolog', 'select nombre,autor from libros', X, [
types([string,default]) ]).
%crea una lista de todos los libros almacenados y su categoria
libros_y_categorias(X) :- odbc_query('swiprolog', 'SELECT nombre, autor, categoria
FROM libros, categorias, lib_cat WHERE libros.id = id_lib AND categorias.id = id_cat
ORDER BY categoria ASC', X,[ types([string,string,string]) ]).
libros_accion(X) :- odbc_query('swiprolog','SELECT nombre, autor FROM libros,
categorias, lib_cat WHERE libros.id = id_lib AND categorias.id = id_cat AND
categorias.id=1 ORDER BY nombre ASC', X,[ types([string,default]) ]).
libros_ficcion(X) :- odbc_query('swiprolog', 'SELECT nombre, autor FROM libros,
categorias, lib_cat WHERE libros.id = id_lib AND categorias.id = id_cat AND
categorias.id=2 ORDER BY nombre ASC', X,[ types([string,default])]).
libros_fantasia(X) :- odbc_query('swiprolog','SELECT nombre, autor FROM libros,
categorias, lib_cat WHERE libros.id = id_lib AND categorias.id = id_cat AND
categorias.id=3 ORDER BY nombre ASC', X,[ types([string,default]) ]).
libros_historia(X) :- odbc_query('swiprolog',
'SELECT nombre, autor FROM libros, categorias, lib_cat WHERE libros.id = id_lib AND
categorias.id = id_cat AND categorias.id=4 ORDER BY nombre ASC', X, [
types([string,default])]).
libros_romance(X) :- odbc_query('swiprolog', 'SELECT nombre, autor FROM libros,
categorias, lib_cat WHERE libros.id = id_lib AND categorias.id = id_cat AND
categorias.id=5 ORDER BY nombre ASC', X,[ types([string,default])]).
libros_suspenso(X) :- odbc_query('swiprolog','SELECT nombre, autor FROM libros,
categorias, lib_cat WHERE libros.id = id_lib AND categorias.id = id_cat AND
categorias.id=6 ORDER BY nombre ASC', X,[ types([string,default]) ]).
libros_policial(X) :- odbc_query('swiprolog', 'SELECT nombre, autor FROM libros,
categorias, lib_cat WHERE libros.id = id_lib AND categorias.id = id_cat AND
categorias.id=7 ORDER BY nombre ASC', X,[ types([string,default])]).
libros_misterio(X) :- odbc_query('swiprolog','SELECT nombre, autor FROM libros,
categorias, lib_cat WHERE libros.id = id_lib AND categorias.id = id_cat AND
categorias.id=8 ORDER BY nombre ASC', X,[ types([string,default])]).
recomendacion(A,B,C,D,E,F,G,H,X) :-
(A is 1,libros_accion(X));(B is 1,libros_ficcion(X));
(C is 1,libros_fantasia(X));(D is 1,libros_historia(X));
(E is 1,libros_romance(X));(F is 1,libros_suspenso(X));
(G is 1,libros_policial(X));(H is 1,libros_misterio(X)).

Vous aimerez peut-être aussi