Cartero Chino

39
An´ alisis y automatizaci´on del algoritmo de Edmonds para el problema de asignaci´on Defez,J.L. (a) ; Jord´ an,C. (b) (a) Ingeniero en Inform´atica por la U.P.V, Dimensi´onInform´atica,S.L., Valencia jorge [email protected] (b) Departamento de Matem´atica Aplicada, Universidad Polit´ ecnica de Valencia, Valencia [email protected] Resumen. En este trabajo presentamos una implementaci´ on en Java del algo- ritmo de Edmonds para la obtenci´on del acoplamiento m´aximo de m´aximo peso, definiendo un interfaz amigable que nos permitir´a resolver f´acilmente problemas de asignaci´on. Como aplicaci´on, implementamos tambi´ en el algoritmo del cartero chino. Palabras clave. Grafos, acoplamiento, problema de asignaci´on, problema del cartero, Edmonds. 1.Introducci´on El eje principal de este trabajo lo constituye la implementaci´ on del al- goritmo de Edmonds para resolver problemas de asignaci´on. El estudio de problemas de asignaci´on cuando el grafo que modeliza el problema no es necesariamente bipartido es de utilidad en dos vertientes, una pr´actica y otra te´orica. En la vertiente pr´actica encontramos los propios problemas deasignaci´on,as´ ı como ser b´asico para la resoluci´on de otros importantes problemas de la teor´ ıa de grafos: el problema del cartero chino, determi- naci´ on de la cadena m´as corta en un grafo no dirigido, etc. Su inter´ este´orico proviene de la conexi´on con una clase de programas en programaci´on lineal con variables enteras que pueden ser resueltos con un algoritmo polinomial. Dado lo costoso de resolver manualmente tanto los problemas de asignaci´on como los de cartero chino, siendo muy complicada la implementaci´ on del 1

Transcript of Cartero Chino

Page 1: Cartero Chino

Analisis y automatizacion del algoritmo de Edmondspara el problema de asignacion

Defez,J.L. (a) ; Jordan,C. (b)

(a) Ingeniero en Informatica por la U.P.V,Dimension Informatica, S.L.,Valenciajorge [email protected]

(b) Departamento de Matematica Aplicada,Universidad Politecnica de Valencia,[email protected]

Resumen. En este trabajo presentamos una implementacion en Java del algo-ritmo de Edmonds para la obtencion del acoplamiento maximo de maximo peso,definiendo un interfaz amigable que nos permitira resolver facilmente problemasde asignacion. Como aplicacion, implementamos tambien el algoritmo del carterochino.

Palabras clave. Grafos, acoplamiento, problema de asignacion, problema delcartero, Edmonds.

1. Introduccion

El eje principal de este trabajo lo constituye la implementacion del al-goritmo de Edmonds para resolver problemas de asignacion. El estudio deproblemas de asignacion cuando el grafo que modeliza el problema no esnecesariamente bipartido es de utilidad en dos vertientes, una practica yotra teorica. En la vertiente practica encontramos los propios problemasde asignacion, ası como ser basico para la resolucion de otros importantesproblemas de la teorıa de grafos: el problema del cartero chino, determi-nacion de la cadena mas corta en un grafo no dirigido, etc. Su interes teoricoproviene de la conexion con una clase de programas en programacion linealcon variables enteras que pueden ser resueltos con un algoritmo polinomial.Dado lo costoso de resolver manualmente tanto los problemas de asignacioncomo los de cartero chino, siendo muy complicada la implementacion del

1

Page 2: Cartero Chino

algoritmo de Edmonds, y puesto que en general solo se encuentran desar-rollos ”literarios”del algoritmo, nos ha parecido necesario analizar y llevara cabo dicha implementacion, siendo nuestro objetivo principal crear unaaplicacion que nos lleve de forma sencilla y rapida a la solucion. Destacamosque para llevar a buen termino la implementacion mencionada, dada lacomplejidad del algoritmo, es imprescindible no solo un buen conocimientodel algoritmo en sı, sino un profundo analisis que nos permita elegir lasestructuras de datos mas adecuadas.

A fin de centrar el problema para su estudio recordamos que el problemade la asignacion consiste basicamente en, dado un grafo no dirigido, G =(V,E), encontrar un acoplamiento M maximo (ver [1],[6]). Si ademas cadauno de los pares (x, y) de E tiene asociado un peso, pxy, se pretende queel peso total sea el maximo de los posibles. En el analisis del problema sedistingue entre conjuntos V en los que existe una biparticion (X,Y ), talque si (x, y) ∈ E entonces x ∈ X y y ∈ Y , y aquellos en los que no esposible establecer dicha biparticion. Ası, por ejemplo, un primer problemade asignacion consistirıa en, dado un conjunto de trabajos y un conjuntode trabajadores y sabiendo que trabajador sabe realizar y en que medidacada uno de los trabajos, determinar una asignacion trabajador-trabajo demanera que la satisfaccion global sea maxima. Un ejemplo del caso masgeneral podrıa ser establecer parejas para llevar a cabo un trabajo en uncierto colectivo a partir de datos que reflejen las compatibilidades de losmiembros del grupo. El algoritmo que ocupa nuestra atencion proporcionael acoplamiento optimo si este existe. Destacamos que, dado que en muchasocasiones es mejor una solucion aproximada que no disponer de solucionalguna, al implementarlo hemos modificado el final, para que en caso de noexistir acoplamiento optimo, nos proporcione un acoplamiento maximo demaximo peso.

Otro problema en el que el algoritmo de Edmonds juega un papel im-portante es el conocido como problema del cartero chino. Su formulaciongeneral consiste en disenar un ruta lo mas corta posible para un carteroque, saliendo de la central de correos, debe repartir la correspondencia poruna serie de calles y volver a la central, habiendo calculado previamente eltiempo necesario para cada calle.

En la segunda seccion de este trabajo introducimos los conceptos basicosque nos conduciran a nuestro objetivo. En la tercera y cuarta comentamosel diseno llevado a cabo, la codificacion e implementacion. En la ultima sec-cion presentamos otras posibilidades de la aplicacion, tanto actuales comofuturas.

2

Page 3: Cartero Chino

2. Grafos

Se llama grafo no dirigido a todo par de conjuntos G = (V,E), tal queV 6= ∅ y E es un subconjunto de pares no ordenados de elementos de V . Loselementos de V reciben el nombre de vertices, mientras que los elementos deE se denominan aristas. Si (x, y) ∈ E es tal que x = y se denomina bucle.Dos aristas se dicen adyacentes si tienen un extremo comun. Decimos queun subconjunto M de E es un acoplamiento de G si no contiene buclesy dos aristas cualesquiera de M no son adyacentes. Un vertice x ∈ V essaturado si es extremo de alguna de las aristas de M . Un acoplamientoM se dice maximo si no existe ningun otro acoplamiento en G con mayorcardinalidad que M ; se dice que es perfecto si todos los vertices del grafoson M -saturados. En el caso de que G sea ponderado se llama acoplamientooptimo a todo acoplamiento perfecto de maximo peso.

Una estructura basica en la busqueda de acoplamientos maximos esla llamada camino M -incrementable, es decir, camino de extremos M -insaturados en el que las aristas pertenecen alternativamente a M y aE−M . Es conocido que en un grafo no dirigido, un acoplamiento es maximosi y solo si no existen caminos M -incrementables, (ver [1],[6]). La busquedade posibles caminos M -incrementables se estructura a partir del concep-to de arbol M -alternado. Se dice que un arbol T en el que se ha definidoun acoplamiento M , es un arbol M -alternado si verifica que existe en Tun vertice no M -insaturado al que llamamos raız, todos los caminos conextremos en la raız son M -alternados y todos los caminos maximales conextremo inicial la raız tienen cardinalidad par. Se llama vertices interioresdel arbol M -alternado T a aquellos vertices que ocupen una posicion paren el camino desde la raız, siendo vertices exteriores los que ocupan unaposicion impar. Los vertices interiores los etiquetamos I y los exterioreslos etiquetamos E. El algoritmo de Edmonds va reduciendo el problema agrafos mas sencillos hasta encontrar una solucion en uno de estos grafos. Apartir de esta retrocede, haciendo uso de datos anteriormente guardados,hasta proporcionar una solucion del problema original. En el proceso dereduccion es basico el concepto de floracion y contraccion de una floracion,que nos permitira trabajar con un grafo con un numero menor de vertices.

Se llama floracion respecto a un acoplamiento M de un grafo G a todociclo impar en el que todos los vertices menos uno son M -saturados poraristas del propio ciclo. Enlazando con los arboles M -alternados, dado ungrafo G con un acoplamiento M , se dice que un arbol M -alternado T ha flo-recido si existe una arista de G que une dos vertices exteriores de T . En esemomento se realizara el proceso de contraccion de la floracion, entendiendo

3

Page 4: Cartero Chino

por contraer una floracion sustituirla por un pseudonodo o nodo ficticio, demanera que las aristas antes incidentes en sus nodos seran incidentes en elpseudonodo del nuevo grafo.

Una simplificacion de otro tipo es la relativa a buscar un acoplamientomaximo en lugar de un acoplamiento maximo de maximo peso, es decir,trabajar sin tener en cuenta los pesos. Se hace uso aquı de conceptos provi-nentes de la programacion lineal. Ası, por ejemplo, si G es un grafo ponder-ado con pesos p(x, y) para cada arista (x, y), llamamos etiquetado admisiblea toda aplicacion l de V en <, tal que a cada vertice le asocia un valor queverifica que si (x, y) ∈ E entonces l(x) + l(y) ≥ p(x, y). Dado un etiquetadoadmisible l en G llamamos grafo igualdad de G asociado a l, Gl, al subgrafode G cuyo conjunto de vertices es V y el conjunto de aristas esta consti-tuido por aquellas aristas (x, y) tal que l(x) + l(y) = p(x, y). Como todoacoplamiento perfecto en un grafo igualdad Gl es optimo en G, (ver [1],[6]),el problema se reduce a la busqueda de un acoplamiento perfecto en Gl, sintener ya en cuenta los pesos. Una buena eleccion del etiquetado admisiblesimplifica la busqueda del acoplamiento. Con este fin hemos implementadoproceso de cambio de etiquetado, que definido a partir del habitualmenteutilizado, proporciona un mejor grafo igualdad y por tanto una mas rapidasolucion. El proceso comienza seleccionando un acoplamiento M en el grafoigualdad. Se hace crecer un arbol M -alternado a partir de los vertices que,no estando en el arbol, sean adyacentes a vertices etiquetados E del arbol.Cuando este tipo de vertices no existe tenemos lo que se conoce como arbolhungaro, T , y es necesario cambiar el etiquetado y generar un nuevo grafoigualdad.

Sea G1 = (V1, E1) el grafo igualdad asociado al etiquetado admis-ible π. El cambio de etiquetado necesita en primer lugar la definicionde tres conjuntos de aristas: C = {(vi, vj) ∈ E ∧ (vi, vj) 6∈ E1}, C1 ={(vi, vj) ∈ C tal que vi ∈ T (etiquetado E) ∧ vj 6∈ E1} y C2 = {(vi, vj) ∈C tal que vi, vj ∈ T (etiquetado E}.

El proceso de calculo de los valores de los parametros que controlaranel cambio de etiquetado se especifica a continuacion:

∆1 = min(v,v′)∈C1[π(v) + π(v′)− p(v − v′)]

∆2 = 1/2(min(v,v′)∈C2[π(v) + π(v′)− p(v − v′)])

∆3 = 1/2(min{δr tal que Sr esta etiquetada I en el arbol})∆ = min{∆1,∆2,∆3}

4

Page 5: Cartero Chino

El valor de ∆ determina los pasos a seguir. Ası si ∆ = ınf algunasversiones del algoritmo pasarıan a ejecutar el proceso de finalizacion, ter-minando sin mas. En la implementacion que presentamos se desea hallar unacoplamiento optimo o, en su defecto, un acoplamiento maximo de maximopeso para lo que se completara el grafo G′ con aristas ficticias de peso muynegativo, lo que tiene como consecuencia que el algoritmo algoritmo lasdeseche si existe un acoplamiento que no las utilice.

En el caso de que ∆ = ∆3 se expande la floracion que genero el ∆3.En cualquier otro caso se cambia el etiquetado del grafo en la forma que sedetalla a continuacion.

Vertice v etiquetado E: π(v) := π(v)−∆

Vertice v etiquetado I: π(v) := π(v) + ∆

Floracion etiquetada E: δr := δr + 2∆

Floracion etiquetada I: δr := δr − 2∆

Todos los nodos y pseudonodos que no estaban contenidos en T conser-van su etiqueta anterior. Ademas, se verifica siempre que el nuevo etique-tado es admisible. La figura 1 recoge el diagrama, utilizado en el diseno deesta implementacion, del algoritmo que estamos analizando.

Como aplicacion directa de este algoritmo tenemos la resolucion delproblema conocido como del cartero chino, consistente en localizar unacadena cerrada de peso mınimo que atraviese todas las aristas al menosuna vez. Los conocidos algoritmos de Fleury, para la localizacion de unciclo euleriano en un grafo no dirigido, y el de Dijkstra, para la obtenciondel camino de mınimo peso de un vertice u a un vertice v en un grafoponderado positivo, son necesarios tambien para encontrar una solucionen el problema del cartero. Podemos analizar este algoritmo siguiendo eldiagrama utilizado, representado en la figura 2.

3. Diseno de la aplicacion

El diseno va a ser dirigido hacia conseguir una aplicacion que, ademasde resolver problemas de asignacion y el problema de cartero chino permitaen un futuro incluir nuevos algoritmos sobre la plataforma. A la luz de estosobjetivos, resulta de tanta importancia el diseno de las estructuras de lateorıa de grafos como el de elementos algorıtmicos o de interfaz.

5

Page 6: Cartero Chino

Figura 1: Diagrama del algoritmo de Edmonds

6

Page 7: Cartero Chino

Figura 2: Diagrama del algoritmo del problema del cartero chino

7

Page 8: Cartero Chino

En el diagrama del diseno se va a emplear el diagrama de clases de lametodologıa UML, en la que se muestra una version estatica de la apli-cacion, detallando las clases a implementar, los atributos y metodos decada una de ellas, ası como las relaciones de inclusion y herencia. De estaforma el diagrama de clases es un proceso idoneo para pasar del analisis delalgoritmo al diseno de la aplicacion.

Para su representacion consideraremos el diagrama de clases divididoen tres bloques. El primero de ellos representa las distintas estructurasde grafos y las relaciones existentes entre ellas, el segundo se centra enla parte algorıtmica del problema mientras que el tercero trata las clasescorrespondientes al diseno de la interfaz.

Antes de comenzar conviene dar algun detalle del paradigma de pro-gramacion orientado a objetos. A diferencia del modo de programacionimperativo, donde el programa se construıa empleando algoritmos y las es-tructuras de datos necesarias, en la programacion orientada a objetos losprogramas se crean empleando clases, las clases son patrones de objetos alos que se definen unos atributos y unos metodos. Ası pues, para una clasecoche se podrıa definir atributos color y marca, y los metodos arrancar,acelerar, adelantar. Un objeto en este ejemplo podrıa ser un coche Opelazul, el cual podra arrancar, acelerar y adelantar.

3.1. Clases estructurales

En esta seccion se presenta el diagrama de clases, ver figura 3, querepresenta la parte estatica de la aplicacion relacionada con la teorıa degrafos y se detalla para estas clases el uso de sus atributos y metodos.

Clase Nodo Un nodo tiene un nombre que lo identifica y, dado el caractervisual de la aplicacion, debe tener un atributo ”posicion”. La clase Nodono tiene metodos ya que un nodo por separado, es decir fuera del contextodel grafo, no tiene propiedades.

Clase NodoEdmonds Es una especializacion de la clase Nodo, los nodosde tipo Edmonds anaden a las propiedades de un nodo todas aquellas car-acterısticas necesarias para que el algoritmo de Edmonds pueda ejecutarsesobre un grafo. De un NodoEdmonds podemos saber si esta contenido enuna floracion y, en caso afirmativo, en que floracion concreta se encuentracontraıdo. Tambien podemos etiquetar al nodo dentro de una estructura detipo arbol alternado.

8

Page 9: Cartero Chino

Figura 3: Diagrama de clases estructurales

9

Page 10: Cartero Chino

Clase Floracion Una floracion es un tipo particular de NodoEdmonds,con las particularidades de que un objeto floracion es un pseudonodo (no esun nodo real) y que contiene un listado de nodos. El campo cicloContraidoalmacena estos nodos, siendo importante, no solo el contenido del campo,sino tambien el orden en el que se hace referencia a los nodos en el vector.Este orden debe corresponderse con el de los nodos en el ciclo, siendo in-diferente del primer nodo y la direccion de giro escogida para completar elciclo. Al expandir la floracion se perfeccionara el acoplamiento teniendo encuenta este orden. Para ilustrar mejor esta idea se muestra un ejemplo.

Figura 4: Ciclo que da lugar a floracion

cicloContraıdo correctov1 v4 v6 v5 v3

v5 v6 v4 v1 v3

v6 v5 v3 v1 v4

cicloContraıdo incorrectov4 v5 v6 v1 v3

v6 v1 v3 v4 v5

Clase Arista Incluye informacion sobre los nodos en que incide, pero porsi sola carece de metodos. Las aristas ademas tienen atributos para registarsu peso y su multiplicidad (cantidad de aristas que hay entre el nodoCabezay el nodoCola).

Clase Grafo Esta formado por dos listados, uno de nodos y otro dearistas. Dentro de un Grafo teniendo una Arista con nodoCabeza = x y

10

Page 11: Cartero Chino

nodoCola = y, dicha arista une los nodos que estan en la posicion x e y dela lista Nodos.

Figura 5: Ejemplo de objeto de la clase Grafo y su representacion grafica

En cuanto a los metodos que debe implementar el grafo podemos di-vidirlos en tres grupos: los metodos destinados a mantener el conjunto denodos y de aristas, los metodos que ofrecen informacion sobre el grafo enconjunto (¿es conexo?, ¿cuantas componentes conexas tiene?, ¿cual es elgrado de un determinado nodo?, etc.) y por ultimo, unos procedimientosque denominaremos de Entrada/Salida, como son devolver el codigo delgrafo en los lenguajes XML y Mathematica.

Clase GrafoEdmonds Los grafos de tipo Edmonds son grafos especial-mente disenados para ser utilizados por el algoritmo de Edmonds. Con-servan los atributos de los grafos con la variacion de que el vector nodoscontiene nodos de los tipos nodoEdmonds y Floracion. Ademas se anade unvector para las aristas del acoplamiento y un ındice para senalar a partir deque posicion del vector de nodos se encuentran situadas las floraciones. Esteındice permite por ejemplo gestionar la expansion de otras floraciones. Co-mo en los grafos Edmonds los nodos y aristas pueden ser reales o ficticios, sehan incluido dos atributos que controlaran estas situaciones, indicando lasposiciones a partir de las cuales los nodos y aristas son de tipo ficticio. Seincorporan a esta clase los metodos que actuan sobre los nuevos atributos.Definimos ındice real de un nodo como la posicion en el vector de nodos dela floracion mas externa que lo contiene. Este concepto se ha anadido a fin

11

Page 12: Cartero Chino

de controlar la actividad de los nodos que estan contenidos en floracionesmultiples. Sin salir del contexto de la clase GrafoEdmonds resulta un ındicede utilidad a la hora de tratar el dibujado de aristas, ya que una arista queincide en dos nodos con el mismo ındice real es una arista contenida dentrode la floracion y por tanto no se dibuja.

El lector podrıa en este punto verse inclinado a pensar que no se re-quieren metodos para estos trabajos sobre floraciones, puesto que una flo-racion conserva los nodos que estan contraıdos en su interior y ademas losnodos conservan informacion sobre la floracion en la cual se encuentrancontenidos. De hecho un lector crıtico llegarıa a pensar que se trata de in-formacion duplicada (el nodo sabe en que floracion esta y la floracion sabeque nodos contiene). Es de gran importancia en este punto del diseno de laaplicacion recordar que las floraciones tambien pueden ser contraıdas dentrode una floracion mayor. Veamos un ejemplo para una mayor claridad.

Supongamos que F1 contrae los nodos v0, v1 y v2, mientras que la flo-racion F2 contrae v3, v4 y F1. Si en este punto el campo cicloContraido deF2 almacena la totalidad de nodos contenidos (es decir v0, v1, v2, v3 y v4),serıa obligatorio recordar en el campo floracion de los nodos v0, v1 y v2

que su floracion real es F1. Pero con este diseno se obliga a diferenciar, enlas operaciones de expansion de floraciones, cuales son los nodos que real-mente estan contraıdos en la floracion que se expande y cuales pertenecena floraciones mas internas (F1), resultando un codigo mas oscuro. Por elloel diseno opta por dada esta situacion que los nodos ya contraıdos en F1

mantengan la referencia a F1 siendo (v3, v4, F1) el ciclo contraıdo en F2.Evidentemente el resto del diseno es consecuente con esta decision.

Un GrafoEdmonds tiene como metodo propio la generacion de etique-tados admisibles. Se escribe a continuacion el pseudocodigo del algoritmopropuesto para etiquetar y un ejemplo de uso del mismo.

etiquetarAdmisible (G)

Todos los nodos parten con etiqueta = 0;

Desde i=0 hasta tamano G.Nodos - 1

v = G.Nodos[i]

v.etiqueta= - infinito

Para todas las aristas incidentes en v

//a= (v,vi) OR a=(vi,v)nuevaEtiqueta=a.peso-vi.etiqueta

12

Page 13: Cartero Chino

v.etiqueta=Maximo(v.etiqueta, nuevaEtiqueta)

FinPara

FinDesde

Veamos a continuacion un ejemplo de calculo de un etiquetado admisibleen un grafo G.

4 34 68 6 1

4 8 5 16 5 8

6 9 44 1 8 93 1 4

Figura 6: Grafo G y su matriz de pesos

Comenzamos a etiquetar por v0 y se le asocia el peso maximo de lasaristas incidentes, es decir, v0.etiqueta = 4. Los adyacentes a v1 no hansido etiquetados todavıa por lo que la etiqueta de v1 sera el maximo de lospesos de las aristas incidentes con v1, es decir, v1.etiqueta = 6. El verticev2 se encuentra en la misma situacion por lo que v2.etiqueta = 8. El casode v3 es diferente, ya que en su lista de adyacentes aparecen nodos que yahan sido etiquetados. Calculamos a continuacion la v3.etiqueta:

v3.etiqueta=maximo

peso(v3, v1)− v1.etiqueta = −2peso(v3, v2)− v2.etiqueta = 0peso(v3, v4) = 5peso(v3, v7) = 1

= 5

Repetimos el proceso para anterior para conseguir los valores que se

13

Page 14: Cartero Chino

adjudican a las etiquetas de los vertices v4, v5,v6 y v7:

v4.etiqueta=maximo

peso(v4, v2)− v2.etiqueta = −2peso(v4, v3)− v3.etiqueta = 0peso(v4, v6) = 8

= 8

v5.etiqueta=maximo

peso(v5, v1)− v1.etiqueta = 0peso(v5, v6) = 9peso(v5, v7) = 4

= 9

v6.etiqueta=maximo

peso(v6, v0)− v0.etiqueta = 0peso(v6, v2)− v2.etiqueta = −7peso(v6, v4)− v4.etiqueta = 0peso(v6, v5)− v5.etiqueta = 0

= 0

v7.etiqueta=maximo

peso(v7, v0)− v1.etiqueta = −1peso(v7, v3) = −4peso(v7, v5) = −5

= −1

Figura 7: Subgrafo igualdad asociado al etiquetado calculado

El metodo pondera por exceso los primeros nodos y luego ajusta las eti-quetas de los ultimos nodos, produciendo subgrafos igualdad en los que lasprimeras posiciones del vector de nodos estan desconectados o tienen gradoreducido. Esta observacion hara que al generar arboles alternados tomemoscomo raız el ultimo nodo no saturado, pues aumentan las posibilidades deencontrar adyacentes.

Realizando una nueva pasada del algoritmo de etiquetado nuevamenteal grafo se obtienen unos resultados que ajustan mas las etiquetas y generanun subgrafo igualdad con mayor numero de aristas.

v1.etiqueta=maximo{

peso(v1, v3)− v3.etiqueta = −1peso(v1, v5) = −3

}= −1

14

Page 15: Cartero Chino

Los resultados de repetir el proceso de etiquetado sobre los nodos en elgrafo de ejemplo son: (v0.etiqueta, . . . , v7.etiqueta) =(4,−1,−3, 5, 8, 9, 0,−1),etiquetado que origina el siguiente grafo igualdad,

Figura 8: Subgrafo igualdad asociado al nuevo etiquetado

Clase SubgrafoIgualdad Es una subclase del GrafoEdmonds. Conservael vector de Nodos, pero reparte las aristas del grafo en dos conjuntos, porun lado el conjunto C y por otro el vector Aristas. Pertenecen a este vectoraquellas aristas a = (vi, vj) en las que se cumple que su peso es igual a lasuma de las etiquetas de los vertices en los que incide, excepto si la aristaesta contenida en una floracion, en cuyo caso el peso debe ser igual a lassumas de las etiquetas de los vertices mas la etiqueta de la floracion masinterna que la contiene.

Clase ArbolAlternado Es una especializacion de los grafos Edmonds,ya que aparecen aristas del acoplamiento y floraciones; objetos que no seencuentran en los grafos comunes. Los arboles alternados anaden dos con-juntos, el E y el I. Estos conjuntos son listas de ındices que apuntan,respectivamente, a los nodos exteriores e interiores del vector de nodos.El arbol alternado contiene metodos que le permiten aumentar progresiva-mente, buscando nodos adyacentes a los nodos etiquetados E. Para conocerel nodo E que corresponde revisar se anade un ındice ultimoERevisado. Coneste ındice se controla ademas la situacion de arbol hungaro. La inclusionde un nuevo nodo E (I) supone en primer lugar su etiquetado arboreo in-mediato como E (I) y su inclusion en el vector E (I) del arbol. Ademas,si el nodo es una floracion, todos los nodos y floraciones contraıdas en el-la se etiquetan como E (I) (pero no se anaden al vector E (I), ya que

15

Page 16: Cartero Chino

solo pueden formar parte de este los nodos y floraciones que no estan den-tro de floraciones). El etiquetado de los nodos contraıdos se realizara paracontrolar los cambios de etiquetado. Tambien se han anadido metodos deretroceso desde un nodo a su nodo anterior en el arbol. De esta formapodemos facilmente llegar de un nodo hasta la raız del arbol.

A fin de entender la semantica de los metodos de retroceso consideramosel arbol de la figura 9. Se inicia en el nodo v11.

Figura 9: Arbol M-alternado

retrocesoDeEHastaI (v11) → v7, retrocesoDeIHastaE (v7) → v4, retroce-soDeEHastaI (v4)→ v2, retrocesoDeIHastaE (v2)→ v0, retrocesoDeEHas-taI (v0)→ No se encuentra ningun nodo.

De esta forma se ha conseguido generar un camino desde un nodo delarbol a la raız del mismo. Estos metodos hallan caminos M -alternados yen algunos casos M -incrementables.

En cuanto al proceso a seguir para asegurar la correccion del retrocesose deduce practicamente del grafico anterior. Debe cumplirse lo siguiente:

Retroceder desde un nodoE a un nodo I: Buscar una arista del acoplamien-to que tenga un extremo en el nodo etiquetado E. El otro extremoincide en el nodo I que buscamos. Si no se encuentra dicha arista elnodo E es la raız del arbol.

Retroceder desde un nodo I a un nodo E: En este caso se busca una aristaque incida en el nodo I y que no pertenece al acoplamiento. El otronodo en que es incidente la arista es el nodo E buscado.

16

Page 17: Cartero Chino

Figura 10: Diagrama de clases algorıtmicas

17

Page 18: Cartero Chino

3.2. Clases algorıtmicas

Los algoritmos se disenan como clases y no como metodos de la claseGrafos. Esto nos permitira ejecutar los algoritmos por pasos o bien mostrarsolo el resultado. Ademas este diseno permite incluir mas algoritmos sinnecesidad de cambiar drasticamente el diseno de la parte estructural. Enbase a lo expuesto anteriormente los algoritmos tienen el aspecto de unhilo de ejecucion que realiza su tarea y termina devolviendo la informacionque se considera necesaria a traves de la interfaz. En la figura 10 podemosanalizar la relacion entre las mencionadas clases.

Clase Algoritmo Es la clase de la que heredan todos los algoritmos. Notiene ejecucion ya que es un algoritmo vacıo, pero incorpora el compor-tamiento de todos los algoritmos tanto en lo respectivo al estado del hilo,como al siguiente paso que se debe realizar.

La mejor forma de observar este comportamiento es analizar los esta-dos por los que pasa un algoritmo mediante un diagrama de transicion deestados. Estos estados dependen del modo de ejecucion elegido, ya que unalgoritmo a ejecutar de forma continua debe avanzar sin suspenderse enningun momento. En la figura 11 se puede consultar el diagrama corres-pondiente a la clase Algoritmo.

Figura 11: Diagrama de transicion de estados para la clase Algoritmo

El atributo estado se encarga de recordar cual es el siguiente paso quedebe darse en el algoritmo. Dividir el algoritmo en pasos de ejecucion per-mite detenerlo en aquellos momentos en los que se considere que hay quemostrar informacion relevante para el usuario.

18

Page 19: Cartero Chino

El esqueleto de los metodos de ejecucion de los algoritmos tiene unesquema del tipo que se muestra a continuacion.

Ejecutar()

Mientras (terminado() = falso & & suspendido() = falso)

Estado 0: iniciar();codigo del estado;estado = siguiente estado;si (modo = POR PASOS) suspender();

Fin Estado 0;Estado 1: codigo del estado;

estado = siguiente estado;si (modo = POR PASOS) suspender();

Fin Estado 1;. . .

Estado Final : escribir resultado();terminar();

Fin Estado Final;

Fin Mientras;

Fin Ejecutar;

Edmonds El algoritmo de Edmonds requiere de un grafo de Edmondspara trabajar, ademas durante sus pasos de ejecucion ira construyendoarboles alternados y subgrafos igualdad. Para que sea posible este tipo deejecucion, el algoritmo se divide en bloques tomando como base el diagrama1.

A continuacion, y debido a su complejidad, se detalla el diseno de algunode los pasos que han dado lugar a metodos de la clase Edmonds.

El metodo de perfeccionar un acoplamiento se lleva a cabo construyendoel camino incrementable desde el nodo insaturado que se encontro hasta laraız del arbol alternado. Para esto se usan los metodos de retroceso en elarbol (descritos anteriormente). Una vez construido dicho camino el procesoconsiste en recorrerlo insertando en el acoplamiento las aristas que estan enuna posicion impar del camino y quitando del acoplamiento las que ocupanuna posicion par en el mismo.

La extension del arbol alternado se realiza conociendo el nodo E queestamos revisando y su adyacente saturado no perteneciente al arbol. Estainformacion se utiliza para derivar una correcta extension. En primer lugarse debe anadir al arbol el nodo saturado, que etiquetamos I, y junto a este

19

Page 20: Cartero Chino

nodo se introduce tambien la arista que incide en el nodo E en revisiony en el nuevo nodo I. Para encontrar el nuevo nodo E se debe buscar laarista del acoplamiento que satura el nodo I. Dicha arista tambien debeser anadida al arbol; incide en dos nodos, uno de ellos es el ya conocidonodo I, y el otro entra en el arbol como un nuevo nodo E, finalizando ası laoperacion de extension.

La operacion de contraccion de una floracion tiene como principal factorde complejidad el encontrar el ciclo que dio lugar a la floracion. Para ex-poner el proceso que se lleva a cabo para encontrar dicho ciclo, conociendounicamente los dos nodos E que al unirse provocaron la contraccion, se vaa utilizar un ejemplo.

En la figura 9 se muestra un arbol alternado. En la fase de revision denodos exteriores se ha observado que el nodo v10 tiene entre sus adyacentesal nodo v14, que pertenece al arbol y esta etiquetado E. Esta situacion vaa provocar la contraccion de una floracion.

Figura 12: Arbol M-alternado en el que se va a producir la contraccion deuna floracion

Se toma v10 y se guarda en el ciclo contraıdo su retroceso hasta la raız:(v10, v6, v4, v2, v0) Acto seguido vamos a hacer el retroceso desde el nodov14 hasta encontrar un nodo que ya pertenezca al vector, en este caso v4.Ademas en se colocan los nodos en el principio del vector conforme vayansiendo anadidos, desplazando hacia la derecha el resto de posiciones en cadainsercion: (v8, v12, v3, v14, v10, v6, v4, v2, v0) Para terminar debemos eliminarlos nodos que entraron por exceso en el primer retroceso. Esto se consigueeliminando desde el final del vector los nodos hasta llegar al nodo quedetuvo el retroceso anterior, v4: (v8, v12, v13, v14, v10, v6, v4)

Una vez conseguido el ciclo contraıdo se asigna el ındice de la nueva

20

Page 21: Cartero Chino

floracion al campo floracion de todos los nodos pertenecientes al ciclo. Acontinuacion se da nombre y posicion a la floracion, se etiqueta con E (loque a su vez etiqueta como E a todos los nodos que contiene) y se situa enel arbol tan proximo a la raız como es posible, esto es en la posicion de v4.

Figura 13: Arbol alternado de la figura 12 tras la contraccion de la floracion

La operacion contraria a la contraccion de floraciones es su expansion.Esta puede tener lugar en dos momentos, bien al utilizar el valor de ∆3

para cambiar el etiquetado, o bien en la fase de terminacion del algoritmo.En cualquiera de los dos casos estara saturada antes de expandirse.

Se expone ahora el proceso a seguir para expandir una floracion. Tomare-mos para ello F1 floracion contraıda en el ejemplo anterior. Vamos a suponerque se encuentra saturada por la arista (v, v13) del acoplamiento.

El primer paso consiste en encontrar dicha arista, que es la unica delacoplamiento que cumple que uno de los nodos en los que incide esta dentrode la floracion y el otro no. Una vez encontrado el nodo acoplado al exteriorreordenamos el ciclo contraıdo de forma que el nodo v13 quede en primeraposicion: (v13, v14, v10, v6, v4, v8, v12). Una vez ordenado el vector se eligentodos los nodos contenidos en el debiendo indicarse en sus campos floracionque estos nodos ya no pertenecen a ninguna floracion.

Para terminar se construye el conjunto de aristas que constituye elacoplamiento y el complementario. La arista entre el nodo inicial y finalno pertenece al acoplamiento. La arista que incide en los nodos que ocupanla posicion 0 y la posicion 1 del ciclo saldra del acoplamiento, entrando almismo la arista incidente en los vertices que ocupan las posiciones 1 y 2.Se procede de esta forma alternando la exclusion e inclusion de aristas enel acoplamiento hasta llegar al final del mismo. En la figura 14 se muestrael resultado final de la expansion, incluyendo todos los nodos contenidos en

21

Page 22: Cartero Chino

la floracion y tambien el nodo v, que estaba unido por una arista acopladaa la floracion F1.

Figura 14: Expansion de la floracion contraıda en la figura 13, aplicandolos supuestos detallados en el texto

Fleury El algoritmo de Fleury se aplica sobre grafos eulerianos. El algo-ritmo construye otro grafo durante su proceso, el cual es una cadena quecontiene todas las aristas del grafo de entrada pasando una unica vez porcada una de ellas.

Este algoritmo tiene una complejidad mucho mas baja que la de Ed-monds , debido sobre todo a que, como se muestra a continuacion, el numerode estados es muy reducido y por lo tanto existen muchas menos fases dedecision sobre el flujo de estados del algoritmo.

ESTADO DESCRIPCION0 Se escoge un nodo inicial para el camino que vamos a

construir, dicho nodo se marca como seleccionado paracontinuar el camino. Se pasa al estado 1.

1 Si el grafo no tiene aristas se pasa al estado 2. En casocontrario se busca la siguiente arista que formara partedel camino y se anade al mismo. Se mantiene el estado.

2 Se recupera el grafo de trabajo inicial y se dibuja el cicloeuleriano completo. Se termina el algoritmo.

Cuadro 1: Estados de ejecucion del algoritmo de Fleury

El unico proceso de cierta complejidad que se ha disenado es el de

22

Page 23: Cartero Chino

busqueda de la arista que continua el ciclo euleriano. Consideramos, en elestado actual del grafo, todas las aristas que inciden en el nodo selecciona-do. Siempre debe existir al menos una ya que en caso contrario el grafo deentrada no era euleriano. Cuando solo exista una arista esta sera selecciona-da sin realizar ningun tipo de test. En caso de que mas de una arista incidaen el nodo, estas son sometidas a un examen que comprueba si alguna deellas es arista de corte. Para ello se hace una copia del grafo actual, se lequita la arista que estamos considerando y en caso de que el nuevo grafotenga el mismo numero de componentes conexas que el anterior la arista noes de corte; en el supuesto de que la cardinalidad de componentes conexassea mayor en el nuevo grafo la arista es de corte. Los tests terminan tantocuando se encuentra una arista que no es de corte como cuando solo quedauna arista.

CarteroChino El algoritmo CarteroChino se ejecuta sobre una instanciade Grafo, requiriendo la ejecucion de un algoritmo de Fleury y en algunoscasos de un algoritmo Edmonds y la utilizacion del metodo Dijkstra, im-plementado en la clase Grafo. El diseno de la aplicacion permite que losalgoritmos anidados puedan ejecutarse por pasos cuando el algoritmo prin-cipal se esta ejecutando por pasos. Los estados de ejecucion por los quepasa un CarteroChino se muestran en la tabla 2.

Los metodos mas complejos de la clase CarteroChino se basan en lautilizacion del metodo de Dijkstra (en la clase Grafo). El etiquetado de lasaristas mediante el algoritmo de Dijkstra consiste en aplicar sobre el grafooriginal el algoritmo de Dijkstra a los nodos de grado impar hallados conanterioridad. Por su parte la operacion de replica de un camino P se basatambien en el mencionado algoritmo; en este caso recibe la informacion delos dos nodos que se encuentran en los extremos del camino P y se calculael resultado de Dijkstra entre ambos nodos. Para conocer el camino desde elnodo final al nodo inicio se emplea la informacion del campo predecesor, deesta forma se conocen las aristas a replicar. Para esto solo hay que aumentaren uno su multiplicidad.

La fase mas compleja de estos dos metodos es la conversion de ındicesentre el grafo de trabajo G y el grafo de Edmonds G′. Esta conversionse realiza a traves de la informacion contenida en el vector de nodos degrado impar. Para mostrar de forma clara esta conversion consideramos elsiguiente ejemplo.

23

Page 24: Cartero Chino

ESTADO DESCRIPCION0 Se comprueba que el grafo es conexo, en caso afirmativo

se pasa al estado 1. En el caso contrario se informa deque el grafo no es conexo y se termina el algoritmo.

1 Se genera el vector que contiene ındices a todos los nodosde grado impar del grafo. Una vez construido el vectorse decide el siguiente estado en funcion del tamano delmencionado vector. Si el tamano es mayor de dos se pasaal estado 2, si son exactamente dos los nodos que formanel vector, el estado siguiente es el 7. En caso de que elvector se encuentre vacıo se pasa al estado 8.

2 Se construye un grafo de Edmonds completo donde losnodos son los que formaban el vector del estado anterior.El siguiente estado es el 3.

3 Los pesos de las aristas del grafo de Edmonds se evaluanutilizando el algoritmo de Dijkstra. Se pasa al estado 4.

4 Se ejecuta el algoritmo de Edmonds. El control de estadospasa a este algoritmo. Una vez terminado el algoritmo deEdmonds se crea un vector que contendra las aristas delacoplamiento y se pasa al estado 5.

5 Si el vector de aristas esta vacıo se pasa al estado 8. Enotro caso se toma una de las aristas del vector y se pasaal estado 6.

6 Se busca mediante Dijkstra en G el camino de menor pesoentre los vertices en los que incide la arista seleccionada.Dicha arista se elimina del vector. Se replica cada una delas aristas que forman el camino encontrado. Se vuelve alestado 5.

7 Repetimos las aristas que constituyen el camino de mıni-mo peso entre los dos unicos nodos de grado impar delgrafo. Se pasa al estado 8.

8 Se ejecuta el algoritmo de Fleury, en el mismo modo quese esta ejecutando el algoritmo del Cartero Chino. Se pasaal estado 9.

9 Para finalizar se escribe el resultado del algoritmo y seindica que este ha terminado.

Cuadro 2: Estados de ejecucion del cartero chino

24

Page 25: Cartero Chino

Figura 15: Grafo G

En G hay cuatro nodos de grado impar, de forma que el vector Nodosy el vector Nodos de grado impar tienen los valores:

Nodos (v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12)

Nodos de grado impar (v3, v9, v11, v12)

De este grafo G, tras pasar por los estados 2 y 3, se deriva el siguientegrafo G′:

Figura 16: Grafo G′

Cuando se calcula el acoplamiento perfecto de peso mınimo sobre elgrafo G′, el resultado es (v′3, v

′9), (v′11, v

′12). La conversion de los vertices de

la arista (v′3, v′9) en G′ a vertices en G para la ejecucion del replicado de

caminos entre v3 y v9 resulta bastante intuitiva.El nodo de Edmonds v′3 ocupa la posicion cero de su vector de nodos,

esto nos lleva a comprobar el valor del vector de nodos de grado impar

25

Page 26: Cartero Chino

en identica posicion. El valor es 3. Esto nos lleva hasta la posicion tresde G.nodos, donde efectivamente se encuentra v′3. Haciendo esta sencillaconversion en el caso de v′9, v′11 y v′12 se alcanza tambien respectivamentelos nodos v9, v11, v12. Ası pues, para crear un grafo euleriano a partir deG, se replican los caminos mas cortos entre v3 yv9, y entre v11 y v12. Lasolucion se obtendra aplicando Fleury a este nuevo grafo.

3.3. Clases interfaz

El ultimo grupo de clases son las de interfaz. Estas son las que relacionanlos grafos con los algoritmos que se van a aplicar y a su vez establecen lacomunicacion con el usuario. En la figura 17 podemos analizar el diagramacorrespondiente.

El lenguaje Java nos ofrece una gran gama de elementos visuales estandarpara disenar la interfaz de la aplicacion, por ello en esta parte del disenonos acercamos un poco mas a la codificacion en un lenguaje concreto.

PanelGrafos El panel de grafos es el JPanel del que heredan todos aque-llos paneles que contienen y representan de forma grafica los grafos. Estospaneles son comparables a pizarras en las que el usuario ve dibujado elgrafo correspondiente. Incluye algunos metodos destinados al calculo dedistancias que resultan utiles a la hora de mover nodos, colocar nuevas es-tructuras o seleccionar algunas de las que ya existen. Todos estos metodosno son utilizados directamente en esta clase, pero dado su caracter generi-co se han colocado en la clase superior de la jerarquıa a fin de que enfuturas ampliaciones estos metodos se encuentren ya disponibles para otrassubclases.

En cuanto a la representacion de los grafos esta debe ser capaz de apor-tar al usuario la informacion deseada. Tal y como se puede apreciar en eldiagrama de clases estructurales cada elemento tiene su propio metodo dedibujo. Desde esta clase se hara la llamada al metodo pintarGrafo() que enfuncion del tipo de grafo contenido aplicara el metodo de representaciongrafica oportuno.

PanelGrafosDibujo Estos paneles sirven a la aplicacion de introducirnuevos grafos. El usuario dibuja sobre el panel el grafo del problema quedesea resolver. Para ello el usuario tiene dos controles, por un lado el controlde operacion, que le permite elegir entre nodos y aristas, y por otro elpuntero del raton. La forma de dibujar un grafo es intuitiva: se selecciona

26

Page 27: Cartero Chino

Figura 17: Diagrama de clases de interfaz

27

Page 28: Cartero Chino

en primer lugar que es lo que queremos dibujar (nodos o aristas). En elcaso de los nodos, bastara con un clic del raton por nodo. En cuanto ala representacion de una arista existen dos formas de hacerlo, la primeraconsiste en pinchar una vez en cada uno de los nodos que conformaran losextremos de las aristas, la segunda se realiza colocando el puntero sobreel nodo inicial y manteniendo el boton del raton presionado hasta soltarlosobre el nodo final de la arista, para que ası queden unidos. Se permitetambien desde este panel el borrado de aristas y nodos dibujados, el cambiode nombre de los nodos y el cambio de peso de las aristas. En este caso seutilizara el boton derecho del raton.

Los diagramas 18 y 19 muestran las fases por las que se pasa en la cons-truccion de un grafo. Presentamos en primer lugar el diagrama de transicionde estados del campo operacion.

Figura 18: DTE de la clase PanelGrafosDibujo

En la figura 19 podemos ver la estructura de control de flujo que sigueel panel de dibujo para conocer la accion que debe realizar en funcion de laoperacion actual y las decisiones del usuario. Este control de flujo, que enparte se ha detallado con anterioridad, se basa totalmente en la experienciay en las reacciones comunes de los usuarios de herramientas de dibujo.

28

Page 29: Cartero Chino

Figura 19: Diagrama de flujo para un clic de raton sobre el PanelGrafos-Dibujo

DialogoDibujoGrafos Es aquel desde el que se da soporte a las tareasde dibujo antes mencionadas, ya que dentro de este dialogo se encuentra unpanel de dibujo de grafos. El campo operaciones del panel sera controladoa traves de una botonera. Desde este dialogo tambien es posible cargargrafos completos directamente sobre el panel, ejecutando la accion DibujarK Grafo, eliminar todo el dibujo realizado con un solo clic de raton, over impreso el codigo Mathematica correspondiente al grafo que en esemomento esta representado graficamente en el panel. La accion de guardarel grafo se realizara tal y como se ha expuesto en el analisis mediante lacreacion de un archivo XML. La sintaxis XML asociada a un grafo sera lasiguiente:

Objeto nodo:

<nodo>

<nombre> ”v”</nombre>

29

Page 30: Cartero Chino

<posicion> (1,1) </posicion>

<nodo>

Objeto arista:

<arista>

<nodo1> ”2”</nodo1>

<nodo2> ”4”</nodo2>

<arista>

Objeto grafo:

<grafo>

<nodos>

objetos Nodo del grafo en XML

</nodos>

<aristas>

objetos Arista del grafo en XML

</aristas>

</grafo>

Figura 20: Dialogo de dibujo

30

Page 31: Cartero Chino

El usuario de la aplicacion puede ver muy facilitada su labor al abrirel dialogo de matriz de adyacencia. Al igual que el resto de ventanas ydialogos, el dibujo de grafos ofrece la posibilidad de consultar la ayudasobre su correcto modo de utilizacion.

DialogoMatrizAdyacencia Este dialogo es bastante austero, presentala matriz de adyacencia del grafo que se encontraba representado grafi-camente en el panel del DialogoDibujoGrafos en el momento de abrirlo.Ademas anade una consulta de ayuda que puede dar al usuario una guıasobre como utilizar la matriz de pesos que se le presenta. Al cerrarse, todoslos cambios que se han realizado sobre la matriz deben trasladarse al grafoque se esta construyendo.

Acercandonos a la fase de codificacion comentar que la matriz de adya-cencia se presentara en un formato similar a las hojas de calculo de Excel.Para ello se apoya en la clase JTable de JAVA, aunque realizando sobre estavarias modificaciones de comportamiento y apariencia. Las modificacionesde apariencia estan destinadas al uso de la matriz de forma comoda. Laprincipal modificacion es la indexacion por filas y columnas (en JAVA solotienen cabecera las columnas).

Al ser un grafo simple la matriz debe tener su diagonal principal a cero,garantizando que no se creen aristas que unan un nodo consigo mismo. Estose consigue deshabilitando dichas celdas.

Por otro lado el ser un grafo no dirigido implica que la matriz es simetri-ca, y esta simetrıa debe ser garantizada automaticamente. De esta formael usuario que quiera introducir una arista (vi, vj) con peso 4 solamentetendra que modificar la posicion (i, j) de la matriz, o bien la posicion (j, i).

Figura 21: Dialogo de la matriz de adyacencia

Las modificaciones sobre la matriz de pesos no siempre suponen lacreacion de nuevas aristas. Es posible, con la misma simplicidad, cambiarel peso de una arista ya existente. Y lo mismo es aplicable a la eliminacion

31

Page 32: Cartero Chino

de aristas, accion que se realiza asignando cero al peso de dicha arista.Las modificaciones a nivel de la matriz de adyacencia se aplican al grafo alcerrar el dialogo.

VentanaEdmonds2 Las ventanas de Edmonds son el escenario sobre elcual se aplica el algoritmo Edmonds a un objeto de la clase GrafoEdmonds.En ella el usuario dispone de controles a traves de los cuales puede manejarel grafo de entrada y el algoritmo. Sobre el grafo de entrada se ofrece laposibilidad de abrirlo desde un archivo en el que se haya guardado un grafoen formato XML, o bien dibujarlo, permitiendo combinar ambas opciones.

En cuanto al control del algoritmo se deja a eleccion del usuario elmodo de ejecucion y el acoplamiento que espera conseguir (maximo o mıni-mo peso). Cuando un usuario ha iniciado la ejecucion por pasos puede encualquier momento pasar directamente al resultado del algoritmo.

Los resultados en modo texto se pueden seleccionar pero no son modi-ficables. Si desea conservar el resultado final este texto puede copiarse encualquier procesador de textos.

Figura 22: Ventana del algoritmo de Edmonds

32

Page 33: Cartero Chino

VentanaCarteroChino De comportamiento general muy parecido al dela clase anterior, la ventana de cartero chino ejecuta el algoritmo carterochino sobre un grafo de entrada. Las operaciones ofrecidas por esta ventanason semanticamente las mismas que las de la clase VentanaEdmonds.

Sintacticamente este tipo de ventana varia en base al algoritmo que seejecuta. El algoritmo de CarteroChino ejecuta anidados los algoritmos deFleury y Edmonds.

El algoritmo del cartero chino ofrece al finalizar varios tipos de infor-macion. En primer lugar muestra un grafo euleriano obtenido, a partir delgrafo de trabajo que se encontraba en el panel, por la repeticion de loscaminos mınimos. Por otro lado, en otro panel, se muestra el ciclo eule-riano de forma lineal, y por ultimo proporciona tambien la informaciontextual correspondiente.

Figura 23: Ventana del algoritmo del cartero chino

4. Codificacion

La codificacion en Java del presente algoritmo esta guiada por el disenorealizado anteriormente. Hay varios aspectos a destacar de la implementacion.

33

Page 34: Cartero Chino

El ciclo de vida elegido fue el llamado clasico con prototipazo. Los prototi-pos desarrollados se corresponden con las siguientes fases, desarrolladas deforma incremental.

- Prototipo de aplicacion que permite el dibujado de grafo

- Prototipo que ejecuta el algoritmo de Edmonds

- Prototipo que permite ejecucion por pasos

- Prototipo que maneja entrada salida a traves de XML

- Prototipo que resuelve problemas de cartero chino

- Producto final

A raız de la necesidad de crear una aplicacion conjunta se ha creado ununico proyecto Java, lo que representa un unico archivo .jar, con punto deentrada en la clase Main. Esta clase Main recibe un atributo que indica laparte del proyecto que el usuario esta interesado en aplicar. Ademas en laclase Main se adapta el ”Look&feel”de la aplicacion al aspecto del sistemaoperativo de la maquina sobre la que se interpreta el proyecto.

public class Main {public Main() {

super();

}public static void main(String[] args) {

try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

} catch (Exception e) {JFrame.setDefaultLookAndFeelDecorated(true);

}if (args[0].equalsIgnoreCase(CarteroChino”))

new VentanaCarteroChino();if (args[0].equalsIgnoreCase(”Dibujo”))

newDialogDibujoGrafos();if (args[0].equalsIgnoreCase(.Edmonds2”))

new VentanaEdmonds2();

}}

34

Page 35: Cartero Chino

Siguiendo el principio de obtener una codificacion respetuosa con eldiseno se ha realizado una rigurosa organizacion de las clases en paquetes.Los cuatro paquetes definidos agrupan las clases de acuerdo a los diagramasde clase disenados. El paquete grafos contiene las clases de tipo estructural yuna clase utilizada para el mantenimiento de los resultados de la aplicacionde Dijkstra. El paquete algoritmos engloba las clases Edmonds, Fleury yCarteroChino. El cuarto es el interfaz. Este abarca todas las clases rela-cionadas con la interfaz grafica de usuario. Dentro de el se han creado otrosdos que contienen por un lado las clases relacionadas con el dialogo de ma-triz de adyacencia y por otro todas las imagenes usadas para los botonesde la aplicacion. La ultima agrupacion de clases es el paquete Util. Aquı secolocan las clases abstractas (clase Algoritmo), la clase Main, y una clasedenominada Util. En la clase Util se implementan los metodos que sonutilizados por mas de una clase. Es el caso de los metodos de lectura dearchivos con grafos y tambien la escritura del codigo XML del grafo en unarchivo.

5. Lıneas de trabajo futuras

Una de los objetivos que se plantearon al desarrollar el presente disenofue crear un producto ampliable. La principal ventaja que plantea este en-foque continuista es que a partir de la base disenada en este proyecto sepuede aumentar la aplicacion tanto en cantidad como en calidad. En canti-dad puesto que la interfaz disenada es totalmente reutilizable para concep-tos como grafo dirigido o multigrafo. El diseno de clases para los menciona-dos tipos de grafo, junto con las clases ya disenadas, permitira codificarmas algoritmos ofreciendo nuevos productos. La calidad se puede aumen-tar mejorando caracterısticas como la integracion con otras herramientas,la fragmentacion del producto en capas, etc.

En relacion a posibles aplicaciones distintas de las ya conocidas pre-sentamos la posibilidad de aplicar el algoritmo de de Edmonds al estudiode fenomenos de campos tan alejados de los problemas de asignacion co-mo la meteorologıa o las resonancias magneticas a partir del analisis degradientes.

Vemos en primer lugar un ejemplo relativo a la metereologıa. En lasiguiente tabla se muestran los valores de presion atmosferica en milibares

35

Page 36: Cartero Chino

en diferentes puntos de una zona geografica rectangular.

920 920 920 920 920 921 921 918 917 914920 920 920 921 920 923 922 919 919 915920 920 921 921 922 923 924 924 924 924920 920 920 922 923 925 925 924 925 924920 921 924 924 926 926 928 928 930 931920 920 927 927 930 930 933 933 930 930914 914 919 919 919 924 929 929 929 929

En este sencillo experimento de presentacion se representa cada puntodonde se han realizado medidas como un vertice de un grafo. Cada verticeestara unido a los vertices que lo rodean (superior, inferior, laterales y di-agonales). Generamos ası un grafo rejilla.

Figura 24: Grafo de rejilla que se va a utilizar

Se pondera cada arista (u, v) con el valor absoluto de la diferencia depresion entre u y v, el valor del gradiente de presion. Si es nulo no segenera dicha arista. El algoritmo de Edmonds aplicado a este grafo generael acoplamiento representado en la figura 25.

El siguiente experimento consiste en completar el grafo con aristas fic-ticias de peso 0 y ejecutar Edmonds sobre este nuevo grafo. Se realizauna nueva prueba poniendo ponderando las aristas ficticias con uno. Sesigue aumentando el valor de las aristas ficticias hasta que no entre en elacoplamiento ninguna arista real. En cada iteracion de este proceso mar-camos los nodos que quedan saturados por aristas reales. Al final del pro-ceso se indica, como se puede ver en la figura 26, cual era el peso, paracada nodo, de las aristas ficticias en la primera iteracion en la que el nodoquedo insaturado al eliminar dichas aristas ficticias.

36

Page 37: Cartero Chino

Figura 25: Acoplamiento obtenido en el grafo anterior

Figura 26: Resultados de la experimentacion propuesta junto con elacoplamiento anterior

Dado que la magnitud estudiada es la presion atmosferica se interpretanlos resultados como la direccion del viento (indicado por el dibujo de lasaristas del acoplamiento) y la fuerza del mismo (indicada por el numeroen el nodo). Se observa que la interpretacion ciertamente no esta mal en-caminada. De hecho gran cantidad de aristas del acoplamiento coincidencompletamente con la direccion del viento (indicada mediante flechas), enespecial las aristas de mayor peso.

Para introducir ejemplos reales de magnitud importante y someterlosa estudio se requiere buscar formas de crear un grafo de gran tamano,ya que es impensable dibujar a mano, o escribir la matriz de un grafo,que represente 10000 puntos, algo que por ejemplo sucede al codificar unapequena imagen de 100x100 pıxeles.

37

Page 38: Cartero Chino

Gracias a la entrada / salida XML de la aplicacion se facilita en granmedida la comunicacion de grandes bloques de datos. Pongamos como ejem-plo una imagen medica de resonancia magnetica. Al digitalizar la imagense obtiene una matriz de pıxeles de un determinado brillo. Para convertirun grafo se creara un nodo por cada pıxel y un pıxel tendra arista con losvertices que lo rodean. La transformacion imagen (de NxN pixeles) ’ XMLse lleva a cabo de la siguiente manera:

Pixel en posicion(x, y) Brillo(x,y)=zBrillo(x,y+1)=zw

< Nodo >< Nombre > ”x.y” < /Nombre > < Arista >< Posicion > (x ∗ 10, y ∗ 10) < /Posicion > < Nodo1 > x ∗N + y < /Nodo1 >< /Nodo > < Nodo2 > x ∗N + (y + 1) < /Nodo2 >

< Peso > |z − w| < /Peso >< /Arista >

De esta forma una vez convertida la imagen en un grafo se podrıa aplicarEdmonds para hallar los gradientes y ası segmentar la imagen, permitiendodiferenciar distintos tipos de tejidos. Este tipo de proceso de imagen medicabasada en gradientes tambien podrıa por tanto ser una futura aplicacionde Edmonds.

Referencias

[1] CHRISTOFIDES, N. Graph theory. An algorithmic approach. Aca-demic Press, Inc, London, 1975.

[2] DEFEZ TORAN, J.L. Desarrollo de los algoritmos Edmonds 2 ycartero chino con fines academicos. Proyecto final de carrera, Facultadde Informatica, Universidad Politecnica de Valencia, 2005.

[3] . SUN MICROSYSTEMS. J avaTM 2 Platform Standard Edition 5.0.API Specification [en lınea] [ref. septiembre 2004 a septiembre 2005]Disponible en web: http://java.sun.com/j2se/1.5.0/docs/api/

[4] GARCIA MONZON, Jose Luıs. Proyecto del algoritmo de Fleury.Universidad Politecnica de Madrid. [en lınea] [ref. marzo de 2005]Disponible en web: http://www.dma.fi.upm.es/fleury/home.html

[5] GIMBERT, Joan. Los grafos como modelos matematicos: ejem-plos y aplicaciones. Universidad Autonoma de Guerrero. [en

38

Page 39: Cartero Chino

lınea] Editado en 1999 [ref. marzo de 2005] Disponible en web:http://web.udl.es/usuaris/p4088280/teaching/leccion mexico.pdf

[6] JORDAN LLUCH, Cristina, TORREGROSA SANCHEZ, Juan R.I ntroduccion a la Teorıa de Grafos y sus algoritmos. Ed. Reverte-SPUPV 1996. ISBN: 84-7721-438-7.

[7] MATHLAND. K onigsberg Bridges. [en lınea] [ref. marzo de 2005]Disponible en web:http://math.youngzones.org/Konigsberg.html

[8] SUN MICROSYSTEMS. J avaTM 2 Platform Standard Edition 5.0.API Specification [en lınea] [ref. septiembre 2004 a septiembre 2005]Disponible en web: http://java.sun.com/j2se/1.5.0/docs/api/

[9] SUN MICROSYSTEMS. The Java Tutorial. [descargable:http://java.sun.com/docs/index.html]

[10] THE GAP GROUP. K onigsberg. Univ. of St. Andrews. [en lınea][ref. marzo de 2005] Disponible en web: http://www-gap.dcs.st-and.ac.uk/ history/ Miscellaneous/Konigsberg.html/

39