Anda di halaman 1dari 63

Tema 1

Introducción

1.1. Origen histórico

En muy pocas palabras, Investigación Operativa es la disciplina que aplica méto-


dos analı́ticos avanzados para ayudar en la toma de decisiones.

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 .

Los orı́genes de la Investigación Operativa pueden remontarse a la época de la


Segunda Guerra Mundial. En la época de ese conflicto, habı́a una gran necesidad de
asignar los escasos recursos a las varias operaciones militares y a las actividades den-
tro de esas operaciones de un modo efectivo. Por esa razón, los servicios militares de
gestión británicos y estadounidenses congregaron un elevado número de investigado-
res para aplicar métodos cientı́ficos a estos y otros problemas tácticos y estratégicos.
Es decir, se les pidió que hicieran investigación en operaciones (militares). Fueron
los primeros equipos de Investigación Operativa. Gracias al desarrollo de métodos
efectivos para usar la nueva herramienta de radar, estos equipos fueron fundamen-
tales en la victoria de la Batalla del Aire de Bretaña. Mediante su investigación
sobre cómo gestionar mejor las operaciones de convoyes y antisubmarinas, también
desempeñaron un papel importante en la victoria de la Batalla del Atlántico Norte.
2 Investigación Operativa

Una vez la guerra hubo finalizado, el éxito de la Investigación Operativa en la


campaña bélica derivó en interesantes aplicaciones fuera de lo militar, especialmente
en el ámbito empresarial. Las empresas se dieron cuenta de que las técnicas de
Investigación Operativa podı́an enfocarse a gestionar sus recursos de un modo mucho
más eficiente (mayores beneficios).

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

La Investigación Operativa es interdisciplinar, con importantes componentes ma-


temáticas y económicas, y su propósito es eminentemente práctico: dar solución y/o
mejorar soluciones ya existentes a diferentes tipos de problemas. Valgan los siguientes
ejemplos como una pequeña muestra de todo su potencial:

Continental Airlines: optimización de la reasignación de tripulaciones a vuelos


cuando hay modificaciones en los horarios.

Samsung Electronics: desarrollo de métodos para reducir los tiempos de ma-


nufactura y los niveles de inventario.

IBM : reestructuración de su cadena de aprovisionamiento global para respon-


der más rápidamente a los clientes al tiempo que se mantiene el inventario en
un nivel mı́nimo.

Departamento de Policı́a de San Francisco: fijar horarios y desplegar patrullas


de manera óptima.

Cuenca Hidrográfica de Estados Unidos: decidir qué diques destruir y cuáles


construir para facilitar el remonte de los rı́os del salmón al tiempo que se
garantiza la producción un nivel requerido de energı́a hidroeléctrica.

Por ello, la Investigación Operativa tiene numerosas salidas profesionales. No


sólo la empresa privada o pública estándar, sino otras tales como diseñar rutas de
cruceros, analizar operaciones para la OTAN, predecir la afluencia de público en
Eurodisney o diseñar las estrategias de carrera de un equipo de Fórmula 1.
Tema 1. Introducción 3

1.3. ¿Quieres saber más?

1. Una historia breve e informal del nacimiento de la Investigación Operativa se


puede encontrar en la página del profesor J.E. Beasley:
http://people.brunel.ac.uk/~ mastjjb/jeb/or/intro.html.

2. Una página de divulgación sobre Investigación Operativa:


http://www.scienceofbetter.org.

3. Análisis sobre la relación histórica entre Investigación Operativa y el Ejército


de los Estados Unidos:
Army Operations Research-Historical Perspectives and Lessons Learned, S. Bon-
der, Operations Research 50 (1), páginas 25-34 (2002).

4. Un ejemplo de que la Investigación Operativa sigue empleándose en el terreno


militar:
Optimizing Military Airlift, S.F. Baker, D.P. Morton, R.E. Rosenthal y L.M.
Williams, Operations Research 50 (4), páginas 582-602 (2002).

5. También tiene un gran auge en el ámbito sanitario:


A New Linear Programming Approach to Radiation Therapy Treatment Plan-
ning Problems, H.E. Romeijn, R.K. Ahuja, J.F. Dempsey y A. Kumar Opera-
tions Research 54 (2), páginas 201-216 (2006).

6. ¿Es posible emplear la Investigación Operativa en la lucha contra el crimen?


Crime Modeling, A. Blumstein, Operations Research 50 (1), páginas 16-24
(2002).

7. Aplicación de la Investigación Operativa a materias de seguridad aérea:


http://www.lionhrtpub.com/orms/orms-10-05/frsafer.html.

8. ¿En qué puede ayudar la Investigación Operativa a un empresario?


http://www.lionhrtpub.com/orms/orms-6-00/robinson.html.

9. Mediante un buen análisis, es posible establecer un calendario deportivo de la


NFL (la liga de rugby estadounidense) que minimice el coste de los desplaza-
mientos de los equipos:
Optimal realignments of the teams in the National Football League, R.M. Saltz-
man y R.M. Bradford, European Journal of Operational Research 93, páginas
469-475 (1996).

10. ¿Y por qué no aplicar la Investigación Operativa a un famosı́simo concurso?


Dynamic Programming Analysis of the TV Game “Who wants to be a mi-
llionaire?”, F. Perea y J. Puerto, European Journal of Operational Research
183 (2), páginas 805-811 (2007).
Tema 2

Programación Lineal

La Programación Lineal (en concreto, el método del sı́mplex ) se ha catalogado


como uno los avances cientı́ficos más importantes del siglo XX. Desde que dicho
algoritmo fuera introducido por George B. Dantzig a mediados del pasado siglo,
ha propiciado un salto cualitativo en el mundo de la Investigación Operativa, pues
muchas de las técnicas de esta disciplina cientı́fica confı́an (en mayor o menor medida)
en métodos de Programación Lineal.

2.1. Formulación un Problema Lineal

A través de la descripción de un problema, nuestros objetivos serán:

1. Identificar los elementos (variables, costes, etc.) que intervienen en el problema.

2. Encontrar una formulación adecuada para dicho modelo.

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

Un problema de programación lineal (problema lineal, PL) es un problema en el


que se pretende optimizar una función (función objetivo), lineal en el conjunto de
variables que intervienen (variables de decisión), cumpliendo unos ciertos requeri-
mientos (restricciones) también lineales.
6 Investigación Operativa

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.

Cualquier vector numérico (x1 , x2 , x3 ) es una solución del problema.

Un solución factible satisface todas las restricciones del modelo. En caso contrario,
se trata de una solución infactible.

El conjunto de todas las soluciones factibles se denomina región factible. Si la


región factible es vacı́a, se dice que el problema es infactible; en caso contrario (es
decir, existe al menos una solución), se trata de un problema factible.

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:

(5, 0, 2) es una solución factible con valor objetivo 17.


(4, 2, 1) es una solución infactible.
19 2 65

,
3 3
, 0 es una solución óptima con valor objetivo 3
.

A continuación se ilustra mediante varios ejemplos cómo formular problemas


lineales.
Ejemplo 3 (El problema de la dieta)
Un veterinario aconseja a un granjero dedicado a la crı́a de pollos una dieta mı́nima
para la alimentación de las aves consistente en 3 unidades de hierro y 4 unidades de
vitaminas. El granjero tiene la posibilidad de mezclar tres alimentos distintos: maı́z,
harina de pescado y pienso sintético. Cada kilo de maı́z proporciona 2.5 unidades
de hierro y 1 unidad de vitaminas, cada kilo de harina de pescado da 3 unidades de
hierro y 3 unidades de vitaminas y cada kilo de pienso sintético 1 unidad de hierro
y 2 unidades de vitaminas.

El granjero se pregunta por la composición de la dieta que, satisfaciendo las


necesidades alimenticias, minimice el coste total. Los precios por kilo de maı́z, harina
y pienso son, respectivamente, 0.3, 0.5 y 0.2 euros.
Tema 2. Programación Lineal 7

Solución:
Antes de formular propiamente el problema, podemos aglutinar los datos del
problema en la siguiente tabla:

Hierro (u/kg) Vitaminas (u/kg) Coste (e/kg)


Maı́z 2.5 1 0.3
Harina 3 3 0.5
Pienso 1 2 0.2

Ahora, comenzamos por identificar las variables de decisión:

x1 = “kilos de maı́z”,
x2 = “kilos de harina”,
x3 = “kilos de pienso”.

Para que se cumplan las necesidades de hierro, debe satisfacerse que


2.5x1 + 3x2 + x3 ≥ 3.

Para alcanzar los requerimientos de vitaminas se ha de imponer que


x1 + 3x2 + 2x3 ≥ 4.

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.

Si ahora reunimos toda la información, obtenemos el modelo pedido:




 Min. 0.3x1 + 0.5x2 + 0.2x3
s.a 2.5x1 + 3x2 + x3 ≥ 3,


 x1 + 3x2 + 2x3 ≥ 4,
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

Unidades de recurso necesarias Unidades


Recursos por kilo de producto fabricado de recurso
Producto A Producto B disponibles
Hierro 7 4 56
Plomo 3 5 45
Estaño 4 3 48
Beneficio unitario 10 8

Solución:
En este modelo, sólo son necesarias dos variables de decisión:

x1 = “kilos de producto A”,


x2 = “kilos de producto B”.

La función a maximizar es:


10x1 + 8x2 .

Para no agotar los recursos de hierro, debe satisfacerse:

7x1 + 4x2 ≤ 56.

Como no se puede exceder la cantidad de plomo disponible:

3x1 + 5x2 ≤ 45.

Tampoco es posible gastar más del estaño que se tiene:

4x1 + 3x2 ≤ 48.

Sólo es posible fabricar una cantidad positiva de kilos de producto:

x1 , x2 ≥ 0.

En consecuencia, el modelo lineal buscado es el siguiente:




 Max. 10x1 + 8x2
s.a 7x 1 + 4x2 ≤ 56,



3x1 + 5x2 ≤ 45,
4x1 + 3x2 ≤ 58,




x1 , x2 ≥ 0.


Tema 2. Programación Lineal 9

2.2. Resolución gráfica de problemas lineales

Si el problema lineal tiene únicamente dos variables, entonces puede resolverse


representando gráficamente la región factible y estudiando la función objetivo.

Para ello, consideramos un gráfico en el plano R2 que toma las dos variables x1
y x2 como ejes.

A continuación, se va delimitando la región factible P dibujando las restricciones


del problema: una igualdad (x1 + x2 = 3) representa una recta, mientras que una
desigualdad (x1 + x2 ≤ 3) da lugar a un semiplano cerrado. Observemos que si, como
es bastante habitual, se tiene la restricción de positividad x1 , x2 ≥ 0, entonces la
región factible estará contenida en el cuadrante superior derecho del plano.

Por construcción, P es un polı́gono convexo cerrado que se ha obtenido como la


intersección de un número finito de semiespacios cerrados, es decir, un poliedro. Si
dicho poliedro está acotado, se denomina politopo.
Definición 5
Un conjunto A es convexo si cualquier segmento que une dos puntos de A está total-
mente contenido en dicho conjunto. Matemáticamente, cualquier combinación lineal
de dos puntos de A pertenece a A:
λa1 + (1 − λ) a2 ∈ P ∀a1 , a2 ∈ P, ∀λ ∈ [0, 1].

Una vez dibujada la región factible, consideramos la función objetivo c1 x1 + c2 x2 .


Para cada recta de nivel z = c1 x1 + c2 x2 obtenemos una recta de nivel, paralela a las
restantes. Aquella que interseque con la región factible y presente un mayo valor z ∗
será solución óptima.
Ejemplo 6
Resuelve gráficamente el siguiente problema:


 Max. 5x1 + 3x2
s.a x + x2 ≤ 7,

1



3x1 + 4x2 ≤ 24,


 x2 ≤ 5,
−6x + x2 ≤ 1,

1



x1 , x2 ≥ 0.

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

Comenzamos con las dos restricciones de positividad: x1 , x2 ≥ 0. De este modo,


ya tenemos restringido el espacio de soluciones al cuadrante superior derecho.

7
6
5
4 x2 ≥ 0
3
2
1

1 2 3 4 5 6 7 8

A continuación consideramos la recta x1 + x2 ≤ 7. Para saber qué lado es el


bueno, tomamos un punto cualquiera; el origen de coordenadas (0, 0) suele ser muy
cómo para los cálculos. Si dicho punto satisface la desigualdad, entonces ese lado es
factible para la recta.

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

De modo que la región factible es la que vemos:

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.

En consecuencia, este problema tiene valor óptimo z ∗ = 35 y se alcanza en el


punto óptimo (x∗1 , x∗2 ) = (7, 0).

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
. 

Los tres ejemplos anteriores comparten una caracterı́stica: la solución óptima


se alcanza en un vértice del poliedro. Esto no es una casualidad, sino que es una
propiedad que establece el siguiente resultado:
14 Investigación Operativa

Teorema 9 (Teorema fundamental de la Programación Lineal)


Si un problema de Programación Lineal tiene solución óptima, entonces existe un
vértice que es óptimo para dicho problema.

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.

2.3. Conceptos previos

Acabamos de aprender a resolver gráficamente problemas con dos variables. Sin


embargo, es obvio que no es suficiente para los problemas que pretendemos abordar:
modelos con n variables y m restricciones. Establezcamos diversos conceptos.

2.3.1. Formulación estándar

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:

1. Las restricciones son de igualdad.

2. El problema es de minimización.

3. Las variables de decisión son positivas.

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

1. Si la restricción es una desigualdad, se añade una variable de holgura:


 n
n  X
X  αj xj + xn+1 = b,
αj xj ≤ b ⇒ j=1

j=1
xn+1 ≥ 0.

 n
n  X
X  αj xj − xn+1 = b,
αj xj ≥ b ⇒ j=1

j=1
xn+1 ≥ 0.

2. Si una variable no tiene restricción de positividad, se efectúa un cambio de


variable:
xj = −x′j (no se añade al modelo, sino que se sustituye),

xj ≤ 0 ⇒
x′j ≥ 0.
xj = x′j − x′′j (no se añade al modelo, sino que se sustituye),

xj libre ⇒
x′j , x′′j ≥ 0.

3. Si el problema es de maximización, se minimiza la función objetivo cambiada


de signo:
máx {f (x)}x∈S = − mı́n {−f (x)}x∈S .

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.

Ahora modificamos la función objetivo:

−Min. 2x1 − 4x3 .

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

Por la misma razón, la función objetivo queda 2x1 − 4x′3 + 4x′′3 .

Ası́ pues, la formulación estándar del problema es




 -Min. 2x1 − 4x′3 + 4x′′3
s.a 3x1 −x2 +x4 = 10,

′ ′′

 2x2 +x3 −x3 −x5 = 2,
x1 , x2 , x′3 , x′′3 , x4 , x5 ≥ 0.

A partir de ahora, nos será de utilidad la siguiente notación matricial:



 Min. ct x,
s.a Ax = b,
x ≥ 0,

siendo A una matriz con m filas y n columnas.

Sin pérdida de generalidad, supondremos m < n y rango(A) = m. Esto último


significa que las filas de A son linealmente independientes.

2.3.2. Solución básica factible

Como la matriz A tiene rango m, es posible hallar m columnas linealmente inde-


pendientes. Podemos asumir que son las m primeras: a·1 , a·2 , . . . , a·m .
Definición 12
Una base de la matriz A es una submatriz cuadrada de orden m con determinante
no nulo. Equivalentemente, una familia de m columnas linealmente independientes.

Por lo tanto, B = {a·1 , a·2 , . . . , a·m } es una base de A.

La solución básica x̄ asociada a esta base B se obtiene resolviendo el sistema



 a11 + · · · + a1m xm
 = b1 ,
.. ..
 . .
 a x +···+a x = b
m1 1 mm m m.

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

Ası́ pues, podemos escribir la solución como


   −1 
x̄B B b
x̄ = = ,
x̄N 0
donde x̄B son las coordenadas básicas y x̄N son las coordenadas no básicas.
Tema 2. Programación Lineal 17

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.

Consideramos las dos primeras. Fijamos x̄3 = 0 y resolvemos



x1 + x2 = 5,
2x1 − 3x2 = 6,
para obtener (x̄1 , x̄2 ) = 21 4

,
5 5
. Como todas las coordenadas son positivas, entonces
(x̄1 , x̄2 , x̄3 ) = 21
5 5
, 4
, 0 es un vértice.

Ahora consideramos las dos últimas columnas. Fijamos x̄1 = 0 y resolvemos



x2 + x3 = 5,
−3x2 + x3 = 6.
Obtenemos (x̄2 , x̄3 ) = − 14 , 21

4
. Como hay una coordenada negativa, esta solución
básica no se corresponde con un vértice y se descarta.

Finalmente, consideramos la base formada por las columnas primera y tercera.


Fijamos x̄2 = 0 y resolvemos

x1 + x3 = 5,
2x1 + x3 = 6,
para obtener (x̄1 , x̄3 ) = (1, 4). Ası́ que (x̄1 , x̄2 , x̄3 ) = (1, 0, 4) es otro vértice del
poliedro. 
Ejemplo 15
Resuelve el problema


 Min. 2x1 − x2 − x3
s.a x1 +x2 +x3 = 5,


 2x1 −3x2 +x3 = 6,
x1 , x2 , x3 ≥ 0.

18 Investigación Operativa

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.

Vemos que los valores son 38 5


y −2, respectivamente. Luego x∗ = (1, 0, 4) es la
solución óptima con valor óptimo z ∗ = −2. 

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.

Desafortunadamente, este método enumerativa es muy  poco


 eficiente, pues el
m
número de vértices puede llegar a ser muy elevado: hasta . Es necesario buscar
n
un algoritmo mejor.

2.4. El método del sı́mplex

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

La primera aplicación destacable se debe a J. Laderman que, unos meses después,


resolvió en la National Bureau of Standards un problema lineal de planificación de
una dieta con nueve restricciones de igualdad y veintisiete variables. Usando calcu-
ladoras de escritorio, fueron necesarios 120 dı́as-hombre para resolver el problema;
las hojas de datos unidas entre sı́ semejaban un “mantel”.

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.

2.4.1. Criterio de optimalidad

A partir de la matriz A, hemos obtenido una base B seleccionando m columnas.


Representamos mediante N las otras n − m columnas. Ası́, tenemos que A = (B, N).
Tema 2. Programación Lineal 19

Sabemos que un punto x es factible si



BxB + NxN = b,
xB , xN ≥ 0.

Sea b̄ = B −1 b. Para cualquier punto factible x se tiene que

ct x = ctB xB + ctN xN = ctB B −1 b − B −1 NxN + ctN xN = ctB b̄ − ctB B −1 N − ctN xN .


 

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 consideramos el vértice x̄ = (x̄B , x̄N ) = (B −1 b, 0), vemos que z0 = ct x̄.

Si fuese zj − cj ≤ 0 ∀j ∈ N, entonces
X
ct x = z0 − (zj − cj ) xj ≥ z0 = ct x̄.
j∈N

Luego el vértice x̄ seria mı́nimo global (solución óptima). En consecuencia, po-


demos establecer el siguiente resultado:

Teorema 17 (Test de optimalidad para minimización)


Dada una base B, el vértice x̄ = (B −1 b, 0) es solución óptima si zj − cj ≤ 0 ∀j ∈ N,
con zj = ctB B −1 a·j .

Es inmediato comprobar que el criterio de optimalidad para maximizar es que


los costes reducidos zj − cj sean todos positivos.

Teorema 18 (Test de optimalidad para maximización)


Dada una base B, el vértice x̄ = (B −1 b, 0) es solución óptima si zj − cj ≥ 0 ∀j ∈ N,
con zj = ctB B −1 a·j .

2.4.2. Cambio de vértice

Si el vértice en el que estamos no es óptimo, debemos seguir buscando en otros


vértices.
20 Investigación Operativa

Supongamos que existe un ı́ndice k ∈ N tal que zk − ck > 0, es decir, para el que
falla el test de optimalidad.

Sea y·k = B −1 a·k . Se pueden presentar dos situaciones.

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.

Sea x = x̄ + αd, α ≥ 0. Se cumple que


ct x = ct x̄ + αct d = z0 + α −ctB y·k + ctN ek = z0 + α −ctB B −1 a·k + ck =
 

= z0 + α (−zk + ck ) = z0 − α (zk − ck ) −−−−→ −∞.


α→+∞

Caso 2: y·k  0.
 
−y·k
Sea x = x̄ + α , con α ≥ 0.
ek

Veamos para qué valores de α el punto x permanece en el poliedro.

Comenzamos viendo que se satisface la igualdad Ax = b.

 
−y·k
= b + α (−By·k + Nek ) = b + α −BB −1 a·k + a·k = b.

Ax = Ax̄ + αA
ek

Resta ver si se cumple x ≥ 0. Para la parte asociada a N es inmediato. Exami-


nemos las componentes asociadas a B:
xB ≥ 0 ↔ x̄B − αy·k ≥ 0 ↔ b̄i − αyik ≥ 0 ∀i ∈ B ↔
b̄i
↔ b̄i − αyik ≥ 0 ∀i ∈ B / yik > 0 ↔ α ≤ ∀i ∈ B / yik > 0.
yik

Luego, seleccionamos α como sigue:


 
b̄i b̄r
α = mı́n / i ∈ B, yik > 0 = .
yik yrk

 
−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 = α.

En consecuencia, B ′ = {B\a·r } ∪ {a·k } es una nueva base y x otro vértice del


poliedro.

Además, el valor objetivo no empeora:


    
t t −y·k t t −y·k
c x = c x̄ + α = c x̄ + αc = z0 + α (−zk + ck ) =
ek ek

b̄r
= z0 − α (zk − ck ) = z0 − (zk − ck ) ≤ z0 = ct x̄.
yrk

Si b̄r > 0, entonces ct x < ct x̄; el valor objetivo mejora.

2.4.3. Algoritmo del sı́mplex

Para resolver un problema lineal de minimización, el algoritmo del sı́mplex se


inicia determinando una matriz básica factible B. Después, se itera como sigue:

1. Se resuelve el sistema BxB = b para obtener el vértice x̄. Sean

x̄B = B −1 b, x̄N = 0, b̄ = B −1 b, z0 = cB b̄.

2. Se calcula zj − cj = ctB B −1 a·j − cj ∀j ∈


/ B.
Sea zk − ck = máx {zj − cj }j ∈B
/ .
Si zk − ck ≤ 0, se finaliza el algoritmo: x̄ es solución óptima y el valor óptimo
es z ∗ = z0 .

3. Se calcula y·k = B −1 a·k .


 
−y·k
Si y·k ≤ 0, entonces d = es una dirección de ilimitación. Se finaliza
ek
el algoritmo y la solución es ilimitada a lo largo de d.
n o
4. Se calcula α = mı́n yb̄iki / i ∈ B, yik > 0 = yb̄rk
r
.
Se toma la matriz básica B ′ = {B\a·r } ∪ {a·k }.
Se va al primer paso usando esta base en la nueva iteración.
22 Investigación Operativa

Nota: Para problemas de maximización, la única variante se da en el paso 2, que


quedarı́a ası́:
2. Se calcula zj − cj = ctB B −1 a·j − cj ∀ ∈
/ B.
Sea zk − ck = mı́n {zj − cj }j ∈B
/ .
Si zk − ck ≥ 0, se finaliza el algoritmo: x̄ es solución óptima y el valor óptimo
es z ∗ = z0 .

2.4.4. La tabla del sı́mplex

La forma general de la tabla del sı́mplex es la siguiente:

B cB b̄

{xi }i {ci }i {y·j }j , Im b̄i i

zj − cj {zj − cj }j z0

Es muy importante observar que, puesto que exigimos B −1 b ≥ 0 y


estamos tomando como B la matriz identidad, entonces, en nuestra
formulación estándar, deberá ser b ≥ 0.
Ejemplo 19
Resuelve el siguiente problema:


 Max. 5x1 + 3x2
s.a x1 + x2 ≤ 7,




3x1 + 4x2 ≤ 24,


 x2 ≤ 5,
−6x1 + x2 ≤ 1,




x1 , x2 ≥ 0.

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:

La tabla inicial es:

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.

Como mı́n{−5, −3} = −5, la variable x1 entra en la base.

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

Como hay un único coste reducido negativo, la variable x2 es la que sale de la


base.

Veamos cuál entra:


 
7 24 5 1
mı́n , , , = mı́n{7, 6, 5, 1} = 1.
1 4 1 1

Sale x6 . Luego pivotamos sobre el elemento y62 .

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

Sale x5 , por lo que pivotamos sobre y51 .

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

Tenemos dos costes reducidos positivos e iguales. Tomamos el primero de ellos:


la variable x1 entra en la base.

Para decidir qué variable sale:


 
6 7
mı́n , = 3.
2 1

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

Sólo hay un coste reducido positivo: entra x2 en la base.

Para decidir qué variable sale:


   
3 4 9 8 18 8
mı́n , , = mı́n 6, , = .
1/2 3/2 5/2 3 5 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

La solución que sigue la dirección de ilimitación es

x̄ = (8, 3) + λ(1, 1) = (8 + λ, 3 + λ), λ ≥ 0.

Multiplicidad de la solución óptima

Si todos los costes reducidos son negativos (positivos, si se trata de un problema


de maximización), hemos visto que el óptimo es único. Sin embargo, si alguno de ellos
es nulo, es posible buscar un elemento en la columna asociada para pivotar sobre él.
En ese caso, cambiamos de vértice, pero el valor objetivo sigue siendo el mismo: hay
más de una solución óptima.
Ejemplo 23
Resuelve el siguiente problema:


 Max. 2x1 + x2
s.a 2x1 +x2 ≤ 5,


 x1 ≤ 4,
x1 , x2 ≥ 0.

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-


ble x2 ), podemos pivotar para obtener más puntos óptimos.

⋄ 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 punto (0, 5) también es óptimo. Si volviésemos a pivotar (hay un coste reducido


no básico nulo), volverı́amos a la tabla de la iteración anterior, pues estarı́amos
repitiendo base.

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

2.4.5. Método de las dos fases

En ocasiones, al añadir las variables de holgura, no podemos obtener la matriz


identidad como base inicial para la base del sı́mplex. Para obtener una base inicial
(que es un problema no trivial), usaremos el denominado método de las dos fases.

⋄ Fase 1:

En este método, comenzamos introduciendo variables de holgura artificiales (co-


lumnas) hasta obtener la matriz identidad. A continuación, reemplazamos la función
objetivo por la suma de las variables artificiales y resolvemos el problema de mini-
mización asociado.

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.

En este caso, el problema de partida es infactible.

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.

Si existen variables artificiales básicas, entonces hacemos pivotajes degenerados


hasta que no queda ninguna en la base.

⋄ Fase 2:

Escribimos la función objetivo original, tomamos la última tabla de la fase an-


terior y eliminamos las columnas correspondientes a variables artificiales. Después,
aplicamos el método del sı́mplex de la manera usual.

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.

Vemos que no tenemos la matriz identidad. Por lo tanto, aplicamos el método de


las dos fases.

† 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

Esta tabla es óptima y no tiene variables artificiales en la base. Eliminamos las


columnas correspondientes a x6 , x7 y x8 .

† Fase 2:

El objetivo es minimizar 20x1 + 25x2 .

⋄ 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

Esta tabla es óptima. Ası́ que (x∗1 , x∗2 ) = (6, 2) y z ∗ = 170. 

2.5. ¿Quieres saber más?

1. El inicio de la Programación Lineal contado por su padre cientı́fico:


Linear Programming, G.B. Dantzig, Operations Research 50 (1), páginas 42-47
(2002).
Tema 2. Programación Lineal 33

2. Un buen libro introductorio a la Programación Lineal:


Programación lineal y flujo en redes (segunda edición), M.S. Bazarra, J.J. Jar-
vis y H.D. Sherali, Limusa (2004).

3. Otra referencia interesante:


Introduction to Operations Research (eigth edition), F.S. Hillier y G.J. Lieber-
man, McGraw-Hill (2005).

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

Hasta ahora hemos visto modelos de Programación Lineal cuyas variables de


decisión son todas continuas: representan litros de gasolina, kilos de maı́z, horas de
trabajo. . . Sin embargo, la mayorı́a de los problemas reales requieren variables que
representen el número de trabajadores, número de mesas, si una tarea se ha o no
realizado. . . Todas estos elementos tienen algo en común: sólo pueden venir dados
por números enteros. Luego, necesitamos restringir ciertas variables de decisión a
que tomen valores enteros.

3.1. Conceptos básicos

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.

Cuando tenemos un problema entero, la región factible es un conjunto discreto


de puntos: PL ∩ Zn+ . Existe un problema continuo cuya solución coincide con la
que buscamos: optimizar la función objetivo sobre conv( PL ∩ Zn+ ). Sin embargo,
obtener explı́citamente este conjunto es a su vez una tarea realmente compleja.

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

fáciles de resolver. Sin embargo, la realidad es diametralmente opuesta: son bastante


más difı́ciles. Esto es consecuencia del carácter discreto del conjunto de soluciones.

Cabe ahora preguntarse si redondear es o no una buena alternativa para pasar


de una solución óptima continua a una solución óptima discreta. La respuesta es que
no, pues las soluciones óptimas del problema entero y de la relajación lineal pueden
distar mucho entre sı́, como muestra el siguiente ejemplo.
Ejemplo 29
Resuelve gráficamente el siguiente problema:


 Max. x2
s.a x1 − 0.9x2 ≥ 1,


 x1 ≤ 1.9,
x1 , x2 ∈ Z2+ .

Solución:
La solución óptima de la relajación lineal, (x∗1 , x∗2 ) = (1.9, 100), tiene valor ópti-
mo zL∗ = 100.

Si redondeamos al valor entero más cercano, (2,100), estamos en un punto infac-


tible.

De hecho, la solución óptima se encuentra “muy lejos”: es el punto (1,0), con


valor óptimo zE∗ = 0.

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)

1,0 1,5 2,0 2,5




3.2. Modelos clásicos

La Programación Entera tiene infinidad de aplicaciones de gran interés. Cada una


de ellas, debido a la alta complejidad que presentan estos problemas, supone ya de
por sı́ un verdadero reto. A continuación, se dan algunos ejemplos de estos modelos.
38 Investigación Operativa

El primero de ellos, denominado problema de la mochila, parece bastante simple,


pues tiene una única restricción. Sin embargo, el hecho de que las variables de decisión
sean binarias hace que su solución no sea trivial. El nombre viene del sı́mil con un
excursionista que debe decidir qué cosas llevar en su mochila antes de ir de excursión.
Ejemplo 30 (El problema de la mochila)
Una empresa tiene que decidir qué proyectos ejecutar de entre n posibles. La realiza-
ción del proyecto j-ésimo repercute en un beneficio de bj unidades, pero necesita de
cj horas de trabajo, j = 1, . . . , n. Si la carga de trabajo no puede exceder las d horas,
¿qué proyectos deben realizarse para maximizar los beneficios?

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.

Como cada trabajador puede operar en una única máquina:


Xn
xij = 1, i = 1, . . . , n.
j=1

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

En consecuencia, el modelo pedido es:


n X n

 X



 Max. cij xij
i=1 j=1


n



 X
 s.a xij = 1, j = 1, . . . , n,
i=1


 Xn
xij = 1, i = 1, . . . , n,







 j=1
xij ∈ {0, 1}, i, j = 1, . . . , n.

3.3. La técnica de ramificación y acotación

Hemos visto que si somos capaces de encontrar la formulación de la envolvente


convexa de nuestro problema original, basta optimizar sobre esa nueva formulación
para obtener la solución de nuestro problema entero inicial. Sin embargo, hallar dicha
descripción de la región factible entera, en el mejor de los casos, es tan difı́cil como
resolver el problema. Por lo tanto, es necesario recurrir a otras técnicas de resolución.
Una, cuya idea es simple, pero que es muy eficaz, consiste en dividir el problema en
subproblemas más pequeños y más sencillos de resolver. Después, nos quedaremos
con la mejor de las soluciones de esos subproblemas.

La pregunta que se plantea es: ¿cómo dividir el problema

z = mı́n ct x : x ∈ S


en un conjunto de problemas más pequeños y fáciles, solucionarlos y después reunir


la información obtenida para resolver el problema original?

La siguiente proposición da una primera idea sencilla para conseguirlo.

Proposición 32 (Divide y vencerás)


Sea S = S1 ∪ · · · ∪ SK una descomposición de S. Si

z k = mı́n ct x : x ∈ Sk , k = 1, . . . , K,


 K
entonces z = mı́n z k k=1 .

Un modo habitual de representar este método de divide y vencerás es mediante


un árbol de enumeración. Por ejemplo, para S = B3 , se puede construir el árbol de
la figura 3.1.
40 Investigación Operativa

x1 = 0 x1 = 1

S0 S1

x2 = 0

S00 S01 S10 S11

x3 = 0

S000 S001 S010 S011 S100 S101 S110 S111

Figura 3.1: Árbol de enumeración binario

Aquı́, en primer lugar se ha dividido el conjunto S en

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.

Para la mayorı́a de los problemas es totalmente imposible una enumeración com-


pleta de todas las soluciones factibles. Por lo tanto, es necesario hacer algo más que
dividir hasta tener enumerados todos los puntos. ¿Cómo se pueden utilizar cotas de
los valores {z k }k de modo inteligente? Primero, ¿cómo puede unificarse la informa-
ción sobre las cotas?
Proposición 33
Sea S = S1 ∪ . . . SK una descomposición de S, y sean z k = mı́n {ct x : x ∈ Sk }, z̄ k
una cota superior de z k y zk una cota inferior para cada k. Se verifica:

 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.

En los siguientes ejemplos se muestra cómo se usa la información de las cotas de


los subproblemas para podar (eliminar) nodos.

Ejemplo 34 (Poda por optimalidad)


En primer lugar, z̄ = mı́n{20, 25} = 20, z = mı́n{20, 15}. En segundo lugar, se
observa que las cotas inferior y superior para z 1 coinciden, por lo que no es necesario
seguir examinando S1 . Ası́, la rama S1 del árbol de enumeración se puede podar por
optimalidad.

27 20
S S
13 15

20 25 25
S1 S2 S1 S2
20 15 15

Figura 3.2: Poda por optimalidad

Ejemplo 35 (Poda por acotación)


Como el valor óptimo es menor o igual que 20, no hay ninguna solución óptima
en la rama S2 . Ası́, esta rama se puede podar por acotación.

27 20
S S
13 18

20 26 20
S1 S2 S1 S2
18 21 18

Figura 3.3: Poda por acotación


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:

i) Poda por optimalidad: el problema zr = mı́n {ct x : x ∈ S} se ha resuelto;

ii) Poda por acotación: zr ≥ z̄;

iii) Poda por infactibilidad: Sr = Ø.

Un modo de obtener cotas inferiores es resolver las relajaciones lineales de los


problemas. Por otro lado, cualquier punto factible del problema proporciona una
cota superior.

Este modo de trabajar se denomina ramificación y acotación (branch-and-bound ).

Un nodo activo es aquel que todavı́a no ha sido procesado. Cuando ya ha sido


procesado se denomina inactivo. Un nodo podado es un nodo que se ha descartado.

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.

En el proceso, la mejor solución entera almacenada se denomina solución incum-


bente. Su valor objetivo es el valor incumbente.

Selección de nodo y variable

A la hora de trabajar en un algoritmo de ramificación cabe preguntarse cómo se


elige en qué variable ramificar y qué nodo analizar (sondear).

En general, para elegir la variable de ramificación, escogeremos aquella que sea


más fraccional, esto es, cuya parte decimal esté más cerca de 0.5.

Para elegir el siguiente nodo activo a analizar, hay varias alternativas:

1. Búsqueda en horizontal (breadth-first search): se elige el nodo de menor pro-


fundidad.

2. Búsqueda en profundidad (depth-first search): se elige el nodo de mayor pro-


fundidad.

3. Búsqueda en calidad (best-first search): se elige el nodo con mejor relajación


lineal. En el caso de un problema de minimización, el de menor relajación
lineal; equivalentemente, el de menor cota inferior. En el caso de un problema
Tema 3. Programación Entera 43

de maximización, el de mayor relajación lineal; equivalentemente, el de mayor


cota superior.

El tercer criterio suele ser el más popular.

Veamos cómo aplicar el algoritmo.


Ejemplo 37
Resuelve el siguiente problema:


 Max. 3x1 + 2x2 − 5x3 − 2x4 + 3x5
 s.a x1 +x2 +x3 +2x4 +x5 ≤ 4,


(P ) 7x1 +3x3 −4x4 +3x5 ≤ 8,
11x −6x +3x −3x ≥ 3,

1 2 4 5



x1 , x2 , x3 , x4 , x5 ∈ {0, 1}.

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.

Ahora, para ramificar, elegimos las variable x4 , que es la más fraccional.

7
N1

x4 = 0 x4 = 1

N2 N3

Resolvemos ahora los problemas asociados a los nodos N2 y N3 , respectivamente.


Esto es, el problema (PL ) al que se le agrega x4 = 0 y x4 = 1, respectivamente. Sus
soluciones son:
44 Investigación Operativa

x2 = (0.94, 1, 0, 0, 0.46), x3 = (1, 0, 0, 1, 1),


 
(P2 ) (P3 )
z 2 = 6.22, z 3 = 4.

Al resolver el nodo N2 , vemos que la solución es fraccional y el valor de la re-


lajación lineal no mejora la cota superior que ya se tiene en la raı́z. Sin embargo,
por el mismo razonamiento que antes, para este nodo, la cota superior de 6.22 puede
refinarse a 6.

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

Podamos el nodo N3 por optimalidad y actualizamos la cota inferior del nodo


raı́z.

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:

x4 = (1, 1, 0, 0, 0), x5 = (0.71, 0.31, 0, 0, 1),


 
(P4 ) (P5 )
z 4 = 5, z 5 = 5.76.

El nodo N4 proporciona una solución entera mejor que la incumbente, por lo


actualizamos ésta. También se actualiza la cota inferior de los nodos ascendientes.
Se poda por optimalidad el nodo N4 .

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

Programación Entera en modelos de


redes

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

4.1. El problema del transporte

Como su propio nombre indica, se trata de transportar unidades de un produc-


to desde m orı́genes O1 , . . . , Om , hasta n destinos D1 , . . . , Dn . Por comodidad de
notación, definimos I = {1, . . . , m} y J = {1, . . . , n}.

Cada origen dispone de ai unidades de producto, i ∈ I, y cada destino demanda


dj unidades, j ∈ J. Estas cantidades son números enteros.
X X
Para que pueda satisfacerse toda la demanda, asumiremos que ai ≥ dj .
i∈I j∈J

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

Figura 4.1: Problema de transporte

a minimizar es XX
cij xij .
i∈I j∈J

Ahora nos queda establecer las distintas restricciones:

1. Deben satisfacerse todas las demandas:


X
xij = dj ∀j ∈ J.
i∈I

2. Ningún origen puede servir más unidades de producto de las disponibles:


X
xij ≤ ai ∀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.

Aunque, a priori, la solución óptima de la relajación lineal de este problema


podrı́a ser fraccional, existe un caso en el que tenemos garantizada que será entera.
Es la situación dada por la siguiente propiedad, que no demostraremos:
Tema 4. Programación Entera en modelos de redes 49

Proposición 38 (Propiedad de integralidad - problema del transporte)


Si las ofertas ai , i ∈ I, y las demandas dj , j ∈ J, son todas números enteros, entonces
la relajación lineal del problema del transporte tiene solución óptima entera.

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

La función objetivo a minimizar es

x11 + 6x12 + 4x13 + 7x14 + 7x21 + x22 + 12x23 14x24 + 5x31 + 11x32 + 2x33 + 13x34 .

Las restricciones que imponen que se satisfagan las demandas son:

x11 + x21 + x31 = 70,

x12 + x22 + x32 = 90,


x13 + x23 + x33 = 50,
x14 + x24 + x34 = 70.

Las siguientes restricciones impiden enviar más de lo disponible:

x11 + x12 + x13 + x14 ≤ 100,


50 Investigación Operativa

x21 + x22 + x23 + x24 ≤ 120,


x31 + x32 + x33 + x34 ≤ 60.

Además, todas las variables xij deben ser enteras.

Cuando juntamos las distintas condiciones que hemos establecido y resolvemos


la relajación lineal del problema, obtenemos un valor óptimo de 970 para la solución
óptima dada por x∗11 = 30, x∗14 = 70, x∗21 = 30, x∗22 = 90, x∗31 = 10 y x∗33 = 50. 

4.2. El problema del flujo de coste mı́nimo

Tenemos un grafo orientado G = (N, A), siendo N = {1, . . . , n} los nodos y A el


conjunto de arcos que unen pares de nodos.

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 origen o de servicio;

si bi = 0, es un nodo de transbordo;

si bi < 0, es un nodo destino o de demanda.

X
Además, asumiremos que el balance total es nulo, es decir, bi = 0.
i∈N

Asimismo, puede que haya restricciones adicionales:

el arco (i, j) tiene una capacidad máxima uij ;

por el arco (i, j) debe circular un flujo mı́nimo lij .

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.

Para formular el problema, comenzamos definiendo las variables xij , (i, j) ∈ A,


que representan el flujo que circula por el arco (i, j).
X
Ası́, la función objetivo a minimizar es cij xij .
(i,j)∈A
Tema 4. Programación Entera en modelos de redes 51

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}

Estas igualdades se denominan restricciones de balance de flujo.

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:

Proposición 40 (Propiedad de integralidad - flujo de coste mı́nimo)


Si las ofertas y demandas bi , i ∈ I, y los lı́mites de los arcos lij y uij , (i, j) ∈ A, son
todos números enteros, entonces la relajación lineal del problema del flujo de coste
mı́nimo tiene solución óptima entera.

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

Las ofertas y demandas son: b1 = 150, b2 = −20, b3 = −30, b4 = −50, b5 = 40,


b6 = −60, b7 = −30. Los arcos que salen del nodo 1 no pueden dejar pasar más de
90 unidades (cada uno).

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. 

4.3. El problema del camino más corto

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.

Prescindiendo de restricciones sobre las capacidades de los arcos, se trata de un


problema de flujo de coste mı́nimo con unos costes muy especı́ficos. Además, las
variables de decisión se pueden reinterpretar del siguiente modo:
(
1 si se usa el arco (i, j) en la ruta,
xij =
0 en caso contrario.
Tema 4. Programación Entera en modelos de redes 53

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

Esperar en una cola es algo que todos hemos experimentado: en el cine, en el


médico, en una tienda, etc. Nadie se escapa. En este tema veremos cómo pueden
representarse y estudiarse de un modo matemático.

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.

Los servidores de que dispone el sistema (uno o más) seleccionan clientes de la


cola según una regla predeterminada denominada disciplina. El cliente seleccionado
recibe su servicio en un tiempo de servicio determinado (que puede ser aleatorio) y
abandona el sistema.

El tiempo de llegada entre clientes y el tiempo que necesita un servidor para


atender a un determinado cliente se representan mediante variables aleatorias. Se
llama capacidad del servicio al número máximo de clientes que pueden ser atendidos
simultáneamente.
56 Investigación Operativa

El modo en que se elige el cliente que se va a atender suele ser uno de los dos
siguientes:

el que llegó antes (FIFO: first in, first out);

el que llegó el último (LIFO: last in, first out).

La notación usual es la siguiente:

proceso de llegada / proceso de servicio / número de servidores.

Para los procesos, M quiere decir que el tiempo entre llegadas sigue una distri-
bución exponencial.

5.1.2. Objetivos

Hay un doble objetivo: describir el sistema y optimizar su funcionamiento. Deja-


remos a un lado el segundo para centrarnos en el primero.

Los sistemas evolucionan a lo largo del tiempo t, siendo relevantes los siguientes
valores:

N(t) = número de clientes en el sistema en el instante t,

Q(t) = número de clientes en la cola (es decir, en espera) en el instante t,

B(t) = N(t) − Q(t) = número de clientes que están siendo servidos en el


instante t.

Si n es el n-ésimo cliente que ha sido admitido en el sistema, se definen:

Θn = tiempo de permanencia en el sistema de n,

Wn = tiempo de espera en la cola de n.

Otros parámetros de interés son:

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.

5.1.3. Medidas de rendimiento

Los siguientes valores permiten proporcionan datos acerca del funcionamiento de


una cola:

Tiempo medio de permanencia en el sistema por cliente:


n
X
Θi
i=1
Θ = lı́m .
n→+∞ n

Tiempo medio de espera en la cola por cliente:


n
X
Wi
i=1
W = lı́m .
n→+∞ n

Número medio de clientes en el sistema:


Rt
0
N(u)du
N = lı́m .
t→+∞ t

Número medio de clientes en la cola:


Rt
0
Q(u)du
Q = lı́m .
t→+∞ t

Número medio de clientes en servicio:


Rt
0
B(u)du
B = lı́m .
t→+∞ t
Este valor se puede interpretar también como el número medio de servidores
ocupados.
58 Investigación Operativa

Relaciones entre medidas

Las siguientes igualdades muestran relaciones entre varios de estas medidas:

el tiempo medio de permanencia en el sistema es igual al tiempo medio de


espera más el tiempo medio de servicio:
1
Θ=W + .
µ

el número medio de clientes en el sistema es igual al número medio de clientes


en la cola más el número medio de clientes que están siendo servidos:

N = Q + B.

Ley de Little

La siguiente igualdad fue establecida por John Little y es muy importante en el


ámbito de la Teorı́a de Colas:
N = λΘ.
Q = λW .

Factor de utilización

El factor de utilización nos da una medida de la saturación del sistema:


tasa media de llegadas por unidad de tiempo
ρ= .
capacidad máxima de trabajo por unidad de tiempo
Ejemplo 43
Si la tasa de llegada es λ, la tasa de servicio es µ, hay un único servidor y la capacidad
de la cola es ilimitada, entonces
λ
ρ= .
µ

En la misma situación, pero con k servidores en paralelo, se tiene que


λ
ρ= .


Definición 44
Un sistema es estable si ρ < 1. Cuando ρ ≥ 1, se dice el que es un sistema inestable.
Tema 5. Teorı́a de Colas 59

Usando la Ley de Little, vemos que


 λ
B = N − Q = λΘ − λW = λ Θ − W = .
µ

En consecuencia, ρ = Bk nos da la proporción media de servidores ocupados. Es


decir, el factor de utilización nos da la fracción del número de servidores que están
ocupados en término medio. Por ejemplo, ρ = 0.6 significa que la media de servidores
ocupados es del 60 %.

5.2. El modelo M/M/1

En primer lugar, hay que precisar qué significa la notación:

la primera M significa que los tiempos de llegada entre clientes son variables
aleatorias exponenciales;

la segunda M significa que los tiempos de servicio son variables aleatorias


exponenciales;

el “1” significa que hay un único servidor.

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 ρ = λ/µ).

A la hora de estudiar una cola, se asume que ésta ha estado en funcionamiento


durante un tiempo suficientemente grande, de modo que se alcanza un estado esta-
cionario. Es la cola en este estado lo que estudiamos. Luego, para estudiar el número
de clientes en la cola, no analizamos N(t), sino que nos olvidamos de la componente
temporal y examinamos N, el número de clientes en estado estacionario (que es una
variable aleatoria).

Nuestro objetivo será calcular el número medio de clientes en estado estacionario


N = E(N). En concreto:
+∞
X
N= nP (N = n).
n=1

Necesitamos determinar pn = P (N = n), n = 0, 1, 2, . . . .


60 Investigación Operativa

Diagrama de transición entre estados

Mediante un diagrama, representamos todos los estados posibles (dados por el


número de clientes en el sistema) y los cambios que pueden producirse (a través de
sus respectivas tasas de cambio):

λ λ λ λ

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

En concreto, como pn es la probabilidad de que el sistema esté en el estado n, la


tasa de cambio del estado n al estado n + 1 es λpn . Análogamente, la tasa de cambio
del estado n+ 1 al estado n es µpn+1 . Como el sistema está en equilibrio, ambas tasas
deben ser iguales, esto es,
λpn = µpn+1.

Procedemos ası́ con todos los estados posibles y obtenemos las siguientes ecua-
ciones de balance: 

 λp0 = µp1 ,
 λp1 = µp2 ,

λp2 = µp3 ,
..



 .

Ahora hay que resolver el sistema de ecuaciones lineales:




 p1 = µλ p0 = ρp0 ,
 p = ρp = ρ2 p ,

2 1 0
3
 p 3 = ρp 2 = ρ p 0,

 .
 .
.

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 − ρ.

Observemos que los cálculos son correctos porque 0 < ρ < 1.


Tema 5. Teorı́a de Colas 61

Finalmente, podemos retomar nuestro objetivo inicial de calcular N :


+∞
X +∞
X +∞
X +∞
X
N= npn = nρn (1 − ρ) = (1 − ρ) nρn = ρ(1 − ρ) nρn−1 =
n=1 n=1 n=1 n=1

+∞ +∞
!′  ′
X
n ′
X
n ρ
= ρ(1 − ρ) (ρ ) = ρ(1 − ρ) ρ = ρ(1 − ρ) =
n=1 n=1
1−ρ

1 ρ
= ρ(1 − ρ) · 2
= .
(1 − ρ) 1−ρ

5.3. El modelo M/M/k

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

Ahora, calculemos explı́citamente N, el número medio de clientes en el sistema.


Para ello, trabajaremos de la misma manera que con el modelo M/M/1: si N es
la variable aleatoria que representa el número de clientes en el sistema en estado
estacionarios, entonces
+∞
X
N = E(N) = nP (N = n).
n=1

Nuevamente, necesitamos calcular pn = P (N = n), n = 0, 1, 2, . . .

Comenzamos estableciendo el diagrama de transición entre estados:

λ λ λ λ λ λ λ

0 1 2 ... k-1 k k+1 ...


µ 2µ 3µ kµ kµ kµ
(k − 1)µ

La diferencia con el diagrama para el modelo de un único servidor es que, aquı́,


la tasa de cambio a un estado con un cliente menos depende del número de clientes
que están siendo servidos (y es proporcional a dicho valor).
62 Investigación Operativa

Por el mismo razonamiento que ya vimos, establecemos las ecuaciones de balance:


λp0 = µp1 , 

λp1 = 2µp2 , 




λp2 = 3µp3 , 


.. 

.

λpk−2 = (k − 1)µpk−1 ,  
λpk−1 = kµpk , 



λpk = kµpk+1 , 


..


.

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

Ası́, podemos establecer que


 n
 (kρ) p0 , 0 ≤ n ≤ k − 1,
n!
pn =
 k ρn p , n = k.
k

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 − ρ)

Finalmente, veamos cuál es el número medio de clientes del sistema:


+∞ k−1 +∞
X X (kρ)n X nk k ρn
N= npn = n p0 + p0
n=1 n=1
n! n=k
k!
Tema 5. Teorı́a de Colas 63

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 − ρ)

En particular, para k = 2 se obtiene que


 
2ρ 1 + ρ(2(1−ρ)+ρ)
(1−ρ)2 4ρ ((1 − ρ)2 + ρ(2 − ρ)) (1 − ρ)
N= 2 = =
1 + 2ρ + (2ρ) 2(1−ρ)
(1 − ρ)2 (2(1 + 2ρ)(1 − ρ) + 4ρ2 )

4ρ(1 + ρ2 − 2ρ + 2ρ − ρ2 ) 4ρ 2ρ
2 2
= = .
(1 − ρ)(2 − 2ρ + 4ρ − 4ρ + 4ρ ) (1 − ρ)(2 + 2ρ) (1 − ρ)(1 + ρ)

Anda mungkin juga menyukai