Está en la página 1de 33

INVESTIGACIÓN DE OPERACIONES I

Modelos Especiales de Programación Lineal


[Modelo de Redes]
Conceptos básicos de una red
Nodo

Red : conjunto de nodos y arcos Arco

i j
costo,
tiempo,
distancia,
Peso de arco =
riesgo,
capacidad
etc

Ejemplo de redes
Consideraciones para modelar PL en redes
nodo i

bi Capacidad de arco:
j i j
Xij
i j
Cantidad de flujo que ingresa Cantidad de flujo que sale [Uij]
Xji Xij
Xij ≤ Uij
Principio de conservación de energía = Ley de Kirchoff

bi = Valor del nodo (oferta o demanda)


Cantidad de Cantidad de flujo
flujo que sale que ingresa
bi Xij = Cantidad de flujo desde un origen i a destino j
(cantidad en arco ij)
Uij = Capacidad de flujo desde el origen i a destino j
(capacidad en arco ij)
FLUJO A COSTO MÍNIMO
Considere una red que representa la distribución de cantidades desde orígenes hasta destinos en las que se
indican costo de envíos y cantidades a enviar y a recibir. Nodos de oferta
Costo de envío a de un
Valor
nodo a otro nodo bi
c13 3 i
del nodo c36

+b1 1 c14 6 -b6 i


c46 +bi
c23
c24 4 c47 c37 Nodos de demanda

c15 c56 bi
2 7 -b7 i
+b2
c25 c57
Nodo de 5 Nodo de
i -bi
oferta demanda
Nodo de transbordo
Si bi=0  Nodo de transbordo
Modelo compacto de PL de flujo a costo mínimo
n n
Variable de decisión:
Min Z = ෍ ෍ Cij ∗ Xij
Xij = Cantidad de flujo desde un origen i a
cualquier otro destino j (cantidad en arco ij) i=1 j=1
Subject to
Datos:
n n
cij = Costo desde un origen i a cualquier otro
destino j (peso de arco ij)
෍ Xij − ෍ Xji = bi ; ∀ i
bi = Cantidad de oferta o demanda del nodo i j=1 j=1
(oferta con signo +, demanda con signo -,
transbordo 0) Xij ≥ 0 ; ∀ i, ∀j
n = número de nodos
Cada nodo es una restricción: i = 1 a n
[El PL encuentra la solución con n-1 restricciones]
Modelo compacto de PL de flujo a costo mínimo
Función objetivo: Conjunto (i,j) [sets derivados]
n n

Min Z = ෍ ෍ Cij ∗ Xij Min= @SUM(RED:COSTO*X);


i=1 j=1
Restricciones:
n n

෍ Xij − ෍ Xji = bi ; ∀ i
j=1 j=1
Conjunto (i)
[sets primitivo]

@FOR(NODO(I):
@SUM(RED(I,J):X(I,J))-@SUM(RED(J,I):X(J,I))=B(I));
Distribución de plantas a mercados en redes
Una empresa cuenta con dos plantas con capacidad de producción de 50 y 40 toneladas y desea enviar a sus
dos principales mercados que demandan 30 y 60 toneladas del mismo producto. Tienen distintas opciones
para enviar dichos productos y necesitan saber como hacerlo, toda vez que en sus opciones tienen costos
unitarios por tonelada. Recomiende la distribución óptima. Los datos se muestran en la siguiente figura:

2 3
7

+50 1 1 2 6 6 -30
5
5 4
8
4
+40 2 9 7 -60
6 4
5
Sintaxis compacto de PL de flujo a costo mínimo

Número de nodos arco


SETS:
NODO/1..7/:B;
RED(NODO,NODO)/1,3 1,4 1,5 2,3 2,4 2,5 3,6 3,7 4,6 4,7 5,6 5,7/:COSTO,X;
ENDSETS
DATA:
B= 50,40,0, 0, 0, -30,-60;
COSTO= 2, 1, 5, 2, 4, 6, 7, 6, 5, 8, 9, 4; Modelo de PL
ENDDATA
MIN= @SUM(RED:COSTO*X);
@FOR(NODO(I): @SUM(RED(I,J):X(I,J))-@SUM(RED(J,I):X(J,I))=B(I));
END
Variable Value Reduced Cost
B( 1) 50.00000 0.000000 Row Slack or Surplus Dual Price
B( 2) 40.00000 0.000000 1 660.0000 -1.000000
B( 3) 0.000000 0.000000 2 0.000000 -2.000000
B( 4) 0.000000 0.000000 3 0.000000 -2.000000
B( 5) 0.000000 0.000000 4 0.000000 0.000000
B( 6) -30.00000 0.000000 5 0.000000 -1.000000
B( 7) -60.00000 0.000000 6 0.000000 2.000000
COSTO( 1, 3) 2.000000 0.000000 7 0.000000 4.000000
COSTO( 1, 4) 1.000000 0.000000 8 0.000000 6.000000
COSTO( 1, 5) 5.000000 0.000000
COSTO( 2, 3) 2.000000 0.000000
COSTO( 2, 4) 4.000000 0.000000
COSTO( 2, 5) 6.000000 0.000000
COSTO( 3, 6) 7.000000 0.000000
COSTO( 3, 7) 6.000000 0.000000 Reporte del lingo
COSTO( 4, 6) 5.000000 0.000000
COSTO( 4, 7) 8.000000 0.000000
COSTO( 5, 6) 9.000000 0.000000
COSTO( 5, 7) 4.000000 0.000000
X( 1, 3) 20.00000 0.000000
X( 1, 4) 30.00000 0.000000
X( 1, 5) 0.000000 1.000000 MODEL:
X( 2, 3) 40.00000 0.000000 [_1] MIN= 2 * X_1_3 + X_1_4 + 5 * X_1_5 + 2 * X_2_3 + 4 * X_2_4 + 6 * X_2_5
X( 2, 4) 0.000000 3.000000 + 7 * X_3_6 + 6 * X_3_7 + 5 * X_4_6 + 8 * X_4_7 + 9 * X_5_6 + 4 * X_5_7;
X( 2, 5) 0.000000 2.000000 [_2] X_1_3 + X_1_4 + X_1_5 = 50;
X( 3, 6) 0.000000 3.000000 [_3] X_2_3 + X_2_4 + X_2_5 = 40;
X( 3, 7) 60.00000 0.000000 [_4] - X_1_3 - X_2_3 + X_3_6 + X_3_7 = 0;
X( 4, 6) 30.00000 0.000000 [_5] - X_1_4 - X_2_4 + X_4_6 + X_4_7 = 0;
X( 4, 7) 0.000000 1.000000 [_6] - X_1_5 - X_2_5 + X_5_6 + X_5_7 = 0;
X( 5, 6) 0.000000 7.000000 [_7] - X_3_6 - X_4_6 - X_5_6 = - 30;
X( 5, 7) 0.000000 0.000000 [_8] - X_3_7 - X_4_7 - X_5_7 = - 60;
END
Variable Value Reduced Cost
B( 1) 50.00000 0.000000 Row Slack or Surplus Dual Price
B( 2) 40.00000 0.000000 1 660.0000 -1.000000
B( 3) 0.000000 0.000000 2 0.000000 -2.000000
B( 4) 0.000000 0.000000 3 0.000000 -2.000000
B( 5) 0.000000 0.000000 4 0.000000 0.000000
B( 6) -30.00000 0.000000 5 0.000000 -1.000000
B( 7) -60.00000 0.000000 6 0.000000 2.000000
COSTO( 1, 3) 2.000000 0.000000 7 0.000000 4.000000
COSTO( 1, 4) 1.000000 0.000000 8 0.000000 6.000000
COSTO( 1, 5) 5.000000 0.000000
COSTO( 2, 3) 2.000000 0.000000 Flujo de distribución
COSTO( 2, 4) 4.000000 0.000000 a costo mínimo:
COSTO( 2, 5) 6.000000 0.000000
COSTO( 3, 6) 7.000000 0.000000
COSTO( 3, 7) 6.000000 0.000000
COSTO( 4, 6) 5.000000 0.000000
COSTO( 4, 7) 8.000000 0.000000
COSTO( 5, 6) 9.000000 0.000000
COSTO( 5, 7) 4.000000 0.000000
X( 1, 3) 20.00000 0.000000
X( 1, 4) 30.00000 0.000000
X( 1, 5) 0.000000 1.000000
X( 2, 3) 40.00000 0.000000
X( 2, 4) 0.000000 3.000000
X( 2, 5) 0.000000 2.000000
X( 3, 6) 0.000000 3.000000 Z* = 660
X( 3, 7) 60.00000 0.000000
X( 4, 6) 30.00000 0.000000 Reporte administrativo:
X( 4, 7) 0.000000 1.000000 Cubrir la demanda del mercado 6 desde la planta 1 con 30 unidades y
X( 5, 6) 0.000000 7.000000
X( 5, 7) 0.000000 0.000000 cubrir la demanda del mercado 7 enviando 20 unidades desde la planta
1 y 40 unidades desde la planta 2, a un costo mínimo de $660.
Proyectos de inversión
Una empresa desea invertir 530M$ en 4 proyectos que le pueden generar distintos riesgos (en unidades
numéricas de 0 a 100 que se suman entre sí) sabiendo que se tiene la opción de desvío de inversiones entre
proyectos, con cierto valor de riesgo; la información se resume en el siguiente grafo, con la indicación de los
requerimientos por proyectos (del 2 al 5) y sus respectivos riesgos (peso del arco). Se solicita determinar las
inversiones a realizar, con el menor valor de riesgo.

-100 -110
1 2
2 3 4 -195
24 26
21 1
+530 1
24

5 -125
Modelo en lingo compacto

SETS:
NODO/1..5/:B;
RED(NODO,NODO)/1,2 1,3 1,4 1,5 2,3 3,4 4,5 /:RIESGO,X;
ENDSETS
DATA:
B = 530,-100,-110,-195,-125;
RIESGO = 24,26,21,24,1,2,1;
ENDDATA
MIN= @SUM(RED:RIESGO*X);
@FOR(NODO(I): @SUM(RED(I,J):X(I,J))-@SUM(RED(J,I):X(J,I))=B(I));
END
Variable Value Reduced Cost Row Slack or Surplus Dual Price
B( 1) 530.0000 0.000000 1 11995.00 -1.000000
B( 2) -100.0000 0.000000 2 0.000000 -21.00000
B( 3) -110.0000 0.000000 3 0.000000 3.000000
B( 4) -195.0000 0.000000 4 0.000000 4.000000
B( 5) -125.0000 0.000000 5 0.000000 0.000000
RIESGO( 1, 2) 24.00000 0.000000 6 0.000000 1.000000
RIESGO( 1, 3) 26.00000 0.000000
RIESGO( 1, 4) 21.00000 0.000000
RIESGO( 1, 5) 24.00000 0.000000
RIESGO( 2, 3) 1.000000 0.000000
RIESGO( 3, 4) 2.000000 0.000000
RIESGO( 4, 5) 1.000000 0.000000
X( 1, 2) 210.0000 0.000000
X( 1, 3) 0.000000 1.000000 Reporte de lingo:
X( 1, 4) 320.0000 0.000000
X( 1, 5) 0.000000 2.000000
X( 2, 3) 110.0000 0.000000
X( 3, 4) 0.000000 6.000000
X( 4, 5) 125.0000 0.000000

MODEL:
[_1] MIN= 24 * X_1_2 + 26 * X_1_3 + 21 * X_1_4 + 24 * X_1_5 + X_2_3 + 2 * X_3_4 + X_4_5;
[_2] X_1_2 + X_1_3 + X_1_4 + X_1_5 = 530;
[_3] - X_1_2 + X_2_3 = - 100;
[_4] - X_1_3 - X_2_3 + X_3_4 = - 110;
[_5] - X_1_4 - X_3_4 + X_4_5 = - 195;
[_6] - X_1_5 - X_4_5 = - 125;
END
Variable Value Reduced Cost Row Slack or Surplus Dual Price
B( 1) 530.0000 0.000000 1 11995.00 -1.000000
B( 2) -100.0000 0.000000 2 0.000000 -21.00000
B( 3) -110.0000 0.000000 3 0.000000 3.000000
B( 4) -195.0000 0.000000 4 0.000000 4.000000
B( 5) -125.0000 0.000000 5 0.000000 0.000000
RIESGO( 1, 2) 24.00000 0.000000 6 0.000000 1.000000
RIESGO( 1, 3) 26.00000 0.000000
RIESGO( 1, 4) 21.00000 0.000000
RIESGO( 1, 5) 24.00000 0.000000
RIESGO( 2, 3) 1.000000 0.000000
RIESGO( 3, 4) 2.000000 0.000000
RIESGO( 4, 5) 1.000000 0.000000
X( 1, 2) 210.0000 0.000000
Distribución de inversiones
X( 1, 3) 0.000000 1.000000 a costo mínimo:
X( 1, 4) 320.0000 0.000000
X( 1, 5) 0.000000 2.000000
X( 2, 3) 110.0000 0.000000
X( 3, 4) 0.000000 6.000000
X( 4, 5) 125.0000 0.000000

Reporte administrativo:
Invertir $210M en el proyecto 1 [nodo 2] para
compartirlo con el proyecto 2 [nodo 3] y $320M en el
proyecto 3 [nodo 4] que será compartido con el
proyecto 4 [nodo 5], con un valor de riesgo mínimo de
11,995 [unidades de riesgo].
Flujo a Costo Mínimo con restricciones de
capacidad de flujo
Una empresa cuenta con dos plantas con +20
capacidad de producción de 50 y 40
toneladas y desea enviar a sus dos 2 3
principales mercados que demandan 15 7
y 70 toneladas del mismo producto; [25]
además, cuenta con un stock de 20 +50 1 1 2 6 6 -15
toneladas en otra planta para apoyar en
el suministro y además, de una demanda 5
adicional de 25 toneladas en un punto de
5 4 [35]
trasbordo. Tienen distintas opciones para 8
4
enviar dichos productos y necesitan +40 2 9 7
saber como hacerlo, toda vez que en sus -70
opciones tienen costos unitarios por
6 4
tonelada. Recomiende la distribución
óptima, sabiendo que algunas rutas
5
tienen restricciones de flujo. Los datos -25
se muestran en la siguiente figura:
Modelo compacto de PL de flujo a costo mínimo
[con capacidad de flujo]
n n

Min Z = ෍ ෍ Cij ∗ Xij


i=1 j=1

Subject to:
n n

෍ Xij − ෍ Xji = bi ; ∀i
j=1 j=1

Xij ≤ Uij ; ∀ i, ∀j
Xij ≥ 0 ; ∀ i, ∀j
Sintaxis compacto de PL de FCM con capacidad de flujo

SETS:
NODO/1..7/:B;
RED(NODO,NODO)/1,3 1,4 1,5 2,3 2,4 2,5 3,6 3,7 4,6 4,7 5,6 5,7/:COSTO,X,U;
ENDSETS
DATA:
B = 50,40,20, 0, -25, -15,-70;
COSTO = 2, 1, 5, 2, 4, 6, 7, 6, 5, 8, 9, 4;
U = 1000,1000,1000,25,1000,1000,1000,35,1000,1000,1000,1000;
ENDDATA
MIN= @SUM(RED:COSTO*X); Adicionar
@FOR(NODO(I): @SUM(RED(I,J):X(I,J))-@SUM(RED(J,I):X(J,I))=B(I));
@FOR(RED:X<=U);
END
EL PROBLEMA DE LA RUTA MAS CORTA
Encontrar el valor del camino y el recorrido mas corto entre el nodo 1 y el nodo 6
considerando que el peso de cada arco es distancia en Km

5 6
2 4 6 2
1
2 8
3 8
1 1 2 5
3
4
2 6
3 5 7
1 7

Opciones: ruta mas corta, ruta económica, ruta lenta, ruta de menor riesgo etc
Modelo compacto de PL de ruta mas corta

n n

Min Z = ෍ ෍ Cij ∗ Xij “artificio para ruta corta”


i=1 j=1 Nodo i desde donde se inicia la medición de recorrido

Subject to:
n n 𝑏𝑖 = +1;
෍ Xij − ෍ Xji = bi ; ∀ i 𝑏𝑖𝑛𝑡𝑒𝑟𝑚𝑒𝑑𝑖𝑜𝑠 = 0;
j=1 j=1 𝑏𝑛 = −1;
Xij ≥ 0 ; ∀ i, ∀j
Nodo n donde termina la medición de recorrido
Modelo de PL ruta mas corta en lingo compacto
-1

+1

SETS:
NODO/1..8/:B;
RED(NODO,NODO)/1,2 1,3 2,3 2,4 2,5 3,4 3,5 3,6 4,5 4,6 4,7 5,6 5,7 6,7 6,8 7,8/:DISTANCIA,X;
ENDSETS
DATA:
B= 1,0,0,0,0,-1,0,0;
DISTANCIA = 1,2,1,5,2,2,1,4,3,6,8,3,7,5,2,6;
ENDDATA
MIN= @SUM(RED:DISTANCIA*X);
@FOR(NODO(I):@SUM(RED(I,J):X(I,J))-@SUM(RED(J,I):X(J,I))=B(I));
END
Variable Value Reduced Cost Variable Value Reduced Cost
B( 1) 1.000000 0.000000 X( 1, 2) 1.000000 0.000000
B( 2) 0.000000 0.000000 X( 1, 3) 0.000000 0.000000
B( 3) 0.000000 0.000000 X( 2, 3) 1.000000 0.000000
B( 4) 0.000000 0.000000 X( 2, 4) 0.000000 2.000000
B( 5) 0.000000 0.000000 X( 2, 5) 0.000000 0.000000
B( 6) -1.000000 0.000000 X( 3, 4) 0.000000 0.000000
B( 7) 0.000000 0.000000 X( 3, 5) 0.000000 0.000000
B( 8) 0.000000 0.000000 X( 3, 6) 1.000000 0.000000
DISTANCIA( 1, 2) 1.000000 0.000000 X( 4, 5) 0.000000 4.000000
DISTANCIA( 1, 3) 2.000000 0.000000 X( 4, 6) 0.000000 4.000000
DISTANCIA( 2, 3) 1.000000 0.000000 X( 4, 7) 0.000000 9.000000
DISTANCIA( 2, 4) 5.000000 0.000000 X( 5, 6) 0.000000 0.000000
DISTANCIA( 2, 5) 2.000000 0.000000 X( 5, 7) 0.000000 7.000000
DISTANCIA( 3, 4) 2.000000 0.000000 X( 6, 7) 0.000000 8.000000
DISTANCIA( 3, 5) 1.000000 0.000000 X( 6, 8) 0.000000 5.000000
DISTANCIA( 3, 6) 4.000000 0.000000 X( 7, 8) 0.000000 6.000000
DISTANCIA( 4, 5) 3.000000 0.000000
DISTANCIA( 4, 6) 6.000000 0.000000 Row Slack or Surplus Dual Price
DISTANCIA( 4, 7) 8.000000 0.000000 1 6.000000 -1.000000
DISTANCIA( 5, 6) 3.000000 0.000000 2 0.000000 -3.000000
DISTANCIA( 5, 7) 7.000000 0.000000 3 0.000000 -2.000000
DISTANCIA( 6, 7) 5.000000 0.000000 4 0.000000 -1.000000
DISTANCIA( 6, 8) 2.000000 0.000000 5 0.000000 1.000000
DISTANCIA( 7, 8) 6.000000 0.000000 6 0.000000 0.000000
7 0.000000 3.000000
8 0.000000 0.000000
9 0.000000 0.000000
MODEL:
[_1] MIN= X_1_2 + 2 * X_1_3 + X_2_3 + 5 * X_2_4 + 2 * X_2_5 + 2 * X_3_4 + X_3_5 + 4 * X_3_6 + 3 * X_4_5 + 6 * X_4_6 +
8 * X_4_7 + 3 * X_5_6 + 7 * X_5_7 + 5 * X_6_7 + 2 * X_6_8 + 6 * X_7_8;
[_2] X_1_2 + X_1_3 = 1;
[_3] - X_1_2 + X_2_3 + X_2_4 + X_2_5 = 0;
[_4] - X_1_3 - X_2_3 + X_3_4 + X_3_5 + X_3_6 = 0;
[_5] - X_2_4 - X_3_4 + X_4_5 + X_4_6 + X_4_7 = 0;
[_6] - X_2_5 - X_3_5 - X_4_5 + X_5_6 + X_5_7 = 0; Reporte del lingo
[_7] - X_3_6 - X_4_6 - X_5_6 + X_6_7 + X_6_8 = - 1;
[_8] - X_4_7 - X_5_7 - X_6_7 + X_7_8 = 0;
[_9] - X_6_8 - X_7_8 = 0;
END
Variable Value Reduced Cost Variable Value Reduced Cost
B( 1) 1.000000 0.000000 X( 1, 2) 1.000000 0.000000
B( 2) 0.000000 0.000000 X( 1, 3) 0.000000 0.000000
B( 3) 0.000000 0.000000 X( 2, 3) 1.000000 0.000000
B( 4) 0.000000 0.000000 X( 2, 4) 0.000000 2.000000
B( 5) 0.000000 0.000000 X( 2, 5) 0.000000 0.000000
B( 6) -1.000000 0.000000 X( 3, 4) 0.000000 0.000000
B( 7) 0.000000 0.000000 X( 3, 5) 0.000000 0.000000
B( 8) 0.000000 0.000000 X( 3, 6) 1.000000 0.000000
DISTANCIA( 1, 2) 1.000000 0.000000 X( 4, 5) 0.000000 4.000000
DISTANCIA( 1, 3) 2.000000 0.000000 X( 4, 6) 0.000000 4.000000
DISTANCIA( 2, 3) 1.000000 0.000000 X( 4, 7) 0.000000 9.000000
DISTANCIA( 2, 4) 5.000000 0.000000 X( 5, 6) 0.000000 0.000000
DISTANCIA( 2, 5) 2.000000 0.000000 X( 5, 7) 0.000000 7.000000
DISTANCIA( 3, 4) 2.000000 0.000000 X( 6, 7) 0.000000 8.000000
DISTANCIA( 3, 5) 1.000000 0.000000 X( 6, 8) 0.000000 5.000000
DISTANCIA( 3, 6) 4.000000 0.000000 X( 7, 8) 0.000000 6.000000
DISTANCIA( 4, 5) 3.000000 0.000000
DISTANCIA( 4, 6) 6.000000 0.000000 Row Slack or Surplus Dual Price
DISTANCIA( 4, 7) 8.000000 0.000000 1 6.000000 -1.000000
DISTANCIA( 5, 6) 3.000000 0.000000 2 0.000000 -3.000000
DISTANCIA( 5, 7) 7.000000 0.000000 3 0.000000 -2.000000
DISTANCIA( 6, 7) 5.000000 0.000000 4 0.000000 -1.000000
DISTANCIA( 6, 8) 2.000000 0.000000 5 0.000000 1.000000
DISTANCIA( 7, 8) 6.000000 0.000000 6 0.000000 0.000000
7 0.000000 3.000000
8 0.000000 0.000000
9 0.000000 0.000000

Reporte administrativo:
La ruta a seguir es: iniciar en la estación 1, seguir
por la estación 2, luego por la estación 3 y terminar
en la estación 6, con un recorrido mínimo de 6 km.
Z* = 6
EL PROBLEMA DEL FLUJO MÁXIMO
Considere el siguiente grafo como una representación de líneas de producción de una planta de
transformación de materia prima desde el almacén de materia prima 1 (nodo 1) hasta el almacén de
productos terminados 10 (nodo 10). Se necesita saber cuál será el máximo volumen de producción en toda la
planta, si las líneas de conexión entre cada estación de trabajo indican capacidad de producción máxima
entre cada estación. Indique también la capacidad utilizada entre cada estación de trabajo y los sobrantes
respectivos.
20 10
2 5 8
Capacidad de 10 10 50
arco [flujo]
20
20 20
3 7 60
80 50 30 20
Nodo de inicio
4 30
15
6 9 Nodo de término
50
15
1
10
Modelo compacto de PL de flujo máximo
[capacidad de flujo] Arco de retorno total [ficticio]:
n: nodo final; 1: nodo de inicio

Max Z = X(n, 1);


Subject to:
n n

෍ Xij = ෍ Xji ; ∀i
j=1 j=1

Xij ≤ Uij ; ∀ i, ∀j
Xij ≥ 0 ; ∀ i, ∀j
El modelo compacto del flujo máximo

SETS:
NODO/1,2,3,4,5,6,7,8,9,10/;
RED(NODO,NODO)/1,2 1,3 1,4 2,5 3,5 3,6 3,7 4,6 5,6 5,7 5,8 6,7 6,9 7,8 7,9 8,10 9,10 10,1/:CAP,X;
ENDSETS
DATA:
CAP = 20 80 15 20 10 50 20 15 20 10 10 30 30 50 20 60 50 10000;
ENDDATA
MAX= X(10,1);
@FOR(NODO(I): @SUM(RED(I,J):X(I,J)) = @SUM(RED(J,I):X(J,I)));
@FOR(RED(I,J): X(I,J) <= CAP(I,J));
END
Variable Value Reduced Cost Row Slack or Surplus Dual Price
CAP( 1, 2) 20.00000 0.000000 1 100.0000 1.000000
CAP( 1, 3) 80.00000 0.000000 2 0.000000 0.000000
CAP( 1, 4) 15.00000 0.000000 3 0.000000 0.000000
CAP( 2, 5) 20.00000 0.000000 4 0.000000 0.000000 Reporte del lingo
CAP( 3, 5) 10.00000 0.000000 5 0.000000 0.000000
CAP( 3, 6) 50.00000 0.000000 6 0.000000 0.000000
CAP( 3, 7) 20.00000 0.000000 7 0.000000 0.000000
CAP( 4, 6) 15.00000 0.000000 8 0.000000 1.000000 MODEL:
CAP( 5, 6) 20.00000 0.000000 9 0.000000 1.000000 [_1] MAX= X_10_1;
CAP( 5, 7) 10.00000 0.000000 10 0.000000 1.000000 [_2] X_1_2 + X_1_3 + X_1_4 - X_10_1 = 0;
CAP( 5, 8) 10.00000 0.000000 11 0.000000 1.000000
[_3] - X_1_2 + X_2_5 = 0;
CAP( 6, 7) 30.00000 0.000000 12 0.000000 0.000000
[_4] - X_1_3 + X_3_5 + X_3_6 + X_3_7 = 0;
CAP( 6, 9) 30.00000 0.000000 13 0.000000 0.000000
[_5] - X_1_4 + X_4_6 = 0;
CAP( 7, 8) 50.00000 0.000000 14 15.00000 0.000000
15 0.000000 0.000000 [_6] - X_2_5 - X_3_5 + X_5_6 + X_5_7 + X_5_8 = 0;
CAP( 7, 9) 20.00000 0.000000
16 0.000000 0.000000 [_7] - X_3_6 - X_4_6 - X_5_6 + X_6_7 + X_6_9 = 0;
CAP( 8, 10) 60.00000 0.000000
CAP( 9, 10) 50.00000 0.000000 17 0.000000 0.000000 [_8] - X_3_7 - X_5_7 - X_6_7 + X_7_8 + X_7_9 = 0;
CAP( 10, 1) 10000.00 0.000000 18 0.000000 1.000000 [_9] - X_5_8 - X_7_8 + X_8_10 = 0;
X( 1, 2) 20.00000 0.000000 19 15.00000 0.000000 [_10] - X_6_9 - X_7_9 + X_9_10 = 0;
X( 1, 3) 80.00000 0.000000 20 10.00000 0.000000 [_11] - X_8_10 - X_9_10 + X_10_1 = 0;
X( 1, 4) 0.000000 0.000000 21 0.000000 1.000000 [_12] X_1_2 <= 20;
X( 2, 5) 20.00000 0.000000 22 0.000000 1.000000 [_13] X_1_3 <= 80;
X( 3, 5) 10.00000 0.000000 23 0.000000 1.000000 [_14] X_1_4 <= 15;
X( 3, 6) 50.00000 0.000000 24 0.000000 1.000000 [_15] X_2_5 <= 20;
X( 3, 7) 20.00000 0.000000 25 0.000000 0.000000 [_16] X_3_5 <= 10;
X( 4, 6) 0.000000 0.000000 26 10.00000 0.000000 [_17] X_3_6 <= 50;
X( 5, 6) 10.00000 0.000000 27 0.000000 0.000000 [_18] X_3_7 <= 20;
X( 5, 7) 10.00000 0.000000 28 10.00000 0.000000 [_19] X_4_6 <= 15;
X( 5, 8) 10.00000 0.000000 29 9900.000 0.000000 [_20] X_5_6 <= 20;
X( 6, 7) 30.00000 0.000000 [_21] X_5_7 <= 10;
X( 6, 9) 30.00000 0.000000 [_22] X_5_8 <= 10;
X( 7, 8) 50.00000 0.000000 [_23] X_6_7 <= 30;
X( 7, 9) 10.00000 0.000000 [_24] X_6_9 <= 30;
X( 8, 10) 60.00000 0.000000
[_25] X_7_8 <= 50;
X( 9, 10) 40.00000 0.000000
[_26] X_7_9 <= 20;
X( 10, 1) 100.0000 0.000000
[_27] X_8_10 <= 60;
[_28] X_9_10 <= 50;
[_29] X_10_1 <= 10000;
END
Variable Value Reduced Cost Row Slack or Surplus Dual Price
CAP( 1, 2) 20.00000 0.000000 1 100.0000 1.000000
CAP( 1, 3) 80.00000 0.000000 2 0.000000 0.000000
CAP( 1, 4) 15.00000 0.000000 3 0.000000 0.000000
CAP( 2, 5) 20.00000 0.000000 4 0.000000 0.000000 Reporte administrativo:
CAP( 3, 5) 10.00000 0.000000 5 0.000000 0.000000
CAP( 3, 6) 50.00000 0.000000 6 0.000000 0.000000 La producción máxima en la planta es de 100
CAP( 3, 7) 20.00000 0.000000 7 0.000000 0.000000
CAP( 4, 6) 15.00000 0.000000 8 0.000000 1.000000 unidades, ocupando todas las capacidades
CAP( 5, 6) 20.00000 0.000000 9 0.000000 1.000000
CAP( 5, 7) 10.00000 0.000000 10 0.000000 1.000000
disponibles en la línea de producción, a
CAP( 5, 8) 10.00000 0.000000 11
12
0.000000
0.000000
1.000000
0.000000
excepción de las operaciones entre las
CAP( 6, 7) 30.00000 0.000000
CAP( 6, 9) 30.00000 0.000000 13 0.000000 0.000000 estaciones 5-6 y 7-9, que ocupan solo el 50%
CAP( 7, 8) 50.00000 0.000000 14 15.00000 0.000000
CAP( 7, 9) 20.00000 0.000000 15 0.000000 0.000000 de su capacidad en cada operación y de la
CAP( 8, 10) 60.00000 0.000000 16 0.000000 0.000000
CAP( 9, 10) 50.00000 0.000000 17 0.000000 0.000000 estación 9-10, que ocupan el 80% de su
CAP( 10, 1) 10000.00 0.000000 18 0.000000 1.000000
X( 1, 2) 20.00000 0.000000 19 15.00000 0.000000
capacidad; además, de no necesitar de las
X( 1, 3) 80.00000 0.000000 20
21
10.00000
0.000000
0.000000
1.000000
operaciones en las líneas 1-4 y 4-6.
X( 1, 4) 0.000000 0.000000
X( 2, 5) 20.00000 0.000000 22 0.000000 1.000000
X( 3, 5) 10.00000 0.000000 23 0.000000 1.000000
X( 3, 6) 50.00000 0.000000 24 0.000000 1.000000
X( 3, 7) 20.00000 0.000000 25 0.000000 0.000000
X( 4, 6) 0.000000 0.000000 26 10.00000 0.000000
X( 5, 6) 10.00000 0.000000 27 0.000000 0.000000
X( 5, 7) 10.00000 0.000000 28 10.00000 0.000000
X( 5, 8) 10.00000 0.000000 29 9900.000 0.000000
X( 6, 7) 30.00000 0.000000
X( 6, 9) 30.00000 0.000000
X( 7, 8) 50.00000 0.000000
X( 7, 9) 10.00000 0.000000
X( 8, 10) 60.00000 0.000000
X( 9, 10) 40.00000 0.000000
X( 10, 1) 100.0000 0.000000
Balance de distribución de productos
En la ciudad de Lima se necesita realizar la distribución de vacunas para atenuar el COVID-19, desde tres
centros de acopio [2, 3 y 4] a dos regiones del Perú: sur [9] y norte [10]. En el siguiente grafo se muestra
las capacidades de envío de vacunas (en miles de unidades) con posibilidades de desplazamientos por
distintos lugares del Perú [5, 6, 7 y 8].
50 70
2 5 9
30
50 60 50 90

70 80
3 6 8
40
60 50 45
30

4 7 10
95 60

Se necesita saber cuál será el máximo volumen de envío de vacunas, si las líneas de conexión entre cada
estación de lugar indican capacidad de envío máxima entre cada lugar.
Balance de distribución de productos
Se recomienda agrupar los orígenes en un nodo [1] y los destinos en otro nodo [11], cada uno con arcos de
conexión con sus respectivos orígenes o destinos, con valores altos de capacidad de conexión y, adicionar
un arco de retorno también con valor infinito [alto].
50 70
2 5 9
1000 30 1000
50 60 50 90

1000 70 80 11
1 3 6 8
40
60 50 45
1000 30
1000

4 7 10
95 60

10000
Los nodos, arcos y valores asociados [en rojo] son ficticios; es solo para aplicar el modelo.
El modelo compacto del flujo máximo

SETS:
NODO/1,2,3,4,5,6,7,8,9,10,11/;
RED(NODO,NODO)/1,2 1,3 1,4 2,5 2,6 3,5 3,6 3,7 4,6 4,7 5,8 5,9 6,5 6,7 6,8 7,8 7,10 8,9
8,10 9,11 10,11 11,1/: CAPACIDAD,X;
ENDSETS
DATA:
CAPACIDAD = 1000 1000 1000 50 50 30 70 60 40 95 50 70 60 30 80 50 60 90 45 1000 1000 10000;
ENDDATA
MAX= X(11,1);
@FOR(NODO(I): @SUM(RED(I,J):X(I,J)) = @SUM(RED(J,I):X(J,I)));
@FOR(RED(I,J): X(I,J) <= CAPACIDAD(I,J));
END
Variable Value Reduced Cost Row Slack or Surplus Dual Price Row Slack or Surplus Dual Price
CAPACIDAD( 1, 2) 1000.000 0.000000 1 265.0000 1.000000 18 0.000000 0.000000
CAPACIDAD( 1, 3) 1000.000 0.000000 2 0.000000 0.000000 19 0.000000 0.000000
CAPACIDAD( 1, 4) 1000.000 0.000000 3 0.000000 0.000000 20 60.00000 0.000000
CAPACIDAD( 2, 5) 50.00000 0.000000 4 0.000000 0.000000 21 40.00000 0.000000
CAPACIDAD( 2, 6) 50.00000 0.000000 5 0.000000 0.000000 22 30.00000 0.000000
CAPACIDAD( 3, 5) 30.00000 0.000000 6 0.000000 0.000000 23 0.000000 0.000000
CAPACIDAD( 3, 6) 70.00000 0.000000 7 0.000000 0.000000 24 0.000000 1.000000
CAPACIDAD( 3, 7) 60.00000 0.000000 8 0.000000 0.000000 25 20.00000 0.000000
CAPACIDAD( 4, 6) 40.00000 0.000000 9 0.000000 0.000000 26 30.00000 0.000000
CAPACIDAD( 4, 7) 95.00000 0.000000 10 0.000000 1.000000 27 0.000000 0.000000
CAPACIDAD( 5, 8) 50.00000 0.000000 11 0.000000 1.000000 28 45.00000 0.000000
CAPACIDAD( 5, 9) 70.00000 0.000000 12 0.000000 1.000000 29 0.000000 1.000000
CAPACIDAD( 6, 5) 60.00000 0.000000 13 900.0000 0.000000 30 0.000000 1.000000
CAPACIDAD( 6, 7) 30.00000 0.000000 14 900.0000 0.000000 31 0.000000 1.000000
CAPACIDAD( 6, 8) 80.00000 0.000000 15 935.0000 0.000000 32 840.0000 0.000000
CAPACIDAD( 7, 8) 50.00000 0.000000 16 0.000000 0.000000 33 895.0000 0.000000
CAPACIDAD( 7, 10) 60.00000 0.000000 17 0.000000 0.000000 34 9735.000 0.000000
CAPACIDAD( 8, 9) 90.00000 0.000000
CAPACIDAD( 8, 10) 45.00000 0.000000
CAPACIDAD( 9, 11) 1000.000 0.000000
CAPACIDAD( 10, 11) 1000.000 0.000000
CAPACIDAD( 11, 1) 10000.00 0.000000
Reporte de lingo
X( 1, 2) 100.0000 0.000000
X( 1, 3) 100.0000 0.000000
X( 1, 4) 65.00000 0.000000
X( 2, 5) 50.00000 0.000000 MODEL:
[_1] MAX= X_11_1; [_18] X_3_5 <= 30;
X( 2, 6) 50.00000 0.000000 [_19] X_3_6 <= 70;
X( 3, 5) 30.00000 0.000000 [_2] X_1_2 + X_1_3 + X_1_4 - X_11_1 = 0;
[_3] - X_1_2 + X_2_5 + X_2_6 = 0; [_20] X_3_7 <= 60;
X( 3, 6) 70.00000 0.000000 [_21] X_4_6 <= 40;
X( 3, 7) 0.000000 0.000000 [_4] - X_1_3 + X_3_5 + X_3_6 + X_3_7 = 0;
[_5] - X_1_4 + X_4_6 + X_4_7 = 0; [_22] X_4_7 <= 95;
X( 4, 6) 0.000000 0.000000 [_23] X_5_8 <= 50;
X( 4, 7) 65.00000 0.000000 [_6] - X_2_5 - X_3_5 + X_5_8 + X_5_9 - X_6_5 = 0;
[_7] - X_2_6 - X_3_6 - X_4_6 + X_6_5 + X_6_7 + X_6_8 = 0; [_24] X_5_9 <= 70;
X( 5, 8) 50.00000 0.000000 [_25] X_6_5 <= 60;
X( 5, 9) 70.00000 0.000000 [_8] - X_3_7 - X_4_7 - X_6_7 + X_7_8 + X_7_10 = 0;
[_9] - X_5_8 - X_6_8 - X_7_8 + X_8_9 + X_8_10 = 0; [_26] X_6_7 <= 30;
X( 6, 5) 40.00000 0.000000 [_27] X_6_8 <= 80;
X( 6, 7) 0.000000 0.000000 [_10] - X_5_9 - X_8_9 + X_9_11 = 0;
[_11] - X_7_10 - X_8_10 + X_10_11 = 0; [_28] X_7_8 <= 50;
X( 6, 8) 80.00000 0.000000 [_29] X_7_10 <= 60;
X( 7, 8) 5.000000 0.000000 [_12] - X_9_11 - X_10_11 + X_11_1 = 0;
[_13] X_1_2 <= 1000; [_30] X_8_9 <= 90;
X( 7, 10) 60.00000 0.000000 [_31] X_8_10 <= 45;
X( 8, 9) 90.00000 0.000000 [_14] X_1_3 <= 1000;
[_15] X_1_4 <= 1000; [_32] X_9_11 <= 1000;
X( 8, 10) 45.00000 0.000000 [_33] X_10_11 <= 1000;
X( 9, 11) 160.0000 0.000000 [_16] X_2_5 <= 50;
[_17] X_2_6 <= 50; [_34] X_11_1 <= 10000;
X( 10, 11) 105.0000 0.000000 END
X( 11, 1) 265.0000 0.000000
Variable Value Reduced Cost Row Slack or Surplus Dual Price Row Slack or Surplus Dual Price
CAPACIDAD( 1, 2) 1000.000 0.000000 1 265.0000 1.000000 18 0.000000 0.000000
CAPACIDAD( 1, 3) 1000.000 0.000000 2 0.000000 0.000000 19 0.000000 0.000000
CAPACIDAD( 1, 4) 1000.000 0.000000 3 0.000000 0.000000 20 60.00000 0.000000
CAPACIDAD( 2, 5) 50.00000 0.000000 4 0.000000 0.000000 21 40.00000 0.000000
CAPACIDAD( 2, 6) 50.00000 0.000000 5 0.000000 0.000000 22 30.00000 0.000000
CAPACIDAD( 3, 5) 30.00000 0.000000 6 0.000000 0.000000 23 0.000000 0.000000
CAPACIDAD( 3, 6) 70.00000 0.000000 7 0.000000 0.000000 24 0.000000 1.000000
CAPACIDAD( 3, 7) 60.00000 0.000000 8 0.000000 0.000000 25 20.00000 0.000000
CAPACIDAD( 4, 6) 40.00000 0.000000 9 0.000000 0.000000 26 30.00000 0.000000
CAPACIDAD( 4, 7) 95.00000 0.000000 10 0.000000 1.000000 27 0.000000 0.000000
CAPACIDAD( 5, 8) 50.00000 0.000000 11 0.000000 1.000000 28 45.00000 0.000000
CAPACIDAD( 5, 9) 70.00000 0.000000 12 0.000000 1.000000 29 0.000000 1.000000
CAPACIDAD( 6, 5) 60.00000 0.000000 13 900.0000 0.000000 30 0.000000 1.000000
CAPACIDAD( 6, 7) 30.00000 0.000000 14 900.0000 0.000000 31 0.000000 1.000000
CAPACIDAD( 6, 8) 80.00000 0.000000 15 935.0000 0.000000 32 840.0000 0.000000
CAPACIDAD( 7, 8) 50.00000 0.000000 16 0.000000 0.000000 33 895.0000 0.000000
CAPACIDAD( 7, 10) 60.00000 0.000000 17 0.000000 0.000000 34 9735.000 0.000000
CAPACIDAD( 8, 9) 90.00000 0.000000
CAPACIDAD( 8, 10) 45.00000 0.000000
CAPACIDAD( 9, 11) 1000.000 0.000000
CAPACIDAD( 10, 11) 1000.000 0.000000
CAPACIDAD( 11, 1) 10000.00 0.000000
X( 1, 2) 100.0000 0.000000
X( 1, 3) 100.0000 0.000000
X( 1, 4) 65.00000 0.000000
X( 2, 5) 50.00000 0.000000
X( 2, 6) 50.00000 0.000000
X( 3, 5) 30.00000 0.000000
X( 3, 6) 70.00000 0.000000
X( 3, 7) 0.000000 0.000000 Máxima Capacidad de envío
X( 4, 6) 0.000000 0.000000
X( 4, 7) 65.00000 0.000000 [Z*] = 265 unidades
X( 5, 8) 50.00000 0.000000
X( 5, 9) 70.00000 0.000000
X( 6, 5) 40.00000 0.000000
X( 6, 7) 0.000000 0.000000
X( 6, 8) 80.00000 0.000000 Reporte administrativo:
X( 7, 8) 5.000000 0.000000
X( 7, 10) 60.00000 0.000000 La capacidad máxima de distribución de manera simultánea es de 265 mil vacunas, utilizando todas las
X( 8, 9) 90.00000 0.000000 capacidades disponibles en la línea de distribución del Perú desde Lima, a excepción de las
X( 8, 10) 45.00000 0.000000
X( 9, 11) 160.0000 0.000000 operaciones entre las localidades 4-7, 6-5 y 7-8 que operarían en 66.7%, 68.4% y 12.5% de su
X( 10, 11) 105.0000 0.000000
X( 11, 1) 265.0000 0.000000
capacidad de envío, respectivamente; además de no necesitar de las operaciones entre las localidades
3-7, 4-6, y 6-7.
Muchas gracias

También podría gustarte