Universidad de Chile Facultad de Ciencias Fı́sicas y Matemáticas Departamento de Ingenierı́a Matemática MA47A: Optimización Combinatorial Profesor: Roberto Cominetti Auxiliares: Raúl ALiaga Dı́az y Cristóbal Guzmán P. Pauta Control 2 año 2007 P1 (a) Sol: P Probemos previamente que dada cualquier configuración x = (xa )a∈A , v∈V div(x)i = 0 Por definición: X X ∀v ∈ V div(x)i = xa − xa ia =v ja =v Es fácil ver entonces, que al sumar sobre todos los nodos, por cada término que se suma, hay otro que se resta. En efecto: P v∈V div(x)i nP o P P = v∈V ia =v xa − ja =v xa P P P P = x − v∈V ja =v xa Pv∈V ia =v Pa = a∈A xa − a∈A xa = 0 Probemos ahora: [V + = ∅] ⇔ [V − = ∅] Solo haremos ⇒ (el otro es análogo) V + = ∅ ⇒ ∀i ∈ V div(x)i ≤ 0 P Pero por lo visto antes: v∈V div(x)i = 0. Lo que implica: ∀i ∈ V div(x)i = 0 ⇒ V − = ∅ Ya probada la primera equivalencia, probemos [V + = ∅] ⇔ [x es FCM] ⇐ x es FCM ⇒ x es flujo factible ⇒ ∀v ∈ V div(x)i = 0 Con lo cual, en particular, V + = ∅. ⇒ Por lo probado antes, tenemos ∀v ∈ V div(x)i = 0. Sea entonces C un circuito no saturado de G (es decir, si recorremos un arco hacia adelante no está en su cota superior; y si lo recorremos hacia atrás no está en su cota inferior). Entonces Si recorremos un arco a hacia adelante: xa < ua ⇒ cπa ≥ 0. 1 Si recorremos un arco a hacia atrás: xa > ua ⇒ cπa ≤ 0 ⇒ −cπa ≥ 0. Ahora bien: c(C) = X a∈C + c(a) − X X c(a) = = a∈C − a∈C cπa + |{z} + ≥0 X a∈C −cπa ≥ 0 |{z} − ≥0 con lo cual se concluye que no existen circuitos no saturados de costo negativo. Notar que la igualdad entre la suma de costos usual y reducidos se debe a que se produce una suma telescópica entre los potenciales, por lo que en total suman 0. (b) Sol: Como queremos enviar flujo de un punto de superavit a uno de déficit, necesitamos que los arcos que ocupemos no estén saturados (en el sentido que queremos hacer la aumentación), por lo que consideramos sólo los arcos que no tengan holgura nula. Claramente, lo que tendrá mayor complejidad aritmética será encontrar el camino de largo mı́nimo a V + para todo nodo. Para hacer esto de forma eficiente, construiremos el grafo (V, Â), que será idéntico a (V, Ã), y que para cada v ∈ V + agregaremos un arco de costo nulo de v hacia un nuevo nodo r; ası́, en vez de minimizar caminos a todos los nodos en V + , minimizaremos el camino a r utilizando Dijkstra. Veamos ahora el tiempo que nos toma realizar cada tarea pedida en (i) y (ii): 1) Consturir el grafo: O(|A|) = O(|V |2 ) 2) Aplicar Dijkstra a (V, Â): O(|V |2 ) 3) Actualizar los potenciales, calcular y aumentar por el camino: O(|A|) = O(|V |2 ) Por lo que toma en total O(|V |2 ). (c) Sol: Primero notamos que al hacer la aumentación, nunca sobrepasamos la capacidad de algún arco, luego: ∀a ∈ Axa ∈ [la , ua ]. Ahora analicemos lo pedido según casos: Si a pertenece al camino: Dado que los largos son no negativos y el camino que une a s con V + pasa por a: mı́n{li , ls } = li para i = ia y i = ja . Entonces: 2 cπ̃a = ca + π̃ia − π̃ja = cπa + lja − lia Pero, como sabemos que los li definen un potencial y C s es camino de largo mı́nimo: lia = lja + cπa . Luego: cπ̃a = cπa − cπa = 0 Si a no pertenece al camino: Probaremos sólo la implicancia x̃a < ua ⇒ ca π̃ ≥ 0 (la otra se hace de manera análoga). Notemos que: x˜a < ua ⇒ xa < ua ⇒ cπa ≥ 0 además a ∈ Ã. Estudiemos la situación según casos: Si ls ≤ mı́n{lja , lia }: En este caso ca π̃ = cπa ≥ 0. Si ls ∈ [lja , lia ]: ca π̃ = cπa + mı́n{lja , ls } − mı́n{lia , ls } = cπa + ls − lia Ahora, por definición de potencial: lia ≤ lja + cπa ⇒ ls − lia ≥ ls − lja − cπa Entonces: ca π̃ ≥ cπa + ls − lja − cπa = ls − lja ≥ 0. Si ls ≥ máx{lja , lia }: En este caso ca π̃ = cπa + lja − lia ≥ 0 Esta última desigualdad es por definión de potencial. (d) Sol: Notemos que en cada iteración, enviamos al menos una unidad de déficit a algún punto de superavit; por lo tanto, en cada iteración disminuı́mos en 2 unidades la norma 1 de las divergencias. Entonces, en menos de: 1X 1 |div(x)i | ||div(x)||1 = 2 2 i 3 iteraciones, logramos un flujo conservativo; que por la parte (c) además resulta ser cuasisolución, y finalmente por la parte (a) es FCM. P2 (a) Notemos que si (a, b) ∈ E, Gp = (A, E), entonces a y b se pueden realizar paralelamente. Luego, supongamos que una existe una programación factible S y un matching M máximo tal que T < |A| − |M |. Entonces, tenemos que o bien S no es factible o bien M no es matching máximo, pues si es factible, con las tareas realizadas en paralelo se puede contruir un matching de tamaño mayor con los nodos asociados a esas tareas. (b) Sea M un matching máximo, tenemos que, si numeramos los arcos del matching (ai , bi ), . . . , (aj , bj ), . . . , (am , bm ). Luego, para obtener una programación factible, solo debemos procurar que sucede en el caso de que ai deba ejecutarse antes que aj , y bj antes que bi , para i < j. En ese caso, tenemos que en Gp existe un arco entre ai y bj , y aj y bi , pues si no lo hubiera, entonces por definición, eso contradiria el hecho de que hay arcos que consideramos de un matching de Gp , (suponiendo un matching no vacı́o, por supuesto). Ası́, si tenemos tareas que deben realizarse antes que otras dentro de las enumeraciones de podemos hacer de los nodos de los arcos del matching, podemos intercambiar los arcos en su orden, o crear un nuevo matching en virtud de los argumentos previos, y obtener una programación factible. Luego, si sucediera que T > |A| − |M | para una programación óptima, entonces esta programación ¡no será óptima !, pues con el matching podriamos hacer una programación que demore |A| − |M | (descontamos del total de tareas, las que podemos hacer en dos máquinas), y esa serı́a de menor tiempo. 4