You are on page 1of 9

Sistema Experto para Sugerir Ramas de Carrera Afín a Estudiantes

de la Carrera de Ing. Informática de la UNT

Gian Vallejos Bardales Mayra Villanueva Ruíz
Estudiante Ing. Informática Estudiante Ing. Informática
Universidad Nacional de Trujillo Universidad Nacional de Trujillo
rgd.gp.vallejos@gmail.com mayraisabel.ruiz@gmail.com


RESÚMEN
Vamos a implementar un sistema
experto con el SWI Prolog haciendo uso de la
librería XPCE, la cual ha sido desarrollada
para el desarrollo en GUI Prolog desde el
principio; que nos permite el desarrollo de
aplicaciones graficas cuyo propósito será
aconsejar a un estudiante recién ingresado a
la carrera de Informática sobre los cursos o
temas de su gusto y preferencia, y de
acuerdo a ella recomendarle los cursos y
toda la rama que implicaría llevar. Para ello
primero haremos una breve descripción, con
su respectiva importancia y luego el
problema en sí.

Términos Generales: Algorithms, Prolog.
Palabras clave
PCE, sistema experto, cursos, carrera,
informática, rama de los cursos.
1. INTRODUCCIÓN
La preocupación por el progreso del
bienestar social, ha suscitado un creciente
interés por los medios para lograr el ajuste
adecuado del individuo en lo que estudia. El
objetivo que se pretende es tener un alto
rendimiento en la aplicación de pruebas de
aptitudes con un bajo costo. Ésta puede
medirse, conocerse y desarrollarse. De ahí
nace el propósito de crear un Sistema
Experto, que permita medir la capacidad
intelectual de sujetos para diversos fines de
la carrera que ingresó.
La tecnología representada por los Sistemas
Expertos actuales, surge de las técnicas de
Inteligencia Artificial que han sido objeto de
amplias e intensivas investigaciones desde
finales de la década de 1950. La investigación
específica en SE realmente comenzó a
mediados de los años sesenta. Un SE es un
conjunto de programas que son capaces,
mediante la aplicación de conocimientos, de
resolver problemas en un área determinada
del conocimiento o saber que se requiere de
la inteligencia humana.
[1] Un SE es un programa que emula a un
experto humano. Ahora bien, se considera
que un experto humano es alguien que sabe
mucho sobre un tema determinado y que
puede dar un consejo adecuado.
[2] Esta experiencia sólo se adquiere tras un
largo aprendizaje y a base de mucha
experiencia.
En la tabla 1 se hace una comparación entre
un sistema experto y un sistema clásico se
puede apreciar que es más confiable la
utilización de un sistema experto y se
obtiene un resultado más rápido debido a
que utiliza una base de conocimiento y un
motor de inferencia.

Tabla 1: Comparación de un sistema experto con
un sistema clásico.

SISTEMA CLÁSICO SISTEMA EXPERTO
Conocimiento y
procesamiento
combinados en un
programa.
Base de conocimiento
separada del
mecanismo de
Procesamiento.
No contiene errores. Puede contener errores.
No da explicaciones. Forma el módulo de
explicación.
Los cambios son
tediosos.
Los cambios en las
reglas son fáciles.
Sólo opera completo. Puede funcionar con
pocas reglas.
Se ejecuta paso a paso. La ejecución usa
heurísticas y lógica.
Representa y usa datos. Representa y usa
conocimiento.

1.1 Usos de un sistema experto
Los sistemas expertos se
desenvuelven en distintas áreas del
conocimiento; algunas de las más utilizadas
son la medicina, ingeniería, administración,
contabilidad, bolsa de valores.
Veamos:
> Cuando los expertos humanos, en una
determinada materia son escasos. Un
sistema experto es muy eficaz cuando tiene
que analizar una gran cantidad de
información, interpretándola y
proporcionando una recomendación a partir
de la misma. Un ejemplo es el análisis
financiero, donde se estudian las
oportunidades de inversión, dependiendo de
los datos financieros de un cliente y de sus
propósitos.
> En situaciones complejas, donde la
subjetividad humana puede llevar a
conclusiones erróneas.
> Para detectar y reparar fallos en equipos
electrónicos, se utilizan los sistemas expertos
de diagnóstico y depuración, que formulan
listas de preguntas con las que obtienen los
datos necesarios para llegar a una
conclusión. Este tipo de sistemas se utilizan
también en medicina (ej. MYCIN y PUFF), y
para localizar problemas en sistemas
informáticos grandes y complejos.
> Predecir resultados futuros a partir del
conocimiento que tienen. Los sistemas
meteorológicos y de inversión en bolsa son
ejemplos de utilización en este sentido. El
sistema PROSPECTOR es de este tipo.
> Gestionar proyectos de desarrollo, planes
de producción de fábricas, estrategia militar
y configuración de complejos sistemas
informáticos, entre otros.
> Cuando se necesita controlar un proceso
tomando decisiones como respuesta a su
estado y no existe una solución algorítmica
adecuada, es necesario usar un sistema
experto. Este campo comprende el
supervisar fábricas automatizadas, factorías
químicas o centrales nucleares.
> Evaluar el nivel de conocimientos y
comprensión de un estudiante, y ajustar el
proceso de aprendizaje de acuerdo con sus
necesidades.
1.2 Arquitectura y funcionamiento de un
sistema experto
No existe una estructura de sistema
experto común. Sin embargo, la mayoría de
los sistemas expertos tienen unos
componentes básicos: base de
conocimientos, motor de inferencia, base de
datos e interfaz con el usuario. Muchos
tienen, además, un módulo de explicación y
un módulo de adquisición del conocimiento.
1.2.1 Base de conocimientos (BC)
Aquí se encuentran los
conocimientos del experto humano, en
forma ordenada y estructurada, el tipo de
conocimiento es permanente en el sistema.
Dicho conocimiento se codifica según una
notación específica que incluye reglas,
predicados, redes semánticas y objetos.
1.2.2 Base de hechos (Base de datos)
Memoria temporal de trabajo, que
se utiliza para almacenar los datos recibidos
inicialmente y contiene información sobre el
problema particular del sistema debe
resolver.
1.2.3 Motor de inferencia
El que combina los hechos y las
preguntas particulares, utilizando la base de
conocimiento, seleccionando los datos y
pasos apropiados para presentar los
resultados; es decir, Modela el proceso de
razonamiento humano que controla el
proceso de razonamiento que seguirá el
sistema experto.
1.2.4 Interfaz de usuario
Comunicación entre el sistema
experto y el usuario final por ello es
necesario mostrar y obtener información de
forma clara, fácil y agradable, sirve para que
se pueda realizar una consulta en un
lenguaje lo más natural posible. Este
componente es la forma en la que el sistema
se presenta ante el usuario.
Requisitos o Características de la interface
que se presenta al usuario:
a) Manejo rápido.
b) Debe evitarse en lo posible la entrada de
datos erróneos.
c) Los resultados deben presentarse en una
forma clara para el usuario.
d) Las preguntas y explicaciones debe ser
comprensibles.
1.2.5 Modulo de Explicación
Explica al usuario la estrategia de
solución encontrada y el porqué de las
decisiones tomadas las soluciones
descubiertas por los expertos deben poder
ser repetibles, esto es, las conclusiones
deben de ser congruentes, exactas en los
resultados. El usuario puede pedir
explicación de las conclusiones obtenidas o
de las acciones que realiza el sistema
experto.
1.2.6 Módulo de adquisición
Permite que se puedan añadir,
eliminar o modificar elementos de
conocimiento en el sistema experto.

1.3 Ventajas e Inconvenientes de un
Sistema Experto
1.3.1 Ventajas
* Permanencia: A diferencia de un experto
humano un SE (sistema experto) no
envejece, y por tanto no sufre pérdida de
facultades con el paso del tiempo.
* Duplicación: Una vez programado un SE lo
podemos duplicar infinidad de veces.
* Rapidez: Un SE puede obtener información
de una base de datos y realizar cálculos
numéricos mucho más rápido que cualquier
ser humano.
* Bajo costo: A pesar de que el costo inicial
pueda ser elevado, gracias a la capacidad de
duplicación el coste finalmente es bajo.
* Entornos peligrosos: Un SE puede trabajar
en entornos peligrosos o dañinos para el ser
humano.
* Fiabilidad: Los SE no se ven afectados por
condiciones externas, un humano sí
(cansancio, presión, etc.)

1.3.2 Inconvenientes
* Creatividad: los humanos pueden
responder creativamente a situaciones
inusuales, los sistemas expertos no pueden.
* Experiencia Sensorial: los humanos tienen
un amplio rango de disponibilidad de
experiencia sensorial. Y los sistemas expertos
actualmente dependen de una entrada
simbólica.
* Degradación: los sistemas expertos no son
bueno para reconocer cuando no existen
respuestas o cuando los problemas están
fuera de su área.
* Elevado costo en dinero y tiempo.
* Son poco flexibles a cambios y de difícil
acceso a información no estructurada.

1.4 Programación Lógica (Prolog)
1.4.1 Introducción
PROLOG está orientado a la
resolución de problemas mediante el cálculo
de predicados, basado en: preguntas a la
base de datos y pruebas matemáticas.
El programa PROLOG específica cómo debe
ser la solución, en vez de dar el algoritmo
para su resolución; dicha solución se obtiene
mediante búsqueda aplicando la lógica de
predicados. El programa PROLOG se
compone de unos hechos (datos) y un
conjunto de reglas, es decir, relaciones entre
objetos de la base de datos.
La ejecución del programa cargado en
memoria consiste en realizar una pregunta
de forma interactiva: el intérprete generará
por inferencia los resultados que se deducen
a partir del contenido de la base de datos.
PROLOG tiene una sintaxis y semántica
simples. Sólo busca relaciones entre los
objetos creados, las variables y las listas, que
son sus estructuras básicas.
1.4.2 Características
PROLOG hace más eficiente el
tratamiento simbólico, y el sistema de
representación de conocimiento, así como la
estructura de control o motor de inferencia y
parte del sistema de entrada/salida de un
lenguaje general de programación de tareas.
Prolog cuenta con:
• Un sistema de representación del
conocimiento en forma de cláusulas (hechos
y reglas) también llamado reglas de
producción.
• Un motor de inferencia de orden 1 que es
el propio intérprete o compilador PROLOG,
basado en la unificación y la búsqueda en
profundidad y la marcha atrás.
• Un sistema sencillo de dialogo. Así que la
realización de un SE en PROLOG se reduce a
la presentación y a los módulos de
justificación de los resultados y explicación
del proceso.
1.4.3 Derivados
* ALF (Another logical framework)
Este lenguaje combina la
programación lógica con la programación
funcional (funcional – basado en la
evaluación de expresiones y funciones
matemáticas más que en la utilización de
comandos como <alloc>, <malloc>…).
* Mercury programming language
Mercury es un lenguaje de alto nivel
(es decir, no se preocupa de problemas
como la reserva y liberación de memoria)
derivado de Prolog, pero con una
implementación que le hace ser más útil
para representar y tratar problemas del
mundo real. Combina toda la expresividad
del lenguaje declarativo con avanzadas
técnicas de análisis estático y detección de
errores.
* ACE, PALS: And/Or-Parallel Implementation
of Prolog
Es una implementación de Prolog,
pero que soporta una arquitectura
multiprocesador



2. RAMAS DE CARRERA AFÍN
2.1. Planteamiento y Diseño
Queremos realizar un sistema
experto en el que de acuerdo a los gustos y
habilidades en la informática de los
estudiantes de esta carrera, les sugiera una
rama de especialización. Para realizar este
diseño hemos partido del diagrama de un
árbol, en el que cada nodo tiene una
pregunta asociada que se imprimirá por
pantalla y que el alumno tendrá que
responder, según la respuesta que responda
el programa se encaminará a la rama del
nodo correspondiente a la respuesta elegida
por el alumno. Una vez recorrido todo el
árbol se llegará a una de las hojas del árbol
que contendrá la respuesta final.
Hemos planteado el diseño de
manera que el árbol sea binario, es decir a
que el árbol tendrá dos respuesta si o no.
A continuación se muestra una
imagen (Figura 01) de una de las ramas que
se han considerado. En este caso, tenemos
como raíz la pregunta ¿Te gusta la
geometría?, si la respuesta es si, se evalúa el
siguiente nodo que consiste en otra
pregunta ¿Eres bueno en vectores?, en el
caso de que la respuesta sea afirmativa,
vamos a un último nodo con la pregunta ¿Te
gustaría hacer gráficos en computadora?,
obteniendo una pregunta afirmativa se
concluirá que la rama que el estudiante debe
seguir es Computación Gráfica. En el caso de
que alguna respuesta haya sido negativa se
procederá a ir a otro árbol con preguntas
diferentes.


Figura 01. Árbol de la Rama Computación Gráfica.
2.2. Implementación
2.1.1. Hipótesis:
Inicializamos nuestro sistema
experto creando la hipótesis, en donde si
llega a la respuesta de cada árbol, realiza un
corte.
hipotesis(ingenieria_de_software) <-
ingenieria_de_software,!.
hipotesis(arquitectura_de_computad
oras) <-
arquitectura_de_computadoras,!.
hipotesis(computacion_grafica) <-
computacion_grafica,!.
hipotesis(redes_de_computadoras)
<- redes_de_computadoras,!.
hipotesis(compiladores) <-
compiladores,!.
hipotesis(base_de_datos ) <-
base_de_datos,!.
hipotesis(sistemas_operativos ) <-
sistemas_operativos,!.
hipotesis(insuficiente_informacion).
Si es que no se ha encontrado ninguna
respuesta en nuestra base de conocimiento,
devolveremos insuficiente_información.
2.1.2. Reglas de Identificación:
En la primera parte se mostrarán las
raíces de cada árbol de acuerdo a la base de
conocimiento.
ingsw <- verifica('¿Te gusta analizar
un problema real?'),!.
arqui <- verifica('¿Te gustaría
manipular circuitos?'),!.
Cgrafica <- verifica('¿Te gusta la
geometría?'),!.
Redes <- verifica('¿Te gustaría
comunicar datos entre
computadoras?'),!.
Comp<- verifica('¿Te gustaría
aprender sobre la teoría de un
computador?'),!.
Bd<- verifica('¿Te gustaría ver cómo
se almacenan los datos?'),!.
so <- verifica('¿Te gustaría manipular
el kernel de tú computadora?'),!.
Ahora se muestra la información de
cada nodo de acuerdo al árbol.
/* Ing de Software */
ingenieria_de_software<- ingsw,
verifica ('¿Te gustaría solucionar
problemas de la vida real con una
computadora?'),verifica('¿Te gustaría
sistematizar un problema?').

/* Arquitectura de Computadoras */
arquitectura_de_computadoras <-
arqui, verifica ('¿Te gustaría
programar el hadware de una
computadora?'), verifica ('¿Te
gustaría aprender un lenguaje de
programación de bajo nivel?'),
verifica('¿Te gustaría crear un
robot?').
/* Computación Gráfica */
computacion_grafica <- cgrafica,
verifica('¿Eres bueno en
vectores?'),verifica('¿Te gustaría
hacer gráficos en computadora?').

/* Redes de Computadoras */
redes_de_computadoras <- redes,
verifica('¿Te gustaría conectar en red
varias computadoras?'),verifica('¿Te
gustaría solucionar problemas de
redes?').

/* Compiladores */
Compiladores <- comp, verifica('¿Te
gustaría aprender qué son los
lenguajes formales?'), verifica('¿Te
gustaría solucionar problemas
mediante autómatas?').

/* Base de Datos */
base_de_datos <- bd, verifica ('¿Te
gustaría manipular grandes
conjuntos de datos?'),verifica('¿Te
gustaría almacenar datos como
sonido y videos eficientemente?').

/* Sistemas Operativos*/
sistemas_operativos<-so, verifica
('¿Te gustaría inventar tú propio
sistema operativo?'),
verifica('¿Quisieras resolver
problemas muy grandes con
herramientas complejas?').

2.1.3. Información de Ramas:
En esta parte del código,
detallaremos la rama y los cursos que podría
llevar un alumno de acuerdo a la información
que se ha obtenido.
/* Ing. de Software*/
Ramas (ingenieria_de_software) <-
send(@lblExp1, selection('Rama:
INGENIERÍA DE SOFTWARE.\nDebido
a que te gusta hacer lo siguiente:
Analizar un problema real, Solucionar
problemas de la vida real con una
computadora y sistematizar un
problema.\n\nPODRÍAS LLEVAR LOS
SIGUIENTES CURSOS: \nMetodología
e Ing. de Software I y II, Ingeniería de
la Información, Modelamiento de
Sistemas con Redes de Petri,
Sistemas Orientados a Objetos y
Topicos Especiales en Computación
I.\n\n')).
/* Arquitectura de Computadoras */
Ramas
(arquitectura_de_computadoras) <-
send(@lblExp1, selection('Rama:
ARQUITECTURA DE
COMPUTADORAS.\nDebido a que te
gusta hacer lo siguiente:Manipular
circuitos, Programar el Hadware de
una computadora, Aprender un
lenguaje de programación de bajo
nivel y Crear un robot.\n\nPODRÍAS
LLEVAR LOS SIGUIENTES CURSOS:
\nIntroducción a la Arquitectura de
Computadoras, Técnicas Digitales
para Computación, Arquitectura y
Organización de Computadoras,
Fisica I y II, Electrónica para
computación.\n\n')).
/* Computación Gráfica */
Ramas (computacion_grafica) <-
send(@lblExp1, selection('Rama:
COMPUTACIÓN GRÁFICA.\nDebido a
que te gusta hacer lo siguiente:
Estudiar geometría, estudiar vectores
y hacer gráficos en
computadora.\n\nPODRÍAS LLEVAR
LOS SIGUIENTES CURSOS:
\nComputación Gráfica I y II, Top.
Espec. en Procesamiento Paraleloy
Geometría Computacional.\n\n')).
/* Redes de Computadoras */
Ramas (redes_de_computadoras) <-
send(@lblExp1, selection('Rama:
REDES DE
COMPUTADORAS.\nDebido a que te
gusta hacer lo siguiente: Comunicar
datos, conectar redes y solucionar
problemas de redes.\n\nPODRÍAS
LLEVAR LOS SIGUIENTES CURSOS:
\nFisica I y II, Electrónica para
Computación, Teleprocesamiento,
Redes de Computadoras y Top.
Espec. en Redes de
Computadoras.\n\n')).
/* Compiladores */
Ramas (compiladores) <-
send(@lblExp1, selection('Rama:
COMPILADORES.\nDebido a que te
gusta hacer lo siguiente: Aprender
sobre teoría del computador,
lenguajes formales y solucionar
problemas mediante
autómatas.\n\nPODRÍAS LLEVAR LOS
SIGUIENTES CURSOS: \nTeoría de la
Computación, Lenguajes Formales y
Autómatas, Compiladores y
Laboratorio de Compiladores.\n\n')).
/* Base de Datos */
Ramas (base_de_datos) <-
send(@lblExp1, selection('Rama:
BASE DE DATOS.\nDebido a que te
gusta hacer lo siguiente:Ver cómo se
almacenan los datos, manipular
conjuntos de datos y almacenar
datos como audio y video.
\n\nPODRÍAS LLEVAR LOS
SIGUIENTES CURSOS: \nOrganización
de Archivos, Base de Datos I y II, Top.
Espec. en Base de Datos y laboratorio
de Base de Datos.\n\n')).
/* Sistemas Operativos */
Ramas (sistemas_operativos) :-
send(@lblExp1, selection('Rama:
SISTEMAS OPERATIVOS.\nDebido a
que te gusta hacer lo siguiente:
Manipular el kernel de tú
computadora, inventar tú propio
sistema operativo y resolver grandes
problemas.\n\nPODRÍAS LLEVAR LOS
SIGUIENTES CURSOS: \nSistemas
Operativos I y II y Top. Especiales en
Sistemas Operativos.\n\n')).

3. EJECUCIÓN
Inicialmente aparece la pantalla de
inicio (Figura 02).
Figura 02. Pantalla de Inicio
Al acceder procedemos a iniciar la
consulta (Figura 03), en esta ejecución de
ejemplo, responderemos afirmativamente a
las preguntas de la Figura 04, 05 y 06.
Figura 03. Menú Principal.

Figura 04. Pregunta número uno







Figura 05. Pregunta número dos









Figura 06. Pregunta número tres
Luego de responder ciertas
preguntas afirmativamente, el sistema nos
da un “diagnóstico” (Figura 07).
Figura 07. Resultado luego de responder
preguntas
Finalmente, si deseamos podemos
ver la descripción y las recomendaciones
hechas por el sistema de acuerdo a las
preguntas respondidas previamente. (Figura
08).
Figura 08. Descripción y Recomendaciones
Según las preguntas previamente
respondidas, el sistema experto nos da la
rama de la carrera a la que el alumno podría
orientarse y sugiere algunos cursos de la
carrera de Informática que este podría llevar.


4. REFERENCIAS
[1] Sánchez y Beltrán, J. P., Sistemas Expertos
una metodología de programación. Editorial
Macrobit, 1990.
[2] Rolston, D.W., Principios de Inteligencia
Artificial y Sistemas Expertos, México,
Mc.Graw-Hill.
[3] Pasi Eronen and Jukka Zitting, An expert
system for analyzing firewall rules,
Proceedings of the ElectronicTechnology,
Helsinky University of Technology, pp. 1-8
(2001).
*4+ A. Barceló J., “El uso de sistemas
expertos en la interpretación de
clasificaciones estadísticas
multidimensionales”, Complutum, C.N.R.S.
Unité Propre deRecherches, pp. 41-51 (1991)
[5] Orenga y Ortega, J.M., PROLOG:
Introducción a la Programación de los
Sistemas Expertos. Rama.