3. GRAFOS Y ALGORITMOS DE PARTICIONAMIENTO
3.1. Modelos de Representación de Workflows
3.1.2. Gramática de Grafos Atribuidos (AGG)
Según [MRG99], la gramática de grafos atribuidos es un lenguaje visual basado en reglas el cual soporta un acercamiento algebraico para la transformación de grafos. Esta puede ser usada como un motor de transformación de grafos de propósitos generales para aplicaciones Java de alto nivel, empleando métodos de transformación de grafos. Debido a su carácter basado en reglas, la gramática de Grafos Atribuidos puede ser usada también en la inteligencia artificial. Las características de esta gramática son:
a. Estructuras de datos complejas son modeladas como grafos los cuales pueden ser
categorizados por grafos atribuidos.
b. El comportamiento del sistema es especificado por reglas de grafos usando una
descripción del tipo: si - entonces.
c. La aplicación de una regla transforma la estructura del grafo.
d. La aplicación secuencial de varias reglas muestra el escenario de una aplicación.
e. Los grafos AGG pueden ser vistos como objetos Java y por tipos de datos en
Java.
f. Por otro lado, nuevas clases Java pueden ser incluidas.
g. Las reglas de grafos pueden ser atribuidas o pueden ser ayudadas por
expresiones Java las cuales son evaluadas durante la aplicación de las reglas.
h. Adicional a esto, las reglas pueden ser condiciones vistas como expresiones Java
booleanas.
a. Por otra parte, los programas AGG consisten principalmente de dos partes: Una gramática de grafos atribuida por objetos Java.
b. Los objetos java pueden provenir de clases definidas por el usuario, ese conjunto
38
Para tal fin las librerías de clases Java como el JDK están disponibles, pero no son consideradas como parte de un programa AGG. La gramática de grafos contiene un grafo inicial y un conjunto de reglas que podrían tener condiciones negativas de aplicación. La forma en como las reglas sean aplicadas materializa directamente el acercamiento hacia la transformación de grafos. En cuanto a la atribución de los nodos y las aristas, esta se hace, como ya se dijo anteriormente, mediante objetos Java y mediante expresiones. La principal diferencia es que en AGG esto se hace mediante objetos Java y mediante expresiones en vez de utilizar especificaciones y términos algebraicos.
El sistema AGG soporta dos nociones diferentes de grafos las cuales están estrechamente relacionadas. La primera tiene que ver con los grafos simples. El segundo acercamiento es hacia los grafos jerárquicos. Un grafo simple consta de dos conjuntos. Uno de nodos y otro de aristas. Estos dos conjuntos están vistos como los objetos del grafo. Cada arco representa una conexión dirigida entre dos nodos, los cuales son llamados fuente y destino de la arista. Con el fin de realizar una clasificación más a fondo de cualquier objeto, a cada uno se le puede asociar una etiqueta la cual se puede escoger de entre un conjunto de etiquetas. Las etiquetas son también llamadas tipos. Un objeto "o" puede tener entonces una etiqueta "l" para ello se dice que "o es de tipo l". Nótese que dentro de la noción de grafos simples se puede tener múltiples aristas del mismo tipo. Los nodos de un grafo son bosquejados como rectángulos y las aristas son flechas dirigidas desde sus nodos origen a su nodos destino. A continuación se observa un ejemplo de grafo simple
.
Figura 3.1. Una compañía de envíos modelada como un grafo simple. Imagen tomada de [MRG99].
Como se puede apreciar, cada contenedor tiene su peso y contenido. Estos atributos, sin duda, son información valiosa también pero por simplicidad esta no es incluida en el grafo. Para ello es que se utiliza precisamente la atribución. Esto no se puede hacer
Compañía de envíos Camió n Camió n Contenedo r Pertenece Pertenece en
39
mediante nodos y aristas. Esto se puede hacer mediante enteros y cadenas de caracteres. Un grafo atribuido puede ser fácilmente entendido como Clases con sus atributos. Como se verá a continuación:
Figura 3.2. Representación atribuida de la compañía de envíos mostrada en la Fig. 3.1 Imagen tomada de [MRG99].
Esto es ya un grafo atribuido lo que se acerca bastante al concepto de orientación a objetos. La pregunta que cabe ahora es, ¿qué tipo de datos pueden usarse para atribuir? La respuesta es cualquier tipo de dato válido para Java.
Como ya se ha visto, se han estado describiendo sistemas que en cierto punto son estáticos. Se tratará entonces de describir situaciones, acciones incluso procesos de negocio que extienden la aplicación de la gramática de grafos atribuidos AGG. Una acción puede ser vista como una transición de estados y por supuesto una transición de estados puede ser especificada dando descripciones de los estados antes y después de la acción es cuestión. Esto apoyado en el uso de dos grafos los cuales describen estas dos situaciones. En el estado de antes lo que se hace es recolectar todas las precondiciones que tienen que haber.
Para el ejemplo de "cargarle un contenedor a un camión" tienen que haber los siguientes requerimientos:
a. Tiene que haber un camión.
b. Tiene que haber una bodega con por lo menos un contenedor adentro.
c. El camión a ser cargado tiene que estar en frente de la bodega.
Compañía de entregas
Contenido =
“maní”
peso = “45”
en
Nombre = “empresa ltda” Localización = “Popayán” Container Id = “2338” Camión Id = “5528” Camión
40
Una vez se tienen estas precondiciones, hacer el grafo para el estado de "después" es como sigue. En vez de tener una arista que indica una relación de "in" entre el contenedor y la bodega, se tiene que tener una de "on" que relacione el contenedor y el camión. Nótese que esta operación es abstracta ya que no se indica específicamente qué contenedor o qué camión o qué bodega intervienen en esta operación.
Por tanto se ha visto que el lado izquierdo de una regla de grafos establece todas las condiciones necesarias para que la operación especificada pueda llevarse a cabo. Una regla puede aplicarse si todos los requerimientos se cumplen. Obviamente esto corresponde a una clausula de "if-then" sin una rama "else" hablando en términos de un lenguaje de programación. La revisión del cumplimiento de las condiciones finaliza o se concluye tratando de encontrar un grafo que se iguale al grafo que dicta las precondiciones o sea al grafo de la mano izquierda.