Una red dice por dónde puede circular una cantidad y qué límite tiene cada conexión. La cantidad que enviamos debe cuadrar en todos los nodos intermedios. Aprenderemos a detectar un cuello de botella, corregir envíos anteriores y demostrar el máximo con un corte. Después cambiaremos el objetivo: transportar con menor coste y asignar tareas sin repetirlas.
Si necesitas repasar:
1. Una flecha tiene capacidad; un flujo decide cuánto se envía realmente
En una red dirigida finita, cada arco e tiene capacidad finita cₑ≥0 y una cantidad enviada fₑ con 0≤fₑ≤cₑ. En cada nodo intermedio, suma de entradas=suma de salidas: no produce ni consume cantidad. Las unidades deben ser compatibles, por ejemplo litros por minuto en todos los arcos.
El valor del flujo es la salida neta de la fuente s: sumamos lo que sale y restamos lo que entra. Por conservación coincide con la entrada neta al sumidero t. Sumar cantidades de todos los arcos contaría varias veces lo que atraviesa varios nodos. Un arco puede tener capacidad libre y otro estar saturado.
Comprobar balances en una red completa
Arcos s→a:3, s→b:2, a→b:1, a→t:2, b→t:3. Enviamos esas mismas cantidades.
Nodo a
Entra tres desde s; salen uno a b y dos a t: 3=1+2.
Nodo b
Entran dos desde s y uno desde a; salen tres a t: 2+1=3.
Fuente y destino
De s salen 3+2=5; a t entran 2+3=5.Ningún arco supera su capacidad.
El flujo es factible y su valor es cinco.
En el dibujo cada etiqueta separa flujo y capacidad con una barra.
La misma cantidad puede aparecer en varios arcos
Serie s→a→t con capacidad cuatro en cada arco; enviamos cuatro.
Conservación
En a entran cuatro y salen cuatro.
Valor
La fuente emite cuatro y el sumidero recibe cuatro.
Doble conteo
Sumar ambos arcos daría ocho, pero no se han entregado ocho unidades distintas.
El valor del flujo es cuatro, no ocho.
Una circulación adicional en un ciclo tampoco aumentaría por sí sola la entrega neta a t.
2. El menor espacio disponible del camino limita todo el envío
Una cantidad enviada por un camino utiliza cada arco del recorrido. Su aumento máximo es el menor espacio disponible entre esos arcos. Al usarlo actualizamos todos ellos. No elegimos el mayor tramo e ignoramos el que no soporta la misma cantidad.
Si dos rutas comparten un arco, comparten su capacidad. No se cuenta una vez para cada ruta. Rutas sin arcos compartidos pueden sumar sus aportaciones si no hay otro límite común del modelo; un límite de procesamiento en un nodo también tendría que representarse si existiera.
Calcular un cuello de botella antes de enviar
Un camino tiene capacidades libres siete, cuatro y seis.
Comparar
La menor es cuatro; no podemos enviar más por todo el camino.
Actualizar
Al enviar cuatro, las capacidades libres quedan tres, cero y dos.
Comprobar
El tramo central queda saturado; los otros dos no crean un permiso para enviar más por ese mismo recorrido.
El aumento posible por ese camino es cuatro.
Se ha usado capacidad libre; si ya hubiese flujo, se restaría primero del límite original.
Dos rutas de capacidad cuatro pueden compartir un límite de cinco
Rutas s→a→c→t y s→b→c→t. Todos los arcos anteriores a c tienen capacidad cuatro; c→t tiene cinco.
Rutas aisladas
Cada una, si estuviera sola, permitiría cuatro.
Límite compartido
Todo el flujo debe usar c→t, así la suma de ambos envíos es como máximo cinco, no ocho.
Alcanzar
Cuatro por la primera y uno por la segunda respetan todo y entregan cinco.
La capacidad compartida limita el total.
El corte que separa solo t del resto también tiene capacidad cinco y confirma que no se puede superar.
3. Un arco residual inverso permite deshacer parte de una decisión anterior
Para un arco original a→b de capacidad c y flujo f, la residual hacia delante permite c−f y la inversa b→a permite f. Usar la inversa reduce el flujo original; no añade un conducto físico nuevo. Si también existe un arco original b→a, son decisiones distintas y hay que conservar su identidad.
Un camino residual desde s hasta t ajusta todos sus arcos: aumenta los originales recorridos hacia delante y disminuye los recorridos al revés. Las correcciones conservan balances y elevan el valor neto. Buscar solo caminos físicos que no se hayan usado puede quedarse atascado antes del máximo.
Actualizar correctamente los dos sentidos residuales
Arco a→b de capacidad cinco y flujo tres.
Espacios
Hacia delante queda dos; hacia atrás podemos deshacer como máximo tres.
Deshacer dos
Dentro de una corrección residual válida, recorrer b→a con cantidad dos cambia el flujo original a uno.
Nuevas residuales
Hacia delante quedan cuatro y hacia atrás uno. Deshacer cuatro de golpe antes habría excedido el flujo tres disponible.
La residual inversa lleva cuenta de decisiones reversibles.
No se interpreta como transportar físicamente dos unidades por un arco original inexistente.
Deshacer un arco libera una combinación mejor
Todos los arcos del dibujo tienen capacidad uno; el primer envío es s→a→c→t.
Atasco aparente
La búsqueda solo física libre intenta s→b→c, pero c→t está ocupado; también s→a está ocupado.
Camino residual
s→b→c→a→d→t usa c→a para cancelar a→c y los demás pasos para aumentar flujo.
Resultado
Quedan dos rutas: s→a→d→t y s→b→c→t, cada una de valor uno.
Control
a recibe uno y envía uno a d; c recibe uno desde b y envía uno a t. El valor total sube de uno a dos.
La corrección conserva factibilidad y evita la elección previa que bloqueaba la red.
El arco inverso no transporta una unidad extra además de la anterior: la cancela.
4. Un corte da una cota sumando solo capacidades que salen de su lado
Elegimos un conjunto S con s dentro y t fuera. Al sumar los balances de sus nodos, los arcos internos aparecen una vez entrando y otra saliendo y se cancelan. El valor es flujo saliente de S menos flujo entrante. La salida no supera su capacidad y las entradas se restan.
Así el valor es como máximo la suma de cₑ para arcos originales que salen de S. No sumamos los entrantes ni todos los que tocan un nodo de S. El corte es una cota para cualquier flujo factible, aunque ese flujo use otras rutas diferentes de las que dibujamos primero.
Dos cortes distintos pueden dar la misma cota
Red de valor cinco: s→a:3, s→b:2, a→b:1, a→t:2, b→t:3.
Solo la fuente
S={s} tiene arcos salientes s→a y s→b, capacidad 3+2=5.Añadir a
S={s, a} tiene salientes s→b, a→b y a→t: 2+1+2=5.Lo que se elimina
s→a es interno en el segundo corte y ya no se cuenta.El flujo conocido de valor cinco alcanza ambas cotas.
Ningún flujo factible puede superar cinco.
La capacidad del corte depende de qué arcos cruzan hacia fuera, no del número de nodos elegidos.
Una gran capacidad que entra no agranda el corte
Arcos s→t:2, s→a:1, a→s:100 y a→t:3.
Corte S={s}
Las capacidades salientes suman 2+1=3; la de a→s entra y no se suma.
Flujo que lo alcanza
Enviamos dos por s→t y uno por s→a→t; a→s lleva cero.
Balances
a recibe uno y entrega uno. La fuente emite tres netos y t recibe tres.
El máximo es tres, no ciento tres.
Si hubiese circulación de retorno a s, se restaría al calcular su valor neto.
5. Flujo y corte de igual valor certifican el máximo
El teorema de flujo máximo y corte mínimo iguala el mayor flujo factible con la menor capacidad de corte en una red finita de capacidades no negativas. Para construir el certificado, cuando no queda camino residual a t tomamos S como los nodos alcanzables desde s.
Todo arco original que sale de S está saturado; todo original que entra tiene flujo cero, pues su inversa permitiría salir de S. Por tanto el valor coincide con la capacidad del corte.
Con capacidades enteras y flujo inicial cero, cada aumento residual conserva integridad y eleva el valor al menos uno. Como la capacidad total que sale de s es una cota finita, hay a lo sumo esa cantidad de aumentos exitosos. Es una garantía sencilla dependiente de magnitudes, no una cota polinómica en sus cifras binarias.
Para capacidades reales arbitrarias no se extiende ese argumento sin otra regla o análisis.
Certificar una solución sin seguir buscando rutas
En la red principal, el flujo de valor cinco satura s→a y s→b.
Alcanzabilidad residual
Desde s no hay salida residual hacia delante, así S={s}.
Corte
Su capacidad es 3+2=5.Igualdad
El flujo vale cinco y todo flujo está acotado por ese corte; no existe mejora.
Cinco es el flujo máximo y ese corte es mínimo.
Un corte de capacidad mayor también sería una cota, pero no cerraría por sí solo la optimalidad.
El límite de iteraciones entero puede ser válido sin ser exacto
Dos rutas sin arcos compartidos: s→a→t con capacidad cuatro y s→b→t con capacidad tres.
Aumentos
Desde cero enviamos cuatro por la primera y tres por la segunda: dos aumentos.
Cota de terminación
La salida total de s es siete. El argumento entero permitía como máximo siete aumentos de al menos uno.
Certificado
Ambas rutas entregan siete y el corte {s} tiene capacidad siete.
La cota siete de aumentos no afirmaba que fueran necesarios siete.
Escoger rutas y sus cuellos de botella completos puede enviar varias unidades en un solo aumento.
6. Minimizar coste requiere fijar qué cantidad o demanda se debe satisfacer
En flujo de coste mínimo, cada arco tiene coste unitario kₑ y se minimiza Σkₑfₑ sujeto a capacidades y balances de oferta o demanda. Sin una cantidad requerida, un modelo con todos los costes positivos podría preferir no transportar nada. Maximizar cantidad y minimizar coste son objetivos diferentes.
Las capacidades siguen comprobándose aunque cambie el objetivo. Una corrección residual inversa de un arco tiene coste −kₑ porque deshace una contribución anterior. No se interpreta como una oportunidad física ilimitada de ganar coste negativo: está limitada por el flujo que se pueda cancelar y por el resto de la corrección.
Satisfacer tres unidades con una ruta barata y otra cara
s→a→t admite dos unidades y cuesta una por unidad: costes de arcos uno y cero. s→b→t admite cuatro y cuesta tres por unidad: costes tres y cero. Demanda exacta tres.
Cantidad
Si q_A+q_B=3 y q_A≤2, entonces q_B≥1.Coste
q_A+3q_B=3+2q_B≥5.Alcanzar
q_A=2, q_B=1 es factible y cuesta cinco.Enviar el máximo seis costaría catorce y resolvería otra cantidad.
El coste mínimo para la demanda tres es cinco.
En cada ruta la misma cantidad recorre sus dos arcos, conservando los nodos intermedios.
El signo residual refleja el coste que se elimina
Un arco cuesta cinco por unidad y lleva flujo tres; una corrección válida cancela dos unidades en él.
Antes
Su contribución al coste era 5·3=15.Después
El flujo original baja a uno y contribuye cinco.
Cambio
La reducción es diez; recorrer la residual inversa con dos unidades tiene coste 2·(−5)=−10.
El coste inverso lleva cuenta de una cancelación real.
La corrección completa debe seguir respetando los balances y capacidades de todos los demás arcos.
7. Una asignación usa una vez cada agente y una vez cada tarea
En el caso cuadrado, xᵢⱼ=1 significa que el agente i realiza la tarea j. Exigimos xᵢⱼ∈{0,1}, Σⱼxᵢⱼ=1 para cada agente y Σᵢxᵢⱼ=1 para cada tarea. El objetivo es minimizar Σcᵢⱼxᵢⱼ. Elegir el menor coste de cada fila puede repetir una columna.
Una cota inferior se construye con números rᵢ y sⱼ tales que rᵢ+sⱼ≤cᵢⱼ. En cualquier asignación, cada rᵢ y cada sⱼ se suma exactamente una vez, así el coste total es al menos Σrᵢ+Σsⱼ. Una asignación que alcance esa cota queda certificada.
Leer la tabla sin asignar la misma tarea a dos personas
Tres agentes y tres tareas; cada entrada es su coste.
Costes
Las filas son agentes y las columnas tareas.
Agente 1 2 3 A 4 1 6 B 2 5 3 C 5 2 4 Elección por filas
A preferiría 2, B preferiría 1 y C preferiría 2: se repite tarea dos, así no es una asignación válida.
Plan factible
A→2, B→1, C→3 usa cada fila y columna una vez y cuesta 1+2+4=7.
Hemos encontrado un plan factible de coste siete.
Para demostrar que es mínimo añadimos la cota del siguiente ejemplo.
Un certificado evita enumerar las seis asignaciones
Usamos r_A=1, r_B=1, r_C=2 y s₁=1, s₂=0, s₃=2.
Cotas por casilla
Las sumas rᵢ+sⱼ son filas (2;1;3), (2;1;3), (3;2;4), cada una menor o igual que la fila de costes correspondiente.
Cota total
Σr=4 y Σs=3; toda asignación cuesta al menos siete.Alcanzar
El plan A→2, B→1, C→3 cuesta siete; por tanto es óptimo.
El mínimo es siete y queda certificado para todas las asignaciones.
Las cotas se comprueban en las nueve casillas, no solo en las tres elegidas.
8. La estructura integral garantiza que exista una solución entera, no que todo punto lo sea
En redes de capacidades enteras, el algoritmo de aumentos desde cero construye un flujo máximo entero. Para asignación, una matriz no negativa con filas y columnas de suma uno es combinación convexa de matrices de permutación. Una justificación usa Hall sobre sus entradas positivas: cualquier conjunto de filas suma su tamaño y necesita al menos ese número de columnas vecinas.
Existe una asignación con entradas positivas; tomamos el mínimo ε de ellas.
Si ε<1, restamos ε veces su matriz y dividimos el resto por 1−ε: las sumas vuelven a uno y desaparece al menos una entrada positiva. Repetir termina porque el soporte se reduce, y da la combinación de asignaciones.
Un objetivo lineal sobre esa combinación no puede ser menor que el menor coste de sus asignaciones, así existe un óptimo entero. Esto no convierte todos los puntos factibles u óptimos en enteros. La comprobación final revisa además límites, balances, exclusividad y valor, con un corte o una cota apropiada al objetivo.
Descomponer una asignación fraccionaria muestra de dónde viene su coste
Matriz de filas (1/2;1/2;0), (1/2;0;1/2), (0;1/2;1/2), con la tabla de costes anterior.
Factibilidad
Cada fila y columna suma uno, pero sus entradas no son binarias.
Dos asignaciones
Es el promedio de A→1, B→3, C→2 y A→2, B→1, C→3.Costes
La primera cuesta 4+3+2=9 y la segunda siete.La matriz fraccionaria cuesta (9+7)/2=8, por encima de una de sus componentes.
La relajación contiene fracciones, pero aquí no mejoran el óptimo entero siete.
La conclusión se basa en la estructura de asignación, no en redondear cada entrada.
Capacidades enteras tampoco hacen entero cada flujo factible
Tomamos el flujo principal de valor cinco y dividimos todos sus envíos por dos.
Factibilidad
Los balances siguen cumpliéndose y todos los flujos quedan por debajo de sus capacidades enteras.
Fracciones
El valor pasa a 2,5 y algunos arcos llevan cantidades fraccionarias. Sigue existiendo el máximo entero cinco.
Dato no entero
Si la red fuera un único arco s→t de capacidad 2,5, su máximo ordinario sería 2,5; no se aplica la garantía de capacidades enteras.
Existencia de un óptimo entero es distinta de integridad de cualquier punto factible.
Añadir integridad al último flujo produciría otro problema cuyo máximo sería dos.
Ahora lo resolvemos de principio a fin.
EJEMPLO RESUELTO 1
Un cuello de botella
La red es s→a de capacidad 5 y a→t de capacidad 3. Halla el flujo máximo.
Arcos
s→a tiene capacidad cinco y a→t capacidad tres.Conservación
Al no haber otros arcos en a, la misma cantidad q debe pasar por ambos.
Límites
q≤5 y q≤3, además q≥0.Enviar
q=3 respeta ambos límites y entrega tres en t.Corte
S={s, a} deja como única salida a→t, de capacidad tres.
Certificado
Flujo tres y corte tres coinciden; el máximo es tres.
Flujo máximo 3.
El corte {s,a} tiene capacidad 3 y coincide con el flujo.
EJEMPLO RESUELTO 2
Asignar dos tareas
Costes: A realiza tareas 1,2 por 2,5; B por 4,1. Asigna ambas.
Costes
A realiza tareas uno y dos por dos y cinco; B por cuatro y uno.
Primera asignación
A→1, B→2 cuesta 2+1=3.Segunda asignación
A→2, B→1 cuesta 5+4=9.Exhaustividad
Con dos agentes y dos tareas, esas son las únicas dos asignaciones que usan cada tarea una vez.
Comparar
Tres es menor que nueve.
Respuesta
El mínimo es tres, asignando A a la primera tarea y B a la segunda; se cumplen ambas exclusividades.
Coste mínimo 3.
Cada agente y cada tarea aparecen exactamente una vez.
Los símbolos que hemos usado
- G=(V,E)
- Grafo de nodos y arcos dirigidos.
- cₑ≥0 / fₑ
- Capacidad de un arco / flujo que se envía por él.
- s / t
- Fuente / sumidero.
- Red residual
- Opciones de aumentar o deshacer flujo desde una solución factible.
- Corte(S,VS)
- Partición con s∈S y t fuera de S.
- Asignación
- Emparejamiento de agentes y tareas según restricciones.
- Variable xᵢⱼ
- Indica si el agente i realiza la tarea j en el modelo binario.
Ahora te toca a ti.
Tienes cinco ejercicios. Inténtalos; las pistas te ayudan si te atascas.
Practicar este tema →