In [1]:
%pylab inline


Populating the interactive namespace from numpy and matplotlib

In [2]:
# Cantidad de productos
x1 = np.linspace(0,250000,1000) # Bombachitas
x2 = np.linspace(0,150000,1000) # Baberos

# Restricciones
# tiempo en minutos
T_corte = 20000
T_costu = 36000
T_empaq =  16000

# Tiempos de manufactura por unidad
# tiempo en minutos
t_cor1 = 0.1
t_cor2 = 0.2

t_cos1 = 0.3
t_cos2 = 0.1

t_emp1 = 0.1
t_emp2 = 0.5

# Ganancia
g1 = 1.8
g2 = 1.2

$x_1$ Cantidad de Bombachitas producidas.

$x_2$ Cantidad de Baberos producidos.

Maximizar la ganancia total G: $$ max(G) = x_1 \cdot g_1 + x_2 \cdot g_2 $$

con las restricciones: $$ x_1 \cdot t_{cor1} + x_2 \cdot t_{cor2} \leq T_{corte}$$ $$ x_1 \cdot t_{cos1} + x_2 \cdot t_{cos2} \leq T_{costu}$$ $$ x_1 \cdot t_{emp1} + x_2 \cdot t_{emp2} \leq T_{empaq}$$

Se calculan las restricciones acá:


In [3]:
R0  = np.zeros([len(x1),len(x2)])

G = copy(R0)
for i in range(len(x1)):
    for j in range(len(x2)):
        G[i,j] = x1[i]*g1 + x2[j]*g2

R1 = copy(R0)
r1 = copy(R0)

for i in range(len(x1)):
    for j in range(len(x2)):
        R1[i,j] = x1[i]*t_cor1 + x2[j]*t_cor2
        if (R1[i,j]<=T_corte):
            r1[i,j] = 1
        else:
            R1[i,j] = 0
R1 = R1.T
r1 = r1.T
            
R2 = copy(R0)
r2 = copy(R0)

for i in range(len(x1)):
    for j in range(len(x2)):
        R2[i,j] = x1[i]*t_cos1 + x2[j]*t_cos2
        if (R2[i,j]<=T_costu):
            r2[i,j] = 1
R2 = R2.T
r2 = r2.T
            
R3 = copy(R0)
r3 = copy(R0)

for i in range(len(x1)):
    for j in range(len(x2)):
        R3[i,j] = x1[i]*t_emp1 + x2[j]*t_emp2
        if (R3[i,j]<=T_empaq):
            r3[i,j] = 1
R3 = R3.T
r3 = r3.T

Restricción 1

$$ x_1 \cdot t_{cor1} + x_2 \cdot t_{cor2} \leq T_{corte}$$

La cantidad de bombachitas ($x_1$unidades) por (0.1 min/unidad) el tiempo que se demora en CORTAR cada una más la cantidad de baberos($x_2$unidades) por (0.2 min/unidad) el tiempo que se demora en fabricar cada uno tiene que ser menor que el tiempo total destinado al corte (20000 minutos).

$$ x_1 \cdot (0.1 min/u) + x_2 \cdot (0.2 min/u) \leq 20000 min$$

En rojo se ve dónde se cumple la restricción 1, en azul dónde no la cumple.

En verde vemos la recta $$ x_1 \cdot t_{cor1} + x_2 \cdot t_{cor2} = T_{corte}$$ que es lo mismo que $$ x_2 = \frac{T_{corte} - x_1 \cdot t_{cor1}}{t_{cor2}}$$


In [4]:
fig = figure(figsize=(7,5))
plot(x1, (T_corte-x1*t_cor1)/t_cor2, c="g", lw=5)
pcolormesh(x1,x2, r1)
plt.title("Restriccion1")
xlabel("x1")
ylabel("x2"); ylim(0,150000)


Out[4]:
(0, 150000)

Restricción 2

$$ x_1 \cdot t_{cos1} + x_2 \cdot t_{cos2} \leq T_{costu}$$

La cantidad de bombachitas ($x_1$unidades) por (0.3 min/unidad) el tiempo que se demora en COSTURA cada una más la cantidad de baberos($x_2$unidades) por (0.1 min/unidad) el tiempo que se demora en COSTURA cada uno tiene que ser menor que el tiempo total destinado a COSTURA (20000 minutos).

$$ x_1 \cdot (0.3 min/u) + x_2 \cdot (0.1 min/u) \leq 36000 min$$

En rojo se ve dónde se cumple la restricción 2, en azul dónde no la cumple.

En verde vemos la recta $$ x_1 \cdot t_{cos1} + x_2 \cdot t_{cos2} = T_{costu}$$ que es lo mismo que $$ x_2 = \frac{T_{costu} - x_1 \cdot t_{cos1}}{t_{cos2}}$$


In [5]:
fig = figure(figsize=(7,5))
plot(x1, (T_costu-x1*t_cos1)/t_cos2, c="g", lw=5)
pcolormesh(x1,x2, r2)
plt.title("Restriccion2")
xlabel("x1")
ylabel("x2"); ylim(0,150000)


Out[5]:
(0, 150000)

Restricción 3

$$ x_1 \cdot t_{emp1} + x_2 \cdot t_{emp2} \leq T_{empaq}$$

La cantidad de bombachitas ($x_1$unidades) por (0.1 min/unidad) el tiempo que se demora en EMPAQUE cada una más la cantidad de baberos($x_2$unidades) por (0.5 min/unidad) el tiempo que se demora en EMPAQUE cada uno tiene que ser menor que el tiempo total destinado a EMPAQUE (6000 minutos).

$$ x_1 \cdot (0.3 min/u) + x_2 \cdot (0.1 min/u) \leq 6000 min$$

Esta es la restriccion más fuerte, pues el tiempo de empaque total (6000 minutos) es más pequeño que el tiempo que se tiene destinado a corte y costura.

En rojo se ve dónde se cumple la restricción 3, en azul dónde no la cumple.

En verde vemos la recta $$ x_1 \cdot t_{emp1} + x_2 \cdot t_{emp2} = T_{empaq}$$ que es lo mismo que $$ x_2 = \frac{T_{empaq} - x_1 \cdot t_{emp1}}{t_{emp2}}$$


In [6]:
fig = figure(figsize=(7,5))
plot(x1, (T_empaq-x1*t_emp1)/t_emp2, c="g", lw=5)
pcolormesh(x1,x2, r3)
plt.title("Restriccion3")
xlabel("x1")
ylabel("x2"); ylim(0,150000)


Out[6]:
(0, 150000)

Nos interesa la región donde se cumplen las restricciones 1, 2 y 3 al mismo tiempo. Es decir, donde las tres regiones son viables (las tres en rojo)


In [7]:
fig = figure(figsize=(7,5))
plot(x1, (T_corte-x1*t_cor1)/t_cor2, c="g", lw=5)
plot(x1, (T_costu-x1*t_cos1)/t_cos2, c="g", lw=5)
plot(x1, (T_empaq-x1*t_emp1)/t_emp2, c="g", lw=5)

pcolormesh(x1,x2, r3+r2+r1)


plt.title("Tres restricciones", fontsize=20)
xlabel("x1", fontsize=18)
ylabel("x2", fontsize=18)
ylim(0,150000)


Out[7]:
(0, 150000)

Ganancia

$$ G(x_1, x_2) = x_1 \cdot g_1 + x_2 \cdot g_2 $$

La ganancia es igual a la cantidad de bombachitas $x_1$ por la ganancia de cada bombachita ($g_1= \$ 1.8 c/u$), más la cantidad de baberos $x_2$ por la ganancia de cada babero ($g_2 = \$ 1.2 c/u$)

$$ G(x_1,x_2) = x_1 \cdot \$ 1.8 c/u$ + x_2 \cdot \$ 1.2 c/u $$

Ganancia: solución gráfica

Vamos a revisar la ganancia en la región donde se cumplen las tres condiciones. En el código de colores, azul representa la menor ganancia y rojo la mayor ganancia


In [11]:
fig = figure(figsize=(7,5))

plot(x1, (T_corte-x1*t_cor1)/t_cor2, c="g", lw=5)
plot(x1, (T_costu-x1*t_cos1)/t_cos2, c="g", lw=5)
plot(x1, (T_empaq-x1*t_emp1)/t_emp2, c="g", lw=5)

pcolormesh(x1,x2, G*r1*r2*r3)
colorbar()
plt.title("Ganancia con las 3 restricciones", fontsize=20)
xlabel("x1", fontsize=18)
ylabel("x2", fontsize=18)
ylim(0,150000)


Out[11]:
(0, 150000)

Ganancia: solución gráfica

Haciendo un zoom a la región de interés tenemos la siguiente gráfica:


In [12]:
fig = figure(figsize=(7,5))

plot(x1, (T_corte-x1*t_cor1)/t_cor2, c="g", lw=2)
plot(x1, (T_costu-x1*t_cos1)/t_cos2, c="g", lw=2)
plot(x1, (T_empaq-x1*t_emp1)/t_emp2, c="g", lw=2)

pcolormesh(x1,x2, G*r1*r2*r3)
colorbar()
plt.title("Ganancia con las 3 restricciones", fontsize=20)
xlabel("x1, cantidad de bombachitas", fontsize=18)
ylabel("x2, cantidad de baberos", fontsize=18)
xlim(0,140000)
ylim(0,40000)


Out[12]:
(0, 40000)

El punto de mayor ganancia (el rojo más oscuro) resulta ser el punto donde se cumplen las restricciones 2 y 3. (Es el pundo de cruce de las dos líneas verdes).

Ganancia: solución analítica

La restricción 2 está dada por la recta: $$ x_2 = \frac{T_{costu} - x_1 \cdot t_{cos1}}{t_{cos2}}$$

La restricción 3 está dada por la recta $$ x_2 = \frac{T_{empaq} - x_1 \cdot t_{emp1}}{t_{emp2}}$$

Para calcular la cantidad $x_1$ que maximiza la ganancia, encontramos analíticamente dónde son iguales ambas rectas.

$$ \frac{T_{costu} - x_1 \cdot t_{cos1}}{t_{cos2}} = \frac{T_{empaq} - x_1 \cdot t_{emp1}}{t_{emp2}}$$

Despejando $x_1$

$$ x_1 = \frac{ T_{emp} t_{cos2} - T_{cos} t_{emp2} } { t_{emp1}t_{cos2} -t_{emp2}t_{cos1} } $$

In [13]:
X1 = (T_empaq * t_cos2 - T_costu*t_emp2 )/ ( t_emp1*t_cos2 - t_emp2*t_cos1)

X1


Out[13]:
117142.85714285716

Ahora que tenemos X1, vamos a calcular X2 con la misma ecuación que teníamos, reemplazando X1 por 117143

$$ x_2 = \frac{T_{costu} - x_1 \cdot t_{cos1}}{t_{cos2}}$$

In [15]:
X2 = (T_costu - X1 * t_cos1)/t_cos2
X2


Out[15]:
8571.42857142855

In [16]:
G = X1 * g1  +  X2 * g2
G


Out[16]:
221142.85714285716

Solución Analítica

Hay que producir 117143 Bombachinas 8571 Baberos

Con una ganancia de \$ 221.142,85


In [ ]: