Вы находитесь на странице: 1из 12

Programación

lineal y otras
programaciones

Herramientas
Matemáticas VI -
Modelos de
Simulación

1
Programación lineal y otras
programaciones

Método general para solución de programación lineal


A modo de ilustrar este método general, vamos a aplicarlo al estudio de
ejemplo de la producción de mesas de la empresa MS. Recordemos que
teníamos que maximizar la función 𝑍 = 3𝑥1 + 5𝑥2 , sujeta a las siguientes
restricciones
𝑥1 ≤ 4;
2𝑥2 ≤ 12;
3𝑥1 + 2𝑥2 ≤ 18.

El primer paso es transformar las desigualdades de las restricciones en


ecuaciones. Para ello, agregamos 3 nuevas variables (una por cada
restricción) (𝑥3 , 𝑥4 , 𝑥5 ), lo que da lugar a:
𝑥1 + 𝑥3 = 4;
2𝑥2 + 𝑥4 = 12;
3𝑥1 + 2𝑥2 + 𝑥5 = 18.

Debemos notar que las nuevas variables son no negativas, ya que se


agregan al lado izquierdo de la desigualdad, el cual es menor o igual que el
lado derecho.
Considerando también la función por maximizar escrita de la forma 𝑍 −
3𝑥1 − 5𝑥2 = 0, tenemos definido el siguiente sistema de ecuaciones
lineales:
𝑍 − 3𝑥1 − 5𝑥2 = 0;
𝑥1 + 𝑥3 = 4;
2𝑥2 + 𝑥4 = 12;
3𝑥1 + 2𝑥2 + 𝑥5 = 18.

Es un sistema con 6 variables y 4 ecuaciones, por lo tanto, tiene infinitas


soluciones.

2
Tabla 1: Coeficientes del sistema de ecuaciones

Ecuación Coeficientes Término


independiente
Z 𝑥1 𝑥2 𝑥3 𝑥4 𝑥5
1 1 -3 -5 0 0 0 0
2 0 1 0 1 0 0 4
3 0 0 2 0 0 0 12
4 0 3 2 0 0 1 18
Fuente: elaboración propia.

Como tenemos dos grados de libertad, si suponemos que 𝑥1 = 0, 𝑥2 = 0


(cero producción), tenemos una solución viable del sistema. Para encontrar
el espacio de soluciones del sistema, vamos a utilizar el método de Gauss-
Jordan para reducción por filas de las matrices. Consideremos la matriz de
coeficientes extendida del sistema
1 −3 −5 0 0 0 0
0 1 0 1 0 0 4
( | ),
0 0 2 0 1 0 12
0 3 2 0 0 1 18

donde las filas representan las ecuaciones, los números a la izquierda de la


división representan los coeficientes de las variables y los de la derecha de
la división son los términos independientes. Aplicando el procedimiento de
reducción por filas, obtenemos:

1 −3 −5 0 0 0 0 1 0 −5 3 0 0 12
0 1 0 1 0 0 4 0 1 0 1 0 0 4
( | ) → ( | );
0 0 2 0 1 0 12 0 0 1 0 1/2 0 6
0 3 2 0 0 1 18 0 0 2 −3 0 1 6

1 0 0 3 5/2 0 42 1 0 0 0 3/2 1 36
0 1 0 1 0 0 4 0 1 0 0 −1/3 1/3 2
( | ) → ( | );
0 0 1 0 1/2 0 6 0 0 1 0 1/2 0 6
0 0 0 3 1 −1 6 0 0 0 1 1/3 −1/3 2

Recordemos que el espacio de soluciones de este problema es un polígono,


y que uno de sus vértices es la solución óptima del problema. En esta
representación matricial, los vértices del espacio de soluciones se obtienen
igualando dos variables a cero (número de columnas – números de filas) y
resolviendo las ecuaciones que no se anulan. Por ejemplo, si consideramos
𝑥1 = 0, 𝑥4 = 0 , obtenemos de la fila 3 que el valor de 𝑥2 = 6 ,
determinando así que el punto (𝑥1 = 0, 𝑥2 = 6) es un vértice del polígono,
y por lo tanto candidato a solución óptima.

3
Si bien en este caso podemos encontrar explícitamente cada vértice, y así
determinar la solución óptima, a medida que el sistema es mayor, con más
variables y más ecuaciones, hallar los vértices requiere muchos cálculos,
por lo que no es un buen camino. Por eso, vamos a aprovechar la forma
reducida de la matriz para encontrar la solución óptima.

La primera fila de la matriz reducida representa la ecuación


3
𝑍 + 𝑥4 + 𝑥5 = 36.
2

Como las variables son no negativas, el máximo valor de 𝑍 se alcanza


cuando 𝑥4 = 0, 𝑥5 = 0. Por lo tanto, el valor máximo de 𝑍 sujeto a las
restricciones es 36. Como 𝑥4 = 0, 𝑥5 = 0, de la segunda y tercera fila
obtenemos que 𝑥1 = 2 y 𝑥2 = 6 maximizan el valor de 𝑍, como habíamos
concluido previamente.

Caso general

Consideremos un modelo general de programación lineal:


maximizar 𝑍 = 𝑐1 𝑥1 + 𝑐2 𝑥2 + ⋯ + 𝑐𝑛 𝑥𝑛 ,

sujeto a las restricciones


𝑎11 𝑥1 + 𝑎12 𝑥2 + ⋯ + 𝑎1𝑛 𝑥𝑛 ≤ 𝑏1 ;
𝑎21 𝑥1 + 𝑎22 𝑥2 + ⋯ + 𝑎2𝑛 𝑥𝑛 ≤ 𝑏2 ;

𝑎𝑚1 𝑥1 + 𝑎𝑚2 𝑥2 + ⋯ + 𝑎𝑚𝑛 𝑥𝑛 ≤ 𝑏𝑚 ;
y
𝑥1 ≥ 0, 𝑥2 ≥ 0, … , 𝑥𝑛 ≥ 0.

La primera condición para implementar el método es que los parámetros


𝑏𝑖′ 𝑠 sean no negativos, es decir, 𝑏𝑖 ≥ 0 para todo 𝑖. El siguiente paso es
transformar las desigualdades de las restricciones en ecuaciones. Para ello,
agregamos nuevas variables en forma de adición o sustracción
dependiendo del signo de la desigualdad. Si la desigualdad de una
restricción es 𝑎𝑖1 𝑥1 + 𝑎𝑖2 𝑥2 + ⋯ + 𝑎𝑖𝑛 𝑥𝑛 ≤ 𝑏𝑖 , significa que la
combinación lineal de las variables es menor o igual que el parámetro 𝑏𝑖 .
En este caso, sumamos una nueva variable de modo que se logre la
igualdad:
𝑎𝑖1 𝑥1 + 𝑎𝑖2 𝑥2 + ⋯ + 𝑎𝑖𝑛 𝑥𝑛 + 𝑥𝑛+1 = 𝑏𝑖 .

Esta diferencia entre el lado derecho y el lado izquiero se denomina


holgura del recurso (Taha, 2004). Cuando la desigualdad de una restricción
tiene de la forma 𝑎𝑖1 𝑥1 + 𝑎𝑖2 𝑥2 + ⋯ + 𝑎𝑖𝑛 𝑥𝑛 ≥ 𝑏𝑖 , se introduce una

4
nueva variable restando en el lado izquierdo de modo de obtener una
igualdad:
𝑎𝑖1 𝑥1 + 𝑎𝑖2 𝑥2 + ⋯ + 𝑎𝑖𝑛 𝑥𝑛 − 𝑥𝑛+2 = 𝑏𝑖 .

En este caso, la diferencia entre el lado izquierdo y el derecho se denomina


excedente (Taha, 2004). Notar que la cantidad de variables agregadas es, a
lo sumo, una por restricción. Por lo tanto, tendremos como máxino 𝑚
variables agregadas, y así tendremos en total 𝑛 + 𝑚 variables y 𝑚
ecuaciones, lo que nos da, como máximo, 𝑛 grados de libertad. Nótese
también que las variables agregadas son no negativas, ya que su efecto de
sumar o restar en para lograr la ecuaciones de las restriccion está explícito
en el signo que la precede.

Juntando la función por maximizar y las ecuaciones de las restricciones,


queda definido el siguiente sistema de ecuaciones lineales:

𝑍 − 𝑐1 𝑥1 − 𝑐2 𝑥2 − ⋯ − 𝑐𝑛 𝑥𝑛 = 0;
𝑎11 𝑥1 + 𝑎12 𝑥2 + ⋯ + 𝑎1𝑛 𝑥𝑛 + 𝑥𝑛+1 = 𝑏1 ;
𝑎21 𝑥1 + 𝑎22 𝑥2 + ⋯ + 𝑎2𝑛 𝑥𝑛 + 𝑥𝑛+2 = 𝑏2 ;

𝑎𝑚1 𝑥1 + 𝑎𝑚2 𝑥2 + ⋯ + 𝑎𝑚𝑛 𝑥𝑛 + 𝑥𝑛+𝑚 = 𝑏𝑚 .

Observación: todo sistema lineal consistente de 𝑝 variables y 𝑞 ecuaciones


con 𝑝 ≥ 𝑞 siempre tiene solución.

Una vez determinado el sistema, se contruye la matriz de coeficientes


extendida, que tiene una dimensión de 𝑚 + 1 filas (ecuaciones) por 𝑛 +
𝑚 + 1 columnas (variables), y se aplica el método de Gauss-Jordan para
encontrar la forma reducida de la matriz.

La primera fila de la matriz reducida representa la ecuación


𝑍 + 𝑑𝑛+1 𝑥𝑛+1 + 𝑑𝑛+2 𝑥𝑛+2 + ⋯ + 𝑑𝑛+𝑚 𝑥𝑛+𝑚 = 𝑀.

Cuando el problema es sobre maximizar, los coeficientes 𝑑𝑖′ 𝑠 son no


negativos, por lo que el valor máximo de 𝑍 se alcanza cuando las variables
𝑥𝑛+1 = 𝑥𝑛+2 = ⋯ = 𝑥𝑛+𝑚 = 0.

Luego, la solución óptima será aquella obtenida a partir de la matriz


reducida colocando las variables 𝑥𝑛+1 , 𝑥𝑛+2 , … , 𝑥𝑛+𝑚 todas iguales a cero.

5
Otras programaciones matemáticas
Programación dinámica

La técnica de programación dinámica es utilizada frecuentemente en


problemas en los que hay que tomar una serie de decisiones que están
relacionadas de alguna manera. La solución óptima de un problema de
programación dinámica se encuentra descomponiéndolo en etapas y
resolviendo cada uno de los subproblemas. Es un procedimiento
sistemático para determinar cual es la combinación de decisiones que
llevan a la solución óptima del problema. Los subproblemas que se generan
pueden ser diferentes, por lo que no hay un método estándar para
problemas de programación dinámica (Hieller y Lieberman, 1998).

Ejemplo de modelo de programación dinámica

Vamos a consider un problema conocido como “la ruta más corta”:


tenemos que ir de un punto inicial a uno final, y hay varias alternativas para
hacerlo. El objetivo es determinar el “mejor” camino.

Supongamos que tenemos que viajar de una ciudad a otra y queremos


determinar cuál es el camino más corto. Denotamos con 1 la ciudad de
salida y con 7 la ciudad de llegada. La Figura 1 muestra las diferentes
altertativas con los respectivos kilómetros entre cada tramo.

Hay 5 diferentes caminos que unen la ciudad 1 y la 7:


1) 1 2 5 7 = 240 km.
2) 1 2 6 7 = 290 km.
3) 1 3 5 7 = 250 km.
4) 1 4 5 7 = 220 km.
5) 1 4 6 7 = 230 km.

Por lo tanto, podemos concluir que el camino (1, 4, 5, 7) es el que nos da la


menor distancia entre las opciones posibles.

Este problema pudo resolverse considerando explícitamente cada una de


los caminos. Sin embargo, en problemas con mayor cantidad de opciones,
describir todas las alternativas puede ser complicado e implicar muchos
cálculos y uso de recursos.

6
Figura 1: Rutas de la ciudad 1 hasta la ciudad 7

Fuente: elaboración propia.

Recursión hacia adelante

Para los problemas de programación dinámica del tipo “ruta más corta”,
existe un método de resolución. Este método es recursivo, es decir, cada
etapa usa la información de la etapa anterior (Taha, 2004).

La programación dinámica comienza con una pequeña parte del problema


y busca la solución óptima de dicho subproblema. Luego se va agrandando
gradualmente el problema y se encuentra la solución óptima a partir de la
antenrior, hasta que el problema inicial esté resuelto. El primer paso de la
programación dinámica es descomponer el problema en 𝑛 etapas. En la
Figura 2, las líneas verticales dividen el problema del ejemplo en 3 etapas.
Luego se busca la solución óptima de cada etapa usando la solución de la
etapa anterior.
De modo general, este problema tiene la siguiente estructura. Denotamos
𝑗 𝑗
con 𝑥𝑖 los distintos nodos de la etapa 𝑖. Sea 𝑓𝑖 (𝑥𝑖 ) el valor óptimo en la
𝑗 𝑖 𝑗
etapa 𝑖 respecto del nodo 𝑥𝑖 , y sea 𝑐𝑗𝑘 el valor que relaciona los nodos 𝑥𝑖 y
𝑥𝑖𝑘 en la etapa 𝑖. Así, el método recursivo de programación dinámica se
define por:

𝑓0 (𝑥0 ) = 0;
𝑗 𝑖 𝑗
𝑓𝑖 (𝑥𝑖 ) = 𝑣𝑎𝑙𝑜𝑟 ó𝑝𝑡𝑖𝑚𝑜 {𝑐𝑗𝑘 + 𝑓𝑖−1 (𝑥𝑖−1 )}.

Para ilustrar esta formulación matemática, vamos a aplicarlo a nuestro


ejemplo de la ruta más corta. Recordemos que tenemos 3 etapas. En la
primera, tenemos las ciudades (nodos) 1(= 𝑥11 ), 2(= 𝑥12 ), 3(= 𝑥13 ) y
1
4(= 𝑥14 ). Los valores 𝑐𝑗𝑘 son las distancias de las ciudades relacionadas
1 1 1
(conectadas) en la primera etapa: 𝑐12 = 80, 𝑐13 = 50, 𝑐14 = 70.
Luego:

7
𝑓1 (𝑥12 ) = 𝑣𝑎𝑙𝑜𝑟 𝑚í𝑛𝑖𝑚𝑜 {80} = 80;
𝑓1 (𝑥13 ) = 𝑣𝑎𝑙𝑜𝑟 𝑚í𝑛𝑖𝑚𝑜 {50} = 50;
𝑓1 (𝑥14 ) = 𝑣𝑎𝑙𝑜𝑟 𝑚í𝑛𝑖𝑚𝑜 {70} = 70.

En la segunda etapa, tenemos dos ciudades como destino: 5(= 𝑥21 ), 6(=
2 2
𝑥22 ). Los valores 𝑐1𝑘 y 𝑐2𝑘 con 𝑘 = 2, 3, 4 son, respectivamente, las
distancias de las ciudades 5 y 6 con las ciudades 2, 3 y 4. Por ejemplo,
2
𝑐12 = 90. Así tenemos, para la ciudad 5,
2
𝑓2 (𝑥21 ) = 𝑚𝑖𝑛{𝑐1𝑘 + 𝑓1 (𝑥1𝑘 )};
= 𝑚𝑖𝑛{90 + 80, 130 + 50, 80 + 70};
= 150 (𝑞𝑢𝑒 𝑐𝑜𝑟𝑟𝑒𝑠𝑝𝑜𝑛𝑑𝑒 𝑎𝑙 𝑐𝑎𝑚𝑖𝑛𝑜 1 → 4 → 5).

Y, para la ciudad 6,
2
𝑓2 (𝑥22 ) = 𝑚𝑖𝑛{𝑐2𝑘 + 𝑓1 (𝑥1𝑘 )};
= 𝑚𝑖𝑛{120 + 80, 70 + 70};
= 140 (𝑞𝑢𝑒 𝑐𝑜𝑟𝑟𝑒𝑠𝑝𝑜𝑛𝑑𝑒 𝑎𝑙 𝑐𝑎𝑚𝑖𝑛𝑜 1 → 4 → 6).

En la última etapa, tenemos un único destino, la ciudad 7(= 𝑥31 ). Los


3
valores 𝑐1𝑘 , 𝑘 = 5, 6 son las distancias de la ciudad 7 a las ciudades 5 y 6.
2 2
Luego 𝑐15 = 70, y 𝑐16 = 90. Así tenemos

3
𝑓3 (𝑥13 ) = 𝑚𝑖𝑛{𝑐1𝑘 + 𝑓2 (𝑥2𝑘 )};
= 𝑚𝑖𝑛{70 + 150, 90 + 140};
= 220 (𝑞𝑢𝑒 𝑐𝑜𝑟𝑟𝑒𝑠𝑝𝑜𝑛𝑑𝑒 𝑎𝑙 𝑐𝑎𝑚𝑖𝑛𝑜 1 → 4 → 5 → 7).

Llegamos así al mismo resultado. La Figura 2 ilustra el procedimiento.

Recursión hacia atrás

La resolución de un problema de programación dinámica puede hacerse


también siguiendo el mismo procedimiento anterior en sentido contrario,
es decir, comenzando por la última etapa hasta llegar a la primera. La
recursión hacia atrás muchas veces es preferida debido a que es más
eficiente computacionalmente (Taha, 2004).

8
Figura 2: Descomposición y solución del ejemplo

Fuente: elaboración propia.

Programación entera
En muchos problemas de investigación de operaciones, las variables de
decisión tienen sentido solo si son valores enteros, por ejemplo, cantidad
de autos por comprar, proyectos por aprobar, ubicación del personal,
etcétera. Inclusive, podemos tener problemas cuyas variables de decisión
no sean valores numéricos y que las opciones sean “sí” o “no” (Hieller y
Lieberman, 1998).

Los problemas de programación entera son aquellos en los cuales todas las
variables de decisión o una parte de ellas son enteras. Los problemas de
programación entera con algunas variables enteras (no todas) se
denominan mixtos. Un ejemplo de esto es la incorporación de costos fijos:
tenemos un modelo de costos, y nuevas acciones pueden adicionar cierto
costo fijo. Las variables de estos nuevos costos toman los valores 1 o 0
dependiendo de si se agregan o no respectivamente.

Cuando las variables de decisión son todas enteras, los problemas se


denominan puros. Un ejemplo es el de asignación: un empresa tiene varios
proyectos para implementar con sus tiempos y costos de ejecución, y
cierto dinero disponible para usar. La idea es determinar la mejor
combinación de proyectos. En este caso, todas las variables son enteras, 1
o 0, proyecto aprobado o proyecto rechazado.

9
Técnica de Branch-and-Bound

Supongamos que tenemos un problema con 3 variables enteras y que cada


una puede tener 5 valores enteros posibles. Esto nos da una cantidad de
53 = 125 soluciones viables. Comprobar una por una para determinar cuál
de ellas es la solución óptima implica mucho gasto de recursos. Y esto
aumenta de forma rápida (exponencial) a medida que se agregan nuevas
variables y se permiten más valores para ellas.

La técnica de Branch-and-Bound (ramificación y acotamiento) es una


técnica general que puede aplicarse a diversos casos de programación
entera, y la idea básica es considerar, en cada paso, determinados
subconjuntos de soluciones viables y hallar entre ellos la solución óptima.

Supongamos que el problema de programación entera sea de minimizar


una función. El algorítmo Branch-and-Bound es el siguiente.
1) Denotamos 𝑍𝑠 = ∞ como cota superior de la función por minimizar.
2) Aplicamos alguna regla de división del problema y generamos así
subproblemas.
3) Etapa agotamiento/acotamiento. Para cada subproblema, hallamos sus
soluciones factibles y un valor límite inferior 𝑍𝐼 de la función objetivo
para dichas soluciones.
 Si 𝑍𝐼 ≥ 𝑍𝑠 , eliminamos dicho subproblema.
 Si no es solución factible del problema original, eliminamos el
subproblema.
 Si produce una mejor solución ( 𝑍𝐼 < 𝑍𝑠 ), ponemos 𝑍𝐼 = 𝑍𝑠 ,
almacenamos esta solución y volvemos al paso 2.
4) Regla para parar. Aplíquese cuando todos los subproblemas estuvieren
agotados. La solución óptima será aquella que tenga la menor cota
inferior.

Ejemplo

Supongamos que tenemos que minimizar la función


𝑍 = 5𝑥1 + 4𝑥2
sujeta a las restricciones:
3𝑥1 + 2𝑥2 ≥ 5,
2𝑥1 + 3𝑥2 ≥ 7,
𝑥1 , 𝑥2 ≥ 0, 𝑒𝑛𝑡𝑒𝑟𝑜𝑠.

Denotamos el problema original con 𝑃0 . Olvidando la condición entera


(problema relajado), la solución del problema lineal 𝑃0 es
1 11 49
𝑥1 = , 𝑥2 = , 𝑐𝑜𝑛 𝑍 = .
5 5 5

10
Así tenemos un valor mínimo 𝑍 que usaremos para comparar con los
valores obtenidos en cada uno de los subproblemas.
Como la solución no es entera, pasamos a aplicar la técnica de Branch-and-
Bound. La subdivisión que vamos a hacer es, 𝑥1 = 0 y 𝑥1 ≥ 1, es decir,
agregamos restricciones dando origen a dos nuevos problemas:

𝑃0

𝑥1 = 0 𝑥1 ≥ 1

𝑃1 𝑃2

1) 𝑥1 = 0. Con esta nueva restricción y, sin suponer 𝑥2 entera, obtenemos


𝑥2 = 5⁄2 con valor mínimo 𝑍 = 10. Como la solución no es entera, y el
valor mínimo de la función objetivo en 𝑃1 es mayor que que el valor
mínimo de 𝑃0 , podemos continuar haciendo una nueva división:
suponemos ahora 𝑥2 ≤ 2 , originando el problema 𝑃1,1 , y 𝑥2 ≥ 3 ,
originando el problema 𝑃1,2 .
 𝑥2 ≤ 2. Esta opción no es viable, ya que no satisface la condición
2𝑥2 ≥ 5 .
 𝑥2 ≥ 3. La solución mínima de 𝑃1,2 , es 𝑥2 = 3, con valor mínimo de
la función objetivo inicial de 12. Por lo tanto, encontramos una
posible solución entera del problema: 𝑥1 = 0, 𝑥2 = 3 con valor
mínimo 12 de la función objetivo.
2) 𝑥1 ≥ 1. Con esta restricción, el valor mínimo del problema 𝑃2 es 9, que
es menor que el valor mínimo del problema original, por lo que
eliminamos este subproblema.
Luego, la solución entera óptima del problema es 𝑥1 = 0, 𝑥2 = 3, con valor
mínimo 12 de la función objetivo.

𝑃0

𝑥1 = 0 𝑥1 ≥ 1

𝑃1 𝑃2

𝑥2 ≤ 2 𝑥2 ≥ 3

𝑃1,1 𝑃1,2

11
Referencias
Arsham, H. (2011). Deterministic modeling: linear optimization with applications.
Retrieved November, 16, 2011. http://home.ubalt.edu/ntsbarsh/Business-
stat/opre/SpanishD.html

Hillier, F., y Hillier, M. (2008). Métodos Cuantitativos para administración.


México: McGraw-Hill.

Hillier, F., y Lieberman, G. (1998). Introdução à pesquisa operacional. Brasil:


Campus.

Taha, H. (2004). Investigación de operaciones. México: Pearson Educación.

12

Вам также может понравиться