Archivo de la etiqueta: ido

Investigación de Operaciones: Forma canónica y forma estándar de un problema lineal (9)

Por Aldo Romero

Introducción

En las entradas anteriores hemos dado ejemplos de varios problemas de aplicación que pueden ser planteados mediante un problema de programación lineal. Una vez que llegamos a un modelo, se pueden tener restricciones de los tipos $\leq$, $=$ y $\geq$. Además, puede haber restricciones de signo sobre las variables. Puede que se les pida ser no positivas, no negativas o irrestrictas (no restringidas) en signo. Lo que haremos ahora es ver cómo podemos llegar a un cierto formato (forma estándar o forma canónica).

Forma canónica de un problema lineal

A continuación introducimos el primer formato que nos facilitará el trabajo.

Definición. Se dice que un problema de programación lineal está en forma canónica si cumple simultáneamente las siguientes tres propiedades:

  1. El problema es de maximización.
  2. Las restricciones del problema son todas del tipo $\leq$ (menor o igual).
  3. Las variables de decisión son no negativas.

Así, tenemos entonces que un problema en forma canónica se ve como sigue:

\begin{align*}
Max \quad z &= c_1x_1+\ldots+c_nx_n\\
s.a.&\\
&\left\{\begin{matrix} a_{11}x_1 + a_{12}x_2 + \ldots + a_{1n}x_n \leq b_1\\
a_{21}x_1+a_{22}x_2+\ldots + a_{2n}x_n \leq b_2\\
\vdots \\
a_{m1}x_1+a_{m2}x_2+\ldots+a_{mn}x_n\leq b_n. \\
x_1\geq 0, x_2\geq 0, \ldots, x_n\geq 0.\end{matrix}\right.
\end{align*}

En términos matriciales, esto podemos reescribirlo de manera mucho más compacta como sigue:

\begin{align*}
Max \quad z &= c\cdot x\\
s.a.&\\
Ax &\leq b\\
x &\geq 0,\\
\end{align*}

en donde:

  • $c=(c_1,\ldots,c_n)\in \mathbb R^n$ es el vector de costos (vector renglón)
  • $x = (x_1,\ldots,x_n)\in \mathbb R^n$ es el vector de variables de decisión (vector columna),
  • $A=[a_{ij}]$ es la matriz de restricciones, que es una matriz de $m \times n$ y
  • $b=(b_1,\ldots,b_m) \in \mathbb R^m$ es el vector de constantes que acotan las combinaciones lineales de variables.

Todo problema de programación lineal puede ser expresado en forma canónica; es decir, puede definirse un problema en forma canónica equivalente a él. En efecto:

  • Si el problema es de minimización, puede considerarse en vez de $z$ la función $z’ = -z$ y en el problema equivalente se busca maximizar $z’$.
  • Si una restricción es del tipo $\geq$ puede ser mutiplicada por -1 para obtener una del tipo $\leq$.
  • Una ecuación puede ser substituida por una desigualdad del tipo $\leq$ y otra del tipo $\geq$. Luego, la del tipo $\geq$ puede ser substituida por una del tipo $\leq$ como en el punto anterior.
  • Para una variable $x_i\leq 0$ puede definirse $x_i’ = -x_i$, resultando $x_i’ \geq 0$. Claramente hay una biyección entre elegir el valor de $x_i$ y $x_i’$.
  • Para una $x_i$ no restringida pueden ser definidas dos variables no negativas $x_i’$ y $x_i^\ast$ tales que $x_i’-x_i^\ast = x_i$. Para cualquier $x_i$ dado podemos construir dichas variables, y viceversa, para $x_i’$ y $x_i^\ast$ se puede construir $x_i$.

Ejemplo de pasar un problema a forma canónica

Transformaremos el siguiente modelo a su forma canónica
\begin{align*}
Min \quad z &= x_1-3x_2+7x_3\\
&s.a.\\
3x_1+&x_2+3x_3 &\leq 40\\
x_1+&9x_2-7x_3 &\geq 50\\
5x_1+&3x_2 &= 20\\
&5x_2 + 8x_3 &\leq 80\\
x_1, x_2 &\geq 0, \quad x_3 \quad libre.\\
\end{align*}

Primeramente se definen las variables no negativas $x_3’$ y $x_3^{\ast}$, tales que $x’_3-x_3^{\ast} = x_3$, con objeto de satisfacer el punto (3) de la definición. Para satisfacer el punto (1) se considera la función:
\begin{align*}
z’ &= -z \\&= -x_1+3x_2-7x_3\\&=-x_1+3 x_2-7 x’_3+7x_3^{\ast}
\end{align*}

y se busca maximiza ésta (equivalente a minimizar $z$). Finalmente se realizan cambios en las restricciones para satisfacer el punto (2). La primera y cuarta desigualdad cumplen con la definición por lo que no se modifican (más allá de la sustitución de $x_3$ por $x’_3-x_3^{\ast}$); la segunda desigualdad se multiplica por $-1$ para obtener una del tipo $\leq$: $$ x_1 + 9x_2 – 7x_3 \geq 50 \quad \Leftrightarrow \quad -x_1 – 9x_2 + 7x_3 \leq -50.$$

Substituyendo las nuevas variables se obtiene: $$-x_1-9x_2+7x’_3-7x_3^{\ast}\leq -50.$$

Para la tercera desigualdad se tiene lo siguiente:

\begin{align*}
5x_1+3x_2 &= 20\\
&\Leftrightarrow\\
5x_1 + 3x_2 \leq 20 \quad& y \quad 5x_1 + 3x_2 \geq 20\\
&\Leftrightarrow\\
5x_1 + 3x_2 \leq 20 \quad& y \quad -5x_1 – 3x_2 \leq -20.\\
\end{align*}

Finalmente el problema queda expresado en forma canónica como:

\begin{align*}
Max \quad z’ &= -x_1+3x_2-7x’_3+7x_3^{\ast}\\
&s.a.\\
3x_1+&x_2+3x’_3-3x_3^{\ast} &\leq 40\\
-x_1-&9x_2+7x’_3-7x_3^{\ast} &\leq -50\\
5x_1+&3x_2 &\leq 20\\
-5x_1-&3x_2 &\leq -20\\
&5x_2+8x’_3-8x_3^{\ast} &\leq 80\\
x_1, x_2&, x’_3, x_3^{\ast} \geq 0.\\
\end{align*}

Forma estándar de un problema lineal

Definición. Se dice que un problema de programación lineal está en forma estándar si

  1. Todas las restricciones son ecuaciones.
  2. Todas las variables son no negativas.
  3. La función objetivo puede pedirse que se optimice maximizándola, o minimizándola.

De esta manera, un problema en forma estándar se ve como sigue:

\begin{align*}
Max\, (\text{o } Min) \quad z &= c_1x_1+\ldots+c_nx_n\\
s.a.&\\
&\left\{\begin{matrix} a_{11}x_1 + a_{12}x_2 + \ldots + a_{1n}x_n = b_1\\
a_{21}x_1+a_{22}x_2+\ldots + a_{2n}x_n = b_2\\
\vdots \\
a_{m1}x_1+a_{m2}x_2+\ldots+a_{mn}x_n= b_n\\
x_1\geq 0, x_2\geq 0, \ldots, x_n\geq 0.
\end{matrix}\right.\\
\end{align*}

En notación matricial, el problema en forma canónica queda expresado de la siguiente manera:

\begin{align*}
Max\, (\text{o } Min) \quad z &= cx\\
&s.a.\\
Ax &= b\\
x &\geq 0\\
\end{align*}

en donde $c, x, A$ y $b \geq 0$ son como se mencionó antes.

Así como cualquier problema de programación lineal puede ser expresado en forma canónica, también cualquier problema de programación lineal puede expresarse en forma estándar. Una restricción del tipo $\leq$ ($\geq$) puede ser transformada en una ecuación sumando (o restando) una variable no negativa que recibe el nombre de variable de holgura.

Ejemplo de pasar un problema a forma estándar

Retomemos el problema ejemplo anterior, antes de expresarlo en forma canónica.

\begin{align*}
Min \quad z &= x_1-3x_2+7x_3\\
&s.a.\\
3x_1+&x_2+3x_3 &\leq 40\\
x_1+&9x_2-7x_3 &\geq 50\\
5x_1+&3x_2 &= 20\\
&5x_2 + 8x_3 &\leq 80\\
x_1, x_2 &\geq 0, \quad x_3 \quad libre.\\
\end{align*}

Vamos a expresarlo ahora en forma estándar. Como lo hicimos anteriormente, hacemos la sustitución $x=x’_3-x_3^\ast$ para que la variable libre se convierta en dos con restricciones de ser no negativas.

Para satisfacer (1) se introducen las variables de holgura, $x_4$, $x_5$ y $x_6$ que pediremos que sean no negativas. A la primera desigualdad le sumamos $x_4$. A la quinta le sumamos $x_6$. Y finalment, a la segunda le restamos $x_5$. Esto transforma las desigualdades en igualdades. De esta manera, el problema queda expresado de la siguiente manera:

\begin{align*}
Min \quad z &= x_1 – 3x_2+7x’_3-7x_3^\ast\\
&s.a.\\
3x_1 + &x_2 + 3x’_3 – 3x_3^\ast + x_4 &= 40\\
x_1 + &9x_2 – 7x’_3 + 7x_3^\ast – x_5 &= 50\\
5x_1 + &3x_2 &= 20\\
&5x_2 + 8x’_3 – 8x_3^\ast + x_6 &= 80\\
x_1,&x_2,x’_3,x_3^\ast,x_4,x_5,x_6 \geq 0.\\
\end{align*}

Más adelante…

Las formas que estudiamos en esta entrada nos ayudarán posteriormente para plantear soluciones para problemas de programación lineal.

Mientras tanto, en la siguiente entrada hablaremos de algunos otros conceptos relativos a la teoría de problemas lineales y posibles propiedades que puede tener una asignación de variables. Diremos qué es una solución básica, una solución factible y un punto extremo para un problema lineal.

Tarea moral

  1. ¿Cuál sería la forma estándar del problema de maximizar $x+y$ sujeto a $x-y\leq 8$ y $y\leq 0$? ¿Y su forma canónica?
  2. Transforma el siguiente problema de programación lineal a su forma canónica y a su forma estándar:
    \begin{align*}
    Max \quad z &= -2x_1 + 3x_2 – 2x_3\\
    &s.a.\\
    4x_1 – &x_2 – 5x_3 &= 10\\
    2x_1 + &3x_2 + 2x_3 &\geq 12\\
    x_1 &\geq 0, \quad x_2, x_3 \quad irrestrictas\\
    \end{align*}
  3. Revisa nuevamente las entradas anteriores y encuentra las formas canónicas y formas estándar de los problemas que hemos planteado hasta ahora.
  4. La forma estándar (o bien la forma canónica) de un programa lineal «es equivalente» al problema original. Justifica esta afirmación formalmente. Es decir, explica por qué una solución $x_1,\ldots,x_n$ que optimiza el problema original está asociada a una solución de su forma estándar (o canónica) y viceversa.
  5. Imagina que tenemos un sistema de ecuaciones de la forma $Ax=B$ con $A$ matriz en $M_{m,n}(\mathbb{R})$ y $b$ vector en $\mathbb{R}^m$. Queremos encontrar de todas las posibles soluciones al sistema aquella que minimiza la suma de las entradas de $x$. Plantea esto como un problema lineal y transfórmalo a su forma canónica y a su forma estándar.

Entradas relacionadas

Investigación de Operaciones: El problema de producción e inventario

Por Aldo Romero

Introducción

Ya hemos visto algunos ejemplos en los que se plantea un problema de programación lineal a partir de un contexto específico. Hemos visto el problema de la dieta, el problema de la mochila y el problema del transporte. Hay algunos problemas que parecen un poco más complicados y que no es tan evidente desde el inicio que se pueden plantear como problemas de programación lineal. En esta ocasión veremos uno de ellos: el problema de producción e inventario.

Abundan las aplicaciones de la programación lineal para planificar la producción y para controlar inventarios. El siguiente es solo una de múltiples aplicaciones que se les puede dar a este tipo de problemas.

A grandes rasgos, el problema consiste en modelar una fábrica que necesita tener lista cierta cantidad de inventario de un producto en determinados momentos del año. La fábrica puede producir cierta cantidad de producto que depende de la temporada del año. Quizás haya temporadas en las que puede producir más de lo que necesita, pero si hace eso incurrirá en costos de almacenaje. ¿Cómo puede distribuir su producción, almacenaje y despacho la fábrica para minimizar el costo y cumplir con su compromiso de inventario? Veamos a continuación que esta situación se puede plantear en términos de un problema de programación lineal.

Ejemplo del problema de producción e inventario

Una empresa productora de videojuegos indie acaba de finalizar su último gran lanzamiento y está lista para producirlo en masa en su formato físico. La siguiente tabla indica la demanda de los primeros 3 meses de lanzamiento.

Meses transcurridos a
partir del lanzamiento
012
Demanda en miles de copias
del mes en curso
806040
Productividad disponible del
mes en curso
1105030

Como el primer mes de lanzamiento es el más importante, la empresa decide que se pueden producir hasta 110 mil copias ese mes, y gradualmente va a reducir su productividad a 50 mil copias el segundo mes y 30 mil el tercer mes; esto con la finalidad de enfocar más tiempo y recursos en otras producciones.

La empresa productora y las tiendas donde se venden tiene un contrato que establece en particular dos cosas:

  • Las tiendas tienen que tener en stock la cantidad de copias demandas cada mes, y esta cantidad de copias será las que la empresa productora entregó este mes junto con las que sobraron el mes pasado
    • Si se entregan más copias que las demandadas por la tienda, se cobrará un costo de almacenamiento de \$2000 al mes por cada mil copias que están siendo almacenadas en tienda fuera de la demanda establecida.

El costo de producción de cada mil copias es de \$20000. Se desea determinar el plan de producción e inventario que satisfaga el contrato con estas tiendas a fin de minimizar los costos.

Variables de decisión

De manera intuitiva, vamos a hacer nuestras variables de decisión las miles de copias que se van a producir el mes en curso desde el lanzamiento del juego.

$x_i$ = miles de copias a producir en el mes $i$ desde el lanzamiento del juego. $(i \in \{1, 2, 3\})$.

Función objetivo

Como se mencionó, el plan de producción tiene que minimizar los costos para la empresa, tanto los gastos de producción de sus videojuegos como el almacenamiento de estos.

El costo de producción es simplemente el número de copias producidas por cada mes, multiplicado por el costo de fabricación de cada copia ($\$20$). Esto es: $20(x_1 + x_2 + x_3)$.

Y luego consideramos el costo de almacenamiento de las copias que no fueron demandadas por la empresa en ese mes. Entonces, para el primer mes, $x_1 – 80$ son las miles de copias que la empresa tiene que cubrir en gastos de almacenamiento. Para el segundo mes, las copias demandadas al momento son las acumuladas del primer y segundo mes ($140000$) y los juegos producidos son solamente $x_1 + x_2$. Entonces, los miles de juegos por los que hay que cubrir el costo de almacenamiento son $x_1 + x_2 – 140$. Y para el tercer mes, las copias demandadas son las acumuladas de los primeros 3 meses ($180000$) y los juegos producidos serán $x_1 + x_2 + x_3$ en miles de copias, y así, los costos de almacenamiento para el tercer mes serán $x_1 + x_2 + x_3 – 180$.

Entonces, el número de miles de copias por las que hay que cubrir costos de almacenamiento para estos 3 meses será: $(x_1 – 80) + (x_1 + x_2 – 140) + (x_1 + x_2 + x_3 -180)$. Y esta cantidad la multiplicamos por el costo de almacenamiento mensual por millar de copias (\$2000).

Entonces, juntando las expresiones, el costo total que hay que minimizar sería:

$$Min \quad z = 20000(x_1 + x_2 + x_3) + 2000[(x_1 – 80) + (x_1 + x_2 – 140) + (x_1 + x_2 + x_3 – 180)]$$

O si lo queremos poner de la forma más resumida posible, esto es:

$$Min \quad z = 26000x_1 + 24000x_2 + 22000x_3 – 800000$$

Restricciones del problema de producción e inventario

Primero, vayamos con las restricciones de oferta:

\begin{align*}
x_1 \leq 110\\
x_2 \leq 50\\
x_3 \leq 30\\
\end{align*}

Después, vayamos con las restricciones de demanda:

\begin{align*}
x_1 \geq 80\\
x_2 + (x_1 – 80) \geq 60\\
x_3 + (x_1 + x_2 – 140) \geq 40\\
\end{align*}

Recordemos que la razón de la última restricción es para que la empresa productora no se quede ninguna copia más de las demandadas para que no haya cuota por almacenamiento en las tiendas para el cuarto mes.

Y naturalmente nuestras variables de decisión son no negativas ya que hablamos de la cantidad de unidades que tenemos de un producto.

Resumen de formulación del problema de producción e inventario

En resumen, nuestro problema de programación lineal quedaría planteado así:

\begin{align*}
Min \quad z = 20000(x_1 + x_2 + x_3) &+ 2000[(x_1 – 80) + (x_1 + x_2 – 140) + (x_1 + x_2 + x_3 – 180)]\\
&s.a\\
x_1 &\leq 110\\
x_2 &\leq 50\\
x_3 &\leq 30\\
x_1 &\geq 80\\
x_2 + (x_1 – 80) &\geq 60\\
x_3 + (x_1 + x_2 – 140) &\geq 40\\
x_i &\geq 0, i \in \{1, 2, 3\}\\
\end{align*}

Más adelante…

La siguiente entrada muestra nuestro último ejemplo introductorio: el problema de la ruta más corta. Como veremos, en este problema también es necesario aprovechar la situación del problema de manera creativa para poder llevarlo a un contexto lineal.

Tarea

  1. El problema se vuelve mucho más sencillo si únicamente hay dos periodos. Plantea un problema que refleje esta situación en el caso particular de la entrada y resuélvelo. Es decir, determina en esos dos periodos (el primer y segundo mes) cuál es la cantidad correcta de unidades a producir por mes, para minimizar el costo total.
  2. Cambia el planteamiento dado en la entrada por uno en el que el costo de almacenaje en las tiendas sea de \$0. En ese caso, ¿cuál sería el plan de producción e inventario óptimo?
  3. En esta entrada dimos la formulación de un caso particular del problema de producción e inventario. Sin embargo, ya tienes todas las herramientas para plantear el problema de manera general. Realiza una formulación general en la que:
    1. Se tengan n periodos con demanda de unidades$d_1, d_2, \ldots, d_n$ por cada periodo.
    2. Se tengan capacidades de producción $o_1, o_2, \ldots, o_n$ unidades en cada periodo.
    3. Se tengan costos $P$ y $A$, de producir y almacenar una unidad de producto respectivamente.
  4. En un problema general de producción e inventario. ¿Por qué podría ser mala idea producir mucho más de lo necesario en las temporadas en las que se puede? Intenta justificar intuitivamente, y luego encuentra algunos casos particulares del problema que apoyen tus argumentos.

Respuestas

1.- Si eliminamos un mes del problema, tendríamos la siguiente tabla de productividad y demanda:

Meses transcurridos a
partir del lanzamiento
01
Demanda en miles de copias
del mes en curso
8060
Productividad disponible del
mes en curso
11050

Tenemos las mismas variables de decisión: $x_i$ = miles de copias a producir el mes $i$ desde el lanzamiento del juego. $i \in \{1, 2\}$

Para la función objetivo, el costo de producción de las copias va a ser: $20000(x_1 + x_2)$. Los gastos de almacenamiento del primer y segundo mes serán: $2000[(x_1 – 80) + (x_1 + x_2 – 140)]$.

Entonces la función objetivo queda de la siguiente manera:

$$Min \quad z = 24000x_1 + 22000x_2 – 440000$$

Las restricciones de oferta y de demanda serían:

\begin{align*}
x_1 &\leq 110\\
x_2 &\leq 50\\
x_1 &\geq 80\\
x2 + (x_1 – 80) &\geq 60\\
\end{align*}

Entonces, el problema con dos periodos de tiempo quedaría planteado de la siguiente manera:

\begin{align*}
Min \quad z &= 24000x_1 + 22000x_2 – 440000\\
&s.a\\
x_1 &\leq 110\\
x_2 &\leq 50\\
x_1 &\geq 80\\
x_2 + (x_1 – 80) &\geq 60\\
x_i &\geq 0, i \in \{1, 2\}\\
\end{align*}

Ahora, una posible solución a este problema sea satisfacer la demanda del primer mes, con tal de que sobren solamente la menor cantidad de copias que al sumarlas con la producción del segundo mes, nos cumplan también la demanda exacta de ese mes. Es decir, producir en el primer mes 90000 copias, almacenar 10000 que sobrarían en tienda y producir hasta el límite de producción el segundo mes que son 50000 copias y juntos con las 10000 que había almacenadas, se cumplirá la demanda que tenemos para el segundo periodo que son 60000 copias. De esta manera no se incurre en gastos innecesarios de almacenamiento, ya que para el tercer mes no hay copias por almacenar que nos generen ese gasto.

2.- Si no hubiera costo por almacenamiento tenemos varias soluciones que podrían ser óptimas, pero en realidad lo sería cualquiera donde se cumplan los valores de demanda al mínimo, es decir, que se produzcan las unidades que nos piden por los tres meses y ni una más.

3.- Sea una empresa tiene que producir un producto y este producto se vende en n periodos de tiempo, con su respectiva demanda ($d_1, \ldots, d_n$) y oferta de productos ($o_1, \ldots, o_n$) en cada uno de ellos.

Se tiene un costo $P$ de fabricación por producto y un costo A de almacenamiento por producto de un periodo a otro.

Se quiere determinar el plan de producción e inventario que satisfaga la demanda y minimice los costos.

Variables de decisión: $x_i$ = número de unidades a producir en el periodo $i$. $i \in \{1, \ldots, n\}$

Función objetivo:

$$Min \quad z = P(x_1 + \ldots + x_n) + A[(x_1-d_1) + (x_1 + x_2 – d_1 – d_2) + \ldots + (\sum_{i=1}^n{x_i} – \sum_{i=1}^n{d_i})]$$

Y por último, las restricciones serían:

\begin{align*}
x_1 &\leq o_1\\
x_2 &\leq o_2\\
&\vdots\\
x_n &\leq o_n\\
x_1 &\geq d_1\\
x_1 + x_2 – d_1 &\geq d_2\\
\vdots\\
\end{align*}

$$(\sum_{i=1}^n{x_i} – \sum_{i=1}^{n-1}{d_i}) \geq \sum_{i=1}^n{d_i}$$

$$x_i \geq 0,\quad i \in \{1, \ldots, n\}$$

4.- Dependería del problema pero en general como se intenta minimizar los costos, esto también sería minimizar los costos que conlleva el almacenaje de productos y si se producen muchos cada periodo, esto incurrirá en el aumento de los gastos mencionados y no será lo optimo para el objetivo que tenemos.

Entradas relacionadas

Investigación de Operaciones: El problema del transporte

Por Aldo Romero

Introducción

En esta entrada abordaremos otro de los problemas conocidos que se pueden plantear en términos de programación lineal: el problema del transporte. A grandes rasgos, el problema del transporte habla de cómo surtir a diferentes destinos de un cierto producto que parte de diferentes orígenes con disponibilidad limitada.

Siendo un poco más concretos, cada origen tiene una cierta cantidad de unidades de producto. Cada destino requiere de una cierta cantidad de unidades de producto. Además, para cada pareja origen-destino se tiene un costo de transporte unitario. El objetivo es determinar cuál es la manera más económica de cumplir con todos los requisitos de oferta y demanda.

Ejemplo del problema del transporte

Supongamos que una compañía que produce electrónicos tiene tres almacenes $A$, $B$ y $C$. La cantidad de computadoras portátiles disponibles en cada uno de los almacenes se encuentra registrada en la siguiente tabla.

OrigenABC
Oferta en unidades200350470

Pensemos que hay dos tiendas de electrónicos $X$ y $Y$ que desean vender computadoras portátiles de dicha compañía. La cantidad de computadoras portátiles que necesita cada tienda está dada en la siguiente tabla.

DestinoXY
Demanda en
unidades
300500

Además de esto sabemos que transportar cada una de las computadoras portátiles tiene un costo que depende del almacén origen y de la tienda destino. El costo unitario de transporte está dado por la siguiente tabla.

ABC
X354042
Y443745

Así, por ejemplo, transportar una computadora portátil del almacén $B$ a la tienda $Y$ tiene un costo de \$37.

Queremos determinar cuántas computadoras portátiles se tienen que enviar de cada origen a cada destino de manera que no se exceda la cantidad disponible en cada origen, a cada tienda llegue la cantidad de computadoras que se deben enviar y se minimice el costo total de envío.

Variables de decisión

Lo que tenemos que decidir en nuestro problema es cuántas computadoras portátiles se envían de cada origen a cada destino. Por ejemplo, debemos decidir cuánto vale una variable $x_{AX}$ que nos dice cuántas computadoras portátiles enviar del almacén $A$ a la tienda $X$. Así, las variables se definen de la siguiente manera:

$x_{ij}$ = número de computadoras a transportar del almacén $i$ al destino $j$. $i \in \{A, B, C\}, j \in \{X, Y\}$.

En este ejemplo en concreto, la cantidad de unidades debe ser un número entero (no podemos enviar $1/2$ de computadora portátil de un almacén a una tienda).

Función objetivo

Debemos de establecer cuál es la función objetivo que queremos optimizar. Notemos que el costo total que involucrarán las computadoras portátiles enviadas del almacén $A$ a la tienda $X$ es $35x_{AX}$, pues de acuerdo a la tabla de costos de transporte, hay un costo de \$35 para enviar cada computadora portátil. Todas las computadoras que salgan del almacén $A$ tendrán entonces un costo de $35x_{AX}+44x_{AY}$. Si calculamos de manera similar el costo de las computadoras que se salen de los almacenes $B$ y $C$ obtenemos el total. Entonces la función objetivo será la siguiente expresión:

$$Min \quad z = 35x_{AX}+44x_{AY}+40x_{BX}+37x_{BY}+42x_{CX}+45x_{CY}.$$

Restricciones

Hay dos tipos de restricciones que debemos cuidar:

  • Que ninguno de los almacenes exceda la cantidad de computadoras portátiles que tiene disponible.
  • Que cada tienda reciba el número de computadoras portátiles que requiere.

En el caso de la primera restricción, lo que estamos haciendo es limitar a las sumas que involucren a un mismo almacén. Por ejemplo, para no exceder las $200$ unidades que se tienen disponibles en el almacén $A$, se debe cumplir que $x_{AX}+x_{AY}\leq 200$. De manera similar, con el almacén $B$ obtenemos que $x_{BX}+x_{BY}\leq 350$ y con el almacén $C$ obtenemos que $x_{CX}+x_{CY}\leq 470$.

En el caso de la segunda restricción, ahora la desigualdad es opuesta: es una condición que requiere que las computadoras portátiles que lleguen a cada tienda sean al menos un valor dado. Entonces, para la tienda $X$ se tiene que cumplir $x_{AX}+x_{BX}+x_{CX}\geq 300$ y para la tienda $Y$ se tiene que cumplir $x_{AY}+x_{BY}+x_{CY}\geq 500$.

Entonces, juntando todas las restricciones, tenemos:

\begin{align*}
x_{AX}+x_{AY} \leq 200\\
x_{BX}+x_{BY} \leq 350\\
x_{CX}+x_{CY} \leq 470\\
x_{AX}+x_{BX}+x_{CX} \geq 300\\
x_{AY}+x_{BY}+x_{CY} \geq 500\\
x_{ij} \in \mathbb N, i \in \{A, B, C\}, j \in \{X, Y\}\\
\end{align*}

Resumen de formulación del problema del transporte

En resumen, el ejemplo de problema de transporte queda resumido en el siguiente PPL.

\begin{align*}
Min \quad z = 35x_{AX}+44x_{AY}+40x_{BX}&+37x_{BY}+42x_{CX}+45x_{CY}&\\
s.a.&\\
x_{AX}+x_{AY}&\leq 200\\
x_{BX}+x_{BY}&\leq 350\\
x_{CX}+x_{CY}&\leq 470\\
x_{AX}+x_{BX}+x_{CX}&\geq 300\\
x_{AY}+x_{BY}+x_{CY}&\geq 500\\
x_{ij} \in \mathbb N, i \in \{A, B, C\}, j \in \{X, Y\}\\
\end{align*}

Formulación general del problema del transporte

De manera general, en el problema del transporte se requieren transportar ciertas unidades de un producto desde $m$ centros de oferta (también llamados orígenes), a $n$ centros de demanda, (también denominados destinos). Cada centro de oferta tiene una cierta cantidad de unidades disponibles, y cada centro de demanda tiene una cierta cantidad de unidades que desea recibir.

Llamemos $o_i$ a la oferta del origen $i$ en unidades del producto ($i=1, \ldots , m$) y $d_j$ la demanda del destino $j$ en unidades del producto ($j=1, \ldots, n$). Para cada origen $i$ y cada destino $j$ tiene cierto costo enviar una unidad de producto. Sea $c_{ij}$ el costo unitario de transporte del producto del origen $i$ al destino $j$ ($i = 1, \ldots , m;j=1, \ldots , n$).

Lo que buscamos es determinar para cada origen $i$ y cada destino $j$ cuántas unidades $x_{ij}$ se deben transportar de tal modo que no se exceda la producción de cada origen, se satisfaga la demanda en cada destino y se incurra en el mínimo costo de transporte.

Como lo hemos hecho en entradas anteriores, las condiciones anteriores pueden ser planteadas en términos lineales. Para no exceder la oferta del origen $i$, se debe cumplir que

$$\sum_{j=1}^nx_{ij} \leq o_i,$$

para cada $i=1,\ldots,m$. A estas desigualdades les llamamos las restricciones de oferta.

Para cumplir con la demanda en el destino $j$ se debe cumplir que

$$\sum_{i=1}^{m}x_{ij} \geq d_j,$$

para cada $j=1,\ldots,n$. A estas desigualdades les llamamos las restricciones de demanda.

Agregando las condiciones de positividad y estableciendo que queremos minimizar el costo total, obtenemos el problema planteado de la siguiente manera:

\begin{align*}
Min \quad z &= \sum_{i=1}^{m} \sum_{j=1}^{n} c_{ij}x_{ij}\\
s.a.&\\
\sum_{j=1}^nx_{ij} &\leq o_i, \quad i=1, \ldots , m \quad \quad (1)\\
\sum_{i=1}^{m}x_{ij} &\geq d_j, \quad j=1, \ldots , n \quad \quad (2)\\
x_{ij} &\geq 0; \quad i=1, \ldots , m; j=1, \ldots , n,\\
\end{align*}

donde $x_{ij}$ es el número de unidades del producto a transportar del origen $i$ al destino $j$, para cada $i=1, \ldots , m$ y cada $j = 1, \ldots , n$.

Las desigualdades en (1) se llaman restricciones de oferta y en (2) restricciones de demanda.

Más adelante…

Con este problema contamos ya con tres ejemplos de situaciones que se pueden plantear en términos de programación lineal: el problema de la dieta, el problema de la mochila y el problema del transporte. A continuación veremos dos más: el problema de producción e inventario, y el problema de la ruta más corta.

Tarea

  1. Encuentra por lo menos una manera de realizar las asignaciones de variables en el problema de los almacenes de computadoras portátiles y las tiendas. No importa que el costo total que encuentres no sea óptimo, pero sí se deben cumplir las restricciones de oferta y de demanda.
  2. ¿Qué sucede en el problema del transporte si la cantidad total de demanda excede a la cantidad total de oferta? Plantea esta posibilidad en términos de los parámetros $o_i$ y $d_j$ de oferta y demanda, respectivamente.
  3. Imagina que en el ejemplo que planteamos de computadoras portátiles, almacenes y tiendas sucede que el precio de transportar una computadora portátil es de \$30 sin importar el almacén origen o la tienda destino. En este caso, ¿cuál sería una manera óptima de realizar los envíos, y tal que se cumplan las restricciones de oferta y demanda?
  4. Se presenta la siguiente situación:

Una empresa coreana fabrica y luego distribuye sus pantallas a diferentes vendedores. En este momentos tienen pantallas de 4 diferentes tamaños: 43″, 50″, 55″ y 65″. Los países a donde distribuyen sus productos son Japón, China y Estados Unidos. En la siguiente tabla se muestra el costo de exportación en miles de dólares por cada 1000 televisores de cada modelo.

43″50″55″65″Demanda este año
Japón\$50k\$60k\$65k\$70k100k
China\$60k\$70k\$75k\$80k300k
Estados Unidos\$80k\$90k\$95k\$100k350k
Disponibilidad250k220k180k150k——

También se señaló en la tabla anterior cual es la demanda de cada país para este año y las pantallas que fueron fabricadas este año por cada modelo.

Plantea este problema como un problema del transporte como se hizo anteriormente.

  1. Un posible caso particular del problema del transporte sucede cuando hay muchos orígenes y únicamente un destino. Plantea esta posibilidad de manera general. En este caso, ¿cuál sería una buena estrategia para decidir cuáles orígenes deben enviar unidades del producto al destino?

Respuestas

1.- (Respuesta a criterio del lector)

2.- Si la demanda supera a la oferta, por lo menos uno de los destinos del problema va a cumplir que $\sum_{i=1}^{m}x_{ij} < d_j$, por lo que no cumplirá una de las restricciones de nuestro problema y el problema ya no será factible.

3.- En este caso, sería indistinto de donde elijamos enviar nuestras computadoras con tal de que se satisfaga la demanda, y solamente se parará de enviar computadoras cuando se satisfaga esta demanda de 800 computadoras, que en cualquier caso nos dará un costo total de envío de $24000.

4.- Nuestra variable de decisión va a ser la siguiente: $x_{ij}$ = miles de televisores del tamaño $i$ que van a ser exportados al país $j$, $i \in \{1 (\textrm{43″}), 2 (\textrm{50″}), 3 (\textrm{55″}), 4 (\textrm{65″})\}$, $j \in \{1 (\textrm{Japón}), 2 (\textrm{China}), 3 (\textrm{Estados Unidos})\}$

Si seguimos los pasos como lo hemos venido haciendo, el problema debería quedar planteado de la siguiente manera:

\begin{align*}
Min \quad z = &50x_{11} + 60 x_{12} + 80x{13} + 60 x_{21} + 70 x_{22} + 90x_{23}\\
+ &65x_{31} + 75x_{32} + 95x_{33} + 70x_{41} + 80x_{42} + 100x_{43}\\
&s.a\\
&x_{11} + x_{21} + x_{31} + x_{41} \geq 100\\
&x_{12} + x_{22} + x_{32} + x_{42} \geq 300\\
&x_{13} + x_{23} + x_{33} + x_{43} \geq 350\\
&x_{11} + x_{12} + x_{13} \leq 250\\
&x_{21} + x_{22} + x_{23} \leq 220\\
&x_{31} + x_{32} + x_{33} \leq 180\\
&x_{41} + x_{42} + x_{43} \leq 150\\
&x_{ij} \in \mathbb{N}\\
\end{align*}

5.- Como solamente habría un destino, la variable de decisión sería la siguiente:
$x_i$ = unidades de producto que vamos a enviar del origen $i$ a nuestro destino, $i \in \{1, \ldots, m\}$

Sea $d$ la demanda de nuestro único destino.

El planteamiento general sería el siguiente:

\begin{align*}
Min \quad z &= \sum_{i=1}^{m} c_{i}x_{i}\\
s.a.&\\
x_i &\leq o_i, \quad i \in \{1, \ldots , m\}\\
\sum_{i=1}^{m}x_i &\geq d\\
x_i &\geq 0 \quad i \in \{1, \ldots , m\}\\
\end{align*}

Una buena estrategia para resolver el problema simplemente sería ir agotando las unidades que nos puede proporcionar cada origen empezando por los que nos dan el menor costo de transporte por unidad, y parar justo cuando se haya cumplido la demanda de este único destino.

Entradas relacionadas

Investigación de Operaciones: El problema de la mochila

Por Aldo Romero

Introducción

En la entrada anterior hablamos del problema de la dieta, en donde queríamos cumplir ciertas restricciones alimenticias creando un menú de bajo costo. En esta entrada veremos otro ejemplo conocido de PPL: el problema de la mochila. La idea general es que queremos transportar ciertos bienes mediante un contenedor que tiene cierta capacidad. Este contenedor puede ser algo tan sencillo como una mochila, o algo tan complicado como un tren. A continuación veremos un ejemplo intermedio.

Ejemplo del problema de la mochila

Cesar es un fabricante de botanas que vende 3 de sus productos a varios distribuidores dentro de su localidad. Cada caja de sus productos tiene un peso diferente y generan diferentes ganancias al ser vendidas. Esta información está reflejada en la siguiente tabla:

Peso por caja
en kilogramos
Ganancia en pesos
por caja vendida
Producto 110150
Producto 212200
Producto 315300

Cesar tiene una camioneta que aguanta hasta 800 kilos de carga sin contar al conductor. Cesar quiere saber cuales son los productos que debe llevar con tal de maximizar sus ganancias.

Variables de decisión

Nuestra variable de decisión es bastante intuitiva.

$x_i$ = número de cajas del producto $i$ que Cesar va a llevar en su camioneta. $i \in \{1, 2, 3\}$

Función objetivo

Como el objetivo de Cesar es maximizar las ganancias, la función objetivo va a ser:

$$Max \quad z = 150x_1 + 200x_2 + 300x_3$$

Restricciones

En este problema, la única condición que nos dan es que el peso total de las cajas a llevar no exceda la capacidad de carga de la camioneta. Es decir:

\begin{align*}
10x_1 + 12x_2 + 15x_3 \leq 800\\
x_i \geq 0, i \in \{1, 2, 3\}\\
\end{align*}

Resumen

El PPL que obtenemos es en resumen:

\begin{align*}
Max \quad z= 150x_1&+ 200x_2 + 300x_3\\
s.a.&\\
10x_1&+12x_2+15x_3 \leq 800\\
x_i& \geq 0,i \in \{1, 2, 3\}\\
\end{align*}

Formulación general del problema de la mochila

Un modelo como el anterior recibe el nombre de problema de la mochila pues originalmente fue formulado del siguiente modo: un excursionista desea determinar la cantidad de latas de ciertos comestibles que llevará en su mochila. Las latas tienen cierto peso $p_i$, cierto valor $v_i$ para el excursionista y su mochila tiene capacidad $P$. Si hay $n$ alimentos disponibles y usamos como variables de decisión a $x_1,\ldots,x_n$, donde $x_i$ es el número de latas de alimento $i$ que el excursionista llevarán, entonces el problema de la mochila es:

\begin{align*}
Max \quad z &= \sum_{n}^{i=1} v_ix_i\\
s.a.&\\
\sum_{n}^{i=1} p_ix_i &\leq P\\
x_i &\geq 0, x_i \in \mathbb Z, i=1, \ldots, n.\\
\end{align*}

Este es un problema de programación lineal, pero más específicamente se le conoce como un problema de programación lineal entera (PPLE), o bien un modelo lineal entero, pues las variables $x_i$ están sujetas a tomar sólo valores en los números enteros. Sorpresivamente, aunque los problemas de programación entera parezcan «más fáciles» dado que sus posibilidades están más restringidas, esto no es así. Han sido objeto de mucho estudio pues agregar la condición de integralidad (que las variables sean enteras) crea complicaciones adicionales y hacen que los métodos generales no funcionen tan bien. Los problemas de programación lineal entera son difíciles incluso en términos de una noción computacional muy precisa del tiempo requerido para obtener la mejor solución.

Más adelante…

Aún tenemos algunos problemas conocidos por explorar. El siguiente que veremos es el problema del transporte, en donde queremos saber cómo distribuir productos a través distintas posibilidades de transporte para economizar costos.

En algunas entradas más también hablaremos de cómo llevar cualquier PPL a una forma estándar, que nos permitirá desarrollar la teoría general necesaria para resolverlo.

Tarea

  1. Imagina el siguiente escenario:
    Cesar ahora solo vende los productos 1 y 2. El producto 1 ahora pesa 8 kilogramos y el producto 2 ahora pesa 10 kilogramos, que el primero de ellos da una ganancia de \$120 y que el segundo da una ganancia de \$155. El vehículo que tenemos ahora es un coche que sólo puede cargar 392 kilogramos. ¿Cómo cargarías en este caso el coche para maximizar las ganancias? Plantea el PPLE e intenta resolver el problema con las herramientas con las que cuentes hasta ahora.
  2. Para entender un poco el problema binario de la mochila, considera el siguiente ejemplo. Se tienen 7 posibles artículos con pesos de 7, 10, 12, 4, 5, 9, 11 kilos y con valor de 23, 25, 28, 17, 19, 25, 26 respectivamente. Sólo podemos decidir si llevar o no llevar cada artículo, y el peso total que se cargará no puede exceder 40 kilos. ¿Cuáles artículos hay que llevar para maximizar el valor? Plantea el PPLE e intenta resolverlo con las herramientas con las que cuentes hasta ahora.
  3. Considera el problema ejemplo original de esta entrada de blog. ¿Qué pasaría con la respuesta del problema si ocurrieran los siguientes escenarios? ¿Las ganancias aumentarán o disminuirán?
    • Cesar compró una mejor camioneta, que ahora puede transportar 1.5 toneladas.
    • El producto 3 se volvió más caro y ahora Cesar solo gana 250 pesos por caja vendida.
    • El tipo de envoltura y material de la caja cambio, por lo que ahora los pesos de los productos son 12, 17, 25 kilos para los productos 1, 2 y 3 respectivamente.

Respuestas

1.- Podríamos calcular cual es el producto que nos da más ganancias por kilo con una simple división. El producto 1 nos da 120/8 = 15 pesos por kilo del producto y el producto 2 nos da 155/10 = 15.5 pesos por kilo. El producto 2 es el que más ganancias nos va a dar por lo que vamos a llenar el carro con la mayor cantidad de productos 1 que se pueda.
Lo máximo que podemos meter dentro del carro son 39 unidades del producto 2, teniendo una ganancia de 6045 pesos, pero nos sobrarían 2 kilos para llegar al límite de peso. Entonces vamos a tratar de considerar las opciones donde incluyamos algunas unidades del producto 1 y a ver si podemos mejoran las ganancias.
Si tomamos 38 unidades del producto 2, nos quedan 12 kilos de capacidad y solamente podemos solamente agregar una unidad del producto 1, teniendo en total una ganancia de 6010 pesos. Esta opción no mejora las ganancias.
Si tomamos 37 unidades del producto 2 nos quedan 22 kilos de capacidad y solamente podemos agregar dos unidades del producto 1, teniendo una ganancia de 5975 pesos. Esta opción tampoco mejora las ganancias.
Ahora, si tomamos 36 unidades del producto 2, nos quedan 32 kilos de capacidad y ahora podemos agregar 4 unidades del producto 1, teniendo ahora una ganancia de 6060 pesos. En este caso SI conseguimos una mejora en nuestras ganancias.
Y si somos observadores, nos daremos cuenta que si seguimos agregando unidades del producto 1, ahora las ganancias solo van a ir disminuyendo, por lo que nos quedaremos con esta última solución para nuestro problema.

2.- La variable de decisión sería como el visto en esta entrada, con la siguiente variante: $x_i$ = 1 si el articulo i se va a llevar o 0 si el articulo i no se va a llevar.

La función objetivo simplemente va a ser la que maximice el valor total de los artículos a llevar:

$$Max z = 23x_1 + 25x_2 + 28x_3 + 17x_4 + 19x_5 + 25x_6 + 26x_7$$

Y la única restricción es:

$$7x_1 + 10x_2 + 12x_3 + 4x_4 + 5x_5 + 9x_6 + 11x_7 \leq 40$$

Entonces, el problema planteado sería:

\begin{align*}
Max z = &23x_1 + 25x_2 + 28x_3 + 17x_4 + 19x_5 + 25x_6 + 26x_7\\
&s.a\\
&7x_1 + 10x_2 + 12x_3 + 4x_4 + 5x_5 + 9x_6 + 11x_7 \leq 40\\
&x_i \geq 0, i \in {1, \ldots, 7}\\
\end{align*}

Y el modo de resolverlo es muy similar al anterior, solo hay que considerar los cocientes de los artículos que dan más valor por cada kilo que pesan, tomar los mejores y si sobra capacidad de peso, probar combinaciones de tal manera que el se elimine esa capacidad restante y evaluar si el valor sube en efecto o hasta baja.

3.- $\bullet$ La solución va a ser similar a el problema 1, se va a llenar la camioneta con el producto que ofrezca la mayor ganancia/kilo (el producto 3) y si sobra capacidad de carga se va a intentar introducir algunos los productos de menor peso, hasta encontrar la solución que nos de las mayores ganancias. La diferencia solo va a ser en el número de unidades que van a entrar en la camioneta y por tanto, la solución aunque sea análoga, va a ser diferente.

$\bullet$ Como la ganancia del producto de mayor ganancia/kilo cambió, ahora hay que comparar este nuevo valor con el de los otros productos y nos daremos cuenta que ahora tendremos la misma ganancia/kilo entre este producto y el producto número 2, entonces lo que se intentará es llenar la camioneta entre estos dos productos de tal manera que no quede capacidad de carga sobrante.

$\bullet$ Hay que calcular la nueva ganancia/kilo de cada producto y resulta ahora que al cambiar los pesos de las cajas, el producto 1 es el que mayor ganancia/kilo tiene, entonces vamos a tratar de incluir la mayor cantidad de unidades de este producto que sea posible y si sobra capacidad tratar de combinar con algunas unidades de los otros productos con tal de tener la ganancia más grande.

Entradas relacionadas

Investigación de Operaciones: El problema de la dieta

Por Aldo Romero

Introducción

En la entrada anterior hablamos un poco de lo que es la Programación Lineal, de su historia y de cuáles son los tipos de problemas que estudia. Dijimos que un problema de programación lineal es aquel en el que se busca optimizar una función lineal bajo ciertas restricciones lineales. En estas entradas y las siguientes veremos algunos ejemplos conocidos de problemas de programación lineal. Comenzaremos hablando del problema de la dieta.

El problema de la dieta fue uno de los primeros problemas sobre optimización. George Joseph Stigler fue quien lo planteo a finales de la década de los años 30. El problema de régimen alimenticio óptimo para tratar de satisfacer la necesidad del ejército americano por hallar la manera más económica de alimentar a sus tropas, asegurándose de satisfacer al mismo tiempo unos determinados requerimientos nutricionales.

Análisis e interpretación

En este tipo de problemas, nos van a dar una cierta cantidad de alimentos diferentes, digamos $m$ alimentos, y cada alimento va a contener una cantidad finita de nutrientes de interés, digamos $n$ nutrientes. Entonces la cantidad de nutrientes j que va a tener el alimento i por unidad va a quedar representado por una constante dada, digamos $a_{i,j}$.

——Nutriente 1Nutriente 2$\ldots$Nutriente $n-1$Nutriente $n$Costo del alimento
Alimento 1$a_{1,1}$$a_{1,2}$$\ldots$$a_{1,n-1}$$a_{1,n}$$c_1$
Alimento 2$a_{2,1}$$a_{2,2}$$\ldots$$a_{2,n-1}$$a_{2,n}$$c_2$
$\vdots$$\vdots$$\vdots$$\ddots$$\vdots$$\vdots$$\vdots$
Alimento m-1$a_{m-1,1}$$a_{m-1,2}$$\ldots$$a_{m-1,n-1}$$a_{m-1,n}$$c_{m-1}$
Alimento m$a_{m,1}$$a_{m,2}$$\ldots$$a_{m,n-1}$$a_{m,n}$$c_m$
Nutrientes
requeridos
$b_1$$b_2$$\ldots$$b_{n-1}$$b_n$——

Cada individuo (ya sea persona u otro ser vivo) tiene el mismo requerimiento mínimo de cada uno de estos nutrientes, digamos $b_j, \quad \forall \ j \in {1, \ldots, n}$.

Sea $x_i$ = el número de unidades del alimento i que vamos a asignar a cada individuo

Entonces vamos a tener la restricción de que cada individuo tiene que recibir los nutrientes requeridos por los alimentos que le son dados. Esto se representa de la siguiente manera:

(Alimento 1: cantidad de nutriente j)(Unidades de alimento 1) + (Alimento 2: cantidad de nutriente j)(Unidades de alimento 2) + $\ldots$ + (Alimento m: cantidad de nutriente j) (Unidades de alimento m)$\geq$ Nutriente j requerido

Usando la notación de la tabla y las variables que creamos, se escribiría:

$a_{1,j}x_1 + a_{2,j}x_2 + \ldots + a_{m,j}x_m \geq b_j$ para cualquiera de los n nutrientes.

Cada alimento va a tener un coste dado por unidad, digamos $c_i$.

Como se mencionó, se busca la manera más económica de alcanzar los nutrimentos requeridos de los alimentos asignados a cada individuo, entonces, el problema busca minimizar el costo de los alimentos que elijamos. Esto se traduce como:

Minimizar z = (Costo alimento 1)(Unidades de alimento 1) + (Costo de alimento 2)(Unidades de alimento 2) + $\ldots$ + (Costo de alimento m)(Unidades de alimento m)

Usando la notación de la tabla y las variables que creamos, se escribiría:

$Min \quad z = c_1x_1 + c_2x_2 + \ldots + c_mx_m$

Como la cantidad de alimentos que vamos a asignar es a lo menos cero, nuestras variables $x_i$ van a ser mayores o iguales a cero.

Entonces, en términos generales, el problema quedaría de esta forma:

\begin{align*}
Min \quad z = c_1&x_1 + c_2x_2 + \ldots + c_mx_m\\
sujeto \quad a \quad &(s. a)\\
&a_{1,1}x_1 + a_{2,1}x_2 + \ldots + a_{m,1}x_m \geq b_1\\
&a_{1,2}x_1 + a_{2,2}x_2 + \ldots + a_{m,2}x_m \geq b_2\\
\vdots\\
&a_{1,n}x_1 + a_{2,n}x_2 + \ldots + a_{m,n}x_m \geq b_n\\
&x_i \geq 0\\
\end{align*}

Ejemplo del problema de la dieta

Consideremos el siguiente problema:

Un estudiante de la facultad de ciencias asiste a clases los 5 días de la semana. En su hora de comida tiene 3 opciones preferidas: Ir al comedor, comprar una torta o comprar unos tacos de canasta. Cada opción tiene un aporte nutritivo distinto que está representado en la siguiente tabla, así como el costo por merienda de cada opción

Costo por merienda
en pesos
Contenido nutritivo por unidad de alimento
N1N2
Comedor$351410
Torta$28107
Tacos de
canasta
$2064
Necesidades de nutrición
a la semana
4535

El estudiante busca cumplir sus necesidades nutricionales semanales y aparte gastar lo menos posible ya que la beca no da para tanto tristemente. Plantea como un problema de programación lineal.

Veamos cómo podemos plantear el problema anterior como un problema de programación lineal usando el análisis que hicimos anteriormente.

Sea $x_1$ las meriendas en el comedor por semana, $x_2$ las meriendas con torta por semana y $x_3$ las meriendas con tacos de canasta. En la tabla nos indican los costos de estas por lo que ya tenemos nuestra función objetivo a minimizar:

$Min \quad z = 35x_1 + 28x_2 + 20x_3$

Luego, tenemos que considerar las restricciones de los nutrientes que son requeridos. Solo tenemos dos nutrientes a considerar entonces tenemos las siguientes restricciones:

(Merienda 1: cantidad de nutriente 1)(Meriendas 1 por semana) +
(Merienda 2: cantidad de nutriente 1)(Meriendas 2 por semana) +
(Merienda 3: cantidad de nutriente 1)(Meriendas 3 por semana) $\geq$
Nutriente 1 requerido

(Merienda 1: cantidad de nutriente 2)(Meriendas 1 por semana) +
(Merienda 2: cantidad de nutriente 2)(Meriendas 2 por semana) +
(Merienda 3: cantidad de nutriente 2)(Meriendas 3 por semana) $\geq$
Nutriente 2 requerido

Escrito en la notación general descrita:

\begin{align*}
&a_{1,1}x_1 + a_{2,1}x_2 + a_{3,1}x_3 \geq b_1\\
&a_{1,2}x_1 + a_{2,2}x_2 + a_{3,2}x_3 \geq b_2\\
\end{align*}

Y usando los valores de el problema, tenemos:

\begin{align*}
&14x_1 + 10x_2 + 6x_3 \geq 45\\
&10x_1 + 7x_2 + 4x_3 \geq 35\\
\end{align*}

Y por último solo cabe mencionar que las meriendas del alimento que vamos a considerar es un número mayor o igual a cero. Por lo que el planteamiento del problema quedaría de la siguiente manera:

\begin{align*}
Min \quad z = 35&x_1 + 28x_2 + 20x_3\\
s.a&\\
14&x_1 + 10x_2 + 6x_3 \geq 45\\
10&x_1 + 7x_2 + 4x_3 \geq 35\\
&x_1, x_2, x_3 \geq 0\\
\end{align*}

Más adelante…

El problema de la dieta es el primer ejemplo de problema de programación lineal que nos encontramos. En las siguientes entradas veremos otros ejemplos más, como el problema de la mochila, el del transporte y otros.

Hasta ahora sólo hemos hablado de qué tipo de problemas queremos resolver, pero no hemos dicho nada con respecto al cómo los resolveremos. Veremos eso un poco más adelante.

Tarea

  • ¡Oh no! La inflación llegó y el precio de las meriendas mencionadas subió un $10\%$. Realiza nuevamente la formulación del problema de la dieta del ejemplo bajo este supuesto.
  • Formula como un PPL el siguiente ejemplo:
    «Se tienen disponibles 4 tipos de inversión cuyos costos son \$12,000, \$20,000, \$16,000, \$15,000 respectivamente. La inversión 1 tiene un valor presente neto de \$14,000, la 2 de \$25,000, la 3 de \$20,000 y la 4 de \$18,000. Se cuenta con un presupuesto de \$50,000. El objetivo es determinar la combinación de inversiones que aporte el valor presente neto máximo.»
  • Imagina que tenemos un problema más sencillo. Sólo se pueden elegir entre tortas y tacos. Cuestan \$30 las tortas y \$20 los tacos. La torta da 12 unidades de N1 y 8 de N2. Los tacos dan 9 unidades de N1 y 6 de N2. Imagina que se deben consumir 50 unidades de N1 y 35 unidades de N2. Se quiere encontrar la dieta más económica. Plantea este problema como un problema de programación lineal.
  • Intenta resolver el problema de programación lineal del inciso anterior con las herramientas con las que cuentes hasta ahora de Cálculo, Álgebra Lineal, etc. ¿Cuál sería el plan de meriendas semanal más económico?
  • ¿Por qué en el problema de la dieta no tiene sentido preguntarse por la dieta menos económica? Intenta argumentarlo desde el punto de vista práctico, como desde el punto de vista matemático.

Respuestas

$\bullet$ \begin{align*}
Min \quad z = 38.5&x_1 + 30.8x_2 + 22x_3\\
s.a&\\
14&x_1 + 10x_2 + 6x_3 \geq 45\\
10&x_1 + 7x_2 + 4x_3 \geq 35\\
&x_1, x_2, x_3 \geq 0\\
\end{align*}

$\bullet$ Nuestra variable de decisión es la siguiente:

$x_i$ = Se hace el tipo de inversión $i$ con $i \in \{1, 2, 3, 4\}$, $x_i \in \{0, 1\}$

Observemos que si se hace el tipo de inversión $i$, las ganancias son: valor presente neto – costo de la inversión. Como eventualmente lo que se busca es maximizar las ganancias, nuestra función objetivo sería la siguiente:

$$Max \quad z = 2000x_1 + 5000x_2 + 4000x_3 + 3000x_4$$

La única restricción es el presupuesto con el que se cuenta para realizar las inversiones. Entonces, la restricción será:

$$12,000x_1 + 20,000x_2 + 16,000x_3 + 15,000x_4 \leq 50,000$$

Y como las variables solo toman valor 0 o 1, también se satisface la no negatividad.

Entonces, el problema quedaría planteado de la siguiente forma:

\begin{align*}
Max \quad z = &2000x_1 + 5000x_2 + 4000x_3 + 3000x_4\\
&s.a\\
&12,000x_1 + 20,000x_2 + 16,000x_3 + 15,000x_4 \leq 50,000\\
&x_1 \in {0, 1}, i \in {1, 2, 3, 4}\\
\end{align*}

$bullet$ El cambio es muy simple, solo hay que cambiar las variables de decisión a $x_1$ las meriendas con torta por semana y $x_2$ las meriendas con tacos de canasta por semana. Entonces, con los cambios aplicados:

\begin{align*}
Min \quad z = 30&x_1 + 20x_2\\
s.a&\\
12&x_1 + 9x_2 \geq 50\\
8&x_1 + 6x_2 \geq 35\\
&x_1, x_2 \geq 0\\
\end{align*}

$bullet$ Una idea sería considerar solamente todos los valores posibles a elegir en la semana, revisar que cumplan con las necesidades de nutrición y calcular el gasto que conllevaría cada plan. Vamos a representar esos resultados en la siguiente tabla:

Combinación alimentariaN1 $\geq$ 50N2 \geq 35Costo del plan
5 días torta6045150
4 días torta,
1 día taco
5642140
3 días torta,
2 días tacos
5239
2 días torta,
3 días tacos
4836
1 día torta,
4 días tacos
4433110
5 días tacos4030100

Las filas que tienen una casilla roja no cumplen la necesidad nutricional de su respectiva columna.

Entonces, nuestra solución va a ser el plan de alimentación que tenga el menor costo y que tenga las dos casillas de necesidades nutricionales en verde. Esta solución es la de combinar 3 días con merienda de torta y dos días con merienda de tacos de canasta.

$\bullet$ Podría tal vez argumentarse es que la finalidad de resolver este tipo de problema es economizar los gastos de el o los individuos, entonces al tomar planes de dieta más caros, estamos haciendo lo opuesto a lo propuesto por la función objetivo.

Texto de la cabecera

Texto de la cabecera

Entradas relacionadas