In [1]:
%pylab inline
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
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]:
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]:
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]:
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]:
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 $$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]:
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]:
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).
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$
In [13]:
X1 = (T_empaq * t_cos2 - T_costu*t_emp2 )/ ( t_emp1*t_cos2 - t_emp2*t_cos1)
X1
Out[13]:
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]:
In [16]:
G = X1 * g1 + X2 * g2
G
Out[16]:
In [ ]: