La PizarraMatemática.

Matemáticas para ingeniería

Optimización en redes y asignación de recursos

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.

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.

Los balances y un corte permiten certificar el flujo máximo
Etiquetas: flujo / capacidadValor enviado: 53/32/21/12/23/3sabtCorte S={s}: 3+2=5Flujo y cota coinciden.
La fuente envía tres hacia a y dos hacia b. En a salen dos a t y uno a b; en b entran tres y salen tres a t. El flujo vale cinco. El corte S={s}, indicado por la línea discontinua, tiene capacidades salientes tres y dos: ningún flujo puede superarlas.

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.

  1. Nodo a

    Entra tres desde s; salen uno a b y dos a t: 3=1+2.

  2. Nodo b

    Entran dos desde s y uno desde a; salen tres a t: 2+1=3.

  3. Fuente y destino

    De s salen 3+2=5; a t entran 2+3=5.

    Ningún arco supera su capacidad.

Resultado

El flujo es factible y su valor es cinco.

Lo comprobamos

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.

  1. Conservación

    En a entran cuatro y salen cuatro.

  2. Valor

    La fuente emite cuatro y el sumidero recibe cuatro.

  3. Doble conteo

    Sumar ambos arcos daría ocho, pero no se han entregado ocho unidades distintas.

Resultado

El valor del flujo es cuatro, no ocho.

Lo comprobamos

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.

  1. Comparar

    La menor es cuatro; no podemos enviar más por todo el camino.

  2. Actualizar

    Al enviar cuatro, las capacidades libres quedan tres, cero y dos.

  3. Comprobar

    El tramo central queda saturado; los otros dos no crean un permiso para enviar más por ese mismo recorrido.

Resultado

El aumento posible por ese camino es cuatro.

Lo comprobamos

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.

  1. Rutas aisladas

    Cada una, si estuviera sola, permitiría cuatro.

  2. Límite compartido

    Todo el flujo debe usar c→t, así la suma de ambos envíos es como máximo cinco, no ocho.

  3. Alcanzar

    Cuatro por la primera y uno por la segunda respetan todo y entregan cinco.

Resultado

La capacidad compartida limita el total.

Lo comprobamos

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 paso inverso puede liberar la combinación que faltaba
Todas las capacidades: 1Rojo: primer flujo de valor 1sabcdtResidual: s→b→c→a→d→tc→a deshace parte de a→c.
El primer envío usa s→a→c→t y bloquea una búsqueda que solo mire caminos físicos libres. El camino residual verde conceptual s→b→c→a→d→t cancela a→c y permite terminar con s→a→d→t y s→b→c→t, de valor total dos. Solo el arco inverso c→a se dibuja discontinuo; los demás pasos residuales usan arcos originales.

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.

  1. Espacios

    Hacia delante queda dos; hacia atrás podemos deshacer como máximo tres.

  2. Deshacer dos

    Dentro de una corrección residual válida, recorrer b→a con cantidad dos cambia el flujo original a uno.

  3. Nuevas residuales

    Hacia delante quedan cuatro y hacia atrás uno. Deshacer cuatro de golpe antes habría excedido el flujo tres disponible.

Resultado

La residual inversa lleva cuenta de decisiones reversibles.

Lo comprobamos

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.

  1. Atasco aparente

    La búsqueda solo física libre intenta s→b→c, pero c→t está ocupado; también s→a está ocupado.

  2. Camino residual

    s→b→c→a→d→t usa c→a para cancelar a→c y los demás pasos para aumentar flujo.

  3. Resultado

    Quedan dos rutas: s→a→d→t y s→b→c→t, cada una de valor uno.

  4. 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.

Resultado

La corrección conserva factibilidad y evita la elección previa que bloqueaba la red.

Lo comprobamos

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.

  1. Solo la fuente

    S={s} tiene arcos salientes s→a y s→b, capacidad 3+2=5.
  2. Añadir a

    S={s, a} tiene salientes s→b, a→b y a→t: 2+1+2=5.
  3. 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.

Resultado

Ningún flujo factible puede superar cinco.

Lo comprobamos

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.

  1. Corte S={s}

    Las capacidades salientes suman 2+1=3; la de a→s entra y no se suma.

  2. Flujo que lo alcanza

    Enviamos dos por s→t y uno por s→a→t; a→s lleva cero.

  3. Balances

    a recibe uno y entrega uno. La fuente emite tres netos y t recibe tres.

Resultado

El máximo es tres, no ciento tres.

Lo comprobamos

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.

  1. Alcanzabilidad residual

    Desde s no hay salida residual hacia delante, así S={s}.

  2. Corte

    Su capacidad es 3+2=5.
  3. Igualdad

    El flujo vale cinco y todo flujo está acotado por ese corte; no existe mejora.

Resultado

Cinco es el flujo máximo y ese corte es mínimo.

Lo comprobamos

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.

  1. Aumentos

    Desde cero enviamos cuatro por la primera y tres por la segunda: dos aumentos.

  2. 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.

  3. Certificado

    Ambas rutas entregan siete y el corte {s} tiene capacidad siete.

Resultado

La cota siete de aumentos no afirmaba que fueran necesarios siete.

Lo comprobamos

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.

  1. Cantidad

    Si q_A+q_B=3 y q_A≤2, entonces q_B≥1.
  2. Coste

    q_A+3q_B=3+2q_B≥5.
  3. 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.

Resultado

El coste mínimo para la demanda tres es cinco.

Lo comprobamos

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.

  1. Antes

    Su contribución al coste era 5·3=15.
  2. Después

    El flujo original baja a uno y contribuye cinco.

  3. Cambio

    La reducción es diez; recorrer la residual inversa con dos unidades tiene coste 2·(−5)=−10.

Resultado

El coste inverso lleva cuenta de una cancelación real.

Lo comprobamos

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.

La asignación comprueba exclusividad en los dos lados
Cada agente, una tareaAsignación de coste 7ABC123124Coste: 1+2+4=7Cada tarea se usa una vez.
El plan A→2, B→1 y C→3 usa una vez cada agente y cada tarea, y suma costes uno, dos y cuatro. Los cruces de líneas sin un nodo no crean conexiones adicionales. La tabla del ejemplo contiene todos los costes y permite contrastar las otras asignaciones.

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.

  1. Costes

    Las filas son agentes y las columnas tareas.

    Agente123
    A416
    B253
    C524
  2. 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.

  3. Plan factible

    A→2, B→1, C→3 usa cada fila y columna una vez y cuesta 1+2+4=7.

Resultado

Hemos encontrado un plan factible de coste siete.

Lo comprobamos

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.

  1. 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.

  2. Cota total

    Σr=4 y Σs=3; toda asignación cuesta al menos siete.
  3. Alcanzar

    El plan A→2, B→1, C→3 cuesta siete; por tanto es óptimo.

Resultado

El mínimo es siete y queda certificado para todas las asignaciones.

Lo comprobamos

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 ya tenemos esa permutación.

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.

  1. Factibilidad

    Cada fila y columna suma uno, pero sus entradas no son binarias.

  2. Dos asignaciones

    Es el promedio de A→1, B→3, C→2 y A→2, B→1, C→3.
  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.

Resultado

La relajación contiene fracciones, pero aquí no mejoran el óptimo entero siete.

Lo comprobamos

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.

  1. Factibilidad

    Los balances siguen cumpliéndose y todos los flujos quedan por debajo de sus capacidades enteras.

  2. Fracciones

    El valor pasa a 2,5 y algunos arcos llevan cantidades fraccionarias. Sigue existiendo el máximo entero cinco.

  3. 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.

Resultado

Existencia de un óptimo entero es distinta de integridad de cualquier punto factible.

Lo comprobamos

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.

  1. Arcos

    s→a tiene capacidad cinco y a→t capacidad tres.
  2. Conservación

    Al no haber otros arcos en a, la misma cantidad q debe pasar por ambos.

  3. Límites

    q≤5 y q≤3, además q≥0.
  4. Enviar

    q=3 respeta ambos límites y entrega tres en t.
  5. Corte

    S={s, a} deja como única salida a→t, de capacidad tres.

  6. Certificado

    Flujo tres y corte tres coinciden; el máximo es tres.

Resultado

Flujo máximo 3.

Lo comprobamos

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.

  1. Costes

    A realiza tareas uno y dos por dos y cinco; B por cuatro y uno.

  2. Primera asignación

    A→1, B→2 cuesta 2+1=3.
  3. Segunda asignación

    A→2, B→1 cuesta 5+4=9.
  4. Exhaustividad

    Con dos agentes y dos tareas, esas son las únicas dos asignaciones que usan cada tarea una vez.

  5. Comparar

    Tres es menor que nueve.

  6. Respuesta

    El mínimo es tres, asignando A a la primera tarea y B a la segunda; se cumplen ambas exclusividades.

Resultado

Coste mínimo 3.

Lo comprobamos

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 →

Para ampliar