Redes de Flujo: Acelerando Ford Fulkerson, Programación de Vuelos, Segmentación de Imágenes, Eliminación en Torneo Flashcards
Acelerando Ford Fulkerson: Explique el problema
Sea G
un grafo, podemos resolver el problema del flujo máximo.
Pero la selección de camino s-t malos puede relentizar mucho la finalización del algoritmo. Se busca entonces la forma de mejorarlo.
Acelerando Ford Fulkerson: Explique la selección eficiente del camino s-t
Lo mejor sería intentar elegir aquellos caminos con mayor cuellos de botella. Pero mantener esta información actualizada puede ser costoso. Por lo que tenemos varios métodos para intentar realizar selecciones convenientes.
Acelerando Ford Fulkerson: Explique el método de parámetro escalado Δ (Delta)
Se utilizará un parámetro Δ y sólo se buscarán aquellos P caminos s-t con un cuello de botella mayor a Δ.
Inicialmente, Δ tomará la potencia de 2 más grande posible, que no sea mayor a la suma de las capacidades de los ejes que salen de s
.
Luego repetimos hasta hallar el flujo máximo:
- Para eso, el grafo residual se arma únicamente con aquellos ejes que superen a Δ.
- Una vez que no existen más caminos, se reduce Δ a la mitad.
Acelerando Ford Fulkerson: Explique el pseudocódigo del método de parámetro escalado Δ (Delta) y su complejidad.
Calcular f(e) = 0 para e en G. Definir delta como la potencia de 2 más grande, que no sea mayor a la capacidad máxima que sale de s. Mientras delta >= 1: Mientras exista un camino s-t en el grafo Gf(delta): Sea P camino simple en Gf(delta): f' = aumento(f,P) Actualizar f para ser f' y actualizar Gf(delta) delta = delta / 2 Retornar f
Complejidad:
- El número de iteraciones está definido por delta, y limitado por la capacidad de los ejes que salen de s :
1 + log2 C
- En cada iteración hay a lo sumo
2 * |E|
caminos de aumento.
=> El tiempo de ejecución es O(|E|^2 * log2 C)
. Cuando C es muy grande, es mejor que O( |E| * C)
Acelerando Ford Fulkerson: Explique el algoritmo de Edmonds-Karp
El algoritmo de Edmonds-Karp es Ford-Fulkerson pero con un único cambio: calcula el camino de aumento de longitud mínima.
Su complejidad es fuertemente polinómica (a diferencia de Ford-Fulkerson, que es pseudopolinómica ya que depende de las capacidades).
Acelerando Ford Fulkerson: Explique el pseudocódigo del algoritmo de Edmonds-Karp y su complejidad.
f(e) = 0 para todo e en G Mientras haya un camino s-t en Gf: Sea P un camino s-t simple en Gf, de Longitud Mínima (obtenido usando BFS) f' = aumento(f,P) Actualizar f para ser f' Actualizar Gf para ser Gf' Retornar f
- Cuanto mayor longitud tiene el camino de aumento, más probable que el cuello de botella encontrado sea menor.
- Progresivamente, se van consumiento los caminos de menor longitud.
Complejidad:
- Cada iteracion Ford-Fulkerson se puede implementar en O(E).
- La cantidad de iteraciones está dada por la cantidad de caminos de aumento y es O(VE)
=> La complejidad temporal es O(E^2 * V)
Programación de Vuelos: Explique el problema
Tenemos una flota de k
aviones y un conjunto de m
rutas de vuelo rentables. Cada ruta de vuelo está definida por:
- Un aeropuerto de inicio
- Un aeropuerto de finalización
- Una hora de partida
- Una hora de llegada
Queremos determinar si podemos cubrir las rutas utilizando como mucho nuestros k
aviones.
Programación de Vuelos: Explique el concepto de Compatibilidad de Rutas
La ruta de vuelo j
es alcanzable desde la ruta de vuelo i
si la ciudad de llegada de i
es la ciudad de partida de j
, y la hora de llegade de i
da tiempo de preparación suficiente a la hora de partida de j
.
También si el tiempo de vuelo y preparación desde la ciudad de llegada i
(a partir de su hora de llegada) es suficiente para estar en la ciudad de partida de j
a la hora de salida programada.
Programación de Vuelos: Explique la construcción de la solución.
- Podemos representar a cada vuelo como:
- 1 nodo de ciudad/hora partida
- 1 nodo de ciudad/hora llegada
- 1 eje dirigido de vuelo. - Podemos representr a la compatibilidad de vuelos como:
- 1 eje entre el nodo de llegada del vueloi
y la ciudad de partida del vueloj
.
Programación de Vuelos: Explique la transformación en un problema de flujos.
- Vamos a agregar un nodo
s
y generamos un eje entres
y cada nodo de partida de un vuelo (cada vuelo puede ser el inicio de un recorrido de un avión). - Vamos a agregar un nodo
t
y generamos un eje entre cada nodo de llegada de un vuelo yt
(cada vuelo puede ser el final de un recorrido de un avión).
Programación de Vuelos: Explique la construcción de la solución. capacidades y límites
Siendo i
un nodo de inicio y f
un nodo de fin de vuelo:
- Queremos que cada vuelo se ejecute 1 vez: la capacidad y el límite inferior del eje del vuelo va a ser 1.
- Un avión podría partir o no de una determinada ruta: Cada eje s-i va a tener capacidad 1 y límite 0
- Un avión puede terminar o no en una determinada ruta: Cada eje f-t va a tener capacidad 1 y límite 0.
- Un avión también puede finalizar vuelo y comenzar otor: Los vielos compatibles van a tener ejes entre sí de capadidad 1 y límite 0.
La capacidad es el “máximo disponible” y el límite el “mínimo necesario”.
Programación de Vuelos: Explique el uso de la demanda.
El nodo s
produce k
unidades, mientras que el nodo t
las consume.
El resto de los nodos no produce ni consume.
Programación de Vuelos: ¿Para qué se agrega un nodo s-t?
Se agrega un nodo s-t con capacidad k
y límite inferior 0 para determinar cuántos aviones no son necesarios.
Programación de Vuelos: Indique los pasos para la resolución.
- Construir con los
n
vuelos la red de flujo (con demandas y límite inferior). - Reducirlo a un problema con demanda
- Reducirlo a un problema de flujo máximo
- Resolverlo mediante Ford-Fulkerson
- Verificar si los flujos resultantes satisfacen las restricciones
Arme el grafo para la siguiente programación de vuelos:
A: A1 -> A2
B: B1 -> B2
C: C1 -> C2
A es compatible con B