MOR - Tema 4

MOR
Modelos de Optimización de Redes
Teoría de Grafos
Optimización
2026-01-12
101 min de lectura

Flujo en redes

Red estándar. Definición

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red, decimos que es una red estándar si cumple:

  • G=(V,A)G = (V, A) es un grafo orientado débilmente conexo
  • Los pesos pijp_{ij} para cada arco (i,j)A(i, j) \in A son positivos (pij>0p_{ij} > 0) y se les denomina capacidad del arco (máxima capacidad del arco)
  • Existe un único vértice FVF \in V tal que Γ(F)=\Gamma^{ - }(F) = \emptyset denominado fuente
  • Existe un único vértice SVS \in V tal que Γ+(S)=\Gamma^{ + }(S) = \emptyset denominado sumidero

Flujo en redes. Definición

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, se dice que f={fij:(i,j)A}f = \{f_{ij}: (i, j ) \in A\} colección de reales es un flujo en RFSR_{FS} si cumple:

  • Acotación: 0fijpij(i,j)A0 \leq f_{ij} \leq p_{ij} \quad \forall (i, j) \in A
  • Conservación de flujo: para cada iVi \in V con iF,Si \neq F, S:
jΓ+(i)fijkΓ(i)fki=0\begin{align*} \displaystyle \sum_{j \in \Gamma^{ + }(i)} f_{ij} - \displaystyle \sum_{k \in \Gamma^{ - }(i)} f_{ki} = 0 \end{align*}

💡Nota

Notar que, lo que estamos pidiendo en la conservación de flujo es que, para cada nodo que no sea fuente o sumidero, el flujo que entra es igual al flujo que sale.

Valor del flujo. Definición

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar y f={fij:(i,j)A}f = \{f_{ij}: (i, j ) \in A\} un flujo en RFSR_{FS}, se define el valor del flujo como:

vf=jΓ+(F)fFj\begin{align*} v_f = \displaystyle \sum_{j \in \Gamma^{ + }(F)} f_{Fj} \end{align*}

Y en caso de que no haya ambigüedad, es decir, estemos trabajando con una única red y un único flujo, se denota simplemente como vv.

✏️Ejemplo

A continuación, se muestra un ejemplo de red estándar con un flujo asociado.

TikZ Graph

Podemos observar que el flujo cumple las condiciones de acotación ya que:

  • 0fFA=1015=pFA0 \leq f_{FA} = 10 \leq 15 = p_{FA}
  • 0fFB=510=pFB0 \leq f_{FB} = 5 \leq 10 = p_{FB}
  • 0fAC=1010=pAC0 \leq f_{AC} = 10 \leq 10 = p_{AC}
  • 0fBC=510=pBC0 \leq f_{BC} = 5 \leq 10 = p_{BC}
  • 0fCS=1520=pCS0 \leq f_{CS} = 15 \leq 20 = p_{CS}

Además, también cumple la conservación de flujo:

  • Para el nodo A: fFAfAC=1010=0f_{FA} - f_{AC} = 10 - 10 = 0
  • Para el nodo B: fFBfBC=55=0f_{FB} - f_{BC} = 5 - 5 = 0
  • Para el nodo C: fAC+fBCfCS=10+515=0f_{AC} + f_{BC} - f_{CS} = 10 + 5 - 15 = 0

Finalmente, el valor del flujo es:

vf=fFA+fFB=10+5=15\begin{align*} v_f = f_{FA} + f_{FB} = 10 + 5 = 15 \end{align*}

Existencia de un flujo. Proposición

Sea RFS=(V,A,p)R_{FS} = (V, A , p) una red estándar, entonces existe al menos un flujo en RFSR_{FS}.

📐Demostración

Basta notar que f={fij=0:(i,j)A}f = \{f_{ij} = 0: (i, j) \in A\} es un flujo en RFSR_{FS} ya que:

  • Acotación: 0fij=0pij(i,j)A0 \leq f_{ij} = 0 \leq p_{ij} \quad \forall (i, j) \in A
  • Conservación de flujo: para cada iVi \in V con iF,Si \neq F, S:
jΓ+(i)fijkΓ(i)fki=00=0\begin{align*} \displaystyle \sum_{j \in \Gamma^{ + }(i)} f_{ij} - \displaystyle \sum_{k \in \Gamma^{ - }(i)} f_{ki} = 0 - 0 = 0 \end{align*}

Por lo tanto, ff es un flujo en RFSR_{FS}.

Existencia de camino de FF a SS. Proposición

Sea RFS=(V,A,p)R_{FS} = (V, A , p) una red estándar y f={fij:(i,j)A}f = \{f_{ij}: (i, j) \in A\} un flujo en RFSR_{FS} con valor vf>0v_f > 0. Entonces, existe al menos un camino elemental de FF a SS en RFSR_{FS}.

📐Demostración

Si π\pi es el camino elemental de mayor longitud que comienza en FF y tal que fij>0f_{ij} > 0 para cada (i,j)π(i, j) \in \pi, al menos es de longitud 1 ya que:

  • vf>0v_f > 0
  • La red es débilmente conexa
  • Γ(F)=\Gamma^{ - }(F) = \emptyset

Si π\pi llega a SS ya estaría. Supongamos que no llega a SS y acaba en jSj \neq S. Por la ley de conservación del flujo, tendría que existir un arco (j,k)A(j, k) \in A tal que fjk>0f_{jk} > 0. Pero entonces podríamos alargar π\pi con el arco (j,k)(j, k), contradiciendo la maximalidad de la longitud de π\pi. Por lo tanto, π\pi tiene que llegar a SS.

Flujo máximo en una red

Conjunto de flujos en una red. Definición

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, se define el conjunto de flujos en RFSR_{FS} como:

F={g:g es un flujo en RFS}\begin{align*} \mathcal{F} = \{g : g \text{ es un flujo en } R_{FS}\}\\ \end{align*}

Flujo máximo en una red. Definición

Sea una red estándar RFS=(V,A,p)R_{FS} = (V, A, p), la búsqueda del flujo máximo consiste en enviar la cantidad máxima de flujo posible desde la fuente FF hasta el sumidero SS de forma que se satisfagan las condiciones de acotación y conservación de flujo.

Formalmente, consiste en encontrar un flujo f={fij:(i,j)A}f* = \{f_{ij}^*: (i, j) \in A\} en RFSR_{FS} tal que:

Vf=max{vf:fF}\begin{align*} V_{f*} = \max \{v_f: f \in \mathcal{F}\}\\ \end{align*}

Cuasicamino. Definición

Sea RFS=(V,A,P)R_{FS} = (V, A , P) red estándar, un cuasicamino de ii a jj en RFSR_{FS} es una sucesión alternada de vértices y arcos que forman una cadena elemental en el grafo subyacente de (V,A)(V, A). Es decir, un cuasicamino πij\pi_{ij} de ii a jj es:

πij=ie1i1e2i2ik1ekikir1erj\begin{align*} \pi_{ij} = i \, e_1 \, i_1 \, e_2 \, i_2 \, \dots i_{k - 1} \, e_k \, i_k \, \dots i_{r - 1} \, e_r \, j\\ \end{align*}

Arco positivo y negativo. Definición

Sea RFS=(V,A,P)R_{FS} = (V, A , P) red estándar, dado un cuasicamino πij\pi_{ij} de ii a jj en RFSR_{FS}, un arco eke_k con k1,rk \neq 1, r diremos que es:

  • Arco positivo: si está orientado desde ik1i_{k - 1} hacia iki_k, es decir, ek=(ik1,ik)Ae_k = (i_{k - 1}, i_k) \in A
  • Arco negativo: si está orientado desde iki_k hacia ik1i_{k - 1}, es decir, ek=(ik,ik1)Ae_k = (i_k, i_{k - 1}) \in A

✏️Ejemplo

Supongamos la siguiente red estándar:

TikZ Graph

Podemos notar que, como el flujo máximo que sale de la fuente es 7 y el flujo máximo que entra al sumidero es 7, el flujo máximo de la red es 7.

Ahora, si consideramos el cuasicamino dado por:

F25122238S\begin{align*} F \xrightarrow{2|5} 1 \xleftarrow{2|2} 2 \xrightarrow{3|8} S \end{align*}

Si añadimos dos unidades más al flujo que pasa de FF a 11 (y por tanto, tenemos que restar dos unidades al flujo que pasa de 22 a 11 para mantener la conservación de flujo), obtenemos el siguiente cuasicamino:

F45102238S\begin{align*} F \xrightarrow{4|5} 1 \xleftarrow{0|2} 2 \xrightarrow{3|8} S \end{align*}

Además, habrá que hacer que las dos unidades que hemos restado al flujo que pasa de 22 a 11 se sumen al flujo que pasa de 22 a SS. Por tanto, la red quedaría de la siguiente forma:

TikZ Graph

En este caso, el flujo total de la red será 9, que es mayor que el flujo máximo inicial de 7.

No vale modificar cualquier cuasicamino para aumentar el flujo total de la red, hay que emplear los cuasicaminos de flujo aumentable, que se verán más adelante.

Arco saturado. Definición

Sea RFS=(V,A,P)R_{FS} = (V, A , P) red estándar y f={fij:(i,j)A}f = \{f_{ij}: (i, j) \in A\} un flujo en RFSR_{FS}. Un arco (i,j)A(i, j) \in A se dice que está saturado si fij=pijf_{ij} = p_{ij}.

Arco de flujo nulo o libre. Definición

Sea RFS=(V,A,P)R_{FS} = (V, A , P) red estándar y f={fij:(i,j)A}f = \{f_{ij}: (i, j) \in A\} un flujo en RFSR_{FS}. Un arco (i,j)A(i, j) \in A se dice que es de flujo nulo o libre si fij=0f_{ij} = 0.

Cuasicamino de flujo aumentable. Definición

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, ff flujo en RFSR_{FS} y πij=ie1i1e2ik1ekikir1erj\pi_{ij} = i \, e_1 \, i_1 \, e_2 \dots i_{k - 1} \, e_k \, i_k \, \dots i_{r - 1} \, e_r \, j un cuasicamino de ii a jj en RFSR_{FS}. Decimos que πij\pi_{ij} es un cuasicamino de flujo aumentable o cuasicamino ff-aumentable si se cumplen las siguientes condiciones:

{fe<pe arco positivo eπij(i.e. no estaˊ saturado)fe>0 arco negativo eπij(i.e. no es nulo)\begin{align*} \left\{ \begin{array}{ll} f_e < p_e & \forall \text{ arco positivo } e \in \pi_{ij} \, \,(\text{i.e. no está saturado})\\ f_e > 0 & \forall \text{ arco negativo } e \in \pi_{ij} \, \, (\text{i.e. no es nulo}) \end{array} \right. \end{align*}

💡Nota

Notar que un cuasicamino puede ser aumentable para un flujo ff y no serlo para otro flujo gg. A continuación, se muestra un ejemplo de cuasicamino aumentable.

F25122238S\begin{align*} F \xrightarrow{2|5} 1 \xleftarrow{2|2} 2 \xrightarrow{3|8} S \end{align*}

No obstante, si cambiamos el flujo en el arco (2,1)(2, 1) a f21=0f_{21} = 0 y hacemos las modificaciones pertinentes en los demás arcos para mantener la conservación de flujo, el cuasicamino ya no sería aumentable:

F45102258S\begin{align*} F \xrightarrow{4|5} 1 \xleftarrow{0|2} 2 \xrightarrow{5|8} S \end{align*}

Cuasicamino de flujo aumentable desde FF a SS. Definición

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, ff flujo en RFSR_{FS}, prestaremos especial atención a los cuasicaminos de flujo aumentable que van desde la fuente FF hasta el sumidero SS. Estos se denotan como πFS\pi_{FS}.

Holgura de un arco. Definición

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, ff flujo en RFSR_{FS} y πFS\pi_{FS} cuasicamino de flujo aumentable desde FF a SS en RFSR_{FS}. Se define la holgura de eπFSe \in \pi_{FS} como:

Δe={pefe arco positivo eπFSfe arco negativo eπFS\begin{align*} \Delta_e = \left\{ \begin{array}{ll} p_e - f_e & \forall \text{ arco positivo } e \in \pi_{FS}\\ f_e & \forall \text{ arco negativo } e \in \pi_{FS} \end{array} \right.\\ \end{align*}

Holgura de un cuasicamino de flujo aumentable. Definición

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, ff flujo en RFSR_{FS} y πFS\pi_{FS} cuasicamino de flujo aumentable desde FF a SS en RFSR_{FS}. Se define la holgura de πFS\pi_{FS} como:

ΔπFS=mineπFS{Δe}\begin{align*} \Delta_{\pi_{FS}} = \min_{e \in \pi_{FS}} \{\Delta_e\}\\ \end{align*}

💡Nota

Por la propiedad de la conservación del flujo, el cambio en el flujo de los arcos de un cuasicamino tiene que ser de la misma cantidad en todos los arcos del cuasicamino. Por tanto, la holgura de un cuasicamino nos indica la cantidad máxima que podemos aumentar el flujo a lo largo de todo el cuasicamino sin violar las condiciones de acotación.

Proposición 4.1

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, ff flujo en RFSR_{FS} y πFS\pi_{FS} cuasicamino de flujo aumentable desde FF a SS en RFSR_{FS} tal que la holgura mínima de sus arcos es ΔπFS\Delta_{\pi_{FS}}. Si se considera la aplicación:

f^:AR+efe^={fe+ΔπFSsi e es arco positivo en πFSfeΔπFSsi e es arco negativo en πFSfesi eπFS\begin{align*} \widehat{f} : A & \longrightarrow \mathbb{R}^{ + }\\ e & \longmapsto \widehat{f_e} = \left\{ \begin{array}{ll} f_e + \Delta_{\pi_{FS}} & \text{si } e \text{ es arco positivo en } \pi_{FS}\\ f_e - \Delta_{\pi_{FS}} & \text{si } e \text{ es arco negativo en } \pi_{FS}\\ f_e & \text{si } e \notin \pi_{FS} \end{array} \right. \end{align*}

entonces la colección f^={fe^:eA}\widehat{f} = \{\widehat{f_e}: e \in A\} es un flujo en RFSR_{FS} con valor vf^=vf+ΔπFSv_{\widehat{f}} = v_f + \Delta_{\pi_{FS}}.

📐Demostración

*Veamos que \widehat{f* es un flujo en RFSR_{FS}:}

  • Acotación: Se dan dos casos:

  • Conservación del flujo: Sea vVv \in V cualquiera con vF,Sv \neq F, S. Se dan dos casos:

  • Si vπFSv \notin \pi_{FS} entonces tanto el flujo que llega como el que sale no se ven modificados, por lo que siguen siendo iguales por ser un flujo ff, es decir:

jΓ+(v)fvj^=jΓ+(v)fvj=kΓ(v)fkv^=kΓ(v)fkv\begin{align*} \displaystyle \sum_{j \in \Gamma^{ + }(v)} \widehat{f_{vj}} = \displaystyle \sum_{j \in \Gamma^{ + }(v)} f_{vj} = \displaystyle \sum_{k \in \Gamma^{ - }(v)} \widehat{f_{kv}} = \displaystyle \sum_{k \in \Gamma^{ - }(v)} f_{kv}\\ \end{align*}
  • Si vπFSv \in \pi_{FS}, como la cadena generada por el cuasicamino es elemental, cada vértice está solo una vez, por lo que se dan 4 subcasos:

  • Valor del flujo: Por definición de valor del flujo, tenemos que:

vf^=jΓ+(F)fFj^=(jΓ+(F)πFScfFj)+fe+ΔπFS=vf+ΔπFS\begin{align*} v_{\widehat{f}} & = \displaystyle \sum_{j \in \Gamma^{ + }(F)} \widehat{f_{Fj}} = \left(\displaystyle \sum_{j \in \Gamma^{ + }(F) \cap \pi_{FS}^c} f_{Fj}\right) + f_e + \Delta_{\pi_{FS}} = v_f + \Delta_{\pi_{FS}} \end{align*}

donde ee es el arco positivo (ya que Γ(F)\Gamma^{ - }(F) \neq \emptyset) que sale de FF en πFS\pi_{FS}.

Corte en una red. Definición

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, {B,Bc}\{B, B^c\} partición de VV tal que FBF \in B y SBcS \in B^c (separa el vértice fuente del sumidero). Al subconjunto de arcos formado por los arcos con origen en BB y destino en BcB^c se le denomina corte y se denota como:

δ+(B)={(i,j)A:iB,jBc}\begin{align*} \delta^{ + }(B) = \{(i, j) \in A: i \in B, j \in B^c\} \end{align*}

Análogamente, podemos definir el conjunto inverso que no cumple las condiciones de corte dado por:

δ(B)={(i,j)A:iBc,jB}\begin{align*} \delta^{ - }(B) = \{(i, j) \in A: i \in B^c, j \in B\}\\ \end{align*}

Conjunto de cortes en una red. Definición

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, se define el conjunto de cortes en RFSR_{FS} como:

D+={δ+(B):BV,FB,SBc}\begin{align*} \mathcal{D}^{ + } = \{\delta^{ + }(B): B \subseteq V, F \in B, S \in B^c\} \end{align*}

💡Nota

Podemos observar que cualquier red estándar tiene al menos un corte, basta considerar BF={F}B_F = \{F\} y BS=V{S}B_S = V \setminus \{S\}, entonces:

δ+(BF),δ+(BS)D+\begin{align*} \delta^{ + }(B_F), \delta^{ + }(B_S) \in \mathcal{D}^{ + } \end{align*}

Capacidad de un corte. Definición

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, f={fij:(i,j)A}f = \{f_{ij}: (i, j) \in A\} flujo y δ+(B)\delta^{ + }(B) corte de dicha red, se define la capacidad del corte δ+(B)\delta^{ + }(B) como la suma de las capacidades de los arcos que forman el corte:

p(δ+(B))=(i,j)δ+(B)pij=iB,jBcΓ(i)pij\begin{align*} p(\delta^{ + }(B)) = \displaystyle \sum_{(i, j) \in \delta^{ + }(B)} p_{ij} = \displaystyle \sum_{i \in B, j\in B^c \cap \Gamma(i)} p_{ij}\\ \end{align*}

Flujo neto a través de un corte. Definición

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, f={fij:(i,j)A}f = \{f_{ij}: (i, j) \in A\} flujo y δ+(B)\delta^{ + }(B) corte de dicha red, se define el flujo neto a través del corte δ+(B)\delta^{ + }(B) como:

f(δ+(B))=(i,j)δ+(B)fij(i,j)δ+(Bc)fij=iB,jBcΓ(i)fijiBc,jBΓ(i)fij\begin{align*} f(\delta^{ + }(B)) = \displaystyle \sum_{(i, j) \in \delta^{ + }(B)} f_{ij} - \displaystyle \sum_{(i, j) \in \delta^{ + }(B^c)} f_{ij} = \displaystyle \sum_{i \in B, j\in B^c \cap \Gamma(i)} f_{ij} - \displaystyle \sum_{i \in B^c, j\in B \cap \Gamma(i)} f_{ij}\\ \end{align*}

💡Nota

En palabras simples, la capacidad de un corte nos indica la cantidad máxima de flujo que puede pasar a través del corte, mientras que el flujo neto a través del corte nos indica la cantidad de flujo que realmente pasa a través del corte.

Además, podemos notar que para una misma red, dados dos cortes distintos y un mismo flujo, el flujo neto a través de ambos cortes es el mismo. Esto se debe a que el flujo que entra en BcB^c desde BB menos el flujo que entra en BB desde BcB^c es igual al flujo total que sale de la fuente FF y llega al sumidero SS, independientemente del corte que consideremos.

Proposición 4.2

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, f={fij:(i,j)A}f = \{f_{ij}: (i, j) \in A\} flujo en RFSR_{FS} y δ+(B)\delta^{ + }(B) corte de dicha red. Entonces, el flujo neto a través del corte es igual al valor del flujo, es decir:

vf=f(δ+(B))\begin{align*} v_f = f(\delta^{ + }(B))\\ \end{align*}

📐Demostración

Sea ff flujo en dicha red estándar, por definición se tiene que:

vf=jΓ+(F)fFj\begin{align*} v_f = \displaystyle \sum_{j \in \Gamma^{ + }(F)} f_{Fj} \end{align*}

Pero como Γ(F)=\Gamma^{ - }(F) = \emptyset entonces:

jΓ(F)fjF=0\begin{align*} \displaystyle \sum_{j \in \Gamma^{ - }(F)} f_{jF} = 0 \end{align*}

Y por tanto, le valor del flujo se puede reescribir como:

vf=jΓ+(F)fFjjΓ(F)fjF\begin{align*} v_f = \displaystyle \sum_{j \in \Gamma^{ + }(F)} f_{Fj} - \displaystyle \sum_{j \in \Gamma^{ - }(F)} f_{jF} \end{align*}

Ahora, por la propiedad de conservación del flujo, se tiene que:

jΓ+(i)fijjΓ(i)fji=0iB{F}\begin{align*} \displaystyle \sum_{j \in \Gamma^{ + }(i)} f_{ij} - \displaystyle \sum_{j \in \Gamma^{ - }(i)} f_{ji} = 0 \qquad \forall i \in B \setminus \{F\} \end{align*}

Por tanto, si sumamos ambas expresiones para todos los vértices iBi \in B, obtenemos:

vf=iB(jΓ+(i)fijjΓ(i)fji)={B,Bc} particioˊn=iB(jΓ+(i)Bfij+jΓ+(i)BcfijjΓ(i)BfjijΓ(i)Bcfji)==(iB,jΓ+(i)BfijiB,jΓ(i)Bfji)+(iB,jΓ+(i)BcfijiB,jΓ(i)Bcfji)\begin{align*} v_f & = \displaystyle \sum_{i \in B} \left( \displaystyle \sum_{j \in \Gamma^{ + }(i)} f_{ij} - \displaystyle \sum_{j \in \Gamma^{ - }(i)} f_{ji} \right) \xlongequal[]{\{B, B^c\} \text{ partición}}\\[2ex] & = \displaystyle \sum_{i \in B} \left( \displaystyle \sum_{j \in \Gamma^{ + }(i) \cap B} f_{ij} + \displaystyle \sum_{j \in \Gamma^{ + }(i) \cap B^c} f_{ij} - \displaystyle \sum_{j \in \Gamma^{ - }(i) \cap B} f_{ji} - \displaystyle \sum_{j \in \Gamma^{ - }(i) \cap B^c} f_{ji} \right) = \\[2ex] & = \left(\displaystyle \sum_{i \in B, j \in \Gamma^{ + }(i) \cap B} f_{ij} - \displaystyle \sum_{i \in B, j \in \Gamma^{ - }(i) \cap B} f_{ji}\right) + \left(\displaystyle \sum_{i \in B, j \in \Gamma^{ + }(i) \cap B^c} f_{ij} - \displaystyle \sum_{i \in B, j \in \Gamma^{ - }(i) \cap B^c} f_{ji}\right) \end{align*}

Por definición de flujo neto a través de un corte, tenemos que:

vf=(iB,jΓ+(i)BfijiB,jΓ(i)Bfji)+f(δ+(B))\begin{align*} v_f = \left(\displaystyle \sum_{i \in B, j \in \Gamma^{ + }(i) \cap B} f_{ij} - \displaystyle \sum_{i \in B, j \in \Gamma^{ - }(i) \cap B} f_{ji}\right) + f(\delta^{ + }(B)) \end{align*}

Podemos notar que los dos sumatorios entre paréntesis representan exactamente el mismo valor, ya que ambos representan el flujo que entra y sale de los vértices en BB (exceptuando FF), por lo que:

iB,jΓ+(i)BfijiB,jΓ(i)Bfji=0    vf=f(δ+(B))\begin{align*} \displaystyle \sum_{i \in B, j \in \Gamma^{ + }(i) \cap B} f_{ij} - \displaystyle \sum_{i \in B, j \in \Gamma^{ - }(i) \cap B} f_{ji} = 0 \implies v_f = f(\delta^{ + }(B)) \end{align*}

Proposición 4.3

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, f={fij:(i,j)A}f = \{f_{ij}: (i, j) \in A\} flujo en RFSR_{FS} y δ+(B)\delta^{ + }(B) corte de dicha red, se verifican:

  1. El valor del flujo ff está acotado superiormente por la capacidad del corte, es decir:
vfp(δ+(B))\begin{align*} v_f \leq p(\delta^{ + }(B)) \end{align*}
  1. Además, se cumple que:
vf=p(δ+(B))    {fij=pij(i,j)δ+(B)fij=0(i,j)δ+(Bc)\begin{align*} v_f = p(\delta^{ + }(B)) \iff \left\{ \begin{array}{ll} f_{ij} = p_{ij} & \forall (i, j) \in \delta^{ + }(B)\\ f_{ij} = 0 & \forall (i, j) \in \delta^{ + }(B^c) \end{array} \right. \end{align*}

📐Demostración

  1. Por la proposición anterior vf=f(δ+(B))v_f = f(\delta^{ + }(B)), y tenemos que:
f(δ+(B))=iB,jBcΓ(i)fijiB,jBcΓ(i)fji\begin{align*} f(\delta^ + (B)) = \displaystyle \sum_{i \in B, j\in B^c \cap \Gamma(i)} f_{ij} - \displaystyle \sum_{i \in B, j \in B^c \cap \Gamma^{ - }(i)} f_{ji} \end{align*}

Como fji0f_{ji} \geq 0 para todo (i,j)A(i, j) \in A (por ser un flujo), entonces:

vf=f(δ+(B))=iB,jBcΓ(i)fijiB,jBcΓ(i)fjiiB,jBcΓ(i)fijiB,jBcΓ(i)pij=p(δ+(B))\begin{align*} v_f = f(\delta^ + (B)) & = \displaystyle \sum_{i \in B, j\in B^c \cap \Gamma(i)} f_{ij} - \displaystyle \sum_{i \in B, j \in B^c \cap \Gamma^{ - }(i)} f_{ji} \leq \\[2ex] & \leq \displaystyle \sum_{i \in B, j\in B^c \cap \Gamma(i)} f_{ij} \leq \displaystyle \sum_{i \in B, j\in B^c \cap \Gamma(i)} p_{ij} = p(\delta^{ + }(B)) \end{align*}
  1. Por lo que hemos visto en el apartado anterior, se tiene que:
vf=f(δ+(B))=(i,j)δ+(B)fij(j,i)δ+(Bc)fji(i,j)δ+(B)pij=p(δ+(B))\begin{align*} v_f = f(\delta^ + (B)) & = \displaystyle \sum_{(i, j) \in \delta^{ + }(B)} f_{ij} - \displaystyle \sum_{(j, i) \in \delta^{ + }(B^c)} f_{ji} \leq \displaystyle \sum_{(i, j) \in \delta^{ + }(B)} p_{ij} = p(\delta^{ + }(B)) \end{align*}

Con lo que la igualdad se cumple si y solo si:

(i,j)δ+(B)fij(j,i)δ+(Bc)fij=(i,j)δ+(B)pij\begin{align*} \displaystyle \sum_{(i, j) \in \delta^{ + }(B)} f_{ij} - \displaystyle \sum_{( j, i) \in \delta^{ + }(B^c)} f_{ij} = \displaystyle \sum_{(i, j) \in \delta^{ + }(B)} p_{ij} \end{align*}

Lo cual ocurre si y solo si:

(j,i)δ+(Bc)fij=(i,j)δ+(B)(pijfij)0\begin{align*} - \displaystyle \sum_{(j, i) \in \delta^{ + }(B^c)} f_{ij} = \displaystyle \sum_{(i, j) \in \delta^{ + }(B)} (p_{ij} - f_{ij}) \geq 0 \end{align*}

Ahora, como fijpijf_{ij} \leq p_{ij} y fij0f_{ij} \geq 0 por la acotación del flujo, se tiene que ambas expresiones son iguales a cero, con lo que la igualdad se cumple si y solo si:

(j,i)δ+(Bc)fij=0y(i,j)δ+(B)(pijfij)=0\begin{align*} \displaystyle \sum_{(j, i) \in \delta^{ + }(B^c)} f_{ij} = 0 \qquad \text{y} \qquad \displaystyle \sum_{(i, j) \in \delta^{ + }(B)} (p_{ij} - f_{ij}) = 0 \end{align*}

Como en ambos casos estamos sumando términos no negativos, esto es equivalente a que:

fij=0(j,i)δ+(Bc)fij=pij(i,j)δ+(B)\begin{align*} f_{ij} = 0 & \forall (j, i) \in \delta^{ + }(B^c)\\ f_{ij} = p_{ij} & \forall (i, j) \in \delta^{ + }(B) \end{align*}

Corte mínimo en una red. Definición

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar y δ+(B)\delta^{ + }(B) un corte, se dice que es corte mínimo si:

p(δ+(B))p(δ+(D))δ+(D)D+\begin{align*} p(\delta^{ + }(B)) \leq p(\delta^{ + }(D)) \qquad \forall \delta^{ + }(D) \in \mathcal{D}^{ + }\\ \end{align*}

Flujo máximo en una red. Definición

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, se dice que un flujo ff en RFSR_{FS} es flujo máximo si:

vfvgg flujo en RFS\begin{align*} v_f \geq v_g \qquad \forall g \text{ flujo en } R_{FS}\\ \end{align*}

Corolario 4.4

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, si δ+(B)\delta^{ + }(B) y ff son un corte y un flujo en RFSR_{FS} respectivamente, tales que:

vf=p(δ+(B))    f es flujo maˊximo y δ+(B) es corte mıˊnimo\begin{align*} v_f = p(\delta^{ + }(B)) \implies f \text{ es flujo máximo y } \delta^{ + }(B) \text{ es corte mínimo}\\ \end{align*}

📐Demostración

Sea ff' otro flujo en RFSR_{FS}, por la proposición 4.3 se tiene que:

vfp(δ+(B))=vf    f es flujo maˊximo\begin{align*} v_{f'} \leq p(\delta^{ + }(B) ) = v_f \implies f \text{ es flujo máximo} \end{align*}

Sea δ+(D)\delta^{ + }(D) otro corte en RFSR_{FS}, por la proposición 4.3 se tiene que:

p(δ+(B))=vfp(δ+(D))    δ+(B) es corte mıˊnimo\begin{align*} p(\delta^{ + }(B)) = v_{f} \leq p(\delta^{ + }(D)) \implies \delta^{ + }(B) \text{ es corte mínimo} \end{align*}

Teorema 4.5

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar y ff flujo en RFSR_{FS}. Entonces se cumplen:

f flujo maˊximo    πFS cuasicamino de flujo aumentable desde F a S en RFS\begin{align*} f \text{ flujo máximo} \iff \nexists \pi_{FS} \text{ cuasicamino de flujo aumentable desde } F \text{ a } S \text{ en } R_{FS}\\ \end{align*}

📐Demostración

  • \Rightarrow) Sea ff flujo máximo, supongamos que existe un cuasicamino de flujo aumentable πFS\pi_{FS}. Entonces tenemos que ΔπFS>0\Delta_{\pi_{FS}} > 0. Si consideramos el flujo f^\widehat{f} definido en la proposición 4.1, tenemos que:
vf^=vf+ΔπFS>vf#\begin{align*} v_{\widehat{f}} = v_f + \Delta_{\pi_{FS}} > v_f \quad \# \end{align*}
  • \Leftarrow) Sea BB el conjunto de vértices formado por:
B:{F}{iV:πFi cuasicamino de flujo aumentable}\begin{align*} B \coloneq \{F\} \cup \{i \in V : \exists \pi_{Fi} \text{ cuasicamino de flujo aumentable}\} \end{align*}

Por hipótesis SBS \notin B, con lo cual {B,Bc}\{B, B^c\} es partición de VV con FBF \in B y SBcS \in B^c. Consideremos el corte δ+(B)\delta^{ + }(B). Veamos que:

Algoritmo de Ford-Fulkerson

El objetivo de este algoritmo es encontrar un flujo máximo ff, para ello, la idea es ir saturando cuasicaminos de flujo aumentable hasta que no queden más. Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, el algoritmo es el siguiente:

  1. Sea el flujo ff definido como fe=0f_e = 0 para todo eAe \in A.

  2. Etiquetado:

  3. Para el cuasicamino ff-aumentable πFS\pi_{FS} formado por los arcos entre vértices etiquetados, obtener ΔπFS\Delta_{\pi_{FS}} y con ese valor, obtener el nuevo flujo f^\widehat{f} según la proposición 4.1.

  4. Volver al paso 2 borrando todas las etiquetas.

✏️Ejemplo

Aplicación del algoritmo de Ford-Fulkerson a la siguiente red estándar:

TikZ Graph

Primera iteración: Aplicamos el etiquetado de la siguiente forma:

TikZ Graph

El cuasicamino ff-aumentable es πFS={(F,1),(1,2),(2,S)}\pi_{FS} = \{(F, 1), (1, 2), (2, S)\} y su incremento es:

ΔπFS=min{20,30,20}=2\begin{align*} \Delta_{\pi_{FS}} = \min\{2 - 0, 3 - 0, 2 - 0\} = 2 \end{align*}

Por tanto, el nuevo flujo es:

fF1^=fF1+ΔπFS=0+2=2f12^=f12+ΔπFS=0+2=2f2S^=f2S+ΔπFS=0+2=2\begin{align*} \widehat{f_{F1}} & = f_{F1} + \Delta_{\pi_{FS}} = 0 + 2 = 2\\ \widehat{f_{12}} & = f_{12} + \Delta_{\pi_{FS}} = 0 + 2 = 2\\ \widehat{f_{2S}} & = f_{2S} + \Delta_{\pi_{FS}} = 0 + 2 = 2 \end{align*}

Segunda iteración: Aplicamos el etiquetado de la siguiente forma:

TikZ Graph

El cuasicamino ff-aumentable es πFS={(F,2),(2,1),(1,3),(3,S)}\pi_{FS} = \{(F, 2), (2, 1), (1, 3), (3, S)\} y su incremento es:

ΔπFS=min{30,2,40,10}=1\begin{align*} \Delta_{\pi_{FS}} = \min\{3 - 0, 2, 4 - 0, 1 - 0\} = 1 \end{align*}

Por tanto, el nuevo flujo es:

fF2^=fF2+ΔπFS=0+1=1f21^=f21ΔπFS=21=1f13^=f13+ΔπFS=0+1=1f3S^=f3S+ΔπFS=0+1=1\begin{align*} \widehat{f_{F2}} & = f_{F2} + \Delta_{\pi_{FS}} = 0 + 1 = 1\\ \widehat{f_{21}} & = f_{21} - \Delta_{\pi_{FS}} = 2 - 1 = 1\\ \widehat{f_{13}} & = f_{13} + \Delta_{\pi_{FS}} = 0 + 1 = 1\\ \widehat{f_{3S}} & = f_{3S} + \Delta_{\pi_{FS}} = 0 + 1 = 1 \end{align*}

Tercera iteración: Aplicamos el etiquetado de la siguiente forma:

TikZ Graph

En este caso, no es posible etiquetar el vértice SS, por lo que el flujo actual es máximo y el algoritmo termina aquí. El flujo máximo obtenido es:

vf=fF1^+fF2^=2+1=3\begin{align*} v_f = \widehat{f_{F1}} + \widehat{f_{F2}} = 2 + 1 = 3 \end{align*}

Porposición 4.6

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, ff flujo máximo y δ+(B)\delta^{ + }(B) corte mínimo, entonces:

vf=p(δ+(B))\begin{align*} v_f = p(\delta^{ + }(B))\\ \end{align*}

📐Demostración

Sea cualquier flujo y cualquier corte, aplicando la proposición 4.3 se tiene que:

vfp(δ+(B))\begin{align*} v_f \leq p(\delta^{ + }(B)) \end{align*}

Por otra parte, si ff es flujo máximo, por el teorema 4.5 no existe ningún cuasicamino ff-aumentable desde FF a SS. Definiendo:

D={F}{iV:πFi cuasicamino de flujo aumentable}\begin{align*} D = \{F\} \cup \{i \in V : \exists \pi_{Fi} \text{ cuasicamino de flujo aumentable}\} \end{align*}

por la demostración del teorema 4.5, sabemos que determina un corte δ+(D)\delta^{ + }(D) tal que:

fij=pij(i,j)δ+(D)yfij=0(i,j)δ+(Dc)\begin{align*} f_{ij} = p_{ij} \quad \forall (i, j) \in \delta^{ + }(D) \qquad \text{y} \qquad f_{ij} = 0 \quad \forall (i, j) \in \delta^{ + }(D^c) \end{align*}

Aplicando la proposición 4.3, tenemos que:

vf=p(δ+(D))\begin{align*} v_f = p(\delta^{ + }(D)) \end{align*}

Como δ+(B)\delta^{ + }(B) es corte mínimo, se tiene que:

p(δ+(B))p(δ+(D))=vf    vf=p(δ+(B))\begin{align*} p(\delta^{ + }(B)) \leq p(\delta^{ + }(D)) = v_f \implies v_f = p(\delta^{ + }(B)) \end{align*}

Corolario 4.7

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, ff flujo y δ+(B)\delta^{ + }(B) corte de dicha red. Son equivalentes:

  1. ff es flujo máximo y δ+(B)\delta^{ + }(B) es corte mínimo.
  2. vf=p(δ+(B))v_f = p(\delta^{ + }(B)).
  3. Todo arco de δ+(B)\delta^ + (B) es saturado y todo arco de δ+(Bc)\delta^ + (B^c) es libre

📐Demostración

Esta demostración es consecuencia de las previas:

  • 121 \Rightarrow 2) Por la proposición 4.6.
  • 232 \Rightarrow 3) Por la proposición 4.3.
  • 313 \Rightarrow 1) Por el corolario 4.4.

Consecuencias del teorema de Ford-Fulkerson

A partir del algoritmo de Ford-Fulkerson no solo obtenemos un flujo máximo, si no que también podemos obtener el corte mínimo. Este último es generado por todos los vértices etiquetados en la última iteración, es decir, los vértices alcanzables desde FF mediante cuasicaminos de flujo aumentable.

✏️Ejemplo

Continuando con el ejemplo anterior, en la última iteración:

TikZ Graph

Podemos notar que no existen cuasicaminos de flujo aumentable desde FF a SS. No obstante, el cuasicamino de flujo aumentable que encontramos es:

πF3F213\begin{align*} \pi_{F3} \equiv F \longrightarrow 2 \longleftarrow 1 \longrightarrow 3 \end{align*}

Y por tanto, el corte mínimo será generado por:

B={F,2,1,3}    Bc={S}\begin{align*} B = \{F, 2, 1, 3\} \implies B^c = \{S\} \end{align*}

Con lo que el corte mínimo es:

δ+(B)={(2,S),(3,S)}\begin{align*} \delta^{ + }(B) = \{(2, S), (3, S)\} \end{align*}

Además, su capacidad es:

p(δ+(B))=p2S+p3S=2+1=3=vf\begin{align*} p(\delta^{ + }(B)) & = p_{2S} + p_{3S} = 2 + 1 = 3 = v_f \end{align*}

💡Nota

El flujo de valor máximo no es único, además, el corte mínimo tampoco lo es.

💡Nota

La convergencia del algoritmo de Ford-Fulkerson está garantizada si las capacidades son números enteros. No obstante, su eficiencia puede estar comprometida en función de las elecciones que se hagan en el proceso de etiquetado.

Para solucionar esto, se puede modificar el algoritmo en el paso de etiquetado exigiendo que se elija el cuasicamino con el menor número de arcos. Por tanto, el algoritmo quedaría igual, pero el paso 2 se modificaría a:

  1. Hacer d(F)=0d(F) = 0 y d(i)=1d(i) = - 1 para cada iFi \neq F y k=1k = 1:
  2. Para uVu \in V con d(u)=k1d(u) = k - 1, hacer d(w)=kd(w) = k para todo wVw \in V con d(w)=1d(w) = - 1 y además fuw<puwf_{uw} < p_{uw} o fwu>0f_{wu} > 0.
  • Si d(S)1d(S) \neq - 1 considerar el cuasicamino ff-aumentable de FF a SS que se forma yendo para atrás desde SS hasta FF siguiendo los vértices con etiquetas decrecientes. Continuar al paso 3.
  • Si se han etiquetado nuevos vértices y d(S)=1d(S) = - 1, hacer k=k+1k = k + 1 y repetir el paso 2.
  • Si no se puede asignar nuevas etiquetas y d(S)=1d(S) = - 1, el flujo es máximo y se termina el algoritmo.

✏️Ejemplo

Se considera la siguiente red, aplicar el algoritmo de Ford-Fulkerson con la modificación del paso de etiquetado:

TikZ Graph

Primera iteración: A partir del flujo nulo, tenemos que cada vértice tiene asociado el siguiente valor de dd:

TikZ Graph

Sea k=1k = 1 y entonces d(i)=k1=0d(i) = k - 1 = 0 solo para i=Fi = F. Y a partir de FF tenemos que etiquetar 11 y 22 con d(1)=d(2)=k=1d(1) = d(2) = k = 1:

TikZ Graph

Ahora, incrementamos kk a 22 y consideramos los vértices con d(i)=k1=1d(i) = k - 1 = 1, que son 11 y 22. Desde 11 podemos etiquetar SS con d(S)=2d(S) = 2 y desde 22 no podemos etiquetar ningún vértice nuevo:

TikZ Graph

El cuasicamino ff-aumentable es πFS={(F,1),(1,S)}\pi_{FS} = \{(F, 1), (1, S)\} y su incremento es:

ΔπFS=min{10000,10000}=1000\begin{align*} \Delta_{\pi_{FS}} = \min\{1000 - 0, 1000 - 0\} = 1000 \end{align*}

Por tanto, el nuevo flujo es:

fF1^=fF1+ΔπFS=0+1000=1000f1S^=f1S+ΔπFS=0+1000=1000\begin{align*} \widehat{f_{F1}} & = f_{F1} + \Delta_{\pi_{FS}} = 0 + 1000 = 1000\\ \widehat{f_{1S}} & = f_{1S} + \Delta_{\pi_{FS}} = 0 + 1000 = 1000 \end{align*}

Segunda iteración: A partir del flujo actual, tenemos que cada vértice tiene asociado el siguiente valor de dd:

TikZ Graph

Sea k=1k = 1 y entonces d(i)=k1=0d(i) = k - 1 = 0 solo para i=Fi = F. Y a partir de FF tenemos que etiquetar 22 con d(2)=k=1d(2) = k = 1:

TikZ Graph

Ahora, incrementamos kk a 22 y consideramos los vértices con d(i)=k1=1d(i) = k - 1 = 1, que es solo 22. Desde 22 podemos etiquetar 11 con d(1)=2d(1) = 2 y SS con d(S)=2d(S) = 2:

TikZ Graph

El cuasicamino ff-aumentable es πFS={(F,2),(2,S)}\pi_{FS} = \{(F, 2), (2, S)\} y su incremento es:

ΔπFS=min{10000,10000}=1000\begin{align*} \Delta_{\pi_{FS}} = \min\{1000 - 0, 1000 - 0\} = 1000 \end{align*}

Por tanto, el nuevo flujo es:

fF2^=fF2+ΔπFS=0+1000=1000f2S^=f2S+ΔπFS=0+1000=1000\begin{align*} \widehat{f_{F2}} & = f_{F2} + \Delta_{\pi_{FS}} = 0 + 1000 = 1000\\ \widehat{f_{2S}} & = f_{2S} + \Delta_{\pi_{FS}} = 0 + 1000 = 1000 \end{align*}

Tercera iteración: A partir del flujo actual, tenemos que cada vértice tiene asociado el siguiente valor de dd:

TikZ Graph

Sea k=1k = 1 y entonces d(i)=k1=0d(i) = k - 1 = 0 solo para i=Fi = F. Y a partir de FF no podemos etiquetar ningún vértice nuevo ya que ambos arcos están saturados:

TikZ Graph

Por tanto, el flujo actual es máximo y el algoritmo termina aquí. El flujo máximo obtenido es:

vf=fF1^+fF2^=1000+1000=2000\begin{align*} v_f = \widehat{f_{F1}} + \widehat{f_{F2}} = 1000 + 1000 = 2000 \end{align*}

Flujo de costo mínimo

El objetivo del flujo de coste mínimo es determinar los flujos en los diferentes arcos que minimicen el coste total del flujo de la red y, simultáneamente, conservan el flujo y satisfacen las capacidades de los arcos.

Coste del flujo. Definición

Sea RFS=(V,A,p,c)R_{FS} = (V, A, p, c) una red estándar con función de costes c:ARc : A \to \mathbb{R}. El coste total asociado a un flujo ff en la red RFSR_{FS} viene dado por:

cf=(i,j)Acijfij\begin{align*} c_f = \displaystyle \sum_{(i, j) \in A} c_{ij} f_{ij}\\ \end{align*}

Coste mínimo. Definición

Sea RFS=(V,A,p,c)R_{FS} = (V, A, p, c) una red estándar con función de costes c:ARc : A \to \mathbb{R}. Un flujo ff en la red RFSR_{FS} es un flujo de coste mínimo si:

cf=minfFv(RFS)cf\begin{align*} c_f = \min_{f \in \mathcal{F}_v(R_{FS})} c_f \end{align*}

donde Fv(RFS)={f:f es flujo de valor v en RFS}\mathcal{F}_v(R_{FS}) = \left\{f : f \text{ es flujo de valor } v \text{ en } R_{FS}\right\}.

💡Nota

Aunque el problema se podría resolver hallando todos los flujos de valor vv y seleccionando el de coste mínimo, esto tiene un coste computacional muy elevado. Por tanto, hay que emplear otros métodos alternativos.

Cuasicircuito. Definición

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, un cuasicircuito es un cuasicamino en el que el primer y último vértice coinciden.

Cuasicircuito ff-aumentable. Definición

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar y ff flujo en dicha red. Un cuasicircuito es ff-aumentable si todo arco positivo no está saturado y todo arco negativo no es libre.

💡Nota

Notar que un cuasicircuito puede ser aumentable en un sentido y no en el otro.

Holgura del cuasicircuito. Definición

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, ff flujo en dicha red y ϕ\phi un cuasicircuito ff-aumentable. La holgura del cuasicircuito ϕ\phi viene dada por:

Δ=mineϕΔe\begin{align*} \Delta = \min_{e \in \phi} \Delta_e\\ \end{align*}

Proposición 4.8

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, ff flujo en dicha red y ϕ\phi cuasicircuito ff-aumentable tal que la holgura mínima de sus arcos es Δϕ\Delta_\phi, si consideramos la aplicación:

fij^={fij+Δϕsi (i,j)ϕ es arco positivofijΔϕsi (i,j)ϕ es arco negativofijen otro caso\begin{align*} \widehat{f_{ij}} = \begin{cases} f_{ij} + \Delta_\phi & \text{si } (i, j) \in \phi \text{ es arco positivo}\\ f_{ij} - \Delta_\phi & \text{si } (i, j) \in \phi \text{ es arco negativo}\\ f_{ij} & \text{en otro caso} \end{cases} \end{align*}

se tiene que la colección f^={fij^:(i,j)A}\widehat{f} = \{\widehat{f_{ij}} : (i, j) \in A\} es un flujo en la red RFSR_{FS} con el mismo valor que ff.

💡Nota

Notar que los cuasicircuitos de flujo aumentable en realidad, no aumentan el valor de flujo, sino que lo mantienen constante.

📐Demostración

La demostración es análoga a la de la proposición 4.1. El cambio viene dado en el valor de f^\widehat{f} que, en este caso es:

vf^=jΓ+(F)fFj^\begin{align*} v_{\widehat{f}} & = \displaystyle \sum_{j \in \Gamma^{ + }(F)} \widehat{f_{Fj}} \end{align*}

y podemos considerar dos casos:

  • Si FϕF \notin \phi entonces:
vf^=jΓ+(F)fFj^=jΓ+(F)fFj=vf\begin{align*} v_{\widehat{f}} = \displaystyle \sum_{j \in \Gamma^{ + }(F)} \widehat{f_{Fj}} = \displaystyle \sum_{j \in \Gamma^{ + }(F)} f_{Fj} = v_f \end{align*}
  • SI FϕF \in \phi entonces:
vf^=jΓ+(F)fFj^=jΓ+(F),(F,j)ϕfFj^+jΓ+(F),(F,j)ϕfFj^=jΓ+(F),(F,j)ϕfFj+jΓ+(F),(F,j)ϕfFj^\begin{align*} v_{\widehat{f}} = \displaystyle \sum_{j \in \Gamma^{ + }(F)} \widehat{f_{Fj}} = \displaystyle \sum_{j \in \Gamma^{ + }(F), (F, j) \notin \phi} \widehat{f_{Fj}} + \displaystyle \sum_{j \in \Gamma^{ + }(F), (F, j) \in \phi} \widehat{f_{Fj}} & = \displaystyle \sum_{j \in \Gamma^{ + }(F), (F, j) \notin \phi} f_{Fj} + \displaystyle \sum_{j \in \Gamma^{ + }(F), (F, j) \in \phi} \widehat{f_{Fj}} \end{align*}

Pero como ϕ\phi cuasicircuito, no repite vértices, con lo que FF solo está una vez en ϕ\phi y además Γ(F)=\Gamma^{ - }(F) = \emptyset, entones, si j,kV\exists j, k \in V tales que (F,j),(F,k)ϕ(F, j), (F, k) \in \phi entonces uno de los dos arcos será negativo y otro positivo, es decir:

TikZ Graph

Por lo tanto,

jΓ+(F),(F,j)ϕfFj^=fFj^+fFk^=(fFj+Δϕ)+(fFkΔϕ)=jΓ+(F),(F,j)ϕfFj\begin{align*} \displaystyle \sum_{j \in \Gamma^{ + }(F), (F, j) \in \phi} \widehat{f_{Fj}} & = \widehat{f_{Fj}} + \widehat{f_{Fk}} = (f_{Fj} + \Delta_\phi) + (f_{Fk} - \Delta_\phi) = \displaystyle \sum_{j \in \Gamma^{ + }(F), (F, j) \in \phi} f_{Fj} \end{align*}

Por lo tanto, sustituyendo en la ecuación se tiene que:

vf^=jΓ+(F),(F,j)ϕfFj+jΓ+(F),(F,j)ϕfFj=jΓ+(F)fFj=vf\begin{align*} v_{\widehat{f}} & = \displaystyle \sum_{j \in \Gamma^{ + }(F), (F, j) \notin \phi} f_{Fj} + \displaystyle \sum_{j \in \Gamma^{ + }(F), (F, j) \in \phi} f_{Fj} = \displaystyle \sum_{j \in \Gamma^{ + }(F)} f_{Fj} = v_f \end{align*}

Red asociada al flujo. Definición

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar y ff un flujo en dicha red, se define la red asociada al flujo ff como la red Rf=(V,Af,p)R_f = (V, A_f, p) con:

Af={(i,j):(i,j)A(j,i)A con uij>0}\begin{align*} A_f = \left\{(i, j) : (i, j) \in A \lor (j, i) \in A \text{ con } u_{ij} > 0\right\} \end{align*}

donde definimos uiju_{ij} como:

uij={pijfijsi (i,j)Afjisi (j,i)A\begin{align*} u_{ij} = \begin{cases} p_{ij} - f_{ij} & \text{si } (i, j) \in A\\ f_{ji} & \text{si } (j, i) \in A \end{cases} \end{align*}

💡Nota

Así, se pueden dar tres casos para una arista (i,j)(i, j) en la red asociada al flujo ff:

  • Si 0<fij<pij0 < f_{ij} < p_{ij} entonces (i,j)(i, j) es un arco positivo y (j,i)(j, i) es un arco negativo.
  • Si fij=0f_{ij} = 0 entonces (i,j)(i, j) es un arco positivo
  • Si fij=pijf_{ij} = p_{ij} entonces (j,i)(j, i) es un arco negativo.

Proposición 4.9

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, ff flujo y Rf=(V,Af,p)R_f = (V, A_f, p) red asociada al flujo ff, se cumple que:

ϕ cuasicircuito f-aumentable en RFS    arcos de ϕ generan circuito elemental β\begin{align*} \phi \text{ cuasicircuito } f\text{-aumentable en } R_{FS} \iff \text{arcos de } \phi \text{ generan circuito elemental } \beta\\ \end{align*}

📐Demostración

  • \Leftarrow) Sea ϕ\phi cuasicircuito ff-aumentable en RFSR_{FS}. Entonces, estará formado por arcos positivos y negativos:

  • \Rightarrow) Sea β\beta circuito elemental en RfR_f, como ϕ\phi está formado por los arcos de β\beta con misma o distinta orientación, entonces ϕ\phi es un cuasicircuito en RFSR_{FS}.

Ahora, como todos los arcos de β\beta tienen peso positivo, entonces:

uij>0(i,j)β\begin{align*} u_{ij} > 0 \quad \forall (i, j) \in \beta \end{align*}

Si ese arco proviene de un arco positivo de ϕ\phi entonces:

uij=pijfij>0    fij<pij    (i,j) es arco positivo en ϕ\begin{align*} u_{ij} = p_{ij} - f_{ij} > 0 \implies f_{ij} < p_{ij} \implies (i, j) \text{ es arco positivo en } \phi \end{align*}

Si ese arco proviene de un arco negativo de ϕ\phi entonces:

uij=fji>0    fji>0    (i,j) es arco negativo en ϕ\begin{align*} u_{ij} = f_{ji} > 0 \implies f_{ji} > 0 \implies (i, j) \text{ es arco negativo en } \phi \end{align*}

Por lo tanto, ϕ\phi es un cuasicircuito ff-aumentable en RFSR_{FS}.

💡Nota

Notar que aunque el flujo se mantenga constante al aumentar por un cuasicircuito ff-aumentable, el coste del flujo puede variar. Además, esta variación del coste puede ser positiva, negativa o nula. Por tanto, no todo cuasicircuito ff-aumentable es útil para minimizar el coste del flujo.

Selección de circuitos elementales de RfR_f. Idea

Intuitivamente buscamos cuasicircuitos de flujo aumentable que reduzcan el coste del flujo. Podemos notar que si el cuasicircuito de flujo aumentable ϕ\phi verifica que:

e poscee negce<0\begin{align*} \displaystyle \sum_{e \text{ pos}} c_e - \displaystyle \sum_{e \text{ neg}} c_e < 0 \end{align*}

entonces el coste del nuevo flujo es menor (veremos que esto es cierto en general).

Red residual. Definición

Sea RFS=(V,A,p,c)R_{FS} = (V, A, p, c) red estándar y ff flujo en dicha red, se define la red residual asociada al flujo ff como la red Rf=(V,Af,u,r)R_f = (V, A_f, u, r) donde:

Af={(i,j):(i,j)A(j,i)A con uij>0}\begin{align*} A_f = \left\{(i, j) : (i, j) \in A \lor (j, i) \in A \text{ con } u_{ij} > 0\right\} \end{align*}

donde se definen:

uij={pijfijsi (i,j)Afjisi (j,i)Ayrij={cijsi (i,j)Acjisi (j,i)A\begin{align*} u_{ij} = \begin{cases} p_{ij} - f_{ij} & \text{si } (i, j) \in A\\ f_{ji} & \text{si } (j, i) \in A \end{cases}\qquad \text{y} \qquad r_{ij} = \begin{cases} c_{ij} & \text{si } (i, j) \in A\\ -c_{ji} & \text{si } (j, i) \in A \end{cases} \end{align*}

✏️Nota

Así, se pueden dar tres casos para una arista (i,j)(i, j) en la red residual RfR_f:

  • Si 0<fij<pij0 < f_{ij} < p_{ij} entonces:

TikZ Graph

  • Si fij=0f_{ij} = 0 entonces:

TikZ Graph

  • Si fij=pijf_{ij} = p_{ij} entonces:

TikZ Graph

Notar que la red residual es similar a la red asociada al flujo, pero en este caso los arcos tienen asociados tanto una capacidad residual como un coste asociado. De esta forma, mantenemos toda la información necesaria para poder trabajar con los cuasicircuitos ff-aumentables.

💡Nota

En las redes residuales, los parámetros que tenemos miden:

  • uiju_{ij}: lo que podemos aumentar el flujo de ese arco (o lo que podemos reducirlo si está en sentido contrario).
  • rijr_{ij}: el coste por unidad de flujo que se incrementa (o decrementa si está en sentido contrario).

Así, dado un cuasicircuito ff-aumentable ϕ\phi, consideramos β\beta como el circuito elemental generado por los arcos de ϕ\phi en la red residual RfR_f. Entonces, el coste asociado a aumentar el flujo en el cuasicircuito ϕ\phi es:

eβre\begin{align*} \displaystyle \sum_{e \in \beta} r_e \end{align*}

Y se dan dos casos:

  • Si re<0\sum r_e < 0 entonces aumentar el flujo en el cuasicircuito ϕ\phi reduce el coste total del flujo. Además, sabemos que permitirá distribuir Δ\Delta unidades de flujo, donde Δ\Delta es la holgura del cuasicircuito ϕ\phi ahorrando un coste total de re\sum r_e por cada unidad de flujo aumentada. Es decir, el ahorro total será:
Δeβre\begin{align*} \Delta \cdot \displaystyle \sum_{e \in \beta} r_e \end{align*}
  • Si re0\sum r_e \geq 0 entonces aumentar el flujo en el cuasicircuito ϕ\phi no reduce el coste total del flujo, por lo que no es interesante. Es el caso contrario al anterior.

Proposición 4.10

Sea RFS=(V,A,p,c)R_{FS} = (V, A, p, c) red estándar, ff flujo en dicha red, ϕ\phi cuasicircuito ff-aumentable y β\beta el circuito elemental generado por los arcos de ϕ\phi en la red residual RfR_f. Si consideramos el flujo f^\hat{f} definido en la proposición 4.8, entonces:

cf^=cf+Δϕeβre\begin{align*} c_{\hat{f}} = c_f + \Delta_\phi \cdot \displaystyle \sum_{e \in \beta} r_e\\ \end{align*}

📐Demostración

Basta notar que:

cf^=eA,eϕcefe^+eA,eϕcefe^==eA,eϕcefe+eA,eϕ posce(fe+Δϕ)+eA,eϕ negce(feΔϕ)==eAcefe+Δϕ(eA,eϕ posceeA,eϕ negce)=cf+Δϕeβre\begin{align*} c_{\hat{f}} & = \displaystyle \sum_{e \in A, e \notin \phi} c_e \widehat{f_e} + \displaystyle \sum_{e \in A, e \in \phi} c_e \widehat{f_e} = \\[2ex] & = \displaystyle \sum_{e \in A, e \notin \phi} c_e f_e + \displaystyle \sum_{e \in A, e \in \phi \text{ pos}} c_e (f_e + \Delta_\phi) + \displaystyle \sum_{e \in A, e \in \phi \text{ neg}} c_e (f_e - \Delta_\phi) = \\[2ex] & = \displaystyle \sum_{e \in A} c_e f_e + \Delta_{\phi} \left(\displaystyle \sum_{e \in A, e \in \phi \text{ pos}} c_e - \displaystyle \sum_{e \in A, e \in \phi \text{ neg}} c_e\right) = c_f + \Delta_\phi \cdot \displaystyle \sum_{e \in \beta} r_e \end{align*}

💡Nota

Notar que por la definición de red residual es directo que:

eβre=eϕ posceeϕ negce\begin{align*} \displaystyle \sum_{e \in \beta} r_e = \displaystyle \sum_{e \in \phi\text{ pos}} c_e - \displaystyle \sum_{e \in \phi\text{ neg}} c_e \end{align*}

Es decir, el coste asociado a aumentar el flujo en el cuasicircuito ϕ\phi es igual a la suma de los costes de los arcos positivos menos la suma de los costes de los arcos negativos. Con lo cual, si queremos disminuir el coste total del flujo, debemos buscar cuasicircuitos ff-aumentables tales que:

eβre<0\begin{align*} \displaystyle \sum_{e \in \beta} r_e < 0 \end{align*}

Y además, por definición tenemos que:

Δϕ=min{mineϕ pos(pefe),mineϕ negfe}=mineβue\begin{align*} \Delta_{\phi} = \min\left\{\min_{e \in\phi \text{ pos}} (p_e - f_e), \min_{e \in \phi \text{ neg}} f_e\right\} = \min_{e \in \beta} u_e \end{align*}

Corolario 4.11

Sea ff flujo de valor vfv_f en la red estándar RFS=(V,A,p,c)R_{FS} = (V, A, p, c). Si ff es un flujo de coste mínimo, entonces no existe ningún circuito elemental β\beta en RfR_f con:

eβre<0\begin{align*} \displaystyle \sum_{e \in \beta} r_e < 0\\ \end{align*}

📐Demostración

Supongamos que existe β\beta circuito elemental en RfR_f con re<0\sum r_e < 0. Entonces, por la proposición 4.9 existe un cuasicircuito ff-aumentable ϕ\phi en RFSR_{FS} que genera el circuito elemental β\beta. Si consideramos el flujo f^\hat{f} definido en la proposición 4.8, entonces por la proposición 4.10 se tiene que:

cf^=cf+Δϕeβre<cf\begin{align*} c_{\hat{f}} = c_f + \Delta_\phi \cdot \displaystyle \sum_{e \in \beta} r_e < c_f \end{align*}

pero esto contradice que ff es un flujo de coste mínimo. Por tanto, no puede existir tal circuito elemental β\beta.

Red de pesos asociada a una red estándar. Definición

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar y f,ff, f^* dos flujos en dicha red con vf=vfv_{f} = v_{f^*}, se define la red de pesos Rff=(V,Aff,ff)R_{ff^*} = (V, A_{ff^*}, f^* - f) tal que:

  • Tiene los mismos vértices que RFSR_{FS}.
  • Los arcos son:
Aff={(i,j):(i,j)A con fij<fij(j,i)A con fji>fji}\begin{align*} A_{ff^*} = \left\{(i, j) : (i, j) \in A \text{ con } f_{ij} < f^*_{ij} \lor (j, i) \in A \text{ con } f_{ji} > f^*_{ji}\right\} \end{align*}

es decir, están los mismos arcos que en AA si su flujo en ff^* es mayor que en ff y los arcos que están en sentido contrario si su flujo en ff^* es menor que en ff.

  • El peso de cualquier arco (i,j)Aff(i, j) \in A_{ff^*} es:
(ff)ij={fijfijsi (i,j)A con fij<fijfjifjisi (j,i)A con fji>fji\begin{align*} (f^* - f)_{ij} = \begin{cases} f^*_{ij} - f_{ij} & \text{si } (i, j) \in A \text{ con } f_{ij} < f^*_{ij}\\ f_{ji} - f^*_{ji} & \text{si } (j, i) \in A \text{ con } f_{ji} > f^*_{ji} \end{cases} \end{align*}

Lema 4.12

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, ff y ff^* dos flujos diferentes con vf=vfv_f = v_{f^*} y Rff=(V,Aff,ff)R_{ff^*} = (V, A_{ff^*}, f^* - f) entonces:

j:(i,j)Aff(ff)ij=j:(j,i)Aff(ff)jiiV\begin{align*} \displaystyle \sum_{j: (i, j) \in A_{ff^*}} (f^* - f)_{ij} = \displaystyle \sum_{j: (j, i) \in A_{ff^*}} (f^* - f)_{ji} \quad \forall i \in V\\ \end{align*}

Lema 4.13

Sea RFS=(V,A,p)R_{FS} = (V, A, p) red estándar, ff y ff^* dos flujos diferentes con vf=vfv_f = v_{f^*} entonces existe una colección rr de circuitos B={β1,,βr}\mathcal{B} = \{\beta_1, \dots , \beta_r\} en la red de pesos RffR_{ff^*} con rAr \leq |A| tales que:

(ff)ij=βkB:(i,j)βkΛβk(i,j)Aff\begin{align*} (f^* - f)_{ij} = \displaystyle \sum_{\beta_k \in \mathcal{B}: (i, j) \in \beta_k} \Lambda_{\beta_k} \quad \forall (i, j) \in A_{ff^*} \end{align*}

donde Λβk=min(i,j)βk(ff)ij\Lambda_{\beta_k} = \displaystyle \min_{(i, j) \in \beta_k} (f^* - f)_{ij}.

💡Nota

Lo que nos dice este lema es que la diferencia entre dos flujos de igual valor se puede expresar como la suma de flujos en circuitos elementales en la red de pesos asociada.

Teorema 4.14

Sea ff flujo de valor vfv_f en la red estándar RFS=(V,A,p,c)R_{FS} = (V, A, p, c). Si no existe ningún circuito elemental β\beta en RfR_f con:

eβre<0\begin{align*} \displaystyle \sum_{e \in \beta} r_e < 0 \end{align*}

entonces ff es un flujo de coste mínimo en RFSR_{FS}.

Corolario 4.15

Un flujo ff de valor vfv_f en una red estándar con costes RFS=(V,A,p,c)R_{FS} = (V, A, p, c) es un flujo de coste mínimo si y solo si no existe ningún circuito elemental β\beta en RfR_f con:

eβre<0\begin{align*} \displaystyle \sum_{e \in \beta} r_e < 0\\ \end{align*}

Algoritmo de Klein

El objetivo del algoritmo es encontrar un flujo ff de manera que cualquier otro flujo ff^* con vf=vfv_f = v_{f^*} se tiene que cumplir que cfcfc_f \leq c_{f^*}. El algoritmo es el siguiente:

  1. Hacer t=0t = 0 y asignar f0>0f^0 > 0 de valor vv a la red RFS=(V,A,p,c)R_{FS} = (V, A, p, c).
  2. Construir la red residual Rft=(V,Aft,u,r)R_{f^t} = (V, A_{f^t}, u, r) asociada a RFSR_{FS} y al flujo ftf^t.
  3. Buscar en RftR_{f^t} un circuito elemental βt\beta_t con:
eβtre<0\begin{align*} \displaystyle \sum_{e \in \beta_t} r_e < 0 \end{align*}

Si existe ir al paso 4, si no ftf^t es flujo de valor vv y coste mínimo cftc_{f^t} 4. Calcular Δt=min(i,j)βtuij\Delta_t = \min_{(i, j) \in \beta_t} u_{ij} y definir el flujo ft+1f^{t + 1} como:

fijt+1={fijt+Δtsi (i,j)ϕt es arco positivofijtΔtsi (i,j)ϕt es arco negativofijten otro caso\begin{align*} f_{ij}^{t + 1} = \begin{cases} f_{ij}^t + \Delta_t & \text{si } (i, j) \in \phi_t \text{ es arco positivo}\\ f_{ij}^t - \Delta_t & \text{si } (i, j) \in \phi_t \text{ es arco negativo}\\ f_{ij}^t & \text{en otro caso} \end{cases} \end{align*}

donde ϕt\phi_t es el cuasicircuito en RFSR_{FS} asociado a βt\beta_t. Hacer t=t+1t = t + 1 y volver al paso 2.

✏️Ejemplo

Sea la siguiente red estándar con costes:

TikZ Graph

Iteración 1: sea t=0t = 0 y f0f^0 flujo inicial como el de la figura, entonces:

vf0=4+5+3=12cf0=46+33+12+14+55+23+33+66+36=133\begin{align*} v_{f^0} & = 4 + 5 + 3 = 12\\ c_{f^0} & = 4 \cdot 6 + 3 \cdot 3 + 1 \cdot 2 + 1 \cdot 4 + 5 \cdot 5 + 2 \cdot 3 + 3 \cdot 3 + 6 \cdot 6 + 3 \cdot 6 = 133 \end{align*}

Construimos la red residual Rf0R_{f^0}:

TikZ Graph

... Repetir mucho que no me da la vida ...