sábado, 9 de noviembre de 2019

Diagramas de Voronoi - Aplicaciones


El diagrama de Voronoi de un conjunto de puntos en el plano es la división de dicho plano en regiones, de tal forma, que a cada punto le asigna una región del plano formada por los puntos que son más cercanos a él que a ninguno de los otros objetos. Dicho de otra manera, lo que hace dicho diagrama es dividir el plano en tantas regiones como puntos u tengamos de tal forma que a cada punto le asignemos la región formada por todo lo que está más cerca de él que de ningún otro.


Piensen por ejemplo en el plano de una ciudad y dibujen sobre él un punto por cada una de las farmacias que hay en la misma. En el caso más simple, si solo hubiese una farmacia en la ciudad la región de Voronoi de dicha farmacia sería toda la ciudad, porque todos están más cerca de dicha farmacia que de ninguna otra, puesto que no hay más. Fácil, ¿verdad?
Si hubiese dos farmacias, A y B, la ciudad quedaría dividida en dos, los que están más cerca de la farmacia A que de la farmacia B (llamaremos a esta zona Vor(A)) y los que son más cercanos a la B que la A (a esta la llamamos Vor(B)). Bueno, y los que están a la misma distancia de los 2. En honor a Euclides y aquello de que el camino más corto entre dos puntos es la línea recta, mediremos la distancia en la ciudad como la longitud del segmento que une a dos puntos. Así, los puntos que están a la misma distancia de ambas farmacias son los que están sobre una recta: la mediatriz entre los dos puntos que definen las farmacias en el plano y que no es más que la recta perpendicular al segmento que une A y B por el punto medio de este. Lo hemos dibujado en la siguiente figura.


En el caso de 3 farmacias, A, B y C, razonando de forma similar y teniendo en cuenta que las mediatrices son la frontera que delimitan las regiones de influencia 2 a 2 como acabamos de ver, nos quedaría una división de la ciudad en tres regiones como las que se muestran en la figura siguiente; cada una de ellas representa la región de Voronoi de cada farmacia, es decir, la zona de la ciudad que le ‘corresponde’ por ser la farmacia más cercana.


En general, si tenemos por ejemplo 8 farmacias (8 puntos en el plano) el diagrama de Voronoi que asigna a cada uno de ellos la región de puntos más cercanos a él que a ningún otro tendría un aspecto como el de la figura siguiente:


Y sí, esta construcción la hemos hecho echando de mano de la geometría para calcular las mediatrices que separan regiones de Voronoi y podría parecer, en principio, ‘sacado’ de la mente humana porque sí, pero el hecho es que se puede encontrar en infinidad de ejemplos naturales o se pueden provocar con experimentos caseros muy sencillos.
Si ponen caramelos de colores (o chocolatinas en forma de pastillas de colores) en un plato y vierten agua sobre ellos, podrán observar cómo poco a poco se van delimitando las regiones de Voronoi de cada uno de los caramelos (tiñéndose del color correspondiente) hasta que se tocan en la frontera (como se muestra en la foto siguiente) dibujando el diagrama de Voronoi completo. Después, eso sí, se estropea porque se siguen mezclando.


O bien, si se ponen de acuerdo con varios amigos y crean varias pompas de jabón que se van depositando sobre un cristal horizontal, y han tenido cuidado de soplar al mismo ritmo, podrán observar que sobre la superficie en cuestión ‘se dibuja’ una estructura similar a un diagrama de Voronoi en el plano, correspondiente a las regiones influencia de cada pompa de jabón.


Basándose en esta idea Luis M. Escudero y algunos colaboradores han ideado un método que puede servir para revolucionar el diagnóstico automatizado de ciertas formaciones tumorales. Lo que han hecho (en líneas generales), el Dr. Escudero y sus colegas, ha sido es crear un modelo de tejido epitelial (y muscular) ideal mediante el siguiente procedimiento computacional:
(1) se genera un conjunto de puntos al azar;
(2) a dichos puntos se les calcula su diagrama de Voronoi;
(3) se calcula el centro de masas de cada una de las regiones resultantes(esto nos proporciona un nuevo conjunto de puntos);
(4) se calcula el diagrama de Voronoi del nuevo conjunto.
Este proceso se repite hasta tres veces más. El aspecto que tiene este quinto diagrama de Voronoi calculado es el modelo de tejido ideal calculado por el Dr. Escudero (puesto que todas las células son similares, al expandirse, sus fronteras tienden a formar un diagrama de Voronoi). A partir de aquí estos investigadores miden cómo de parecido es el tejido de una muestra real del tejido modelo, si se parecen según ciertos parámetros (geométricos y topológicos), el tejido real está sano; en otro caso se concluye que algunas células no presentan las mismas características físicas que sus vecinas, lo que puede indicar el comienzo de un proceso tumoral. ¿No les parece sorprendente y maravilloso?

El mapa del cólera de John Snow

Convencidos a estas alturas de que el diagrama de Voronoi es una estructura inherente al concepto de proximidad y/o influencia en la naturaleza déjenme que les cuente una de las primeras aplicaciones que del mismo se conocen: el mapa del cólera de John Snow.
A mediados del siglo XIX un brote de cólera azotó la ciudad de Londres; por aquella época no se conocía con exactitud la etiología ni el método de trasmisión de la citada enfermedad, y se debatían entre dos posibilidades: el contagio por contacto con el enfermo, sus ropas y/o pertenencias; y la teoría miasmática que atribuían la trasmisión a condiciones atmosféricas, como los vientos. He aquí que el doctor Snow observó que la distribución de las muertes por cólera seguía un cierto patrón geométrico (o geográfico) muy definido, se concentraban principalmente en una zona de la ciudad. Más aún, las muertes que se producían fuera de esa zona principal eran de personas que habían estado en la misma por alguna razón. John Snow empezó a sospechar que tenía que ver con el agua, más concretamente, con una fuente situada en Broad Street. Para ello, el doctor Snow dibujó sobre el plano de Londres las regiones de influencia de cada una de las fuentes de la ciudad, entendiendo que los habitantes de la misma optarían por buscar agua en la fuente más cercana para ellos (recordemos que no existía el agua corriente). La inmensa mayoría de las muertes se quedaban en la región de influencia de la fuente de Broad Street. Con ello, el doctor Snow descubrió que la causa de la enfermedad fue la contaminación por heces fecales del agua de la citada fuente. Y todo esto antes de que naciera Voronoi.


Desde la época de Snow hasta nuestros días los diagramas de Voronoi han tenido y tienen infinidad de aplicaciones debido, sobre todo, a su estrecha relación con el concepto de regiones de influencia o dominio de los puntos que los generan. Por ejemplo, en el fútbol.
Si pensamos en los jugadores sobre el terreno de juego como puntos sobre un plano, podemos asignarle a cada uno de ellos su región de Voronoi que estará formada por los puntos del terreno de juego que están más cerca de cada jugador que del resto. Evidentemente, como los jugadores no están quietos, en general, este diagrama irá modificándose con el tiempo pero nos puede decir, en cada instante, qué equipo está mejor posicionado en el campo.
Si por ejemplo tenemos dos equipos (equipo rojo y equipo azul) que ocupan esta posición:


La ventaja posicional de un equipo sobre el otro puede que a simple vista no esté muy clara, pero si dibujamos el diagrama de Voronoi de los jugadores y coloreamos con dos colores las regiones de influencia asociadas a los jugadores de cada uno de los equipos, obtenemos:


Se puede observar que el equipo azul no sólo ocupa mayor región del campo, sino que sus regiones están todas conectadas, con lo cual se favorecen los pases entre los distintos jugadores de dicho equipo (cosa que no ocurre con el rojo).
Como hemos dicho, este diagrama irá variando cuando se muevan los jugadores pero existen multitud de herramientas que permiten calcular estos diagramas en movimiento. Lo único que necesitamos es un entrenador que sepa cómo aplicarlo.
En este sentido, en el de regiones de influencia o dominio se pueden encontrar infinidad de aplicaciones como las del fútbol, las de la farmacias, etc. Pero otro tipo de aplicaciones que igual no se nos ocurren en primera instancia tiene que ver con las fronteras de las regiones. Imaginen que en lugar de querer encontrar la farmacia más cercana a ustedes quieren cruzar la ciudad pasando lo más lejos posible de cualquier farmacia. Igual no lo ven con farmacias pero pueden pensar en pastelerías y/o heladerías si están en eso que llaman la operación bikini. En ese caso, la ruta a seguir nos la dan las líneas de las fronteras del diagrama de Voronoi. Caminando sobre dichas líneas estaremos siempre lo más alejados posible de las dos pastelerías que comparten esa línea en su frontera de Voronoi. Esto se utiliza para, por ejemplo, evitar colisiones de barcos al atravesar zonas escarpadas de la costa.


O, quién sabe, para atacar Pearl Harbor sin que te detecten las restantes bases estadounidenses.

Los puntos de esta imagen representan las bases de EEUU en el Pacífico en 1941. El punto rojo es Pearl Harbor y los amarillos Aleutianas, Midway y Wake. Las líneas rojas corresponden con el diagrama de Voronoi de las 4 bases, las líneas blancas señalan la ruta seguida por la flota japonesa en el ataque
Los puntos de esta imagen representan las bases de EEUU en el Pacífico en 1941. El punto rojo es Pearl Harbor y los amarillos Aleutianas, Midway y Wake. Las líneas rojas corresponden con el diagrama de Voronoi de las 4 bases, las líneas blancas señalan la ruta seguida por la flota japonesa en el ataque



sábado, 2 de noviembre de 2019

Algoritmo Ford Fulkerson

Lester Randolph Ford Jr. al continuar los pasos de su padre Ford Sr. también hizo una enorme contribución al campo de las matemáticas. Su trabajo con Delbert Ray Fulkerson (14 agosto de 1924 - 10 Enero de 1976) ha puesto la base de casi toda la investigación en flujos de grafos. El artículo de Ford y de Fulkerson (1956) con el problema de flujo máximo estableció el famoso teorema del flujo máximo - mínimo corte.


Se puede considerar un grafo como una red de flujo. Donde un nodo fuente produce o introduce en la red cierta cantidad de algún tipo de material, y un nodo sumidero lo consume. Cada arco, por tanto, puede considerarse como un conducto que tiene cierta capacidad de flujo. De igual modo que en redes eléctricas (Leyes de Kirchhoff), la suma de flujos entrantes a un nodo, debe ser igual a la suma de los salientes (principio de conservación de energía), excepto para el nodo fuente y el nodo sumidero.
Por tanto, el problema de flujo máximo se enuncia como: ¿cuál es la tasa a la cual se puede transportar el material desde el nodo fuente al nodo sumidero, sin violar las restricciones de capacidad?. Este algoritmo se puede usar para resolver modelos de: transporte de mercancías (logística de aprovisionamiento y distribución), flujo de gases y líquidos por tuberías, componentes o piezas en líneas de montaje, corriente en redes eléctricas, paquetes de información en redes de comunicaciones, tráfico ferroviario, sistema de regadíos, etc.
Una red de flujo es un grafo dirigido G=(V,E) donde cada arco (u,v) perteneciente a E el número de arcos del grafo; tiene una capacidad no negativa. Se distinguen dos nodos: la fuente o nodo s, y el sumidero o nodo t. Si existen múltiples fuentes y sumideros, el problema se puede simplificar añadiendo una fuente común y un sumidero común. Este algoritmo depende de tres conceptos principales:
  • Un camino de aumento, es una trayectoria desde el nodo fuente s al nodo sumidero t que puede conducir más flujo.
  • La capacidad residual es la capacidad adicional de flujo que un arco puede llevar c_f (u,v) = c(u,v) - f(u,v)
  • Teorema de Ford-Fulkerson (1962): En cualquier red, el flujo máximo que fluye de la fuente al destino es igual a la capacidad del corte mínimo que separa a la fuente del destino.
El algoritmo es iterativo, se comienza con f(u,v)=0 para cada par de nodos y en cada iteración se incrementa el valor del flujo buscando un camino de aumento. El proceso se repite hasta no encontrar un camino de aumento. A continuación se muestra el pseudocódigo del algoritmo:
Ford-Fulkerson (G,s,t)

para cada arco (u,v) de E

f(u,v) = 0
f(v,u) = 0

mientras exista un camino p desde s a t en la red residual G_f

c_f (p) = min {c_f (u,v) : (u,v) está sobre p}

para cada arco (u,v) en p

f(u,v) = f(u,v) + c_f (p)
f(u,v) = -f(u,v)
Una variación del algoritmo de Ford-Fulkerson es el algoritmo de Edmonds-Karp (J. Edmonds; R.M. Karp - 1972). En éste, el 'camino de aumento' es elegido usando una búsqueda por niveles o en anchura (breadth-first search). El algoritmo de Edmonds-Karp requiere O(VE^2) tiempo de computación, donde V es el número de nodos o vértices, y E el número de arcos del grafo.

Github

Ejemplo de Flujo máximo

Para el presente ejemplo, construiremos una grafo con las siguientes matrices de datos para los valores mínimo, máximo y coste de los arcos:
Matriz de mínimo:
N1\N2 s 1 2 3 4 t
s  12  11  
1   12 0  
2    0  19
3  0   11 
4   7   4
t      

Matriz de máximo:
N1\N2 s 1 2 3 4 t
s  16  13  
1   12 10  
2    9  20
3  4   14 
4   7   4
t      

Matriz de coste: 
N1\N2 s 1 2 3 4 t
s  0  0  
1   0 0  
2    0  0
3  0   0 
4   0   0
t      
El grafo dibujado tendría el siguiente aspecto.ejemplo de flujo máximo
Nótese que en los arcos se han representado los valores de mínimo, máximo y coste respectivamente. Antes de iniciar el algoritmo se deben seleccionar un nodo origen y un nodo destino, en este ejemplo se tomará el nodo s y el nodo t respectivamente.ejemplo de flujo máximo
Tras ejecutar el algoritmo se muestra la siguiente solución:
Flujos calculados desde el nodo origen (s) hasta el nodo destino (t)
Flujo máximo = 23

Matriz de Arcos con flujo máximo:

N1\N2 s 1 2 3 4 t 
s 0 12 0 11 0 0 
1 -12 0 12 0 0 0 
2 0 -12 0 0 -7 19 
3 -11 0 0 0 11 0 
4 0 0 7 -11 0 4 
t 0 0 -19 0 -4 0 

Matriz de Capacidades Residuales:

N1\N2 s 1 2 3 4 t 
s 0 4 0 2 0 0 
1 12 0 0 10 0 0 
2 0 12 0 9 7 1 
3 11 4 0 0 3 0 
4 0 0 0 11 0 0 
t 0 0 19 0 4 0 
Como se puede observar, el flujo máximo es de 23 unidades. A continuación Grafos subrayará los arcos de la solución, diferenciando el color ligeramente para distinguir los arcos saturados de aquellos que tienen capacidad residual.ejemplo de flujo máximo
Si observa la figura verá cómo todo el flujo originario del nodo s se distribuye por los arcos de la red, hasta llegar al nodo destino t. Nótese además, que en este algoritmo no se han tenido en cuenta los costes asociados al transporte o flujo, simplemente las conexiones y la restricción/capacidad de flujo de los arcos.