Introducción
Desde la época de la Revolución Industrial, las organizaciones son cada vez más
complejas, con divisiones que tienen un alto grado de especialización. Precisamente,
esto mismo hace que las diferentes secciones tengan distintos objetivos, opuestos en
ocasiones, por lo que no deben trabajar independientemente unas de otras. Si a ello
se le suma la complejidad de asignar todos los recursos disponibles a las distintas
actividades, entonces se pone de manifiesto que es necesario algún tipo de mecanismo
para coordinar todos estos aspectos: las técnicas de Investigación Operativa .
Dos acontecimientos fueron fundamentales para que este éxito fueron tan rotundo:
el desarrollo del algoritmo del sı́mplex por George B. Dantzig en 1947 y la revolu-
ción de los ordenadores, herramienta fundamental en el campo de la Investigación
Operativa.
1.2. Aplicaciones
Programación Lineal
3. Resolver el modelo, es decir, hallar el valor óptimo del problema y una solución
asociada a dicho valor (aunque en ocasiones esto último puede ser irrelevante).
Ejemplo 1
Esto es un ejemplo de problema o modelo lineal:
Maximizar 3x1 + 4x2 + x3
sujeto a x1 + x2 + x3 = 7,
2x 1 + 5x 2 + 3x3 ≤ 16,
x1 , x2 , x3 ≥ 0.
Un solución factible satisface todas las restricciones del modelo. En caso contrario,
se trata de una solución infactible.
Una solución factible que optimice la función objetivo es una solución óptima. El
valor de la función objetivo en la solución óptima es el valor óptimo del problema.
Ejemplo 2
Continuando con el ejemplo anterior:
Solución:
Antes de formular propiamente el problema, podemos aglutinar los datos del
problema en la siguiente tabla:
x1 = “kilos de maı́z”,
x2 = “kilos de harina”,
x3 = “kilos de pienso”.
La función a minimizar es
0.3x1 + 0.5x2 + 0.2x3 .
Además, está claro que las variables x1 , x2 y x3 deben ser todas positivas:
x1 , x2 , x3 ≥ 0.
Ejemplo 4 (Planificación de la producción)
Una empresa de compuestos quı́micos puede elaborar dos productos, A y B, a par-
tir de la combinación de tres tipos de elementos: hierro, plomo y estaño. Dada la
siguiente tabla de requerimientos y beneficios, formula el modelo que maximiza el
beneficio de la producción.
8 Investigación Operativa
Solución:
En este modelo, sólo son necesarias dos variables de decisión:
x1 , x2 ≥ 0.
Tema 2. Programación Lineal 9
Para ello, consideramos un gráfico en el plano R2 que toma las dos variables x1
y x2 como ejes.
Solución:
Para resolver el problema, debemos comenzar por delimitar la región factible.
Para ello, vamos dibujando las desigualdades una a una. Como cada recta esta-
blece un semiplano, irá eliminando soluciones. Una vez dibujadas todas las rectas, la
intersección de los semiespacios es la región factible de nuestro problema.
10 Investigación Operativa
7
6
5
4 x2 ≥ 0
3
2
1
1 2 3 4 5 6 7 8
7 (0, 7)
6
5
4
x1 + x2 ≤ 7
3
2
1
(7, 0)
1 2 3 4 5 6 7 8
Al dibujar la siguiente recta, 3x1 + 4x2 ≤ 24, vemos ya como una región que era
factible queda cortada:
Tema 2. Programación Lineal 11
7
6 (0, 6)
5
4
(4, 3)
3
3x1 + 4x2 ≤ 24
2
1
1 2 3 4 5 6 7 8
Realizamos el mismo procedimiento para x2 ≤ 5:
7
6 4
3
,5 x2 ≤ 5
5
(0, 5)
4
3
2
1
1 2 3 4 5 6 7 8
Y para −6x1 + x2 ≤ 1:
7
6 2
3
,5
5
4
3
2 −6x1 + x2 ≤ 1
1
(0, 1)
1 2 3 4 5 6 7 8
12 Investigación Operativa
7
6
5
4
3
2
1
1 2 3 4 5 6 7 8
Una vez establecido cuál es el poliedro, dibujamos diferentes rectas de nivel. En
este caso, como estamos maximizando, vemos que debemos desplazarnos hacia el
lado derecho del eje OX1. En concreto, vemos que la recta de nivel de valor máximo
que interseca con el poliedro es la que tiene valor 35.
7
6
5
4
3
5x
5x
5x
5x
1
1
+
2
3x
3x
3x
3x
2
1
=
=
10
20
35
50
1 2 3 4 5 6 7 8
Ejemplo 7
Si en el ejemplo anterior el objetivo fuese maximizar la función −x1 + 2x2 , la re-
gión factible no variarı́a (no se modifican las restricciones), pero al dibujar la recta
verı́amos que la solución óptimo es distinta:
Tema 2. Programación Lineal 13
28
7 = 3
2x 2
6 +
−x
1
5
4
3
28
2 z∗ = 3
1 2 3 45 6 7 8
28
Tenemos que z ∗ = y (x∗1 , x∗2 ) = 23 , 5 .
3
Ejemplo 8
Resuelve gráficamente el siguiente problema:
Min. −x1 − x2
s.a 2x1 + x2 ≤ 6,
x1 + 2x2 ≤ 7,
−x 1 + 2x2 ≤ 6,
x1 , x2 ≥ 0.
Solución:
4 z ∗ = − 13
3
− 5 8
3 x (x∗1 , x∗2 ) = ,
1 3 3
−
x
2
2 =
−1
3
3
1
1 2 3 4
5 8
y tiene valor óptimo z ∗ = − 13
La solución óptima es ,
3 3 3
.
Este resultado nos viene a decir que no es necesario buscar en todo el poliedro;
bastan con hacerlo sobre el conjunto de vértices. Esto es algo realmente importante,
pues el segundo conjunto es muchı́simo más reducido que el primero.
Definición 10
Nuestra formulación estándar para un problema lineal de minimización es la siguien-
te:
n
X
Min. cj xj
j=1
X n
s.a aij xj = bi , i = 1, . . . , m,
j=1
xj ≥ 0, j = 1, . . . , n.
O sea:
2. El problema es de minimización.
Como los problemas no suelen venir dados en esta formulación estándar, es posible
que sea necesario realizar varias de las siguientes modificaciones:
Tema 2. Programación Lineal 15
Ejemplo 11
Formula el siguiente problema en forma estándar:
Max. −2x1 + 4x3
s.a 3x1 −x2 ≤ 10,
2x2 +x3 ≥ 2,
x1 , x2 ≥ 0.
Solución:
Comenzamos añadiendo variables de holgura:
3x1 − x2 + x4 = 10,
2x2 + x3 − x5 = 2,
x4 , x5 ≥ 0.
Finalmente, puesto que x3 no está restringida a ser positiva, añadimos x′3 y x′′3
de modo que x3 = x′3 − x′′3 , con x′3 , x′′3 ≥ 0. Esto implica que la segunda restricción
(interviene x3 ) cambia:
2x2 + x′3 − x′′3 − x5 = 2.
16 Investigación Operativa
para obtener de este modo x̄B = (x̄1 , x̄2 , . . . , x̄m ) y, fijando a cero las restantes
variables, x̄N = (x̄m+1 , . . . , x̄n ) = (0, . . . , 0).
Definición 13
Se dice que x̄ es una solución básica factible si b̄ = B −1 b ≥ 0.
Es posible ver que toda solución básica factible es vértice del poliedro asociado
y viceversa.
Ejemplo 14
Determina los vértices del poliedro definido por las restricciones
x1 + x2 + x3 = 5,
2x1 − 3x2 + x3 = 6,
x1 , x2 , x3 ≥ 0.
Solución:
1 1 1 5
Tenemos m = 2, n = 3, A = yb=
2 −3 1 6
Para hallar los vértices, como rg(A) = 2, vamos a ir considerando todos los
posibles subconjuntos de dos columnas. Además, vemos que cada par de las mismas
son un conjunto linealmente independiente.
Solución:
Hemos visto que este poliedro tiene únicamente dos vértices: 21 , 4 , 0 y (1, 0, 4).
5 5
Basta evaluar la función objetivo en estos puntos y quedarnos con aquel que tenga
menor valor.
Con lo que hemos visto hasta este momento, ya somos capaces de resolver proble-
mas lineales de optimización: hay que obtener todos los vértices (soluciones básicas
factibles) y evaluar la función objetivo en cada uno de ellos. El óptimo será aquel
que dé el mejor valor.
El denominado método del sı́mplex fue ideado por George B. Dantzig a finales
del verano de 1947, después de que la Fuerza Aérea de Estados Unidos iniciara un
trabajo intensivo a través del equipo SCOOP (Scientific Computation of Optimus
Programs).
El método del sı́mplex es un algoritmo algebraico que recorre los vértices del
poliedro factible, pasando de un vértice a otro adyacente en cada iteración y dete-
niéndose cuando halla un vértice óptimo. Precisamente en este último hecho radica
su potencia: establece la optimalidad de un vértice mediante condiciones locales, sin
recurrir a la enumeración de todos los vértices.
Sea z0 = ctB b̄ (este valor no depende de x) y sea zj = ctB B −1 a·j ∀j. Se tiene que
X
ct x = z0 − (zj − cj ) xj .
j∈N
Definición 16
El valor zj − cj es el coste reducido de la variable j.
Si fuese zj − cj ≤ 0 ∀j ∈ N, entonces
X
ct x = z0 − (zj − cj ) xj ≥ z0 = ct x̄.
j∈N
Supongamos que existe un ı́ndice k ∈ N tal que zk − ck > 0, es decir, para el que
falla el test de optimalidad.
Caso 1: y·k ≤ 0.
−y·k
En este caso, d = es una dirección de ilimitación, es decir, un vector
ek
que nos indica una dirección que disminuye la función objetivo tanto como queramos.
El problema no está acotado.
Caso 2: y·k 0.
−y·k
Sea x = x̄ + α , con α ≥ 0.
ek
−y·k
= b + α (−By·k + Nek ) = b + α −BB −1 a·k + a·k = b.
Ax = Ax̄ + αA
ek
−y·k
Al seleccionar α de este modo, el punto x = x̄+α presenta las siguientes
ek
coordenadas:
Tema 2. Programación Lineal 21
i ∈ B, i 6= r → xi = b̄i − αyik ,
i = r → xr = 0,
i ∈ N, i 6= k → xi = 0,
i = k → xi = α.
b̄r
= z0 − α (zk − ck ) = z0 − (zk − ck ) ≤ z0 = ct x̄.
yrk
B cB b̄
{xi }i {ci }i {y·j }j , Im b̄i i
zj − cj {zj − cj }j z0
Solución:
Formulamos el problema en formato estándar:
max. 5x1 + 3x2
s.a x +x2 +x3 = 7,
1
3x1 +4x2 +x4 = 24,
x 2 +x5 = 5,
−6x1 +x2 +x6 = 1,
x1 , x2 , x3 , x4 , x5 , x6 ≥ 0.
Vemos que las cuatro últimas columnas forman la matriz identidad. Ésa será nues-
tra base inicial.
Tema 2. Programación Lineal 23
⋄ Iteración 1:
x3 0 1 1 1 0 0 0 7
x4 0 3 4 0 1 0 0 24
x5 0 0 1 0 0 1 0 5
x6 0 -6 1 0 0 0 1 1
zj − cj -5 -3 0 0 0 0 0
Observamos que hay costes reducidos negativos, por lo que la solución actual no
es óptima.
Para ver qué variable sale, analizamos la columna y·1, pero sólo intervienen los
elementos positivos:
7 24
mı́n , = 7.
1 3
En consecuencia, la variable x3 sale de la base.
Para obtener la nueva base (nueva tabla), pivotamos sobre el elemento común a
la fila de x3 y a la columna de x4 : el elemento y34 .
x3 0 1 1 1 0 0 0 7 →
x4 0 3 4 0 1 0 0 24
x5 0 0 1 0 0 1 0 5
x6 0 -6 1 0 0 0 1 1
zj − cj -5 -3 0 0 0 0 0
↑
Mediante operaciones elementales de matrices, hay que lograr que dicho elemento
sea un uno y los demás de la columna pasen a ser ceros.
⋄ Iteración 2:
x1 5 1 1 1 0 0 0 7
x4 0 0 1 -3 1 0 0 3
x5 0 0 1 0 0 1 0 5
x6 0 0 7 6 0 0 1 43
zj − cj 0 2 5 0 0 0 35
Todos los costes reducidos son positivos. Luego (x∗1 , x∗2 ) = (7, 0) es solución óptima
con valor óptimo z ∗ = 35.
24 Investigación Operativa
Ejemplo 20
Resuelve el siguiente problema:
Max. −x1 + 2x2
s.a x1 + x2 ≤ 7,
3x1 + 4x2 ≤ 24,
x2 ≤ 5,
−6x1 + x2 ≤ 1,
x1 , x2 ≥ 0.
Solución:
El poliedro es el mismo que en el problema anterior. Sólo cambia la función
objetivo. Por lo tanto, la formulación estándar también es la misma (con esa salvedad)
ası́ como la primera tabla del sı́mplex (con la excepción de la fila de costes reducidos).
⋄ Iteración 1:
x3 0 1 1 1 0 0 0 7
x4 0 3 4 0 1 0 0 24
x5 0 0 1 0 0 1 0 5
x6 0 -6 1 0 0 0 1 1
zj − cj 1 -2 0 0 0 0 0
x3 0 1 1 1 0 0 0 7
x4 0 3 4 0 1 0 0 24
x5 0 0 1 0 0 1 0 5
x6 0 -6 1 0 0 0 1 1 →
zj − cj 1 -2 0 0 0 0 0
↑
⋄ Iteración 2:
x3 0 7 0 1 0 0 -1 6
x4 0 27 0 0 1 0 0 20
x5 0 6 0 0 0 1 -1 4
x6 2 -6 1 0 0 0 1 1
zj − cj -11 0 0 0 0 2 2
Tema 2. Programación Lineal 25
Sólo hay un coste reducido negativo: entra x1 . Resta ver quién sale.
6 20 4 4
mı́n , , = .
7 27 6 6
x3 0 7 0 1 0 0 -1 6
x4 0 27 0 0 1 0 0 20
x5 0 6 0 0 0 1 -1 4 →
x6 2 -6 1 0 0 0 1 1
zj − cj -11 0 0 0 0 2 2
↑
⋄ Iteración 3:
x3 0 0 0 1 0 - 76 1
6
4
3
x4 0 0 0 0 1 - 27
6
27
6
2
1
x1 -1 1 0 0 0 6
- 16 2
3
x2 2 0 1 0 0 1 0 5
11 1 28
zj − cj 0 0 0 0 6 6 3
Como los costes reducidos son todos positivos, estamos en un punto óptimo:
∗ ∗ 2 28
(x1 , x2 ) = , 5 y z∗ = .
3 3
Ejemplo 21
Resuelve el siguiente problema:
Min. −x1 − x2
s.a 2x1 + x2 ≤ 6,
x1 + 2x2 ≤ 7,
−x1 + 2x2 ≤ 6,
x1 , x2 ≥ 0.
Solución:
Para empezar, añadimos variables de holgura para obtener la formulación estándar:
Min. −x1 − x2
s.a 2x1 +x2 +x3 = 6,
x1 +2x2 +x4 = 7,
−x +2x +x = 6,
1 2 5
x1 , x2 , x3 , x4 , x5 ≥ 0.
26 Investigación Operativa
⋄ Iteración 1:
x3 0 2 1 1 0 0 6
x4 0 1 2 0 1 0 7
x5 0 -1 2 0 0 1 6
zj − cj 1 1 0 0 0 0
Sale x3 .
x3 0 2 1 1 0 0 6 →
x4 0 1 2 0 1 0 7
x5 0 -1 2 0 0 1 6
zj − cj 1 1 0 0 0 0
↑
⋄ Iteración 2:
1 1
x1 -1 1 2 2
0 0 3
3
x4 0 0 2
- 12 1 0 4
5 1
x5 0 0 2 2
0 1 9
1 1
zj − cj 0 2
-2 0 0 -3
Sale x4 .
Tema 2. Programación Lineal 27
1 1
x1 -1 1 2 2
0 0 3
3
x4 0 0 2
- 12 1 0 4 →
5 1
x5 0 0 2 2
0 1 9
1 1
zj − cj 0 2
-2 0 0 -3
↑
⋄ Iteración 3:
2
x1 -1 1 0 3
- 13 0 5
3
x2 -1 0 1 - 31 2
3
0 8
3
4
x5 0 0 0 3
- 53 1 7
3
zj − cj 0 0 - 31 - 13 0 13
-3
Todos los costes reducidos son negativos: estamos en un mı́nimo global. La solu-
ción (x∗1 , x∗2 ) = 53 , 83 es óptimo y tiene valor z ∗ = − 13
3
.
Ejemplo 22
Resuelve el siguiente problema:
Max. x1 + x2
s.a x1 −x2 ≤ 5,
2x1 −3x2 ≤ 7,
x1 , x2 ≥ 0.
Solución:
⋄ Iteración 1:
x3 0 1 -1 1 0 5
x4 0 2 -3 0 1 7 →
zj − cj -1 -1 0 0 0
↑
⋄ Iteración 2:
x3 0 0 12 1 - 12 3
2
→
x1 1 1 - 32 0 1
2
7
2
zj − cj 0 - 52 0 1
2
7
2
↑
28 Investigación Operativa
⋄ Iteración 3:
x2 1 0 1 2 -1 3
x1 1 1 0 3 -1 8
zj − cj 0 0 5 -2 11
↑
Vemos que no hay ninguna variable que pueda salir de la base, pues la columna y·4
es negativa. Luego tenemos una dirección de ilimitación:
−y·4
d= = (1, 1, 0, 1)t.
e4
Solución:
⋄ Iteración 1:
x3 0 2 1 1 0 5 →
x4 0 1 0 0 1 4
zj − cj -2 -1 0 0 0
↑
Tema 2. Programación Lineal 29
⋄ Iteración 2:
1 1 5
x1 2 1 2 2
0 2
→
x4 0 0 - 12 - 21 1 3
2
zj − cj 0 0 1 0 5
↑
El punto 52 , 0 es óptimo. Como hay un coste reducido no básico nulo (la varia-
⋄ Iteración 3:
x2 1 2 1 1 0 5
x4 0 1 0 0 1 4
zj − cj 0 0 1 0 5
El conjunto de soluciones es el segmento que une los dos vértices que hemos
obtenido:
∗ ∗ 5 5λ
(x1 , x2 ) = λ , 0 + (1 − λ)(0, 5) = , 5(1 − λ) , λ ∈ [0, 1].
2 2
Regla de Bland
Definición 24
Un vértice x̄ = (B −1 b, 0) = b̄, 0 es un vértice degenerado si b̄i = 0 para algún
ı́ndice i ∈ B.
Cuando llegamos a un vértice degenerado y pivotamos sobre una fila i con b̄i = 0,
no cambiamos de vértice pero sı́ de base. Eventualmente, podrı́a suceder que entráse-
mos en un ciclo. Para evitarlo, usamos el criterio que se enuncia a continuación.
Regla de Bland:
Criterio de salida de la base: se elige xr de modo que
b̄r
r = mı́n s / α = ,
ysk
30 Investigación Operativa
con
b̄i
α = mı́n / i ∈ B, yik > 0 .
yik
⋄ Fase 1:
La matriz identidad es una base inicial para este problema. Una vez obtenida
una solución óptima (x∗ , x∗a ), pueden darse varias posibilidades.
Caso 1: x∗a 6= 0.
Caso 2: x∗a 6= 0.
Si todas las variables artificiales están fuera de la base, entonces tenemos una
base inicial para nuestro problema de partida.
⋄ Fase 2:
Ejemplo 25
Resuelve el siguiente problema:
Min. 20x1 + 25x2
s.a 2x1 +3x2 ≥ 18,
x1 +3x2 ≥ 12,
3x1 +4x2 ≥ 24,
x1 , x2 ≥ 0.
Tema 2. Programación Lineal 31
Solución:
Escribimos el problema en formato estándar:
Min. 20x1 + 25x2
s.a 2x1 +3x2 −x3 = 18,
x1 +3x2 −x4 = 12,
3x +4x −x5 = 24,
1 2
x1 , x2 , x3 , x4 , x5 ≥ 0.
† Fase 1:
Añadimos las variables artificiales x6 , x7 y x8 (para tener una base inicial iden-
tidad), buscando minimizar su suma:
Min.
x6 + x7 + x8
s.a 2x1 +3x2 −x3 +x6 = 18,
x1 +3x2 −x4 +x7 = 12,
3x +4x −x +x8 = 24,
1 2 5
x1 , x2 , x3 , x4 , x5 , x6 , x7 , x8 ≥ 0.
⋄ Iteración 1:
x6 1 2 3 -1 0 0 1 0 0 18
x7 1 1 3 0 -1 0 0 1 0 12 →
x8 1 3 4 0 0 -1 0 0 1 24
zj − cj 6 10 -1 -1 -1 0 0 0 54
↑
⋄ Iteración 2:
x6 1 1 0 -1 1 0 1 -1 0 6
1
x2 0 3
1 0 - 13 0 0 1
3
0 4
5 4
x8 1 3
0 0 3
-1 0 - 43 1 8 →
8 7
zj − cj 3
0 -1 3
-1 0 - 10
3
0 14
↑
32 Investigación Operativa
⋄ Iteración 3:
1 3
x6 1 0 0 -1 5 5
1 - 15 - 35 6
5
→
x2 0 0 1 0 - 17
15
1
5
0 17
15
- 51 12
5
4
x1 0 1 0 0 5
- 53 0 - 45 3
5
24
5
1 3
zj − cj 0 0 -1 5 5
0 - 65 - 85 6
5
↑
⋄ Iteración 4:
x5 0 0 0 - 53 1
3
1 5
3
- 13 -1 2
1
x2 0 0 1 3
- 65 0 - 13 6
5
0 2
x1 0 1 0 -1 1 0 1 -1 0 6
zj − cj 0 0 0 0 0 -1 -1 -1 0
† Fase 2:
⋄ Iteración 4:
x5 0 0 0 - 53 1
3
1 2
1
x2 25 0 1 0 3
- 65 2
x1 25 1 0 -1 1 0 6
35
zj − cj 0 0 - 3 -10 0 170
4. Una guı́a con consejos sobre cómo trabajar con hojas de cálculo:
The Art of Modeling with Spreadsheets: Management Science, Spreadsheet En-
gineering and Modeling Craft, S.G. Powell y K.R. Baker, Wiley International
(2004).
Tema 3
Programación Entera
Si todas las variables están restringidas a tomar valores enteros, estamos ante un
problema entero (puro). Si sólo un subconjunto de las mismas tiene esa limitación,
decimos que es un problema entero mixto. En el caso particular en el que los únicos
valores enteros posibles son 0 y 1, hablamos de un problema binario.
La relajación lineal de un problema entero es ese mismo problema pero sin las
restricciones de integralidad. Normalmente, si representamos mediante P o PE el
problema original, su relajación lineal se suele representar mediante PL . Los valores
óptimos de estos problema se denotan, respectivamente, zE y zL .
Proposición 26
En un problema de minimización, se cumple que zL ≤ zE . En un problema de
maximización, zL ≥ zE .
36 Investigación Operativa
Este resultado es trivial, pues toda solución factible entera es factible para la
relajación lineal. Sin embargo, no toda solución factible de la relajación lineal es
factible del problema entero original. Más adelante, esta propiedad nos será muy útil
a la hora de resolver problemas enteros.
Ejemplo 27
Resuelve gráficamente el siguiente problema:
Max. −x1 + 2x2
s.a x + x2 ≤ 7,
1
3x1 + 4x2 ≤ 24,
x2 ≤ 5,
−6x + x ≤ 1,
1 2
2
x1 , x2 ∈ Z+ .
Solución:
7 9
=
6 2x 2
+
−x
1
5
4 zE ∗
=9
3 x∗1 , x∗2 = (1, 5)
2
1
1 2 3 4 5 6 7 8
Definición 28
La envolvente convexa de un conjunto A es el menor conjunto convexo que contiene
a dicho conjunto A.
Como la región factible del problema entero es mucho más pequeña que la de su
contrapartida continua, cabrı́a esperar que los problemas enteros fuesen mucho más
Tema 3. Programación Entera 37
Solución:
La solución óptima de la relajación lineal, (x∗1 , x∗2 ) = (1.9, 100), tiene valor ópti-
mo zL∗ = 100.
100
zL∗ = 100,
(x∗1 , x∗2 ) = (1.9, 100)
El redondeo a (2,100)
50
no es factible.
zE∗ = 0
(x1 , x∗2 ) = (1, 0)
∗
Solución:
Se define (
1 si se realiza el proyecto j-ésimo,
xj =
0 en caso contrario,
j = 1, . . . , n. El modelo buscado es
n
X
Max. bj xj
j=1
n
X
s.a cj xj ≤ d,
j=1
x ∈ Bn .
Ejemplo 31 (El problema de la asignación)
En una fábrica, se dispone de n operarios para trabajar con idéntico número de
máquinas. Si el empleado i es asignado a la máquina j, su rendimiento es cij . Puesto
que cada empleado sólo puede ser asignado a una máquina y viceversa, ¿cuál es la
asignación más eficiente?
Solución:
Se define
(
1 si el trabajador i es asignado a la máquina j,
xij =
0 en caso contrario,
i, j = 1, . . . , n.
Del mismo modo, cada máquina sólo puede tener un trabajador asignado:
X n
xij = 1, j = 1, . . . , n.
i=1
Tema 3. Programación Entera 39
z = mı́n ct x : x ∈ S
z k = mı́n ct x : x ∈ Sk , k = 1, . . . , K,
K
entonces z = mı́n z k k=1 .
x1 = 0 x1 = 1
S0 S1
x2 = 0
x3 = 0
S0 = {x ∈ S : x1 = 0}
y
S1 = {x ∈ S : x1 = 1};
después,
S00 = {x ∈ S0 : x2 = 0},
S01 = {x ∈ S0 : x2 = 1},
S10 = {x ∈ S1 : x2 = 0},
S11 = {x ∈ S1 : x2 = 1};
y ası́ sucesivamente. De este modo, las hojas del árbol son precisamente los puntos
de B3 que uno examinarı́a si hiciese una enumeración completa. Obsérvese que, por
convenio, el árbol se dibuja de arriba a abajo con la raı́z en lo más alto.
K
i) z̄ = mı́n z̄ k k=1 es una cota superior de z;
Tema 3. Programación Entera 41
K
ii) z = mı́n zk k=1 es una cota inferior de z.
27 20
S S
13 15
20 25 25
S1 S2 S1 S2
20 15 15
27 20
S S
13 18
20 26 20
S1 S2 S1 S2
18 21 18
Ejemplo 36 (Poda por infactibilidad)
Consideremos que una restricción del problema es x1 + x2 + x3 ≤ 1, siendo las tres
variables binarias. En el nodo al que se llega mediante la ramificación x1 = 1, x2 = 1
no hay puntos factibles. Por lo tanto, queda descartado automáticamente.
42 Investigación Operativa
Ası́ pues, las siguientes razones permiten podar una rama del árbol de búsqueda:
El nodo raı́z es el nodo del que parte el árbol. Cuando se ramifica, se elige una
variable de ramificación que está restringida de distinto modo según la rama del
árbol de ramificación en la que estemos. De cada nodo, salen dos o más nodos hijos.
El nodo del que se originan se denomina nodo padre.
Solución:
Comenzamos por resolver la relajación lineal. Para ello, reemplazamos las res-
tricciones de binaridad por 0 ≤ xi ≤ 1, i = 1, . . . , 5.
Como solución óptima, obtenemos el punto (0.97, 1, 0, 0.45, 1), que tiene valor
óptimo zL = 7.02. Al no ser entera la solución, debemos crear un árbol de ramifica-
ción.
7
N1
Observemos que, como el valor óptimo debe ser entero (pues la función objetivo
tiene coeficientes enteros y variables binarias), la cota superior inicial de 7.02 puede
refinarse inmediatamente a z̄ = 7.
7
N1
x4 = 0 x4 = 1
N2 N3
Cuando solucionamos el nodo N3 , obtenemos una solución entera (la primera que
encontramos). Este punto pasar a ser la solución incumbente xI = (1, 0, 0, 1, 1) y su
valor óptimo pasa a ser el valor incumbente z I = 4, que es una cota inferior de la
solución óptima.
7 xI = (1, 0, 0, 1, 1),
N1 z I = 4.
x4 = 0 x4 = 1
6 4
N2 N3
4
7 xI = (1, 0, 0, 1, 1),
N1 z I = 4.
4
x4 = 0 x4 = 1
6
N2 N3
Nos situamos en el nodo N2 y recordamos que la solución relajada era (0.94, 1, 0, 0, 0.46).
Ramificamos en x5 y resolvemos los problemas asociados:
La cota superior de N5 puede refinarse a 5, que coincide con la cota inferior del
problema (acabamos de obtener una solución entera con ese valor). El nodo N5 se
poda por acotación.
Tema 3. Programación Entera 45
7 xI = (1, 1, 0, 0, 0),
N1 z I = 5.
4
x4 = 0 x4 = 1
6
N2 N3
x5 = 0 x5 = 1
5 5
N4 N5
5
Como ya no nos quedan nodos por explorar, hemos acabado: la solución óptima
es x∗ = (1, 1, 0, 0, 0) y el valor óptimo z ∗ = 5.
Tema 4
Existen diversos modelos de gran interés que pueden formularse como problemas
de Programación Entera. Nosotros estudiaremos tres: el problema del transporte, el
problema del flujo de coste mı́nimo y el problema del camino más corto. Todos ellos
tienen en común que son problemas que se plantean sobre una red (grafo).
Para cada arco (i, j), i ∈ I, j ∈ J, tenemos asociado un coste unitario de trans-
porte cij y una variable xij que representa cuántas unidades se transportan desde el
origen i hasta el destino j.
Como hay que servir todo lo que se demanda a coste mı́nimo, la función objetivo
48 Investigación Operativa
O1 c11
c1
n c21 D1
O2 c2n ..
.
..
. c m1 Dn
cmn
Om
a minimizar es XX
cij xij .
i∈I j∈J
Esto, junto con el hecho de que las variables son enteras, nos da la siguiente
formulación para el problema del transporte:
XX
Min. cij xij
i∈I j∈J
X
s.a
xij = dj ∀j ∈ J,
i∈I
X
xij ≤ ai ∀i ∈ I,
j∈J
xij ∈ Z+ ∀i ∈ I, ∀j ∈ J.
Observa que nada se dice de los costes cij ; éstos pueden ser fraccionales y el
resultado sigue siendo cierto.
Ejemplo 39
Una empresa de televisores tiene tres fábricas en Madrid, Barcelona y Sevilla. Dada
un partida de 100, 120 y 60 aparatos, debe enviarlos a cuatro distribuidores ubicados
en Fuenlabrada, Mataró, Écija y Vigo, con demandas 70, 90, 50 y 70, respectivamente.
La tabla de costes de transporte para cada unidad de producto (en euros) es la
siguiente:
Destinos
Orı́genes Fuenlabrada Mataró Écija Vigo
Madrid 1 6 4 7
Barcelona 7 1 12 14
Sevilla 5 11 2 13
Encuentra cómo deben enviarse los televisores para que el coste de transporte total
sea mı́nimo.
Solución:
En este caso, tenemos un problema de transporte con 3 orı́genes (i = 1, 2, 3) y
4 destinos (j = 1, 2, 3, 4).
x11 + 6x12 + 4x13 + 7x14 + 7x21 + x22 + 12x23 14x24 + 5x31 + 11x32 + 2x33 + 13x34 .
Para un determinado producto, cada nodo i ofrece o requiere una cierta cantidad
del producto (flujo) bi , i = 1, . . . , n. Ası́, podemos distinguir tres tipos de nodos:
si bi = 0, es un nodo de transbordo;
X
Además, asumiremos que el balance total es nulo, es decir, bi = 0.
i∈N
Sabiendo que cada arco (i, j) tiene asociado un coste unitario de transporte cij ,
el objetivo es encontrar un flujo que satisfaga las demandas y cuyo coste total sea lo
menor posible.
En cuanto a las restricciones, por una parte, no deben excederse los lı́mites de
capacidad de los arcos:
xij ≤ uij ∀(i, j) ∈ A,
xij ≥ lij ∀(i, j) ∈ A.
Por otra, debe haber un equilibrio entre lo que llega al nodo, lo que el nodo
oferta/demanda y lo que sale del nodo:
X X
xij − xji = bi ∀i ∈ N.
{j / (i,j)∈A} {j / (j,i)∈A}
Si ahora añadimos que todas las variables deben ser enteras, ya tenemos el modelo
del problema:
X
Min. cij xij
(i,j)∈A
X X
s.a xij − xji = bi ∀i ∈ N,
{j / (i,j)∈A} {j / (j,i)∈A}
lij ≤ xij ≤ uij ∀(i, j) ∈ A,
xij ∈ Z+ ∀(i, j) ∈ A.
También tenemos una propiedad análoga a la que ya vimos para el problema del
transporte:
Ejemplo 41
Resuelve el problema del flujo de coste mı́nimo sobre el siguiente grafo:
2
2 4
3 4 3 5
2
1 5 7
5 6 2 3
6
3 6
52 Investigación Operativa
Solución:
Analizando el problema, el modelo que se obtiene es el siguiente:
Min. 3x12 + 5x13 + 2x24 + 4x25 + 6x35 + 7x36 + 5x47 + 3x54 + 2x56 + 2x57 + 3x67
s.a x12 + x13 = 150,
x24 + x25 − x12 = −20,
x35 + x36 − x13 = −30,
x47 − x24 − x54 = −50,
x54 + x56 + x57 − x25 − x35 = 40,
x67 − x36 − x56 = −60,
−x47 − x57 − x67 = −30,
x12 ≤ 90,
x13 ≤ 90,
xij ∈ Z+ ∀(i, j) ∈ A.
Como cabı́a esperar, la relajación lineal del problema nos da ya una solución
entera: x∗12 = 90, x∗13 = 60, x∗24 = 50, x∗25 = 20, x∗36 = 30, x∗56 = 30, x∗57 = 30. El coste
de esta solución es 1080.
Dada una red e identificando los costes de los nodos como distancias, se trata
de encontrar el recorrido de menor longitud desde un nodo origen hasta un nodo
destino.
Vamos a ver enseguida que se trata de un caso particular del problema del flujo
de coste mı́nimo. Para ello, sea s el nodo origen y sea t el nodo destino. Consideramos
el siguiente vector de ofertas y demandas:
1
si i = s,
bi = −1 si i = t,
0 si i 6= s, t.
Ejemplo 42
Halla la ruta más corta para ir desde el nodo 1 hasta el nodo 6 en el siguiente grafo:
4
5 2 4 6
8
1 3 3 6
6 4 4
3 5
Solución:
Formulando el problema de camino más corto asociado, al resolverlo obtenemos
la siguiente ruta con longitud 14: 1 → 3 → 5 → 6.
Tema 5
Teorı́a de Colas
La Teorı́a de Colas, lejos de ser algo desdeñable, tiene aplicaciones de gran rele-
vancia, como por ejemplo, las listas de espera para donación de órganos.
5.1. Introducción
5.1.1. Caracterı́sticas
Una determinada fuente de llegadas origina clientes a lo largo del tiempo. Éstos
se unen a la cola de un sistema que da un servicio.
El modo en que se elige el cliente que se va a atender suele ser uno de los dos
siguientes:
Para los procesos, M quiere decir que el tiempo entre llegadas sigue una distri-
bución exponencial.
5.1.2. Objetivos
Los sistemas evolucionan a lo largo del tiempo t, siendo relevantes los siguientes
valores:
Tasa de llegada (λ): número medio de clientes que llegan al sistema por unidad
de tiempo.
Tema 5. Teorı́a de Colas 57
Tasa de servicio (µ): número medio de clientes que pueden ser servidos por
unidad de tiempo.
Con estas definiciones, el tiempo medio entre llegadas es 1/λ y el tiempo medio
de servicio es 1/µ. Representan, respectivamente, el tiempo medio entre las llegadas
al sistema (con aceptación) de dos clientes consecutivos y el tiempo medio necesario
para atender a un cliente.
N = Q + B.
Ley de Little
Factor de utilización
la primera M significa que los tiempos de llegada entre clientes son variables
aleatorias exponenciales;
Como estamos asumiendo que los tiempos entre dos llegadas consecutivas son
todos exponenciales con la misma distribución, sea T el tiempo entre dos llegadas
consecutivas. En este caso, T ≡ Exp(λ).
De modo análogo, los tiempos de servicio siguen una distribución Exp(µ). Además,
para que el sistema sea estable asumiremos λ < µ (pues ρ = λ/µ).
λ λ λ λ
0 1 2 3 ...
µ µ µ µ
Por ejemplo: de tener n clientes a tener n + 1 clientes, pasaremos con tasa λ. Del
mismo modo, de tener n + 1 clientes a tener n clientes, pasaremos con tasa µ.
Procedemos ası́ con todos los estados posibles y obtenemos las siguientes ecua-
ciones de balance:
λp0 = µp1 ,
λp1 = µp2 ,
λp2 = µp3 ,
..
.
Sólo falta calcular p0 , pero para ello tenemos en cuenta que {pi }+∞
i=1 son todas las
probabilidades de una misma variable aleatoria. Por lo tanto,
+∞ +∞ +∞ +∞
!
X X X
i
X
i ρ p0
1= pi = p0 + pi = p0 + ρ p0 = p0 1 + ρ = p0 1 + = ;
i=0 i=1 i=1 i=1
1−ρ 1−ρ
p0 = 1 − ρ.
+∞ +∞
!′ ′
X
n ′
X
n ρ
= ρ(1 − ρ) (ρ ) = ρ(1 − ρ) ρ = ρ(1 − ρ) =
n=1 n=1
1−ρ
1 ρ
= ρ(1 − ρ) · 2
= .
(1 − ρ) 1−ρ
En esta cola, la única diferencia con respecto al modelo M/M/1 es que tenemos
k servidores dispuestos en paralelo, k ≥ 2. Un mismo cliente no puede ser servido
por más de un servidor.
λ
Ya vimos que el factor de utilización para esta cola es ρ = kµ
. Por lo tanto, para
que sea estable, debe cumplirse ρ < 1, es decir, λ < kµ.
λ λ λ λ λ λ λ
Resolvamos el sistema:
p1 = µλ p0 = kρp0 ,
λ (kρ)2
p2 = p
2µ 1
= 2!
p0 ,
λ (kρ)3
p3 = p
3µ 2
= 3!
p0 ,
..
.
λ (kρ)k
pk = kµ pk−1 = k!
p0 ,
λ k k ρk+1
pk+1 = kµ pk = k!
p0 ,
..
.
k! 0
Falta calcular p0 :
+∞ k−1 +∞ k n k−1 +∞
!
X X (kρ)n X k ρ X (kρ)n kk X n
1= p0 = p0 + p0 = p0 + ρ =
n=0 n=0
n! n=k
k! n=0
n! k! n=k
k−1 +∞
! k−1
!
X (kρ)n (kρ)k X n X (kρ)n (kρ)k
= p0 + ρ = p0 + ;
n=0
n! k! n=0 n=0
n! k!(1 − ρ)
k−1
!−1
X (kρ)n (kρ)k
p0 = + .
n=0
n! k!(1 − ρ)
k−1 +∞
! k−2 +∞
!
X (kρ)n k k ρ X n−1 X (kρ)n+1 k k ρ X n ′
= p0 + nρ == p0 + (ρ ) =
n=1
(n − 1)! k! n=0
n! k!
n=k n=k
k−2 +∞
! ′ ! k−2 ′ !
(kρ)n k k ρ X n (kρ)n k k ρ ρk
X X
= p0 kρ + ρ = p0 kρ + =
n=0
n! k! n=0
n! k! 1 − ρ
n=k
k−2
!
X (kρ)n k k ρ kρk−1 + (1 − k)ρk
= p0 kρ + · 2
=
n=0
n! k! (1 − ρ)
k−2
!
X (kρ)n k k−2 ρk−1 (k(1 − ρ) + ρ)
kρ +
n=0
n! (k − 1)!(1 − ρ)2
= k−1
.
X (kρ)n (kρ)k
+
n=0
n! k!(1 − ρ)
4ρ(1 + ρ2 − 2ρ + 2ρ − ρ2 ) 4ρ 2ρ
2 2
= = .
(1 − ρ)(2 − 2ρ + 4ρ − 4ρ + 4ρ ) (1 − ρ)(2 + 2ρ) (1 − ρ)(1 + ρ)