ESCUELA SUPERIOR DE INFORMÁTICA

109
UNIVERSIDAD DE CASTILLA-LA MANCHA ESCUELA SUPERIOR DE INFORMÁTICA GRADO EN INGENIERÍA EN INFORMÁTICA TECNOLOGÍA ESPECÍFICA DE TECNOLOGÍAS DE LA INFORMACIÓN TRABAJO FIN DE GRADO REMGRAFEE TOOL: Herramienta para el Estudio de los Sistemas Basados en Reglas Mediante Grafos RETE José Luis Mora Díaz Junio, 2016

Transcript of ESCUELA SUPERIOR DE INFORMÁTICA

Page 1: ESCUELA SUPERIOR DE INFORMÁTICA

UNIVERSIDAD DE CASTILLA-LA MANCHA

ESCUELA SUPERIOR DE INFORMÁTICA

GRADO EN INGENIERÍA EN INFORMÁTICA

TECNOLOGÍA ESPECÍFICA DE TECNOLOGÍAS DE LA INFORMACIÓN

TRABAJO FIN DE GRADO

REMGRAFEE TOOL: Herramienta para el Estudio de los

Sistemas Basados en Reglas Mediante Grafos RETE

José Luis Mora Díaz

Junio, 2016

Page 2: ESCUELA SUPERIOR DE INFORMÁTICA
Page 3: ESCUELA SUPERIOR DE INFORMÁTICA

UNIVERSIDAD DE CASTILLA-LA MANCHA

ESCUELA SUPERIOR DE INFORMÁTICA

Tecnologías y Sistemas de Información

TECNOLOGÍA ESPECÍFICA DE TECNOLOGÍAS DE LA INFORMACIÓN

TRABAJO FIN DE GRADO

REMGRAFEE TOOL: Herramienta para el Estudio de los

Sistemas Basados en Reglas Mediante Grafos RETE

Autor: José Luis Mora Díaz

Director: Luis Jiménez Linares

Junio, 2016

Page 4: ESCUELA SUPERIOR DE INFORMÁTICA
Page 5: ESCUELA SUPERIOR DE INFORMÁTICA

v

TRIBUNAL:

Presidente:

Vocal:

Secretario:

FECHA DE DEFENSA:

CALIFICACIÓN:

PRESIDENTE VOCAL SECRETARIO

Fdo.: Fdo.: Fdo.:

Page 6: ESCUELA SUPERIOR DE INFORMÁTICA

vi

Page 7: ESCUELA SUPERIOR DE INFORMÁTICA

vii

I Resumen

Los sistemas basados en reglas son uno de los paradigmas más comunes para la

modelización del comportamiento y el control de sistemas complejos, donde se necesita

una representación de conocimiento simbólica, cualitativa, basada en relaciones, etc..

Cualquier sistema basado en reglas está constituido por un conjunto de reglas que definen

acciones o conclusiones si se cumplen determinadas condiciones, así como un mecanismo

de control de inferencia que determina la manera y orden de ejecución de las reglas. Estos

modelos son probablemente la herramienta más general y más popular de la Inteligencia

Artificial.

El proceso de aprendizaje del funcionamiento de estos modelos, así como la

familiarización de sus conceptos característicos, suele ser difícil. Principalmente, debido a

que en este modo de trabajo los datos son gestionados desde un punto de vista muy

diferente en comparación con otros sistemas.

En el presente TFG se propone el desarrollo de una aplicación web que asista al

usuario en la labor de aprendizaje en lo relacionado a estos sistemas, pero más

concretamente con las redes RETE. Esta herramienta permitirá al usuario gestionar una

base de conocimiento, construir una red RETE a partir de ésta y realizar actualizaciones

sobre ella para analizar los cambios procesados.

Page 8: ESCUELA SUPERIOR DE INFORMÁTICA

viii

Page 9: ESCUELA SUPERIOR DE INFORMÁTICA

ix

II Abstract

Rule-based systems are one of the most common paradigms for modeling the

behavior and control of complex systems, which need a symbolic, qualitative and based on

relationships representation of knowledge. Any rule-based system consists of a set of rules

that define actions or conclusions if specific conditions are met, as well as a control

inference engine that determines the way and order of execution of the rules. These models

are probably the most usually and most popular tool of Artificial Intelligence.

The learning process about the working of these models and the adaptation of their

characteristic concepts, is often difficult. Mainly, because in this operating mode, data are

managed from a very different point of view compared to other systems.

In the current TFG it makes the proposal of development a web application to assist

the user in learning task in relation to these systems, but more specifically with RETE

networks. This tool will allow to the user to manage a knowledge base, to build a RETE

network from this and make updates on it to analyze the processed changes.

Page 10: ESCUELA SUPERIOR DE INFORMÁTICA

x

Page 11: ESCUELA SUPERIOR DE INFORMÁTICA

xi

III Agradecimientos

En primer lugar quiero dar las gracias a mis padres porque sin ellos nada hubiera sido

posible, gracias por el apoyo tanto en los malos como en los buenos momentos, gracias por

compartir mis alegrías y decepciones.

También quiero dar las gracias a mis amigos, por soportarme en momentos difíciles

de agobio, desilusión, frustración en los que era complicado incluso mantener una simple

conversación conmigo. Pero no sólo en los malos momentos, también agradezco esos

buenos momentos de desconexión que hacían olvidar un mal examen, un programa que no

salía o un trabajo que parecía interminable.

No me quiero olvidar de todos los compañeros con los que he compartido esta etapa

de mi vida y que me han ayudado a mejorar tanto en el ámbito personal como en el

educativo.

Y por último, dar las gracias a mi director de proyecto por el apoyo mostrado y por

los conocimientos adquiridos. Así como, a todos los profesores que han compartido sus

conocimientos conmigo durante toda la carrera.

Page 12: ESCUELA SUPERIOR DE INFORMÁTICA

xii

Page 13: ESCUELA SUPERIOR DE INFORMÁTICA

xiii

IV ÍNDICE GENERAL

I Resumen ............................................................................................................................ vii

II Abstract ............................................................................................................................. ix

III Agradecimientos .............................................................................................................. xi

IV ÍNDICE GENERAL ...................................................................................................... xiii

V ÍNDICE DE FIGURAS.................................................................................................. xvii

VI ÍNDICE DE TABLAS ................................................................................................... xxi

VII LISTADO DE ACRÓNIMOS ................................................................................... xxiii

1. INTRODUCCIÓN ................................................................................................... 25

1.1 SISTEMAS BASADOS EN REGLAS ............................................................ 25

1.1.1. Ventajas ...................................................................................................... 27

1.2 ESTRUCTURA DE LA MEMORIA .............................................................. 27

2. OBJETIVOS ............................................................................................................ 29

2.1 DESCRIPCIÓN DEL PROBLEMA ................................................................ 29

2.2 OBJETIVOS .................................................................................................... 29

2.2.1 Otros objetivos ........................................................................................... 29

3. ANTECEDENTES, ESTADO DE LA CUESTIÓN ............................................... 31

3.1 ALGORITMO RETE ...................................................................................... 31

3.1.1 Partes de la red ........................................................................................... 32

3.2 LENGUAJES DE PROGRAMACIÓN VISUAL (VPL) ................................ 32

4. MÉTODO DE TRABAJO ....................................................................................... 39

4.1 METODOLOGÍA ÁGIL DE DESARROLLO SOFTWARE ......................... 39

4.1.1 El manifiesto ágil ............................................................................................ 40

4.1.2 Etapas de una metodología ágil ...................................................................... 41

4.1.2.1 Análisis de requisitos ............................................................................... 41

Page 14: ESCUELA SUPERIOR DE INFORMÁTICA

xiv

4.1.2.2 Diseño ...................................................................................................... 41

4.1.2.3 Codificación ............................................................................................. 41

4.1.2.4 Pruebas ..................................................................................................... 42

4.1.2.5 Mantenimiento ......................................................................................... 42

4.2 OTROS ASPECTOS DE LA METODOLOGÍA .................................................. 42

4.2.1 Scrum (modelo en espriral) ............................................................................. 43

4.3 HERRAMIENTAS TECNOLÓGICAS ................................................................ 44

4.3.1. Herramientas de desarrollo software ............................................................. 44

4.3.2. Herramientas de modelado ............................................................................ 47

5. RESULTADOS ....................................................................................................... 51

5.1 SPRINT 1 ......................................................................................................... 51

5.1.1 Arquitectura Seleccionada. ........................................................................ 52

5.1.1.1 Arquitectura Cliente-Servidor ............................................................... 52

5.1.1.1.1 Cliente ............................................................................................ 53

5.1.1.1.2 Servidor .......................................................................................... 55

5.1.1.1.3 Comunicación cliente-servidor ...................................................... 56

5.1.1.2 Plataforma como Servicio (PaaS) ......................................................... 58

5.1.1.2.1 Google App Engine. ....................................................................... 59

5.1.2. Definición de requisitos del sistema .............................................................. 60

5.1.2.1 Requisitos funcionales ............................................................................. 60

5.1.2.2 Requisitos no funcionales ........................................................................ 66

5.2 SPRINT 2 ............................................................................................................... 66

5.2.1 Funcionamiento del algoritmo RETE ............................................................. 67

5.2.1.1 Operación join .......................................................................................... 68

5.2.1.2 Procedimiento de construcción de la red ................................................. 69

5.3 SPRINT 3 ......................................................................................................... 74

Page 15: ESCUELA SUPERIOR DE INFORMÁTICA

xv

5.3.1 Desarrollo inicial de la interfaz .................................................................. 74

5.3.2 Creación bloques Blockly ........................................................................... 77

5.3.3 Implementación mediante base de datos relacionales ................................ 78

5.4 SPRINT 4 ......................................................................................................... 83

5.5 SPRINT 5 ......................................................................................................... 84

5.5.1 Implementación completa del algoritmo RETE ......................................... 84

5.5.1.1 Construcción de la red ........................................................................... 85

5.5.1.2 Actualización de la red .......................................................................... 86

5.5.2 Desarrollo final de la interfaz ......................................................................... 88

5.5.2.1 Resultado de la interfaz ............................................................................ 88

5.5.3 Análisis de las herramientas relacionadas con el módulo gráfico .................. 90

5.5.4 Implantación del módulo gráfico .................................................................... 93

5.5.5 Funcionamiento .............................................................................................. 94

5.5.6 Pruebas ............................................................................................................ 97

6. CONCLUSIONES Y PROPUESTAS ..................................................................... 99

6.1 OBJETIVOS LOGRADOS ............................................................................. 99

6.2 MEJORAS Y PROPUESTAS ............................................................................. 100

7. BIBLIGRAFÍA ...................................................................................................... 101

ANEXO A. MANUAL DE USO DE REMGRAFEE TOOL ........................................... 103

Page 16: ESCUELA SUPERIOR DE INFORMÁTICA

xvi

Page 17: ESCUELA SUPERIOR DE INFORMÁTICA

xvii

V ÍNDICE DE FIGURAS

1.1 – Representación de un sistema basado en reglas .......................................................... 25

3.1 – Interfaz de Scratch ...................................................................................................... 34

3.2 – Interfaz de Flowgorithm ............................................................................................. 34

3.3 – Interfaz del editor gráfico de la lógica e acción de Blender. ...................................... 35

3.4 – Interfaz del mecanismo de control de animación en Unity3D .................................... 36

3.5 – Interfaz de craft ai ....................................................................................................... 37

3.6 – Interfaz de Kodu .......................................................................................................... 37

4.1 - Gráfico que muestra las diferentes etapas dentro de un ciclo de vida ........................ 39

4.2 – Ilustración ciclo de desarrollo en espiral .................................................................... 43

4.3 – Interfaz de Eclipse ...................................................................................................... 45

4.4 – Interfaz de Blockly ...................................................................................................... 47

4.5 – Interfaz de Dia ............................................................................................................ 48

4.6 – Interfaz de Visual Paradigm ....................................................................................... 49

4.7 – Interfaz de Balsamiq moqups ..................................................................................... 50

4.8 – Interfaz de Xmind ....................................................................................................... 50

5.1 – Mapa conceptual de metas .......................................................................................... 51

5.2 – Representación modelo cliente-servidor ..................................................................... 53

5.3 – Métodos de la interfaz HttpServlet ............................................................................. 56

5.4 – Especificación de objeto en formato JSON ................................................................ 57

5.5 – Especificación de colección de valores en formato JSON ......................................... 58

5.6 – Caso de uso de selección de hecho/regla .................................................................... 61

5.7 – Caso de uso de eliminar/editar elemento seleccionado .............................................. 61

5.8 – Caso de uso de eliminar/editar elemento .................................................................... 62

5.9 – Caso de uso de crear nuevo hecho o regla .................................................................. 62

Page 18: ESCUELA SUPERIOR DE INFORMÁTICA

xviii

5.10 – Caso de uso de crear elemento .................................................................................. 63

5.11 – Caso de uso de compilar red RETE .......................................................................... 63

5.12 – Caso de uso de actualizar compilación de red RETE ............................................... 64

5.13 – Caso de uso de actualizar red RETE ......................................................................... 64

5.14 – Caso de uso de actualizar RETE ............................................................................... 64

5.15 – Caso de uso de seleccionar versión de la red RETE ................................................. 65

5.16 – Caso de uso de obtener grafo .................................................................................... 65

5.17 – Nodos alfa del ejemplo propuesto ............................................................................ 70

5.18 – Generación del primer nodo beta .............................................................................. 71

5.19 – Generación del segundo nodo beta ........................................................................... 72

5.20 – Red resultante de la regla propuesta ......................................................................... 73

5.21 – Boceto de la interfaz en pestaña de gestión .............................................................. 75

5.22 – Boceto de la interfaz en pestaña de edición .............................................................. 76

5.23 – Boceto de la interfaz en pestaña de visualización ..................................................... 77

5.24 – Interfaz de Block Factory ......................................................................................... 78

5.25 – Fisionomía del grafo representativo de la red ........................................................... 79

5.26 – Descripción de la tabla “Alfas” ................................................................................ 79

5.27 – Descripción de la tabla “Betas” ................................................................................ 80

5.28 – Descripción de la tabla “Reglas” .............................................................................. 81

5.29 – Descripción de la tabla “Predicados” ........................................................................ 81

5.30 – Descripción de la tabla “Hechos” ............................................................................. 82

5.31 – Clase “Rete” .............................................................................................................. 85

5.32 – Parte de la interfaz correspondiente a la pestaña de gestión. .................................... 89

5.33 – Parte de la interfaz correspondiente a la pestaña de edición. .................................... 89

5.34 – Parte de la interfaz correspondiente a la pestaña de visualización. .......................... 90

5.35 – Fisionomía del grafo resultante. ................................................................................ 94

Page 19: ESCUELA SUPERIOR DE INFORMÁTICA

xix

5.36 – Diagrama de secuencia de “Mostrar datos correspondientes a la base de reglas y la

base de hechos al cargar la página”. .................................................................................... 95

5.37 – Diagrama de secuencia de “Seleccionar un elemento de cualquiera de las listas y

modificarlo”. ........................................................................................................................ 96

5.38 – Diagrama de secuencia de “Seleccionar versión de la red que desea mostrar”. ....... 97

A.1 – Botón desplegable .................................................................................................... 103

A.2 – Mostrar bloques disponibles .................................................................................... 105

A.3 – Cohesión de bloques ................................................................................................ 105

A.4 – Construcción de una regla ........................................................................................ 106

A.5 – Eliminar un bloque ................................................................................................... 106

A.6 – Seleccionar la versión de la red que se desea mostrar ............................................. 107

Page 20: ESCUELA SUPERIOR DE INFORMÁTICA

xx

Page 21: ESCUELA SUPERIOR DE INFORMÁTICA

xxi

VI ÍNDICE DE TABLAS

5.1 – Ejemplo de join tabla 1………………………………………………………………69

5.2 – Ejemplo de join tabla 2………………………………………………………………69

5.3 – Ejemplo de join tabla resultado……………………………………………………...69

5.4 – Ejemplo RETE “es el autor de”……………………………………………………...71

5.5 – Ejemplo RETE “es un libro”……………………………………………………...…71

5.6 – Ejemplo RETE “es escritor de ciencia ficción”……………………………………..72

5.7 – Ejemplo RETE “es el autor de & es escritor de ciencia ficción”……………………73

5.8 – Ejemplo RETE “es el autor”………………………………………………………...74

Page 22: ESCUELA SUPERIOR DE INFORMÁTICA

xxii

Page 23: ESCUELA SUPERIOR DE INFORMÁTICA

xxiii

VII LISTADO DE ACRÓNIMOS

RHS Right Hand Side

LHS Left Hand Side

BC Base de Conocimiento

TFG Trabajo de Fin de Grado

PaaS Platform as a Service

HTML HyperText Markup Language

VPL Visual Programming Language

FSM Finite-State Machine

JDT Java Development Tools

IDE Integrated Development Environment

SGML Standard Generalized Markup Language

CSS Cascading Style Sheets

W3C World Wide Web Consortium

SQL Structured Query Language

UML Unified Modeling Language

CASE Computer Aided Software Engineering

GUI Graphical User Interface

HTTP Hypertext Transfer Protocol

HTTPS Hypertext Transfer Protocol Secure

URL Uniform Resource Locator

TCP Transmission Control Protocol

Page 24: ESCUELA SUPERIOR DE INFORMÁTICA

xxiv

API Application Programming Interface

XML Extensible Markup Language

JSON JavaScript Object Notation

SGBD Sistema Gestor de Base de Datos

Page 25: ESCUELA SUPERIOR DE INFORMÁTICA

25

1. INTRODUCCIÓN

1.1 SISTEMAS BASADOS EN REGLAS

Los sistemas basados en reglas están basados, principalmente, en tres partes

importantes: un conjunto de reglas que definen su base de reglas (parte básica de la base de

conocimiento), la base de hechos y el mecanismo por el cuál son interpretadas las reglas,

llamado comúnmente motor de inferencia [CST].

Figura 1.1 – Representación de un sistema basado en reglas

Las reglas definen las distintas variantes del comportamiento, y por otro lado el

mecanismo de control de inferencia se encarga de la correcta selección y ejecución de las

mismas.

El formato más popular en el cual aparecen las reglas se define de la siguiente manera:

si -antecedente- entonces –consecuente-

El -antecedente- puede ser nombrado, según el ámbito, de varias formas: parte

condicional, condiciones, condiciones previas, etc., pero en el contexto en el que se va a

hablar en este documento será nombrado LHS (parte izquierda). Por otra parte, el -

consecuente- también posee varios términos para su nombramiento, como pueden ser,

conclusión, hipótesis, acción, etc., pero al igual que el -antecedente-, en el nombrado

documento vamos a utilizar el término RHS (parte derecha). El significado básico de las

reglas de este tipo es que si las condiciones que se han definido en el -antecedente- se

Page 26: ESCUELA SUPERIOR DE INFORMÁTICA

26

satisfacen, las conclusiones o acciones definidas en el -consecuente- se pueden ejecutar

[WST].

Hasta este punto solamente se ha hablado de la parte más básica de la base de

conocimiento, que son las reglas, por lo que ahora es el turno de hablar de los denominados

hechos. Éstos representan conocimientos sobre el problema, como pueden ser datos,

hechos establecidos, fines, etc. También pueden concebirse como una relación entre

entidades. En la definición de los hechos estas entidades se representan mediante símbolos

o términos que sean representativos. Se suelen representar en formato de lista. Como puede

ser la siguiente forma:

(x vuela), (x tiene plumas)

El conjunto de todos los hechos definidos para uno o varios problemas conforman una

base de hechos. Ésta representa el problema en curso de solución, y va cambiando a

medida que el proceso de inferencia se va ejecutando. Se pueden distinguir dos partes en la

BC: parte permanente, en la cual se especifican características que siempre se dan en el

problema; y parte temporal, que por el contrario se describen las características que van a

cambiar durante el proceso de solución del problema.

Y por último, queda por hablar de la parte que da sentido y utilidad a las dos anteriores,

el motor de inferencia. Éste usa ambas partes descritas anteriormente para inferir

resultados en forma de nuevas conclusiones o hechos.

En el tema que nos concierne se puede hablar de dos estrategias para inferir resultados

partiendo de una base de hechos: encadenamiento hacia atrás y encadenamiento hacia

delante.

En el encadenamiento hacia atrás, también conocido como dirigido por objetivos, se

intenta probar una hipótesis a través de sus premisas. Del modo que en primer lugar se

consideran sus premisas y se trata de comprobar si éstas son correctas, de este modo se

desemboca en la comprobación de otras reglas que podrían confirmar estas premisas, y así

sucesivamente hasta llegar a un marco en el cual todas las premisas anteriores son

correctas, o por el contrario hasta que se determine que el encadenamiento no es el

correcto. Con lo cual esta estrategia puede llegar a ser muy ineficiente debido a que se

puede demorar demasiado en la búsqueda de la satisfacibilidad de la regla.

Page 27: ESCUELA SUPERIOR DE INFORMÁTICA

27

En cambio, en el encadenamiento hacia adelante, también denominado dirigido por

datos, se parte de un conjunto de hechos conocidos con los que se intentarán satisfacer las

premisas de las reglas de la base de reglas, para así dispararlas y obtener nuevos hechos.

Esta estrategia se lleva a cabo en tres pasos: detección de reglas aplicables, selección de

una regla aplicable y disparo de la regla seleccionada en el paso anterior [MRN] [MRK].

En el ámbito que se va a desarrollar este proyecto se va a utilizar la segunda estrategia

descrita, ya que se va a utilizar un algoritmo llamado RETE (término cuyo significado es

red en latín), el cual se basa en dicho modo de trabajo.

1.1.1. Ventajas

En este apartado se va a hacer una evaluación de las posibles ventajas que se pueden

obtener al usar este tipo de sistemas.

o Una de las principales ventajas de estos sistemas es que al describir los problemas

en formato de reglas permite definir el problema de una manera sencilla y por

consecuencia obtener las soluciones verificadas (las reglas son mucho más fáciles

de leer que le código).

o La rapidez y escalabilidad respecto a otros sistemas es otro de los puntos fuertes a

tener en cuenta. Distintos algoritmos que utilizan este sistema de conocimiento

como puede ser RETE o Leaps son un ejemplo de patrones que pueden proveer esta

eficiencia a el problema a resolver.

o Existen numerosas herramientas que permiten una integración con el entorno de

desarrollo orientado a estos sistemas, los cuales proporcionan una manera cómoda

de editar y gestionar reglas.

1.2 ESTRUCTURA DE LA MEMORIA

Este documento ha sido estructurado según el formato que se recomienda en la

normativa de trabajos de fin de grado de la Escuela Superior de Informática de la

Universidad de Castilla-La Mancha, el cual está integrado por los siguientes capítulos:

o El capítulo 1, en el que nos encontramos presentes, consta de una introducción de

los temas que se van a hablar durante todo el documento para que el lector entre en

materia. Como en este caso pueden ser los sistemas basados en reglas y la red

RETE.

Page 28: ESCUELA SUPERIOR DE INFORMÁTICA

28

o En el capítulo 2 se exponen los distintos objetivos que se pretenden alcanzar con la

realización de este proyecto, así como las principales limitaciones a tener en cuenta

y el material que se ha necesitado para su desarrollo.

o En el capítulo 3 se analizan y se exponen los antecedentes que existen en el ámbito

en el que se ha trabajado.

o En el capítulo 4 se describen tanto las metodologías de trabajo que se han seguido

para la elaboración del proyecto, como las herramientas y entornos utilizados.

o En el capítulo 5 se exponen los resultados obtenidos al aplicar las diferentes

técnicas descritas en el apartado anterior.

o En capítulo 6 se dilucidarán las conclusiones obtenidas en el desarrollo del trabajo

y se propondrá posibles mejoras de cara al futuro.

o Más allá del capítulo 6, se incluye un listado con las referencias bibliográficas

utilizadas tanto en el estudio previo del arte, como en el desarrollo del trabajo.

o Y en último lugar se encuentra el anexo, dónde se puede encontrar una guía de

usuario detallada con los principales aspectos que se tienen que tomar en cuenta

para la utilización de la herramienta.

Page 29: ESCUELA SUPERIOR DE INFORMÁTICA

29

2. OBJETIVOS

2.1 DESCRIPCIÓN DEL PROBLEMA

El problema que se aborda en la realización de este TFG es mostrar el funcionamiento

de una red RETE para una mejor comprensión de este algoritmo.

2.2 OBJETIVOS

Se propone abordar el problema descrito mediante el desarrollo una aplicación web que

permita la visualización gráfica del proceso de actualización de una red RETE.

El usuario podrá modificar la base de hechos editando, eliminando o añadiendo nuevos

hechos, así como modificar la base de reglas con las mismas acciones que se permiten en

el caso de los hechos. Terminada la fase de modificación, el usuario podrá visualizar

gráficamente los cambios que se han ejecutado en la red RETE.

2.2.1 Otros objetivos

A parte del objetivo principal que se propone en este documento, existen otros objetivos

adyacentes que merecen ser mencionados.

Objetivos teóricos:

o Análisis de antecedentes de herramientas que ya existen con estas

características o similares.

o Estudio detallado del funcionamiento del algoritmo RETE.

o Estudio de los procedimientos para representar la red mediante grafos.

o Análisis del lenguaje gráfico propuesto para la edición de conocimientos, el

cual va a ser Blockly, desarrollado por Google.

Objetivos prácticos; la aplicación que se va a desarrollar permitirá al usuario:

o Administrar correctamente tanto una base de hechos, como una base de reglas.

o Realizar correctamente la inserción de reglas y hechos. Teniendo constancia de

qué relaciones entre antecedentes se pueden incluir dentro de una misma regla y

qué hechos se deben incluir en la base de hechos.

o Comprender la representación de este tipo de red mediante un grafo.

Page 30: ESCUELA SUPERIOR DE INFORMÁTICA

30

o Familiarizarse con el entorno gráfico propuesto para la edición de reglas y

hechos, en este caso, que como se ha nombrado antes, es Blockly.

Objetivos académicos; la realización de este TFG supondrá la superación de los

siguientes objetivos académicos:

o Estudiar y aplicar los múltiples elementos de programación necesarios para el

desarrollo del trabajo.

o Practicar el modo de trabajo que conlleva una metodología de desarrollo

software.

2.3 ENTORNO DE TRABJO Y LIMITACIONES.

Para realización del proyecto se ha usado un ordenador personal portátil haciendo uso

del sistema operativo Windows 10.

Como entorno de trabajo para el desarrollo de la aplicación se ha utilizado el IDE de

Eclipse1 (Eclipse Luna SR1 ). Se tomó esta determinación por la simple razón de que es la

herramienta más confortable y que posee mayor compatibilidad de elementos en este

ámbito. Además, existe un plugin que permitirá coordinar perfectamente nuestro proyecto

con el modelo PaaS seleccionado para el desarrollo del trabajo. Como Paas se van a

utilizar los servicios de Google App Engine2, cuyas características se explicarán más

adelante.

En lo que atañe a los lenguajes de programación se han utilizado; Java, para la

programación en el lado del servidor; Java Script, en el lado del cliente; y HTML en el

ámbito de la interfaz gráfica.

1 http://www.eclipse.org/ 2 https://cloud.google.com/appengine/

Page 31: ESCUELA SUPERIOR DE INFORMÁTICA

31

3. ANTECEDENTES, ESTADO DE LA CUESTIÓN

En este capítulo se va a exponer qué antecedentes existen y qué información, obtenida

durante el proceso de análisis, es importante destacar. En primera instancia se va

profundizar en lo que se refiere al algoritmo RETE, se va a describir con detenimiento su

funcionamiento y a exponer sus principales características. A continuación, se hablará de

los VPL (lenguajes de programación visual) y sus posibles aplicaciones.

3.1 ALGORITMO RETE

Para implementar un algoritmo que permita inferir resultados, a priori, podría

proponerse una solución en la cual se comprobara cada antecedente de una regla con cada

uno de los hechos de la base de conocimiento, disparando así a regla si fuera necesario.

Este método puede servir para sistemas que están formados por un número pequeño de

reglas, pero para sistemas reales que implican un número elevado de reglas y una regla

puede tener a su vez cientos de hechos a comprobar es muy ineficiente.

Como posible solución a este problema de ineficiencia surge RETE, el que es definido

como mecanismo de encaminamiento hacia delante. RETE se basa en una red de

reconocimiento de patrones que fue presentada por el profesor Dr. Charles Forgy en su

tesis doctoral en la cual describe como reducir el tiempo necesario para decidir qué reglas

deben de ser activadas en cada ciclo de inferencia. El funcionamiento de este algoritmo se

basa en dos premisas:

1. La memoria es muy grade y no sufre variaciones notables entre dos ciclos, por

lo que gran parte de la información es muy útil para futuros ciclos.

2. Al haber similitud entre las condiciones de las reglas y que a su vez sean

estáticas, hace que se puedan procesar la reglas antes de ser utilizadas

localizando sub-condiciones habituales entre reglas de manera que no sean

redundantes.

RETE construye una red de nodos en la cual el estado del proceso de emparejamiento de

los nodos es almacenado, de este manera que sólo es necesario re-calcular cambios en caso

de que los hechos se vean modificados. La lista de hechos puede cambiar en cada ciclo de

inferencia, por lo que dado este caso, en cada finalización de ciclo existirán reglas cuyos

patrones sí puedan ser satisfechos y antes no [SVN].

Page 32: ESCUELA SUPERIOR DE INFORMÁTICA

32

3.1.1 Partes de la red

La red de RETE es un grafo acíclico dirigido que está compuesto por nodos que

representan un determinado patrón en las condiciones de las reglas. Estos nodos permiten

hacer una criba de los datos de entrada, es decir, la combinación de hechos que coinciden

con una parte de las condiciones que posee una regla. Propagando al resto de nodos sólo

los datos que hayan pasado la criba.

Existen tres tipos de nodos: alfa, beta y gamma. Los nodos alfa se encargan de realizar

pruebas sobre hechos individuales, en cambio los llamados beta, cotejan la relación

existente entre las variables de los antecedente de las reglas. Asimismo, cada nodo posee

una memoria asociada que se denomina memoria alfa y memoria beta respectivamente, las

cuales almacenarán los hechos que han sido emparejados en ciclos previos. Dicha razón es

la culpable del hecho de decir que con RETE se sacrifica memoria para ganar velocidad de

procesamiento. Así como, si varias reglas poseen el mismo antecedente, compartirían el

mismo nodo alfa dentro de la red, evitando así una posible redundancia en la base de

reglas.

Estableciendo una analogía con el modelo de bases de datos relacionales, podemos

equiparar la operación SELECT al proceso de selección de un hecho de la lista de hechos

disponibles para someterlo a la criba de nodos alfa, de tal modo que si el hecho coincide

con la condición que se define en un nodo alfa cualquiera, éste será almacenado en la

memoria alfa correspondiente. Continuando con la analogía propuesta, a la operación JOIN

la podemos asemejar al proceso de verificar la consistencia entre la cohesión de distintas

de distintas variables que constituyen el antecedente de una regla [CBN]. En el capítulo de

resultados se ahondará más en este tema, y se propondrá un modelo de base de datos que

satisfaga los requisitos de este algoritmo.

3.2 LENGUAJES DE PROGRAMACIÓN VISUAL (VPL)

La programación es considerada generalmente como una labor complicada a la cual se

dedica mucho tiempo, incluso cuando se refiere a profesionales. Este hecho proviene en

gran parte de la discrepancia que existe entre los entornos de programación. Una de las

posibles soluciones a este problema reside en la utilización de recursos visuales en la

programación.

Page 33: ESCUELA SUPERIOR DE INFORMÁTICA

33

Se llama lenguaje de programación visual a todo lenguaje de programación que permite

la creación de programas mediante la manipulación de los elementos característicos de la

programación de una forma gráfica, en lugar de especificarlos textualmente. De este modo,

posibilita la programación con expresiones visuales, disposiciones de texto en algunos de

los elementos y símbolos gráficos, utilizados indistintamente como elementos de sintaxis o

de notación secundaria. La programación se lleva a cabo simplemente con la disposición

de los iconos o figuras en la pantalla. Además, el sistema muestra los resultados parciales

de ejecución a medida que se avanza en el desarrollo del programa, de manera que el

usuario puede seguir el proceso de manera interactiva. Este último dato es una de las

grandes bazas con las que cuenta este nuevo estilo de programación, ya que permite la

depuración en línea y la generación automática de programas y de documentación [BRN].

Se distinguen varias categorías dentro de este modo de trabajo en función de la forma

en que se relacionan los distintos artefactos. A continuación se exponen algunas de estas

categorías y las características que las definen [HS] [DH]:

Educativo: en este tipo la gramática es esencialmente la misma que en el caso de

un lenguaje de programación imperativo clásico, con la diferencia que los

elementos gráficos ayudan a tratar de una forma más evidente las combinaciones

de los elementos básicos como pueden ser variables, condiciones o controles de

flujo. La mayor baza de este formato es el estilo colorido y amigable de sus

elementos, en lugar de un puñado de líneas de código. Este aspecto favorece el

interés de aprendizaje del usuario. Como ejemplo de esta categoría se pueden

proponer: Scratch. Blockly, Etoys, Snap!, etc.

Page 34: ESCUELA SUPERIOR DE INFORMÁTICA

34

Figura 3.1 – Interfaz de Scratch

Inspirados en diagramas de flujo: este modo parte de la idea del uso de “cajas y

flechas” para la descripción de los programas. Estos VPLs utilizan una

representación visual muy cercana a la que representa los diagramas de flujo para

describir el flujo de control principal. Se representa la secuencia de ejecución

mediante formas geométricas, en cambio el flujo de ejecución se representa

generalmente mediante flechas. Se usa el resultado o salida de una de estas figuras

para elegir cuál de ellas se ejecutará a continuación. Bajo este enfoque, la gramática

visual es fácil de entender, pero las construcciones lógicas que se pueden crear a

través del lenguaje gráfico son muy limitadas. Algunas de las herramientas que

siguen este patrón son: Raptor, Flowhub, Flowgorithm, etc.

Figura 3.2 – Interfaz de Flowgorithm

Page 35: ESCUELA SUPERIOR DE INFORMÁTICA

35

Flujo de datos: este formato es uno de los más utilizados para herramientas

profesionales, dirigidas a desarrolladores en lugar de usuarios novatos en

programación. En este modo cada bloque representa una función y el flujo está

representado por uniones entre estos bloques. Se crea una relación entre el

elemento de salida del bloque con el elemento de entrada de otro, definiendo así el

flujo de ejecución. Por lo tanto la gramática visual es muy simple, se limita a elegir

qué bloques (funciones) utilizar y cómo en lazarlas. Por lo cual gran parte de la

codificación del programa se encuentra dentro de los bloques. Drakon, Simulink,

Blender (editor gráfico de la lógica de acción) son algunas de las herramientas que

se basan en este tipo de formato.

Figura 3.3 – Interfaz del editor gráfico de la lógica e acción de Blender.

Máquinas de estado finito (FSM): en este tipo se definen estados, y las transiciones

entre ellos son accionadas por condiciones. Cuando un estado cambia, las

instrucciones se activan. Esta descripción se representa gráficamente mediante

bloques en caso de los estados y uniones en el caso de las transiciones. El usuario

diseña el flujo de ejecución de la misma forma que en los diagramas de flujo. Se

pueden proponer como ejemplo de este tipo de herramientas: Unity3D (mecanismo

de control de animación), xaitControl, EKI One, etc.

Page 36: ESCUELA SUPERIOR DE INFORMÁTICA

36

Figura 3.4 – Interfaz del mecanismo de control de animación en Unity3D

Modelo de árbol: en éste se sigue la inspiración el tipo de máquinas de estado

finito. La gramática visual se rige por bloques y enlaces entre éstos, los cuáles

definen el flujo de ejecución. Pero a diferencia de los modelos similares, los

bloques son evaluados y devuelven un estado al bloque anterior, siguiendo la

estructura de árbol (padres e hijos). De esta manera un bloque adquiere un

comportamiento que dependerá de sus hijos, y controlará el flujo de ejecución en

consecuencia del resultado. El diseño del programa es más directo y legible de una

manera más cómoda debido a que hay menos lógica en los campos de texto.

Algunas de las herramientas que usan este modelo son: Angry Ant Behave y craft

ai.

Page 37: ESCUELA SUPERIOR DE INFORMÁTICA

37

Figura 3.5 – Interfaz de craft ai

Eventos basados en reglas: este es el tipo más simple dentro de los VPLs.

Consiste en la utilización de la estructura “si-entonces”, es decir, la regla se

activa si se cumplen una serie de condiciones, y una vez activada se

ejecutan unas instrucciones específicas. Los elementos visuales suelen ser

muy simples, principalmente bloques que pueden ser utilizados en el lado

de las condiciones o en el de los consecuentes. Como ejemplos se pueden

proponer: Zapier, Netvibes Dashboard Of Things, Kodu.

Figura 3.6 – Interfaz de Kodu

Page 38: ESCUELA SUPERIOR DE INFORMÁTICA

38

Page 39: ESCUELA SUPERIOR DE INFORMÁTICA

39

4. MÉTODO DE TRABAJO

En este apartado se va a describir la metodología que se ha usado para el desarrollo de

la aplicación y las herramientas tecnológicas que se han requerido para su implementación.

4.1 METODOLOGÍA ÁGIL DE DESARROLLO SOFTWARE

En el proceso de desarrollo de un proyecto software pueden surgir serios problemas a

la hora de introducir cambios sustanciales. Cabe la opción de que el cliente introduzca

nuevos requisitos o simplemente prescinde algunos de ellos. En este marco es dónde nace

la metodología ágil enfocada al desarrollo de software. Las principales premisas de esta

metodología se basan en un desarrollo del trabajo de forma iterativa e incremental, en la

cual los requisitos y objetivos evolucionan con el tiempo dependiendo de las necesidades

en ese momento. El trabajo es realizado mediante la cooperación de quipos auto-

organizados y multidisciplinarios que comparten la toma de decisiones, la cuales se toman

a corto plazo.

Figura 4.1 - Gráfico que muestra las diferentes etapas dentro de un ciclo de vida

Esta definición modernizada de metodología ágil es el resultado de una evolución

iniciada a mediados de los años 1990 como reacción en contra de las metodologías usadas

en esa etapa. Éstas se caracterizaban por seguir un modelo de desarrollo en cascada, que

era visto como un modelo de trabajo lento e inconsistente con los modelos que realmente

llevaban a cabo un trabajo eficiente. Más adelante, ya en el año 2001, se reunieron en Utah

Page 40: ESCUELA SUPERIOR DE INFORMÁTICA

40

los principales exponentes de esta comunidad y adoptaron el nombre de métodos ágiles. Al

poco tiempo, parte de este mismo grupo de personas formaron, lo que se denominó en su

momento la The Agile Allianze3 (alianza ágil). Consiste en una organización sin ánimo de

lucro que se encarga de promover los conceptos relacionados con el desarrollo ágil de

software y prestar ayuda a las organizaciones para que adopten estos conceptos. Crearon

un documento, llamado Manifiesto Ágil, en el cual se resume la filosofía ágil [PZ] [ISSI].

4.1.1 El manifiesto ágil

Según el manifiesto prevalecen los siguientes valores[ISSI]:

o Al individuo y las interacciones del equipo de desarrollo sobre el proceso y las

herramientas. La gente es el principal factor de éxito de un proyecto software. Es

más importante construir un buen equipo que construir el entorno. Muchas veces se

comete el error de construir primero el entorno y esperar que el equipo se adapte

automáticamente. Es mejor crear el equipo y que éste configure su propio entorno

de desarrollo en base a sus necesidades.

o Desarrollar software que funciona, más que conseguir una buena

documentación. La regla a seguir es “no producir documentos a menos que sean

necesarios de forma inmediata para tomar un decisión importante”. Estos

documentos deben ser cortos y centrarse en lo fundamental.

o La colaboración con el cliente, más que la negociación de un contrato. Se

propone que exista una interacción constante entre el cliente y el equipo de

desarrollo. Esta colaboración entre ambos será la que marque la marcha del

proyecto y asegure su éxito.

o Responder a los cambios más que seguir estrictamente un plan. La habilidad de

responder a los cambios que puedan surgir a los largo del proyecto (cambios en los

requisitos, en la tecnología, en el equipo, etc.) determina también el éxito o fracaso

del mismo. Por lo tanto, la planificación no debe ser estricta sino flexible y abierta.

3 www.agilealliance.org

Page 41: ESCUELA SUPERIOR DE INFORMÁTICA

41

4.1.2 Etapas de una metodología ágil

Como se ha descrito anteriormente este modelo se trabaja mediante iteraciones o

etapas. Cada iteración del ciclo de vida se divide a su vez en cinco etapas.

4.1.2.1 Análisis de requisitos

En esta etapa se extraen los requisitos de un producto software. Debe existir un

consenso entre el desarrollador software y el cliente. El cliente por norma general expondrá

sus requisitos sin conocimientos de diseño, por lo que existirán contradicciones,

ambigüedades, a su vez que definiciones incompletas. Como resultado de esta fase se

obtiene el documento de especificación de requisitos. Esta fase es crucial, ya que de ésta

depende en gran medida el cumplimiento de los objetivos finales.

4.1.2.2 Diseño

En esta etapa del ciclo de vida se determina la manera en la que el software funcionará

de forma general, sin entrar en detalles. Se incorporarán los detalles de la implementación

tecnológica que son necesarios tener presente, como pueden ser el hardware, la red, etc.

Son definidos los casos de uso que serán necesarios para satisfacer las funciones que

realizará el sistema.

4.1.2.3 Codificación

En la presente etapa se plasma en código todo lo descrito en la fase de diseño. A priori

puede parecer la fase más ardua en cuanto a trabajo y dificultad dentro del ciclo de vida,

pero no necesariamente tiene que ser así. El nivel de dificultad y de trabajo dependerá

directamente de la calidad del diseño y de los lenguajes de programación que es necesario

usar.

Page 42: ESCUELA SUPERIOR DE INFORMÁTICA

42

4.1.2.4 Pruebas

Se realizan las pruebas pertinentes para comprobar que el producto software obtenido

cumple con los requisitos indicados en la especificación del problema. Las pruebas

ofrecerán mejores resultados si la persona que ejecuta las pruebas no es la misma que ha

desarrollado esa parte del software.

4.1.2.5 Mantenimiento

Una vez desplegado el producto pueden aparecer errores o pueden surgir nuevos

requisitos. Por lo tanto comienza una nueva etapa, la de mantenimiento, en la cual se

corrigen errores, se perfeccionan funciones o se añaden nuevas funcionalidades.

Dependiendo de estos factores, el mantenimiento adquiere diferentes nombres. Correctivo,

perfectivo, evolutivo o adaptativo.

4.2 OTROS ASPECTOS DE LA METODOLOGÍA

Esta es la metodología que a grandes rasgos se ha seguido en la elaboración del

proyecto. Pero siempre existen pequeñas modificaciones que surgen respecto a un modelo

base. Esto se refiere a que dentro de esta metodología se ha seguido un modelo de trabajo

más orientado a la consecución de metas. En casa fase del desarrollo se han ido marcando

metas, en las cuales existían unos logros de objetivos. Se tomó esta decisión para poder

permitir una mayor adaptabilidad de ideas entre el cliente (el director del proyecto en este

caso) y el desarrollador (el autor del proyecto), debido a la previsión de cambios en

algunos de los requisitos establecidos previamente.

Este modelo descrito se puede asemejar a un tipo de metodología ágil llamado Scrum,

siguiendo un modelo en espiral. La elección del modelo en espiral reside en el hecho de

poder echar un paso hacia atrás y realizar una revisión del trabajo realizado hasta ese

momento, permitiendo detectar pequeños fallos en fases anteriores los cuales podrían

derivar en errores más graves en un futuro.

Page 43: ESCUELA SUPERIOR DE INFORMÁTICA

43

Figura 4.2 – Ilustración ciclo de desarrollo en espiral

4.2.1 Scrum (modelo en espriral)

Como ya se ha expuesto en apartados anteriores, Scrum es una metodología ágil para la

gestión de desarrollo de software. En este modelo se llevan a cabo entregas parciales y de

una manera regular del producto final, dando prioridad al beneficio que aportan al cliente.

Por tanto este modelo está orientado, principalmente, a proyectos donde existe la necesidad

de obtener resultados rápidamente, donde los requisitos son cambiantes y donde la

productividad y la flexibilidad son fundamentales [ISSI].

Esta metodología de trabajo fomenta la innovación, compromiso y motivación del

grupo de trabajo que forma parte del proyecto, por lo que aumenta la eficiencia a la hora de

llevar a cabo el trabajo.

Sprint Planning (Planificación de la iteración)

La planificación de los objetivos a cumplir en cada iteración se divide en dos partes:

o Primera parte; el cliente presenta al equipo de desarrollo las lista de objetivos que

se deben alcanzar y cuáles de ellos son los prioritarios. El equipo realiza una

revisión de la lista y pregunta posibles dudas surgidas, a su vez que se compromete

con el cliente al cumplimiento de una selección de objetivos que son más

determinantes en la presente iteración.

o Segunda parte; el equipo de desarrollo llevaba a cabo una planificación de la

iteración. Elaboran el procedimiento por el cual conseguirán mejores resultados con

el mínimo esfuerzo posible. Se definen las tareas necesarias para poder completar

Page 44: ESCUELA SUPERIOR DE INFORMÁTICA

44

cada objetivo, y con éstas se crea un documento llamado Sprint Backlog (lista de

tareas de la iteración).

Ejecución del Sprint

Se denomina Sprint a cada una de las iteraciones. Es el período en el cual se lleva a

cabo el trabajo en sí. Se recomienda que la duración del mismo sea constante y definida

por el equipo en relación a la experiencia que poseen. Al final de cada sprint deberá

mostrar los avances logrados, habiendo obtenido un producto que, potencialmente, se

puede entregar al cliente, a esta práctica se la denomina Sprint Retrospective (retrospectiva

del sprint).

Sprint Review (revisión del sprint)

Una vez terminado el sprint es necesario revisar que parte del trabajo fue completado y

cual no. El trabajo que sí ha sido completado se muestra al cliente para que éste pueda dar

el visto bueno y poder realizar observaciones o adaptaciones.

Roles

o Product owner; representa al cliente. Es el encargado de que el equipo realiza su

trabajo adecuadamente desde la perspectiva del negocio, así como de definir

objetivos del proyecto, dirigir sus resultados y de decidir qué requisitos son

prioritarios para el cliente.

o ScrumMaster; su principal fin es eliminar los obstáculos que impiden que el equipo

alcance los objetivos del sprint. No figura como líder del equipo, únicamente se

asegura que el proceso Scrum se cumpla adecuadamente.

o Equipo; es el conjunto de personas que adquiere la responsabilidad del desarrollo

del producto. Cada uno de ellos posee las habilidades necesarias para la realización

del trabajo.

4.3 HERRAMIENTAS TECNOLÓGICAS

4.3.1. Herramientas de desarrollo software

Eclipse; es una plataforma de software que está compuesto por un conjunto de

herramientas de programación de código abierto multiplataforma para el desarrollo

de lo que se denomina “Aplicaciones de Cliente Enriquecido”, opuesto a las

Page 45: ESCUELA SUPERIOR DE INFORMÁTICA

45

aplicaciones de “Cliente-liviano” basadas en navegadores. Esta plataforma ha sido

usada normalmente para desarrollar entornos de desarrollo integrados (que

proviene del término anglosajón IDE), como puede ser el IDE de Java (JDT).

Su integración con el PaaS escogido mediante un plugin y el perfecto soporte de

los lenguajes de programación que se han usado, han sido factores clave para la

elección de esta herramienta como entorno de trabajo.

En la figura 4.3 se muestra la interfaz principal del entorno Eclipse.

Figura 4.3 – Interfaz de Eclipse

HTML; es un lenguaje de marcas de hipertexto (HyperText Markup Language) que

está basado en el metalenguaje SGML, y que es utilizado para la elaboración de

páginas web. Se caracteriza por poseer una estructura básica y hacer uso de un

código, determinado para la definición de contenido dentro de una página web,

como pueden ser, imágenes, textos, videos, etc. Este código tiene dos partes

notablemente diferenciadas; el conjunto de etiquetas del propio lenguaje HTML y el

contenido en sí de la información.

CSS; su nombre viene definido por la siglas de su denominación en inglés

(cascading style sheets), y que en castellano significan hoja de estilo en cascada.

Page 46: ESCUELA SUPERIOR DE INFORMÁTICA

46

Como su propio nombre indica es una hoja de estilo que es usada para definir y

crear la presentación de un documento escrito en HTML. La idea principal al

desarrollar esta idea es separar la especificación de la estructura del documento de

su presentación. El World Wide Web Consortium (W3C) es el encargado de

formular la especificación de las hojas de estilo que posteriormente sirven de

estándar para los navegadores.

JavaScript; es un lenguaje de programación interpretado, dialecto del estándar

ECMAScript. En su definición consta como orientado a objetos, basado en

prototipos, imperativo, dinámico y débilmente tipado. Se utiliza principalmente en

la parte del cliente, implementado como parte de un navegador web permitiendo

mejoras en la interfaz de usuario y páginas web dinámicas.

Blockly4; es un lenguaje de programación totalmente visual que permite construir

código, simplemente, juntando pequeños elementos gráficos. Cada uno de estos

elementos gráficos es también un elemento de código, de manera que conforme se

van juntando estas piezas se van formando funciones de código. Este proyecto está

desarrollado por Google, y se puede catalogar como una reminiscencia de la

herramienta Scratch. Blockly está implementada en JavaScript, pero a su vez puede

compilar en JavaScript, Dart o Python.

Esta herramienta es la elegida para definir nuevos hechos y nuevas reglas en el

sistema propuesto.

En la figura 4.4 se muestra la interfaz de esta herramienta.

4 https://developers.google.com/blockly/

Page 47: ESCUELA SUPERIOR DE INFORMÁTICA

47

Figura 4.4 – Interfaz de Blockly

Dot; es un lenguaje descriptivo en texto plano. Provee una forma sencilla de

describir gráficos que sean entendibles por humanos y computadores [BLT];.

SQL; es un lenguaje de tipo declarativo orientado a accesos a base de datos

relacionales, el cual permite especificar diversos tipos de operaciones entre ellas.

Una de sus principales características es el uso del cálculo relacional y el álgebra

que permiten realizar consultas con el propósito de recuperar información de bases

de datos y ejecutar cambios sobre las mismas

4.3.2. Herramientas de modelado

Dia5; es una programa que permite la creación de diagramas. Está desarrollado en

módulos, dándole la oportunidad al usuario de elegir entre varios paquetes según

las necesidades. La versión en la que en este momento se encuentra, permite la

creación de diagramas UML (Unified Modeling Language), diagramas entidad-

relación, diagramas de flujo, diagramas de redes, etc.

En la figura 4.5 se muestra la interfaz de esta herramienta.

5 http://dia-installer.de/

Page 48: ESCUELA SUPERIOR DE INFORMÁTICA

48

Figura 4.5 – Interfaz de Dia

Visual paradigm6: es una herramienta de tipo CASE (Computer Aided Software

Engineering) para el modelado UML. Constituye un conjunto de ayudas para el

desarrollo de software en cada una de sus etapas, desde la planificación,

continuando con el análisis y el diseño, incluso con la generación de código y

documentación. El principal propósito para el que se creó esta herramienta fue el

soporte completo del ciclo de vida del desarrollo de software, a través de la

creación de gran variedad de diagramas.

Esta herramienta ha sido usada en el presente trabajo para crear los diferentes

diagramas UML que se incluyen.

En la figura 4.6 se muestra un ejemplo de la interfaz de esta herramienta.

6 http://www.visual-paradigm.com/

Page 49: ESCUELA SUPERIOR DE INFORMÁTICA

49

Figura 4.6 – Interfaz de Visual Paradigm

Balsamiq moqups7; es una herramienta que se utiliza para la realización de bocetos

y diseños de borradores de interfaces de usuario. Permite representar gran mayoría

de los elementos presentes en una interfaz, además de una manera fácil y rápida.

En la figura 4.7 se muestra la interfaz de esta herramienta.

7 https://balsamiq.com/

Page 50: ESCUELA SUPERIOR DE INFORMÁTICA

50

Figura 4.7 – Interfaz de Balsamiq moqups

Xmind8; es un programa de software libre que permite al usuario la creación de

mapas conceptuales. Ayuda a anotar ideas, organizar gráficos, y compartirlos para

trabajar de una manera colaborativa.

En la figura 4.8 se muestra la interfaz de esta aplicación.

Figura 4.8 – Interfaz de Xmind

8 http://www.xmind.net/

Page 51: ESCUELA SUPERIOR DE INFORMÁTICA

51

5. RESULTADOS

En este capítulo el foco de atención se centrará en describir los resultados obtenidos

una vez aplicado el modelo de trabajo descrito en el capítulo anterior, una metodología ágil

basada en Scrum siguiendo un modelo en espiral.

La elaboración del proyecto se ha dividido en cinco grandes etapas o Sprints, en las que

cada una tendrá una lista de objetivos asociados, y que han sido acordados previamente

con el cliente. Al inicio de cada etapa se realizó una reunión para acordar estos objetivos, y

cuáles de ellos poseían mayor prioridad dentro del mismo Sprint.

Una vez terminado el Sprint, y antes de pasar a la definición de objetivos del siguiente,

se realizaba una retrospectiva para analizar qué objetivos se habían alcanzado

correctamente y cuáles no. También se realizaban demostraciones al cliente de los

objetivos alcanzados, dándole la oportunidad de dar observaciones y proponer

adaptaciones al resultado obtenido.

Figura 5.1 – Mapa conceptual de metas

5.1 SPRINT 1

Esta primera etapa se dedicó al análisis de la situación del arte y qué elementos existían

en este ámbito. Se establecieron una serie de reuniones con el cliente dónde se discutieron

y se propusieron las diferentes opciones que se barajaban en cuanto a las funcionalidades

que iba a poseer el presente proyecto. Llegados a este punto se definieron formalmente los

requisitos funcionales que la herramienta debería cumplir. Para este fin se llevó acabo un

modelo orientado a casos de uso. Cada caso de uso es una acción que un actor (por ejemplo

el usuario o el servidor) podrá llevar a cabo en el sistema implementado.

Page 52: ESCUELA SUPERIOR DE INFORMÁTICA

52

Una vez obtenidos los resultados del análisis se procedió a determinar “el cómo” de la

herramienta a desarrollar. Se llevó a cabo una investigación para determinar qué elementos

o arquitecturas se adaptaban a las necesidades que se habían acordado en el punto anterior,

para así poder desarrollar satisfactoriamente el proyecto.

5.1.1 Arquitectura Seleccionada.

Para llevar a cabo este proyecto se decidió utilizar un modelo de aplicación web.

Ésta era la opción más versátil y más cómoda para el usuario. Se valoraron otras opciones,

como por ejemplo una aplicación de escritorio, pero sopesados los problemas que podría

ocasionar crear una herramienta instalable en una determinada plataforma o entorno,

restándole así usabilidad, se decidió rechazar esta opción. Por otra parte, de cara al usuario,

es más cómodo el uso de una aplicación web, que incluso podría utilizarla con un

dispositivo móvil o una tableta.

En cuanto a lo que se refiere a la implementación, se propuso una estructura cliente-

servidor apoyada por PaaS (Platform as a Service), o Plataforma como Servicio. Hoy en

día ésta es la forma más eficiente y cómoda de llevar a cabo modelos de este tipo. En los

siguientes apartados se explicará más a fondo las características y el funcionamiento de

estas arquitecturas.

5.1.1.1 Arquitectura Cliente-Servidor

A grandes rasgos esta arquitectura consiste en que un cliente realiza peticiones a un

servidor y éste le contesta con la información solicitada si se la puede proporcionar.

Ésta forma pensamiento se puede aplicar en multitud de usos en el ámbito de la

computación, pero dónde más se usa es en plataformas web. Este modelo se usó por

primera vez en 1980, pero no empezó a ser extendido su uso hasta finales de esa misma

década. El principal motivo de la evolución de esta idea de trabajo es la necesidad que

existe en las organizaciones, ya sean empresas o instituciones públicas, de llevar a cabo

sus funciones de una manera más agil y eficiente. Debido a la creciente competencia a

la que éstas están sometidas, necesitan que su personal sea más productivo, así como, la

reducción de gastos de operación y de costos. Por lo tanto, es nesario adquirir una

infrasestructura de precesamiento de información, que posea estos elementos

Page 53: ESCUELA SUPERIOR DE INFORMÁTICA

53

requeridos para proveer un mejor servicio a los clientes. El modelo cliente-servidor

posee las características necesarias para suministrar estos servicios.

Figura 5.2 – Representación modelo cliente-servidor

Bajo un punto de visto más técnico, también se pueden dar variedad de razones por la

cuales este modelo es el óptimo para el ámbito que se requiere en este trabajo. Como

pueden ser:

o Cliente y servidor pueden actuar como una sola entidad, o pueden actuar como

entidades separadas, pudiendo realizar tareas diferentes.

o Las funciones de cliente y servidor pueden estar en la misma plataforma o en

plataformas separadas. Por lo tanto, cada una de ellas es escalable

independientemente. Los cambios realizados se realizan de una manera trnsparente

para el usuario final.

o El servidor proporciona servicio a varios clientes de forma concurrente.

5.1.1.1.1 Cliente

El cliente es el encargado de proporcionar al usuario la funcionalidad de formular las

peticiones y enviarselos al servidor, también llamado front-end.

Generalmente, el cliente es el encargado de manipular las funciones relacionadas con el

despliegue y precesamiento de datos. Por esta razón, es necesario que estén desarrollados

en plataformas que permitan contruir interfaces gráficas de usuario (GUI), y que además

puedan acceder a los servicios distribuidos necesarios.

Page 54: ESCUELA SUPERIOR DE INFORMÁTICA

54

Las principales funciones que lleva a cabo el proceso cliente son:

o Administración de la interfaz de usuario.

o Interacción con el usuario.

o Generar consultas de bases de datos.

o Recibir y dar formato a los resultados del servidor.

Como ya se ha explicado anteriormente en el cliente reside reside todos los elementos

que están relacionados con la interacción con el usuario. En el caso del modelo propuesto

en este trabajo, se ha utilizado html y CSS para dar formato a la interfaz de usuario y java

script para la lógica de esta parte de la infraestructura. Por otra parte para la comunicación

con el servidor se ha utlizado el elemento XMLHttpRequest.

Interfaz XMLHttpRequest

Esta interfaz se emplea para realizar peticiones mediante protocoles HTTP y HTTPS a

servidores web. HTTP (Hypertext Transfer Protocol), como su propio nombre indica, es un

protocolo de transferencia de hipertexto, que se encuentra en el nivel de aplicación, y que

permite intercambios de información entre cliente-servidor. Al cliente que realiza la

petición (generalmente un navegador) se le denomina user agent y a la información

transmitidida se la conoce como recurso y que a su vez se la identifica por medio de un

localizar uniforme de recursos (URL). Estos recursos puede ser el resultado de una

consulta de base de datos, el resultado e la ejecución de un programa, un archivo, etc. Es

un protocolo que no guarda información de conexiones previas, es de decir, no tiene

estado. Debido a que, habitualmente, las aplicaciones web que se desarrollan en este

ámbito necesitan guardar el estado, se utilizan otros elementos como pueden ser las cookies

y las sesiones. La principal diferencia que existe entre estas dos propuestas es la

localización de su almacenamiento; las cookies se almacenan localmente, y por el contrario

las sesiones se almacenan en el servidor.

Un escenario típico de este tipo de conexión podría ser el siguiente:

1. El cliente incicia una conexión TCP con el servidor por el puerto 80. Este

número es el definido por defecto.

Page 55: ESCUELA SUPERIOR DE INFORMÁTICA

55

2. El servidor, el cual se encuentra escuchando en el puerto 80, acepta la conexión

y se lo notifica al cliente.

3. El cliente manda un mensaje de petición POST dentro de la conexión abierta.

4. El servidor recibe esta petición, la procesa y crea el mensaje de respuesta. En

este mensaje de respuesta inlcuye la datos o el documento que se le ha

solicitado previamente.

5. El servidor cierra la conexión.

6. En el lado del cliente se recibe el mensaje y se realiza la acción para la que

estaba destinada la información o los elementos requeridos.

5.1.1.1.2 Servidor

El servidor es el encargado de atender a los múltiples clientes que le hacen peticiones de

recursos que éste administra. A este proceso también se llama back-end. El servidor

normalmente es el encargado de las operaciones lógicas, aunque puede ser habitual ver

parte de esta lógica en la parte del cliente.

A continuación se muestran las funciones que puede desarrollar el servidor:

o Dar formato a los datos para transmitirlos a los clientes.

o Aceptar requerimientos de bases de datos que realizan los clientes.

o Procesar consultas de base de datos.

o Procesar la lógica de la aplicación y realizar validaciones en cuanto a bases de

datos se refiere.

Tecnologías usadas en el servidor

En el lado del servidor también es necesario implementar una interfaz que nos permita

la conexión con el cliente. En este caso la interfaz que se va a usar es HttpServlet, la cual

pertenece a una API de Java llamada servlet. Estos elementos, llamados comúnmente

servlets, reciben las peticiones que se envían por parte del cliente, y a su vez permiten

contestar con los resultados correspondientes.

La interfaz nombrada anteriormente contiene, entre otros métodos a implementar, los

métodos doGet y doPost. Éstos son los más destacables, ya que van a ser los encargados de

Page 56: ESCUELA SUPERIOR DE INFORMÁTICA

56

recibir los datos implicados en la conexión. La diferencia a la hora de usar uno u otro es la

forma en la que los parámetros son recibidos o enviados; en el caso de doGet los

parámetros estarán contenidos dentro de la URL de la web concatenados entre sí y

utilizando como separador el símbolo “&”, por lo tanto los datos son visibles por el

usuario y tienen una capacidad de contenido muy limitada; en cambio el método doPost no

va a distorsionar la URL amigable de la web, y lo que es más determinante, va a permitir el

envío de grandes cadenas de texto[PL]. Este último factor descrito es el que tiene más

relevancia en el caso que nos atañe, debido a la necesidad de enviar las largas cadenas de

texto necesarias para procesar la información de la especificación XML de los bloques

Blockly usados en la interfaz.

Figura 5.3 – Métodos de la interfaz HttpServlet

5.1.1.1.3 Comunicación cliente-servidor

Hasta ahora, en los diferentes apartados anteriores, se ha descrito el modelo utlizado

para la comunicación entre las dos grandes partes en la que se dividide nuestro sistema. En

cambio en esta parte, es el turno de hablar del lenguaje que se ha utilizado para moldear los

Page 57: ESCUELA SUPERIOR DE INFORMÁTICA

57

datos en función de la forma que son requeridos en cada parte para que el entendimiento en

la comunicación sea satisfactorio. Es decir, si en el lado del servidor se utiliza el lenguaje

Java, los datos son formateados para que puedan ser enviados al cliente, y éste pueda

darles el formato que se requiere, en este caso la información tendrá que ser legible en

lenguaje Java Script.

Para este fin, hemos utilizado el formato JSON. Es el mecanismo de intercambio de

objetos complejos más utilizado en este ámbito. Su gran aceptación se debe, entre otras

cosas, a que permite representar objetos complejos como mapas de cadenas, que es mucho

menos pesado que otros mecanismos de intercambio, como puede ser XML, y que además

es fácilmente legible por las personas[PL]. Dada una descripción general de este formato

se va a profundizar un poco más en cómo se trabaja con él.

Puesto que en cada lado de la comunicación, comúnmente, va a existir discrepancia

de lenguajes, se utilizan estructuras universales. Estructuras que todos los lenguajes de

programación soportan de una forma u otra.

La primera estructura que se presenta es una colección de pares nombre/valor. Esta

práctica puede ser conocida en otros lenguajes como objeto, estructura, diccionario, tabla

hash, lista de claves, etc. Y La segunda es una lista ordenada de valores, o también

llamadas en otros lenguajes, vectores, listas o secuencias.

Estas estructuras se presentan en JSON de la siguiente manera:

1. El objeto es una colección desordenada de pares nombre/valor. Empieza con el

carácter “{” y termina con “}”. A cada nombre le sigue “:” y los pares

nombre/valor aparecen separados por “,”.

Figura 5.4 – Especificación de objeto en formato JSON

Ejemplo: {predicado : padre. parámetro: Luis}

Page 58: ESCUELA SUPERIOR DE INFORMÁTICA

58

2. Una colección de valores. Comienza con “[” y termina con “]” y lo valores se

encuentran separados por “,”.

Figura 5.5 – Especificación de colección de valores en formato JSON

Ejemplo: [luis, pedro, juan]

La colección de valores puede ser incluida como valor dentro del par nombre/valor

del objeto.

Ejemplo: {predicado : padre. parámetro: [luis, pedro, juan]}

5.1.1.2 Plataforma como Servicio (PaaS)

El modelo PaaS es una categoría de servicios proporcionados en la nube, también

conocida como cloud, que proveen un entorno y una plataforma que hace posible a los

usuarios crear herramientas y servicios que trabajen a través de la red.

Este servicio permite a los desarrolladores crear aplicaciones software utilizando

herramientas proporcionadas por el proveedor. Éste pone a disposición del usuario una

serie de servicios a los cuales podrán acceder por medio de suscripciones o alquileres. Por

norma general, no es necesario contratar todo el conjunto de herramientas de las que se

disponen, permitiendo al usuario elegir únicamente las necesarias para cubrir sus

requisitos. También ofrecen servicio técnico. Los servicios son actualizados

constantemente, tanto para añadir funcionalidades nuevas, como para mejorar las

existentes. Incluso, algunas de las organizaciones que proporcionan estos servicios ofrecen

la colaboración con los desarrolladores, desde la concepción del proyecto hasta el

desarrollo de la aplicación, o incluso llegando a la fase de pruebas.

A continuación se listan algunos de los servicios que pueden incluirse dentro de un

modelo PaaS:

o Sistema de gestión de base de datos.

o Hosting.

Page 59: ESCUELA SUPERIOR DE INFORMÁTICA

59

o Herramientas de diseño y desarrollo.

o Sofware de servidor.

o Sistema operativo.

o Almacenamiento.

o Acceso a la red.

o Soporte técnico.

Esta forma de trabajo no sólo aporta beneficios de cara a los desarrolladores y

programadores, también, aporta ventajas a los posibles clientes, a los cuáles, éstos están

prestando servicio.

Algunas de las ventajas más destacadas son propuestas a continuación:

o Flexibilidad; los usuarios pueden crear una plataforma adaptada perfectamente a

sus requisitos.

o Adaptabilidad; en caso de que las necesidades cambien, el desarrollador puede

modificar las funcionalidades.

o Seguridad; proveen varias políticas de seguridad, incluyendo protección de datos y

la realización y recuperación de copias de seguridad.

o No necesidad de inversión en una infraestructura física; el cliente se ahorra gastos

de hardware y tiempo en la configuración del mismo.

o Da la oportunidad de desarrollar aplicaciones a usuarios con pocA experiencia en

este ámbito; algunas de las propuestas PaaS ofrecen un servicio por pasos a través

de una sencilla interfaz.

Existen multitud de empresas que proveen estos servicios. Algunas de las más exitosas

son: Heroku, Windows Azure, Amazon AWS, Google App Engine, etc. Cada una se amolda

a un tipo de modelo y de forma de trabajo. Por lo tanto, sopesando las características de

cada una y analizando las necesidades del proyecto a desarrollar se decidió usar Google

App Engine.

5.1.1.2.1 Google App Engine.

Esta propuesta de servicio PaaS es idónea para los intereses que nos atañen. Las

principales características que aporta y que coinciden con los requisitos que necesita

nuestro modelo son las siguientes:

Page 60: ESCUELA SUPERIOR DE INFORMÁTICA

60

o Soporte de varios lenguajes de programación. Entre ellos, Java, que es el que se va

a utilizar en el proyecto.

o Servicio de almacenamiento de datos; en este ámbito Google ofrece a los usuarios

dos posibles opciones. Una de ellas consiste en un servicio de Datastore y la

segunda opción que propone es un servicio de base de datos relacional basada en

MySQL. La segunda opción es la más apropiada para las necesidades del proyecto a

realizar.

o Gestor de aplicaciones; mediante la administración de una cuenta de Google, se

permite al usuario administrar los permisos y el control de acceso de la aplicación.

Pudiendo añadir colaboradores o supervisores al proyecto.

5.1.2. Definición de requisitos del sistema

En este apartado se expondrán y describirán los requisitos, tanto funcionales como no

funcionales, del sistema. Esta lista de funcionalidades corresponde a la idea inicial de la

aplicación, ya que posteriormente, a medida que se iba analizando el estado del arte y

cogiendo nuevas ideas, se iban introduciendo pequeñas modificaciones que favorecieran la

calidad final del proyecto.

5.1.2.1 Requisitos funcionales

Un requisito funcional define una función que el sistema debe realizar. A continuación

se realizará una breve descripción de cada requisito funcional, acompañado de su

correspondiente escenificación en forma de caso de uso.

Selección de regla o hecho; en la visión inicial de la interfaz se proporciona al

usuario una lista completa tanto de hechos como de reglas disponibles en la base

de conocimiento. Cada uno es seleccionable por el usuario, para que

posteriormente ejecute una acción sobre este elemento. En la siguiente figura se

muestra el caso de uso correspondiente a este requisito.

Page 61: ESCUELA SUPERIOR DE INFORMÁTICA

61

Figura 5.6 – Caso de uso de selección de hecho/regla

Eliminar/editar un hecho o una regla; una vez seleccionado uno de estos

elementos se le da la oportunidad al usuario de realizar una de estas acciones. En

la siguiente figura se muestra el caso de uso correspondiente a este requisito.

Figura 5.7 – Caso de uso de eliminar/editar elemento seleccionado

Puesto que la información correspondiente a los hechos y las reglas se

encuentra almacenada en la base de datos, en este escenario es necesaria la

escenificación de otro caso de uso, el cual representa la actualización de la base

de datos en consecuencia de la acción ejecutada por el usuario.

Page 62: ESCUELA SUPERIOR DE INFORMÁTICA

62

Figura 5.8 – Caso de uso de eliminar/editar elemento

Creación de nuevos hechos y reglas mediante lenguaje Blockly; la herramienta

tiene que proporcionar la funcionalidad de construir nuevas reglas o hechos

mediante la unión de bloques de tipo Blockly. Finalizada la edición se salvará la

información en la base de datos. A continuación se presenta una figura

representativa de este caso de uso.

Figura 5.9 – Caso de uso de crear nuevo hecho o regla

Al igual que el caso anterior se realizarán modificaciones en la base de datos,

por lo que es necesario la inclusión de un caso de uso adicional, y que se

presenta en la siguiente figura.

Page 63: ESCUELA SUPERIOR DE INFORMÁTICA

63

Figura 5.10 – Caso de uso de crear elemento

Compilar red RETE; el usuario tendrá la opción de compilar de nuevo la red. Al

insertar nuevas reglas esta acción es necesaria. En la siguiente figura se puede

observar el caso de uso correspondiente a esta acción.

Figura 5.11 – Caso de uso de compilar red RETE

En este escenario de uso también es necesario el acceso a la base de datos para

salvar la información correspondiente a la nueva versión de la red RETE. Como

se puede apreciar en la siguiente figura mediante un caso de uso.

Page 64: ESCUELA SUPERIOR DE INFORMÁTICA

64

Figura 5.12 – Caso de uso de actualizar compilación de red RETE

Actualizar red RETE; una vez que se ha terminado la edición de la base de

conocimiento, el usuario podrá actualizar la información correspondiente en la

red. En la siguiente figura se muestra el caso de uso correspondiente.

Figura 5.13 – Caso de uso de actualizar red RETE

Una vez más, es necesario salvar la información procesada y por lo tanto

actualizar los datos en la base de datos. Por lo que es necesario proponer el caso

de uso mostrado en la siguiente figura.

Figura 5.14 – Caso de uso de actualizar RETE

Page 65: ESCUELA SUPERIOR DE INFORMÁTICA

65

Seleccionar una versión de la red RETE; en la parte de la interfaz correspondiente

al visionado del grafo de la red, se propone una lista de las versiones

seleccionables. Cada una de la versiones corresponderán a un estado de la red

RETE, ya sean anteriores o el actual. En la siguiente figura se representa el caso

de uso de esta acción.

Figura 5.15 – Caso de uso de seleccionar versión de la red RETE

Una vez seleccionada la versión de la red que se desea visualizar, el sistema

cliente solicitará la información necesaria para mostrar el grafo correspondiente.

El sistema servidor actuará de intermediario entre el sistema gestor de base de

datos (el encargado de almacenar la información) y el sistema cliente. A

continuación se muestra, en la figura, el caso de uso correspondiente a la situación

descrita.

Figura 5.16 – Caso de uso de obtener grafo

Page 66: ESCUELA SUPERIOR DE INFORMÁTICA

66

5.1.2.2 Requisitos no funcionales

Un requisito no funcional especifica un criterio que puede ser usado para juzgar la

operación de un sistema, es decir, no definen un comportamiento del sistema. En las

siguientes líneas se realizará una descripción de los requisitos no funcionales que debe

cumplir la aplicación.

Interfaz gráfica usable; la interfaz gráfica debe ser intuitiva y perfectamente

manejable sin la necesidad de invertir un esfuerzo abultado en la comprensión de

su funcionamiento.

El sistema seguirá el modelo cliente-servidor, utilizando los lenguajes de

programación adecuados en cada lado de la arquitectura. Java en caso del

servidor y JavaScript y HTML en el caso del cliente.

El sistema dispondrá de una base de datos para almacenar, tanto la información

correspondiente a la red RETE, como los datos que están relacionados con otros

aspectos del sistema.

5.2 SPRINT 2

En esta fase del desarrollo, en primer lugar, se realizó un análisis de las herramientas

que se podían utilizar para satisfacer los requisitos propuestos. Como resultado se obtuvo

la lista de elementos que se propuso anteriormente en el apartado “herramientas

tecnológicas”, con excepción de alguno de ellos, que se añadió posteriormente.

Una de las tecnologías seleccionadas en este punto se erige como la base de la interfaz

gráfica de la herramienta. Estamos hablando del lenguaje de programación visual Blockly.

Damos tal importancia a este elemento porque gracias a él, editar o cumplimentar los

distintos parámetros que son característicos de la definición de una regla o un hecho, se

convierte en una tarea amena e intuitiva. Los beneficios de estos factores que se nombran

fueron probados personalmente por el desarrollador del proyecto. Era necesario ponerse en

la piel del usuario para poder entender en qué medida esta herramienta podía ser intuitiva,

para más tarde, proponer un uso adecuado y explotando al máximo sus características

innovadoras. Para ello el desarrollador completó varios tutoriales en los cuales se realizaba

un aprendizaje a fondo del uso de esta herramienta y se mostraban todos los elementos de

los que ésta dispone.

Page 67: ESCUELA SUPERIOR DE INFORMÁTICA

67

A parte de lo comentado anteriormente, también se tuvo que realizar un estudio a fondo

del algoritmo RETE. Se consultaron varios textos recomendados por el cliente (en este

caso el director del proyecto) y otros textos de interés encontrados por el desarrollador.

Esta información fue complementada por varios ejemplos propuestos por el director y otros

realizados por el autor del proyecto.

5.2.1 Funcionamiento del algoritmo RETE

En anteriores capítulos se han detallado las principales características y componentes

por los que se caracteriza este algoritmo, pero no se ha expuesto la forma de trabajo que se

utiliza.

En primer lugar hay que recordar que existe una base de reglas, la cual contiene cada

una de las reglas definidas en el sistema, así como una base de hechos, que contiene todos

los hechos disponibles. Al compuesto de estos dos conjuntos se llama base de

conocimiento. Una vez que se posee toda la información que debe albergar la red se

procede a construir la red RETE.

Como ya se ha dicho en capítulos anteriores la red está representada con un grafo

acíclico dirigido y que en ella constan de tres tipos de nodos: alfas, betas y gammas. Cada

uno de ellos se distingue por tener unas características y unas funciones distintas.

Alfas; este tipo de nodo representa a cada uno de los antecedentes y consecuentes

de una regla. Cada nodo tiene asociada una memoria con los datos de los hechos

individuales que le corresponden. En el caso de este proyecto cada uno de ellos

está representado por una tabla en una base de datos y los hechos como entrada de

dicha tabla.

Betas; en este caso, este tipo representa el resultado de la comparación de dos

nodos alfa, un alfa y un beta o dos betas. Coteja información obtenida en nodos

anteriores y almacena los resultados. En una base de datos relacional esta acción

se asocia con la operación join. En caso de que se necesite realizar la misma

comparación más de una vez se utilizan los resultados ya obtenidos en la primera

ocasión, es decir, no se vuelve a realizar la operación.

Gammas; este nodo representa el resultado final de una regla.

Page 68: ESCUELA SUPERIOR DE INFORMÁTICA

68

5.2.1.1 Operación join

En el apartado anterior se ha mencionado un tipo de operación relacionada con bases

de datos relacionales y no se ha explicado en ningún momento como procede en su

funcionamiento. Esta operación se denomina en dicho ámbito, join, y permite combinar

registros de dos o más tablas de la base de datos propuesta. En lenguaje SQL existen

diferentes tipos de join, como pueden ser, interno, externo, cruzado, entre otros.

En el tema que nos concierne se va a utilizar el de tipo interno, porque es el que mejor

se adapta a las necesidades requeridas. Este tipo combina los registros de dos o más tablas

siempre que haya concordancia de valores en un campo en común.

Para realizar una explicación más detallada se propone un breve ejemplo de esta

operación. Para ello se presentan las dos tablas siguientes:

Tabla 5.1 – Ejemplo de join tabla 1 Tabla 5.2 – Ejemplo de join tabla 2

Si se realiza una operación join sobre estas tablas cogiendo “ID” como campo en

común, la tabla resultante es la siguiente:

Tabla 5.3 – Ejemplo de join tabla resultado

ID nombre

1 Juan

2 Marta

3 Isabel

4 Alejandro

ID

2

4

8

9

ID nombre

2 Marta

4 Alejandro

Page 69: ESCUELA SUPERIOR DE INFORMÁTICA

69

Como se observa, se ha realizado una comparación de todos los registros del campo

“ID” que poseen las dos tablas, mostrando como resultado únicamente los datos que

coinciden.

5.2.1.2 Procedimiento de construcción de la red

Una vez explicadas las principales características y elementos de esta metodología, se

va a proceder a exponer la forma con la que se procede a construir la red. Para ello se va a

proponer un ejemplo, que sirva como ayuda para la comprensión de la explicación.

En primer lugar definimos una regla ejemplo para observar la forma de su

construcción.

Si Y es el autor de X

Y es escritor de ciencia ficción

X es un libro

Entonces X es un libro de ciencia ficción

Y en segundo lugar proponemos una serie de hechos.

Stephenson es el autor de La era del diamante

Gibson es el autor de Neuromante

Stephenson es escritor de ciencia ficción

Neuromante es un libro

La edad del diamante es un libro

Dick es el autor de Laberinto de muerte

Gibson es escritor de ciencia ficción

Dick es escritor de ciencia ficción

El jugador es un libro

Ubik es un libro

Page 70: ESCUELA SUPERIOR DE INFORMÁTICA

70

Laberinto de muerte es un libro

Banks es el autor de El jugador

Como se puede observar en el ejemplo de regla propuesto, dicha regla posee tres

antecedentes y un consecuente, por lo tanto cada uno de ellos va a estar representado por

un nodo alfa. Y a su vez cada alfa va a tener asociados, en su memoria alfa, sus hechos

correspondientes. En la siguiente figura están representados los nodos alfa y en las

posteriores tablas los hechos que se le atribuyen a cada uno.

Figura 5.17 – Nodos alfa del ejemplo propuesto

es el autor de

X Y

La edad del

diamante

Stephenson

Neuromante Gibson

Laberinto

de muerte

Dick

El jugador Banks

Tabla 5.4 – Ejemplo RETE “es el autor de” Tabla 5.5 – Ejemplo RETE “es un libro”

es un libro

X

Neuromante

La edad del diamante

El jugador

Ubik

Laberito de muerte

Page 71: ESCUELA SUPERIOR DE INFORMÁTICA

71

Tabla 5.6 – Ejemplo RETE “es escritor de ciencia ficción”

Una vez creados los nodos alfa se procede a la creación de los nodos beta y sus

relaciones con los nodos alfa. Se empieza relacionando el primer antecedente con el

segundo, y se obtiene un nodo beta, el cual va a contener el resultado obtenido de

comparar los hechos de los dos nodos alfas.

Figura 5.18 – Generación del primer nodo beta

En la siguiente tabla se muestran los resultados correspondientes a la operación join de los

dos nodos alfa.

es escritor de ciencia

ficción

Y

Stephenson

Gibson

Dick

Page 72: ESCUELA SUPERIOR DE INFORMÁTICA

72

Tabla 5.7 – Ejemplo RETE “es el autor de & es escritor de ciencia ficción”

Una vez realizadas estas acciones se procede a realizar exactamente la misma

operación, esta vez, involucrando al nodo beta obtenido y el nodo alfa correspondiente al

antecedente de la regla que queda sin relacionar. Gráficamente resultará de la siguiente

manera.

Figura 5.19 – Generación del segundo nodo beta

es el autor de

&

es escritor de ciencia

ficción

X Y

La edad del

diamante

Stephenson

Neuromante Gibson

Laberinto

de muerte

Dick

Page 73: ESCUELA SUPERIOR DE INFORMÁTICA

73

Como consecuencia de la acción llevada a cabo, se obtiene un nuevo nodo beta con

los resultados que se muestran en la siguiente tabla.

Tabla 5.8 – Ejemplo RETE “es el autor”

Una vez hecho esto, se recuerda que la regla propuesta como ejemplo tenía tres

antecedentes, por lo tanto esa regla está satisfecha y puede ser disparada. Esto significa que

el último nodo beta obtenido es el antecedente de un nodo terminal, que representará los

resultados finales obtenidos. A su vez, el nodo alfa que en principio correspondía al

consecuente ahora pasará a ser un nodo gamma. Esta terna de acciones se pueden observar

visualmente en la siguiente figura.

Figura 5.20 – Red resultante de la regla propuesta

es el autor de & es escritor de ciencia ficción & es un libro

X Y

La edad del diamante Stephenson

Neuromante Gibson

Laberinto de muerte Dick

Page 74: ESCUELA SUPERIOR DE INFORMÁTICA

74

El nodo gamma resultante va a poseer los datos, del nodo beta predecesor, que sean

relevantes en su definición. Es decir, en el nodo terminal existirán solamente las columnas

necesarias por su composición. En el ejemplo propuesto se observa que el consecuente sólo

posee una variable, y el nodo beta del que procede está definido por dos variables, por

tanto únicamente se usará el campo que coincide.

Dado el caso que existieran más reglas, la operatoria sería exactamente la misma,

pero teniendo en cuenta que en caso de que existan comparaciones de nodos ya realizadas

anteriormente, los resultados de estas comparaciones se compartirán, excluyendo así

redundancia de datos.

5.3 SPRINT 3

En esta etapa del desarrollo se inició la implementación de algunos de los elementos

principales del sistema, como son la interfaz, la arquitectura cliente-servidor y bloques

Blockly. A parte de estos elementos de implementación, también de diseño el modelo de

base de datos que posteriormente se utilizaría para albergar, tanto toda la red RETE, como

otros datos relevantes del sistema.

En los siguientes apartados se procede a dar una descripción más a fondo de los

desarrollos llevados a cabo en esta fase. En caso de la arquitectura cliente-servidor no es

necesario, ya que en la explicación del Sprint 1 ya se entró en detalle en este tema.

5.3.1 Desarrollo inicial de la interfaz

Como se proponía en apartados anteriores, la interfaz debe estar compuesta por

elementos fácilmente reconocibles por el usuario, de uso intuitivo. Los artefactos

principales que se proporcionan para la navegación dentro de la web y sus diferentes

opciones, son elementos que aparecen frecuentemente en la mayoría de portales webs

existentes en la actualidad, como son pestañas, botones desplegables, listas seleccionables,

botones, etc. Se pretendía esta sencillez en la navegación debido a que la interfaz Blockly

es un elemento que no se usa habitualmente y que, a pesar de ser altamente intuitivo, el

usuario puede experimentar pequeñas dudas en su funcionamiento, por lo tanto no se

quería arriesgar en la introducción de elementos confusos en otros ámbitos.

Page 75: ESCUELA SUPERIOR DE INFORMÁTICA

75

Se creó un primer boceto de la interfaz para permitir al cliente dar sus primeras

impresiones, y así poder ofrecer otro punto de vista y poder incluir algunas mejoras y/o

adaptaciones. Aun así, no fue necesario hacer grandes cambios, ya que tanto el

desarrollador, como el cliente estuvieron de acuerdo. Por lo que los bocetos iniciales distan

muy poco de la versión final.

En primer lugar se va a mostrar el boceto del diseño original en la figura que continúa

este texto y posteriormente explicarán brevemente los elementos que contiene.

Figura 5.21 – Boceto de la interfaz en pestaña de gestión

Como se observa la interfaz es muy sencilla. Se basa en un contenedor con tres

pestañas, cada una de las cuales ejerce una función dentro de las tres principales premisas

del proyecto, gestión, edición y visualización. En esta primera imagen se muestran los

elementos pertenecientes a la primera pestaña, la de gestión de la base de conocimiento.

Ésta contiene dos lista de elementos seleccionables, una de hechos y otra de reglas. Cada

uno de estos componentes es seleccionable por el usuario, y una vez indicada la selección

se da la opción de eliminar o editar el elemento, gracias al botón desplegable existente en

la esquina superior derecha de cada contenedor. En caso de seleccionar la edición,

automáticamente se redirigirá al usuario a la pestaña de edición.

En la siguiente imagen se muestra el boceto de la segunda pestaña, la de edición.

Page 76: ESCUELA SUPERIOR DE INFORMÁTICA

76

Figura 5.22 – Boceto de la interfaz en pestaña de edición

En el caso de la segunda pestaña, está basada principalmente en la interfaz de Blockly.

En el centro se encuentra el contenedor que albergará íntegramente la edición de bloques, y

a la izquierda se localiza un panel navegable que contiene las categorías de bloques que se

proponen, y dentro de cada categoría los distintos tipos de bloques asociados a cada una

ellas. A la derecha se sitúan dos botones, guardar y actualizar; los cuales sirven,

respectivamente, para salvar los cambios, tanto de hechos como de reglas, y para

actualizar la red rete e caso de que se hayan introducido nuevos datos.

La pestaña restante pertenece a la función de visualización de la red en forma de

grafo. En la siguiente figura se puede contemplar el boceto de esta parte de la interfaz.

Page 77: ESCUELA SUPERIOR DE INFORMÁTICA

77

Figura 5.23 – Boceto de la interfaz en pestaña de visualización

Se puede ver que el elemento principal de esta pestaña va a ser un contenedor, que

será el encargado de mostrar el grafo resultante de la red RETE. Para facilitar al usuario la

comparación de la situación actual del grafo con otras versiones, se propuso dotar de una

lista de estados anteriores de la red. Cada una de estas versiones se muestran en la parte

izquierda en forma de lista con elementos seleccionables.

Una vez terminado el diseño de la interfaz se procedió a implementar los principales

elementos para poder avanzar en otros aspectos del desarrollo. En primera instancia se

desarrolló la primera pestaña con sus correspondientes contenedores y botones, dejando

preparadas las otras dos pestañas restantes para añadir posteriormente sus elementos.

5.3.2 Creación bloques Blockly

La API de este lenguaje gráfico incluye numerosos bloques predeterminados que se

incluyen en la implementación de esta herramienta, como pueden ser bloques de

operaciones lógicas, operaciones matemáticas, bucles, funciones, etc. Pero para las

funcionalidades que esta herramienta se iba a usar en el presente trabajo, no existían los

bloques necesarios. Por tanto fue necesario nuevos bloques que se adecuaran a las

necesidades que se requerían.

Page 78: ESCUELA SUPERIOR DE INFORMÁTICA

78

Google provee una herramienta web, llamada Block Factory, que permite crear

nuevos bloques dinámicamente. En ella también se usa el lenguaje Blockly para definir

todas las características y elementos que formarán el nuevo bloque. El diseño de los

bloques es dinámico gracias a que, a medida que se va realizando la definición, la web va

proporcionando a su vez el código javascript que define el bloque.

Figura 5.24 – Interfaz de Block Factory

El código resultante en la generación es incluido en el archivo javascript

correspondiente dentro de la API proporcionada para que, al inyectar Blockly en la interfaz,

estos nuevos bloques sean accesibles.

5.3.3 Implementación mediante base de datos relacionales

Para la implementación de la red RETE se va a utilizar un modelo de trabajo basado

en bases de datos relacionales. De este modo, cada uno de los elementos que hemos

descrito anteriormente existentes en la red va a estar relacionado con un elemento

característico de la las bases de datos, como pueden ser: tablas, columnas, filas, etc.

Page 79: ESCUELA SUPERIOR DE INFORMÁTICA

79

Figura 5.25 – Fisionomía del grafo representativo de la red

Cada nodo alfa va a ser representado con una tabla con tantas columnas como variables

contenga el antecedente que ésta va a representar, y cada fila de dichas tablas

corresponderá a un hecho. Al mismo tiempo, va a existir una tabla llamada “alfas”, y que

constará de tres columnas:

o idAlfa: este campo contendrá un identificador del nodo.

o alfaSelect: columna en la cual se proporcionará la sentencia select

correspondiente al nodo alfa correspodiente.

o idTabla: contendrá el identificador correspondiente a la tabla propia del

nodo alfa.

o cambiado: el propósito de esta columna es proporcionar la información

necesaria para saber si este nodo ha sido modificado en el último ciclo de

inferencia, o bien es un nodo nuevo.

Figura 5.26 – Descripción de la tabla “Alfas”

Page 80: ESCUELA SUPERIOR DE INFORMÁTICA

80

Cada uno de los nodos beta también estará representado en este modelo por una tabla.

Esta tabla será la resultante de aplicar una sentencia join entre dos tablas antecesoras, ya

sea dos de tipo alfa, una de tipo alfa y otra de beta o las dos de tipo beta. Al igual que en el

caso de los nodos alfa, también va a existir una tabla llamada “betas”, la cual estará

compuesta por seis columnas:

o idBeta: campo que representará el identificador del nodo.

o nivel: este campo indica el nivel al que pertenece el nodo. Más adelante se

explicará la finalidad de este dato.

o padre_1: este campo contendrá el identificador correspondiente a uno de sus

dos nodos antecesores.

o padre_2: al igual que el anterior contendrá un identificador, pero en este

caso corresponderá al otro beta que falta para completar la dupla de

antecesores.

o sqlJoin: esta columna está destinada a almacenar la sentencia join

correspondiente, cuyo resultado da lugar a este nodo.

o idtabla: al igual que en el caso de la tabla “alfas”, este campo contendrá un

identificador que corresponderá a la tabla correspondiente a este nodo.

Figura 5.27 – Descripción de la tabla “Betas”

Asímismo, las reglas también tendrán su correspondiente tabla representativa en este

modelo propuesto. En este caso con sólo una tabla será suficiente para almacenar los datos

necesarios. Dicha tabla estará compuesta por cuatro columnas:

o id_reglas: esta columna tiene el propósito de almacenar la nomenclatura con

la cual se va a identificar cada regla de cara al usuario.

Page 81: ESCUELA SUPERIOR DE INFORMÁTICA

81

o LHS: en este campo se va a almacenar la parte izquierda de la regla, es

decir, la parte en la que se encuentran los antecedentes.

o RHS: éste tendrá un fin similar al anterior, pero en este caso se almacenará

la parte derecha de la regla, también llamado consecuente.

o xml: este campo no tiene relación con el modelo de datos ya que

únicamente contiene el código XML que representa a la regla, y que es

utilizado posteriormente por el cliente para mostrarlo en forma de bloques

Blockly. Ésto se explicará posteriormente con más determinación en el

presente documento.

Figura 5.28 – Descripción de la tabla “Reglas”

A su vez, tanto los predicados como los hechos también tendrán una tabla

representativa. Ambos contarán con dos columnas. En el caso de los predicados son las

siguientes:

o idpredicado: este campo es un identificador numérico y único para cada

predicado. Es incremental, no se sigue ningún patrón ni restricción para la

asignación del mismo.

o nombre: esta columna contiene el nombre que el mismo usuario ha dado a

este predicado.

Figura 5.29 – Descripción de la tabla “Predicados”

Page 82: ESCUELA SUPERIOR DE INFORMÁTICA

82

Por otra parte, la tabla de hechos también estará compuesta por dos columnas:

o id_hechos: en dicha columna se almacenará el identificador alfanumérico

por el cual el usuario reconocerá cada hecho en la interfaz de usuario.

o xml: almacena el código correspondiente a la representación gráfica del

hecho en bloques Blockly. Al igual que sucedía en la tabla de las reglas, este

campo únicamente tiene relación con el modelo que se ha elegido para la

edición de los datos del sistema.

Figura 5.30 – Descripción de la tabla “Hechos”

Bajo un pensamiento orientado a base de datos relacionales cabe pensar que entre estas

dos tablas puede haber una relación, y de hecho la hay, pero no se ha creído necesario

incluirla debido a que, como se ha explicado anteiormente, cada predicado va a estar

representado por una tabla exclusiva para el mismo. Cada hecho va a estar incluido en la

tabla de su correspondiente predicado, por lo tanto la relación que anteriormente se

nombraba ya se encuentra explícita en este hecho y no es necesrio incluirla como tal.

Como ya se ha mencionado varias veces, cada nodo alfa va a estar representado por

una tabla. La nomenclatura que van a seguir cada una de éstas es la siguiente; en cuanto al

nombre de la tabla, va a ser el nombre del predicado al cual se asocia el nodo alfa, y que a

su vez es el que el usuario le ha proporcionado en su creación. En el caso de que dicho

nombre proporcionado contenga espacios, se suprimirán por evitar posibles errores en la

creación de las tablas. En lo que concierne a las columnas, poseerán tantas como variables

se le haya proporcionado al predicado a la hora de su creación. Cada fila de esta tabla

representará un hecho.

Al igual que en el caso de los alfas, cada nodo beta también está representado en forma

de tabla, como ya se habló anteriormente. En este caso, la nomenclatura que se sigue a la

hora de dar un nombre a las tablas es distinta, ya que dicha tabla será el resultado de

realizar una operación join entre dos nodos, ya sean alfa o beta. Dicho esto, el nombre será

la concatenación de los nombres de las tablas predecesoras, utilizando como separador

entre cadenas el carácter “$”. Se ha utlizado este símbolo porque otros, que a priori podrían

Page 83: ESCUELA SUPERIOR DE INFORMÁTICA

83

ser más representativos de su fin que éste, eran caracteres reservados del lenguaje utilizado

para la creación de las tablas, SQL en este caso. En lo que se refiere a las columnas, como

es lógico, en la tabla va a haber un número de columnas igual al de la tabla incluida dentro

del join con mayor número de columnas.

5.4 SPRINT 4

Con la base de la interfaz ya creada, se procedió a analizar el procedimiento que se

debía seguir para inyectar Blockly en la herramienta. El propio desarrollador de dicha

herramienta facilita en gran medida esta tarea, dado que ofrece varios mecanismos de

inyección con HTML. Para seleccionar uno de los nombrados mecanismos se realizaron

una serie de pruebas de funcionamiento para decidir qué funcionalidades y características

de cada uno de ellos se asemejaba a los requisitos que el proyecto necesitaba. Además, en

esta fase también se llevó a cabo el correcto acoplamiento de los bloques creados en la

etapa anterior.

Una vez ensamblado Blockly a la interfaz, era necesario encontrar la forma de salvar

bloques en la base de datos, así como recuperarlos de la misma. Este problema se resolvió

gracias a una función, que proporciona la API de la herramienta, la cual permite exportar

toda la construcción de los bloques a código XML. Este hecho facilita mucho las cosas

debido a la universalidad por la que se caracteriza este lenguaje. El código XML resultante

se almacena en la base de datos junto con otros datos de cada hecho y cada regla. Por lo

tanto a la hora de recuperar los bloques guardados anteriormente, únicamente hay que

recuperar el código de la base de datos y volver a inyectar el código en la interfaz Blockly.

Otra de las acciones más relevantes llevadas a cabo en esta fase del desarrollo fue

realizar la implementación de una fase inicial del algoritmo RETE. Este primer ciclo de

implementación del algoritmo se utilizó, además, como ejercicio de aprendizaje para el

desarrollador, ya que se captan desde otros puntos de vista algunos de los procedimientos

de construcción de la red. En este ciclo, únicamente se dieron los primeros pasos de

construcción de la red, como son la creación de los nodos alfa o la construcción de los

primeros nodos beta.

Se llevaron a cabo numerosos análisis sobre cómo realizar las diferentes operaciones

que se deben realizar en el funcionamiento del algoritmo. Con esto se refiere al hecho que,

Page 84: ESCUELA SUPERIOR DE INFORMÁTICA

84

cada acción que se desea realizar (creación de nodos, comparación de nodos, etc.), cada

dato que se desea obtener (información en general de la red) hay que plasmarlo u obtenerlo

de la base de datos, por lo tanto es necesario hacer especial hincapié en que estas acciones

se lleven a cabo de un modo eficiente.

5.5 SPRINT 5

Esta etapa es la última del desarrollo, en ella se finalizaron aquellos módulos del

proyecto que permanecían inacabados, especialmente la interfaz y la implementación del

algoritmo RETE. Una vez terminadas estas tareas, se precedió a analizar las diferentes

herramientas que se podían utilizar para el módulo gráfico del proyecto, para

posteriormente elegir la que mejor se ajustara a las necesidades y en último término

ensamblarla con el trabajo que ya estaba realizado.

5.5.1 Implementación completa del algoritmo RETE

En el sprint anterior se comentaba que se había realizado un primer desarrollo de este

módulo y que se había analizado el modus operandi de ciertas operaciones importantes que

se tenían que llevar a cabo en este ámbito. Por lo tanto en esta última etapa del desarrollo

había que finiquitar la implementación del algoritmo. Esta implementación se divide en

dos grandes partes, cada una de las cuales llevará a cabo una función final determinada,

construcción de la red (compilación) y actualización.

En la siguiente figura se muestra la representación gráfica en UML de la clase “Rete”,

que es la encargada de realizar estas acciones.

Page 85: ESCUELA SUPERIOR DE INFORMÁTICA

85

Figura 5.31 – Clase “Rete”

5.5.1.1 Construcción de la red

En esta parte de la implementación se plasmó en código toda la información y el

funcionamiento expuesto en el apartado “Procedimiento de construcción de la red”. Ya

involucrados en el desarrollo se apreciaron algunos detalles que sobre el plano teórico no

surgieron y que hubo que tomar algunas decisiones destacables. Una de estas

determinaciones fue dotar a los nodos de un orden parcial que se basaba en un

identificador único. Esta medida se tomó por la razón de que a la hora de actualizar la red

es necesario priorizar unos nodos frente a otros, es decir, los nodos que se encuentran más

arriba en la jerarquía dentro de la red es necesario que se actualicen antes que los de menos

rango. Por lo tanto el id de los nodos y el respectivo nivel al que pertenecen se obtendrán

siguiendo las siguientes premisas:

Page 86: ESCUELA SUPERIOR DE INFORMÁTICA

86

ID (nodo ∈ nivel(k)) < ID’ (nodo ∈ nivel(k’)) si nivel(k) < nivel(k’) ∧

ID (nodo ∈ nivel(k)) > ID’ (nodo ∈ nivel(k’)) si nivel(k) > nivel(k’)

De manera que el nivel de los nodos quedará establecido de le siguiente manera:

o Nivel 0: constituido por nodos alfa.

o Nivel 1: nodos beta con padres alfa.

o Nivel 2: a este nivel pertenecerán nodos beta con un padre de nivel 1 y otro

con nivel menor o igual a 1.

o Nivel n: pertenecerán al nivel n los nodos beta con un padre de nivel (n-1) y

otro de nivel menor o igual que (n-1).

A continuación se muestra un listado de código, que permite el cálculo del nivel de

cada nodo.

if(nivel1==0 && nivel2==0) result=1;

else {

if(nivel1>=nivel2){

mayor=nivel1;

menor=nivel2;

}

else {

mayor=nivel2;

menor=nivel1;

}

while(seguir){

if((mayor == cont-1) && menor <=cont-1){

result=cont;

seguir=false;

}else cont++;

}

}

Una vez resuelto este hecho se procedió a continuar la implementación de la

construcción de la red, como se describía en las primeras líneas de este apartado, siguiendo

las pautas ya descritas en apartados anteriores. Este procedimiento fue temporalmente

costoso debido a la ardua tarea de plasmar toda la información en la base de datos, así

como obtener la mayoría de datos de la misma.

5.5.1.2 Actualización de la red

Se llama actualización de la red al proceso por el cual la información añadida o

eliminada se propaga a todos los nodos de una manera que respete los principios del

Page 87: ESCUELA SUPERIOR DE INFORMÁTICA

87

algoritmo RETE. Una de las premisas que se debe cumplir al realizar esta operación es la

actualización únicamente de los nodos que hayan sido cambiados en un ciclo de inferencia

o directamente por una edición de la base de conocimiento.

En esta parte es dónde adquiere sentido lo explicado en el apartado anterior, referido

al orden parcial que se ha dotado a los nodos y a los niveles que pertenece cada uno. Como

se ha mencionado en la explicación anterior, es necesario que los nodos que poseen un

nivel de jerarquía mayor sean actualizados antes que los que se encuentran a más bajo

nivel. Por lo tanto, dado que se ha dotado a los nodos de un identificador que sigue un

orden parcial dentro de estos niveles, se puede utilizar una estructura llamada cola de

prioridad, que es idónea para este fin. Consiste en una estructura de elementos ordenada,

en la cual el orden se determina por el valor de sus elementos. Previsiblemente, en el caso

que nos ocupa dicho valor será el identificador del nodo.

Una vez dados los detalles previos a la explicación se va a proceder a la exposición de

la misma. Para favorecer la comprensión del algoritmo se facilita un pseudocódigo de la

mecánica que se sigue:

lista_acualizar: lista de los nodos que se han de actualizar

lista_actualizar sucesores nodos alfa cambiados

cambiado de nodo alfa falso

MIENTRAS lista_actualizar no vacía

nodo sacar nodo de lista_actualizar

actualizar(nodo)

FIN-MIENTRAS

La primera acción que se realiza es obtener una lista de los nodos alfa que han sido

modificados, para inmediatamente después obtener los sucesores de cada uno de ellos.

Pero no únicamente los sucesores directos, se obtienen todos los sucesores en la red. Esta

acción se lleva a cabo de esta manera porque es necesario que la cola de prioridad contenga

desde este momento todos los nodos que se deben actualizar. Si no fuera así los nodos se

actualizarían en varias ocasiones, saltándose una de las principales premisas del algoritmo

RETE. A continuación, es necesario actualizar la propiedad “cambiado” cada no alfa, se

Page 88: ESCUELA SUPERIOR DE INFORMÁTICA

88

cambia a “falso”. En el siguiente paso se entra en un bucle “while”, que perdurará hasta

que la lista de actualización esté vacía. Mientras tanto, en cada iteración del bucle se sacará

el primer elemento de la lista (el de ID más bajo) y se procederá a su actualización. Con a

finalización de este bucle termina el proceso de actualización de la red.

5.5.2 Desarrollo final de la interfaz

Hasta este momento sólo se había desarrollado una parte de la interfaz, que incluían

gran parte de los elementos de las dos primeras pestañas. En esta fase se completó el

desarrollo, no sólo añadiendo los elementos que faltaban, también depurando otros

aspectos de funcionamiento que ocasionaban fallos y mejorando diversos aspectos de

funcionalidad. Una de las cosas que se mejoró fue la actualización simultánea de datos. En

la primera versión del desarrollo era necesario recargar la página para que los cambios

realizados en la base de conocimiento fueran visibles en la interfaz, por lo que se creyó de

gran ayuda para el usuario realizar la mejora mencionada.

Respecto al diseño inicial, se añadió un botón en la pestaña de gestión de la base de

conocimiento, que permitía al usuario indicar al sistema la compilación de la red RETE

después de una actualización de la base de conocimiento. El significado del término

“compilar” en este ámbito indica que dada la actualización de información en la red,

especialmente si se ha modificado la base de reglas, es necesario realizar una

“reconstrucción” de la red.

En esta fase también se implementó la parte correspondiente al módulo gráfico, pero

hubo un pequeño paréntesis dedicado al análisis de las herramientas necesarias para este

fin. En los próximos apartados se explicará más a fondo las decisiones tomadas sobre este

tema.

5.5.2.1 Resultado de la interfaz

En este apartado únicamente se va exponer el resultado final de la interfaz. Las

cualidades y elementos principales de la interfaz se describieron en apartados anteriores,

por lo tato en el presente no se detalla nada de estos aspectos.

Page 89: ESCUELA SUPERIOR DE INFORMÁTICA

89

En la siguiente figura se muestra el aspecto final de la pestaña dedicada a la gestión de

la base de conocimiento.

Figura 5.32 – Parte de la interfaz correspondiente a la pestaña de gestión.

El resultado final de la pestaña de edición es mostrado en la siguiente figura.

Figura 5.33 – Parte de la interfaz correspondiente a la pestaña de edición.

La pestaña que resta, que corresponde a la función de visualización, se muestra a

continuación.

Page 90: ESCUELA SUPERIOR DE INFORMÁTICA

90

Figura 5.34 – Parte de la interfaz correspondiente a la pestaña de visualización.

5.5.3 Análisis de las herramientas relacionadas con el módulo gráfico

Una vez desarrollado y conocido el funcionamiento del sistema, se llevó acabo un

barrido de información para conocer qué herramientas existían relacionadas con la

representación de grafos en HTML y cuál de ellas proporcionaba las características que se

adecuaban a las necesidades del sistema. A continuación se describen las herramientas

analizadas en esta fase:

o Librería “vis.js”9; consiste en una librería en Javascript que permite la

visualización de gráficos, orientada a navegadores web y que ha sido diseñada

para facilitar al máximo su utilización. Es capaz de gestionar grandes

cantidades de datos dinámicamente, y además ofrece al usuario la posibilidad

de interactuar con dichos datos.

o Graphviz10; es un software de código abierto orientado a la visualización de

grafos. Por el simple de hecho de ser una herramienta software en sí, y no una

librería como en el caso anterior, indica que no está totalmente dirigido a

navegadores web. Este dato es relevante en lo que se refiere a los intereses

para las necesidades que se requieren, ya que se necesita un elemento que se

amolde lo mejor posible al trabajo ya realizado. Aun así, gracias a la gran

9 http://visjs.org/ 10 http://www.graphviz.org/

Page 91: ESCUELA SUPERIOR DE INFORMÁTICA

91

relevancia que posee esta herramienta en este ámbito, existen numerosas

formas de aprovechar sus funcionalidades. Existen gran variedad de

herramientas derivadas de este software que aprovechan la gran polivalencia

de este software.

o Google Charts11; es una aplicación de google de licencia gratuita, que se

utiliza para realizar gran variedad de gráficos, desde diagramas de dispersión

sencillos a árboles jerárquicos. Permite una amplia gama de customizaciones

en cuanto a diseño, y es perfectamente compatible con arquitecturas web.

Además, ofrece un modo de ejecución basado en Graphviz, característica que

hace de ésta una herramienta muy completa.

o Dot; permite describir gráficos en texto plano de una manera sencilla y

legibles por personas y computadoras a la vez. Este lenguaje es, usualmente,

el método de entrada, en el que se utilizan los datos a la hora de trabajar con

la herramienta Graphviz, la cual se ha citado anteriormente [BLT] [GNR].

Una vez expuestas las principales herramientas que se barajaron en su momento, se

va a proceder a exponer las decisiones tomadas y los motivos por los que éstas se llevaron

a cabo.

En cuanto a la primera herramienta expuesta, la librería “vis.js”, hay que destacar que

posee buena compatibilidad con las necesidades que se abordaban, pero en este caso el

grafo habría que haberlo construido en la parte el cliente dado que la construcción del

mismo se realiza con lenguaje Javascript. Esta restricción era significativa para nuestros

intereses por la razón de que toda la información de la red era accesible desde la parte del

servidor. Este hecho derivaría en un envío de gran cantidad de datos entre las dos partes de

la arquitectura, restando así eficiencia al sistema. Por lo tanto era importante que la

herramienta elegida permitiera la construcción en la parte del servidor.

En cuanto a las otras dos herramientas, se puede decir que ambas poseen

características y funcionalidades que son adecuadas a nuestros intereses, pero también hay

11 https://developers.google.com/chart/

Page 92: ESCUELA SUPERIOR DE INFORMÁTICA

92

otros aspectos que no concuerdan con los ideales marcados. Esto podría llegar a ser un

problema porque en condiciones normales estaríamos obligados a elegir entre una

herramienta u otra, pero en este caso tenemos la suerte de contar con una funcionalidad de

Google Charts que permite utilizar a su vez Graphviz.

La forma más común de utilizar Google Charts es con código JavaScript, pero como

ya se ha explicado anteriormente, este modo de trabajo no concuerda con las necesidades

del proyecto. Pero esta herramienta cuenta con una gran versatilidad, y da la oportunidad

de trabajar utilizando otros modelos. Dentro de la API de Google Charts existe una

función que permite usar este artefacto a través de URL, es decir, dada una URL con los

parámetros adecuados se obtiene como resultado un grafo con el formato y características

que se especifican en dichos parámetros. En las siguientes líneas se dará una explicación

detallada de la construcción del grafo.

La URL final que proporcionará el grafo es el resultado de la concatenación de una

URL base y de una serie de parámetros que darán el formato requerido. Existe un abanico

muy variado de parámetros que se pueden incluir. A continuación se exponen los que se

han utilizado:

o URL base: http://chart.apis.google.com/chart

o Parámetro “cht”; se refiere al tipo de gráfico que va a albergar. En el caso

presente será “cht=gv”. Las siglas “gv” pertenecen al tipo Graphviz.

o Parámetro “chs”; gracias a este parámetro se va a dar dimensiones a la imagen

resultante. El formato en el que se dan las medidas es “WxH”, siendo “W” el

ancho de la imagen y “H” el alto de la misma.

o Parámetro “chl”; en este parámetro es dónde va a ir incluido el texto que

describe el grafo RETE. Aparecerá escrito en lenguaje Dot.

Sintaxis Dot

En este lenguaje existen también numerosas posibilidades de especificación de

características, pero nos centraremos en las usadas en el proyecto [GNR] [BLT]:

o Comienzo de un bloque: dentro de este bloque se especificará el grafo.

digraph Rete{ }

Page 93: ESCUELA SUPERIOR DE INFORMÁTICA

93

o Indicar tamaño de la fuente de los nodos.

node [fontsize=10];

o Defininir un enlace entre nodos.

nodo1 -> nodo2

Asignar un mismo nivel a los nodos del mismo tipo para mantenerlos

alineados.

{rank=same; nodo1; nodo2}

Modificar características de los nodos: color y forma.

nodoAlfa [color=lightblue, shape=Mrecord]

nodoBeta [color=red, shape=Mrecord]

nodoGamma[color=yellow, shape=Mrecord]

Asignar información a los nodos: mediante esta característica se determinan

los datos que contendrá el nodo; el identificador, nombres de columnas y

entradasde las mismas.

nodo[label= “ ”]

5.5.4 Implantación del módulo gráfico

Una vez determinados los elementos que se iban a utilizar en esta parte del desarrollo

se procedió a desarrollar definitivamente la parte correspondiente a la visualización

gráfica.

La primera meta que se propuso dentro de esta fase fue generar el grafo resultante

después de construir la red RETE. Para este fin, se desarrolló un algoritmo que recorriera

todos los nodos alfa, y a su vez, obtuviese los sucesores de tipo beta de cada uno de ellos,

para a continuación realizar la misma operación con cada uno de estos sucesores. Se

Page 94: ESCUELA SUPERIOR DE INFORMÁTICA

94

realizan estas acciones sucesivamente hasta hallar un nodo terminal o gamma. En el

momento que se va desenrollando cada uno de los nodos, se añade a la especificación del

grafo, (en lenguaje Dot ) tanto las características dependiendo del tipo de nodo que sea,

como las relaciones correspondientes entre cada nodo.

Para favorecer la distinción visual de cada tipo nodo, se decidió asignar un color

distinto a cada uno de ellos. Como se puede apreciar en la siguiente figura los nodos alfa

aparecerán de color azul, los beta de color rojo y los gamma de amarillo.

Figura 5.35 – Fisionomía del grafo resultante.

En un principio se analizó la idea de distinguirlos además por una forma distintiva,

pero dado la cantidad que texto que se necesitaba mostrar, el tamaño de cada nodo

resultaba demasiado grande.

5.5.5 Funcionamiento

Una vez terminado por completo el desarrollo, se va a profundizar en el

funcionamiento interno del sistema. Se van a proponer una serie de escenarios de uso y se

comentará en cada uno de ellos el funcionamiento que siguen los diferentes elementos que

pertenecen al sistema. Para facilitar la comprensión se facilitará un diagrama de secuencia

en cada caso.

Page 95: ESCUELA SUPERIOR DE INFORMÁTICA

95

Mostrar datos correspondientes a la base de reglas y la base de hechos al

cargar la página. A la hora de cargar la página principal de la aplicación se

muestran dos listas correspondientes a los datos de la base de hechos y de la base

de reglas. Los datos que aparecen en dichas listas son solicitados al servidor por

medio de una request, a su vez, el servidor consulta los datos requeridos al SGBD

(Sistema Gestor de Base de Datos). Una vez que el servidor obtiene los datos, los

codifica en formato JSON para así poderlos enviar a la parte del sistema cliente.

Los datos son recibidos por el cliente mediante un mensaje response. En el

momento de la recepción los datos se encuentran codificados, por lo tanto, se

realiza una decodificación. Finalmente, los datos se muestran en el navegador web.

En la siguiente figura se muestra el diagrama de secuencia correspondiente a este

escenario.

Figura 5.36 – Diagrama de secuencia de “Mostrar datos correspondientes a la base de reglas y la base de hechos al cargar

la página”.

Seleccionar un elemento de cualquiera de las listas y modificarlo. En este caso,

entra en acción el usuario, el cual será el encargado de seleccionar una regla o

hecho de una de las listas para después editarlo. Una vez escogido el elemento, el

cliente se encarga de codificar los datos para enviarlos al sistema servidor. Éste

recibirá los datos, los decodificará y enviará la información al SGBD, para que éste

actualice la información correspondiente. Una vez actualizados los datos devolverá

Page 96: ESCUELA SUPERIOR DE INFORMÁTICA

96

un mensaje de confirmación en caso de éxito, o una de error en caso de que haya

habido algún problema. A su vez, el servidor notificará al cliente con el mismo

procedimiento y el cliente mostrará un mensaje de retroalimentación al usuario. A

continuación se muestra la figura perteneciente al diagrama de flujo del escenario

descrito.

Figura 5.37 – Diagrama de secuencia de “Seleccionar un elemento de cualquiera de las listas y modificarlo”.

Seleccionar versión de la red que desea mostrar. El cometido del usuario en esta

ocasión será seleccionar, de la lista correspondiente, la versión de la red que se

desea mostrar. Al igual que en el caso anterior, una vez hecha la selección, se

codifican los datos que es necesario enviar al sistema servidor. Ya recibida la

información en el servidor, se decodifican los datos y se solicita al SGBD la

información del grafo requerida. Esta información se envía de nuevo al cliente, el

cual se encarga de generar la imagen que se mostrará posteriormente.

Page 97: ESCUELA SUPERIOR DE INFORMÁTICA

97

Figura 5.38 – Diagrama de secuencia de “Seleccionar versión de la red que desea mostrar”.

5.5.6 Pruebas

A medida que se avanzaba en el desarrollo de cada uno de los módulos

implementados en esta última fase se iban realizando pruebas unitarias de caja negra para

cerciorarse de que el funcionamiento de cada función era el adecuado. A su vez, dichas

pruebas derivan en pruebas de regresión, puesto que la funcionalidad del sistema

evolucionaba constantemente, hay que asegurarse que las partes implementadas

anteriormente siguen funcionando adecuadamente.

Page 98: ESCUELA SUPERIOR DE INFORMÁTICA

98

Page 99: ESCUELA SUPERIOR DE INFORMÁTICA

99

6. CONCLUSIONES Y PROPUESTAS

Este capítulo se divide en varios apartados en los cuales se van a exponer las

conclusiones obtenidas una vez terminado el desarrollo del proyecto, así como las

propuestas de mejora y la firma del autor.

6.1 OBJETIVOS LOGRADOS

Ya finalizado el desarrollo del proyecto se puede hacer una valoración del trabajo

realizado y de los objetivos que se han alcanzado. Echando la mirada atrás y analizando los

objetivos que se proponían en un principio, se puede concluir que se han alcanzado la

mayoría de objetivos.

Se ha desarrollado una aplicación web basada en un modelo cliente-servidor que

permite la gestión de la base de conocimiento de un sistema basado en reglas. La gestión se

consigue gracias a un editor gráfico basado en la interfaz Blockly que posibilita la edición

tanto de reglas como de hechos. Permitiendo la creación de nuevos hechos o reglas,

eliminación de los mismos y la edición de los datos ya existentes en la base de

conocimiento.

También se ha desarrollado un sistema capaz de compilar una red RETE partiendo de

una base de conocimiento, respetando estrictamente las principales premisas por las que se

caracteriza el algoritmo RETE. Así como, un mecanismo de actualización de la red que

cumple las especificaciones que se exigen al realizar esta acción.

Otro de los objetivos prioritarios alcanzados consiste en la implementación del módulo

gráfico del sistema. Se ha implementado un sistema capaz de crear un grafo representativo

de una red RETE, que a su vez es mostrado por pantalla para facilitar al usuario la

comprensión de los cambios realizados en la edición de la misma. Aportando la posibilidad

de seleccionar entre una de la versiones anteriores de la red o la versión actual.

Page 100: ESCUELA SUPERIOR DE INFORMÁTICA

100

6.2 MEJORAS Y PROPUESTAS

Aun habiendo cumplido los objetivos prioritarios propuestos en el inicio del Trabajo

de Fin de Grado, se pueden mejorar algunas cosas así como añadir nuevas funcionalidades.

Las posibles mejoras y otras habilidades que se pueden adquirir se listan a continuación:

o Mejorar la representación de los datos correspondientes a reglas y hechos en las

listas de selección.

o Ofrecer un sistema de reconocimiento de errores simultáneo a la edición de

conocimientos.

o Mejorar la visualización gráfica de la red. Utilizando otro modelo de visualización

en el que el usuario pueda interactuar con él.

o Añadir la posibilidad de exportar e importar redes RETE externas.

Page 101: ESCUELA SUPERIOR DE INFORMÁTICA

101

7. BIBLIGRAFÍA

[CST] Castillo, E., Gutiérrez, J.M. y Hadi, H. 1997. Expert Systems and Probabilistic

Network Models (Versión Española editada por la Academia Española de Ingeniería).

Springer, New York.

[MRN] Moreno, V. 2005. I. A. Clásica Sistemas Expertos. Url: http://avellano.fis.usal.es/

~lalonso/Cursos/SistemasInteligentes/LectureNotes/ssee.pdf

[CBN] Carbonell, J., Jin, C. y Hayes, P. 2005. ARGUS: Rete + DBMS = Efficient

Persistent Profile Matching on Large-Volume Data Streams. Url:

http://repository.cmu.edu/cgi/viewcontent.cgi?article=1420&context=isr

[SVN] Selvamony, R. 2010. Introduction To The Rete Algorithm. Url: http://sapassets.

edgesuite.net/sapcom/docs/2015/09/703d5a24-577c-0010-82c7-eda71af511fa.pdf

[MRK] Miranker, D. 1987. TREAT: A Better Match Algorithm for AI Production Systems.

Technical Report AI TR87-58

[BRN] Burnet, M., M., Hossli, R., Pulliam, T. VanVoorst, B. y Yang, X. 1994. Toward

Visual Programming Languages for Steering Scientific Computations. IEEE

Computational Science & Engineering.

[DH] Dehouck, R. 2015. The maturity of visual programming. Url:

http://www.craft.ai/blog/the-maturity-of-visual-programming

[HS] Hosick, E. 2014. Visual Programming Languages – Snapshots. Url: http://blog.

interfacevision.com/design/design-visual-progarmming-languages-snapshots

[PZ] Paez, N., Fontdevila, D., Súarez, P., Fontela, C., Degiovannini, M. y Molinari, A.

2014. Construcción de software: una mirada ágil. Eduntref.

[ISSI] Grupo ISSI (Ingeniería del Software y Sistemas de Información). 2003.

Metodologías Ágiles en el Desarrollo de Software. Taller Metodologías Ágiles en el

desarrollo de Software. Url: http://issi.dsic.upv.es/archives/f-1069167248521/actas.pdf

[GNR] Gansner, E., Koutsofios, E. y North, S. 2015. Drawing graphs with dot. Url:

http://www.graphviz.org/pdf/dotguide.pdf

[PL] Polo, M.. Apuntes de Tecnologías y Sistemas Web Curso 2014-2015. UCLM

Page 102: ESCUELA SUPERIOR DE INFORMÁTICA

102

[BLT] Ballantyne, T. Drawing Graphs using Dot and Graphviz.

www.tonyballantyne.com/graphs.html

[WNT] Winston, P. H. 1994. Inteligencia Artificial. Addison-Wesley Iberoamérica

Page 103: ESCUELA SUPERIOR DE INFORMÁTICA

103

ANEXO A. MANUAL DE USO DE REMGRAFEE TOOL

En este anexo se va a detallar el manual de uso de la herramienta desarrollada. Se van

a explicar los principales aspectos que se tendrán que tener en cuenta para un correcto uso

de la aplicación.

En primer lugar se ejecuta la aplicación en un navegador web mediante la URL

proporcionada para su uso. Una vez cargada la web, aparecerá la interfaz principal de la

herramienta Remgrafee, formada por tres pestañas. Cada una pertenece a una función

determinada.

Pestaña “Base Conocimiento”

En esta pestaña es donde se va a realizar la gestión de la base de conocimiento.

Consta de dos listas, una destinada a la representación de los hechos de la base de hechos y

la segunda a la representación de cada una de las reglas de la base de reglas.

Para proceder a editar la información, únicamente hay que elegir un elemento de una

de estas listas y situar el puntero del ratón sobre el botón desplegable correspondiente a la

lista. Las opciones que se incluyen en el desplegable son: editar o eliminar.

Figura A.1 – Botón desplegable

Page 104: ESCUELA SUPERIOR DE INFORMÁTICA

104

En el caso de que se desee ejecute la opción de editar el elemento, se redireccionará a

la pestaña de edición; y en el caso de ejecutar la opción de eliminar, el sistema eliminará el

elemento y notificará al usuario mediante un cuadro de diálogo del navegador.

Aparte de los elementos mencionados anteriormente, hay un botón “Compilar red

RETE” que realiza la acción que su propio nombre indica. Cabe destacar que la

compilación de la red únicamente es necesaria realizarla cuando ha habido cambios en la

base de reglas, por lo tanto, cuando se realicen cambios en la base de hechos no es

necesario volver a realizar esta operación. En caso de que las reglas no estén correctamente

definidas o haya habido algún problema interno durante la construcción de la red, se

notificará al usuario mediante un cuadro de diálogo.

Pestaña “Editar conocimientos”

Esta pestaña es la destinada a realizar los cambios oportunos en la base de

conocimiento, mediante la utilización de Blockly. El cajón que contiene toda la lógica del

editor Blockly se divide en dos partes. En la parte izquierda aparecen las diferentes

categorías de bloques disponibles que se pueden seleccionar para la edición y en la parte

derecha se encuentra el área de edición. Si pinchamos en una de las categorías, se

desplegará hacia la derecha un segundo cajón que contendrá los bloques seleccionables.

Llegados a este punto para seleccionar un bloque hay que hacer click en uno de ellos y,

manteniendo pulsado el botón del ratón, se arrastrará hasta soltarlo en el área de edición.

Page 105: ESCUELA SUPERIOR DE INFORMÁTICA

105

Figura A.2 – Mostrar bloques disponibles

Hay observar que cada uno de ellos posee una pequeña mueca y un pequeño

sobresaliente. Destacado esto, para lograr la cohesión entre los bloques, hay que arrastrar

uno de ellos sobre otro logrando coincidir la mueca con el sobresaliente de cada uno de

ellos.

Figura A.3 – Cohesión de bloques

Es importante tener en cuenta que para añadir un hecho determinado, su predicado

correspondiente debe existir anteriormente, sino la adición de este hecho será errónea.

Como en casos anteriores, se mostrará un cuadro de diálogo comunicando el éxito o el

fracaso de la operación.

En el caso de la construcción de reglas se procede de una manera similar. Los bloques

se cohesionarán de la misma forma, pero en este caso es necesario la utilización de otro

tipo de bloque, el bloque contenido en la categoría de “Reglas”. Este bloque posee dos

espacios para insertar otros bloques, uno para los antecedentes y otro para el consecuente.

Page 106: ESCUELA SUPERIOR DE INFORMÁTICA

106

Figura A.4 – Construcción de una regla

Al igual que sucede con los hechos para guardar los datos únicamente hay que pulsar

el botón “Guardar”. El sistema reconoce por sí mismo si los bloques que se encuentra en el

área de edición pertenecen a hechos o a reglas.

En el área de edición existe un icono con forma de papelera. La función de este

elemento es eliminar hechos que se encuentran en este espacio. Para ello basta con

arrastrar un bloque hasta situarlo sobre la papelera y soltarlo.

Figura A.5 – Eliminar un bloque

A parte del botón “Guardar”, de cuyo funcionamiento ya se ha hablado en varias

ocasiones, existe un segundo botón, “Actualizar”. Éste tiene la función de indicar al

sistema que es necesaria una actualización de la red RETE. Es necesaria llevar a cabo esta

acción cuando se ha modificado la base de hechos.

Page 107: ESCUELA SUPERIOR DE INFORMÁTICA

107

Pestaña “Visualización”

En la pestaña de visualización es dónde se lleva a cabo la representación gráfica de la

red. Para ello, se selecciona una de las versiones del grafo presentes en la lista de selección

que se muestra a la izquierda. Después se ha de pulsar el botón “Mostrar Grafo” para que

el grafo se muestre en el contenedor de la derecha.

Las versiones de la red están representadas por la fecha y hora en la que se creó dicha

versión. Cada una de estas versiones corresponde a un estado de la red justo después de

cada acción de compilación o de actualización de la red.

Figura A.6 – Seleccionar la versión de la red que se desea mostrar

Page 108: ESCUELA SUPERIOR DE INFORMÁTICA

108

Page 109: ESCUELA SUPERIOR DE INFORMÁTICA

109