Producción de jugos#

Tags: Mezcla, Recurso

Hide code cell source
import os
# Por precaución, cambiamos el directorio activo de Python a aquel que contenga este notebook
if "optimizacion" in os.listdir():
    os.chdir(r"optimizacion/Formulaciones/3. Produccion de jugos/")

Enunciado#

OptiJuice es una empresa que produce jugos. Ellos han decidido producir un nuevo conjunto de jugos autóctonos (\(K\)). Los jugos son una mezcla de diferentes frutas tropicales (\(R\)) dentro de las que se encuentran la piña, la guayaba, el níspero y el zapote. Cada uno de los tipos de jugo se diferencia de los demás en la cantidad de litros de zumo que tiene de las distintas frutas. Es por esto que, para garantizar la calidad de los jugos es necesario que el jugo del tipo \(k \in K\) contenga entre un \(l_{ki}\)% y un \(u_{ki}\)% de litros de zumo de la fruta \(i \in R\). Para la producción de jugos, OptiJuice tiene disponibles \(b_i\) litros de zumo de la fruta \(i \in R\). La compañía espera una demanda mínima de \(d_k\) litros y desea vender cada litro de jugo del tipo \(k \in K\) a \(p_k\) pesos. La información mencionada se presenta en las Tablas 1 a 4.

Tabla 1. Mínimo porcentaje de las frutas en los jugos

Mínimo porcentaje Frutas
Jugos Piña (%) Guayaba (%) Nispero (%) Zapote (%)
Saludable 32 27 12 13
Tropical 18 20 21 11
Mañanero 7 31 28 22
Colombiano 11 5 15 18
Refrescante 16 29 2 23
Light 26 19 14 30

Tabla 2. Máximo porcentaje de las frutas en los jugos

Máximo porcentaje Frutas
Jugos Piña (%) Guayaba (%) Nispero (%) Zapote (%)
Saludable 95 83 66 87
Tropical 92 76 69 56
Mañanero 81 61 78 94
Colombiano 82 88 63 98
Refrescante 60 85 73 78
Light 50 55 82 91

Tabla 3. Litros disponibles de cada fruta

Frutas Litros disponibles
Piña 6,318
Guayaba 4,500
Nispero 4,683
Zapote 2,121

Tabla 4. Demanda mínima y precio de cada jugo

Jugos Demanda mínima Precio
Saludable 1,200 9,000
Tropical 925 5,000
Mañanero 1,865 6,000
Colombiano 1,035 10,000
Refrescante 2,231 7,000
Light 1,353 8,000

Formula un programa lineal que le permita OptiJuice responder la siguiente pregunta: ¿Cuántos litros de zumo de cada fruta se deben mezclar para producir cada uno de los tipos de jugos, de manera que se cumplan las condiciones previamente expuestas y se maximicen los ingresos totales?

Formulación#

a. Formula matemáticamente un modelo de optimización de forma general que represente la situación anterior. Defina clara y rigurosamente:

  • Conjuntos

  • Parámetros

  • Variables de decisión

  • Restricciones

  • Naturaleza de las variables

  • Función objetivo

Implementación#

b. Resuelve el modelo planteado utilizando la librería de PuLP en Python. ¿Cuál es la solución óptima del problema?

Librerías#

Importa la librería pulp para crear y resolver el modelo.

# Escribe en esta celda tu código.

Conjuntos#

Define los conjuntos K y R que representan los jugos y las frutas respectivamente.

Recuerda que por conveniencia de preservar el orden de los elementos de los conjuntos, no siempre deberás definirlos con el tipo set.

# Escribe en esta celda tu código.

Parámetros#

Define o importa los parámetros del modelo.

# Porcentaje mínimo de litros de la fruta i in R en el jugo k in K
l = {
    ("Saludable", "Piña"): 0.32,
    ("Saludable", "Guayaba"): 0.27,
    ("Saludable", "Níspero"): 0.12,
    ("Saludable", "Zapote"): 0.13,
    ("Tropical", "Piña"): 0.18,
    ("Tropical", "Guayaba"): 0.20,
    ("Tropical", "Níspero"): 0.21,
    ("Tropical", "Zapote"): 0.11,
    ("Mañanero", "Piña"): 0.07,
    ("Mañanero", "Guayaba"): 0.31,
    ("Mañanero", "Níspero"): 0.28,
    ("Mañanero", "Zapote"): 0.22,
    ("Colombiano", "Piña"): 0.11,
    ("Colombiano", "Guayaba"): 0.05,
    ("Colombiano", "Níspero"): 0.15,
    ("Colombiano", "Zapote"): 0.18,
    ("Refrescante", "Piña"): 0.16,
    ("Refrescante", "Guayaba"): 0.29,
    ("Refrescante", "Níspero"): 0.02,
    ("Refrescante", "Zapote"): 0.23,
    ("Light", "Piña"): 0.26,
    ("Light", "Guayaba"): 0.10,
    ("Light", "Níspero"): 0.14,
    ("Light", "Zapote"): 0.30,
}

# Porcentaje máximo de litros de la fruta i in R en el jugo k in K
u = {
    ("Saludable", "Piña"): 0.95,
    ("Saludable", "Guayaba"): 0.83,
    ("Saludable", "Níspero"): 0.66,
    ("Saludable", "Zapote"): 0.87,
    ("Tropical", "Piña"): 0.92,
    ("Tropical", "Guayaba"): 0.76,
    ("Tropical", "Níspero"): 0.69,
    ("Tropical", "Zapote"): 0.56,
    ("Mañanero", "Piña"): 0.81,
    ("Mañanero", "Guayaba"): 0.61,
    ("Mañanero", "Níspero"): 0.78,
    ("Mañanero", "Zapote"): 0.94,
    ("Colombiano", "Piña"): 0.82,
    ("Colombiano", "Guayaba"): 0.88,
    ("Colombiano", "Níspero"): 0.63,
    ("Colombiano", "Zapote"): 0.98,
    ("Refrescante", "Piña"): 0.60,
    ("Refrescante", "Guayaba"): 0.85,
    ("Refrescante", "Níspero"): 0.73,
    ("Refrescante", "Zapote"): 0.78,
    ("Light", "Piña"): 0.50,
    ("Light", "Guayaba"): 0.55,
    ("Light", "Níspero"): 0.82,
    ("Light", "Zapote"): 0.91,
}

# Litros disponibles de la fruta i in R
b = {
    "Piña": 6318,
    "Guayaba": 4500,
    "Níspero": 4683,
    "Zapote": 2121,
}

# Demanda del jugo k in K
d = {
    "Saludable": 1200,
    "Tropical": 925,
    "Mañanero": 1865,
    "Colombiano": 1035,
    "Refrescante": 2231,
    "Light": 1353,
}

# Precio del jugo k in K
p = {
    "Saludable": 9000,
    "Tropical": 5000,
    "Mañanero": 6000,
    "Colombiano": 10000,
    "Refrescante": 7000,
    "Light": 8000,
}

Objeto del modelo#

Construye un problema al que luego agregarás las restricciones y la función objetivo.

# Escribe en esta celda tu código.

Variables de decisión#

Define las variables del problema de manera que estén contenidas en diccionarios indexados en los conjuntos de sus variables respectivas.

# Escribe en esta celda tu código.

Función objetivo#

Agrega al problema la función objetivo. Recuerda que al definir el problema, ya definiste si este es de maximización o minimización.

# Escribe en esta celda tu código.

Restricciones#

Agrega al problema las restricciones del modelo.

# Escribe en esta celda tu código.

Resolver el problema#

Invoca el optimizador. Este paso le asigna un valor a las variables incluidas en las restricciones o función objetivo del modelo.

# Escribe en esta celda tu código.

Imprimir resultados#

Antes de estudiar el óptimo del modelo, identifica en el estado del optimizador si pudo resolver el problema.

# Escribe en esta celda tu código.

Identifica también el valor de la función objetivo.

# Escribe en esta celda tu código.

Por último, imprime de manera estructurada el valor de las variables de decisión y otras expresiones de interés.

# Escribe en esta celda tu código.

Créditos#

Equipo Principios de Optimización
Autores: Juan Felipe Rengifo
Desarrollo: Juan Felipe Rengifo, Alejandro Mantilla
Última fecha de modificación: 07/04/2023