Tutorial para hacer Programación Lineal en Python con PuLP

Formulación de problemas, soluciones y ejemplos usando python

Tutorial para hacer Programación Lineal en Python con PuLP

¿Alguna vez te has preguntado cómo las empresas determinan la cantidad óptima de productos a fabricar para maximizar sus ganancias?

La programación lineal es una herramienta matemática que permite resolver este tipo de problemas de optimización. Y gracias a Python, podemos implementarla de manera sencilla utilizando una biblioteca llamada PuLP.

En esta guía, te llevaré paso a paso para que entiendas cómo utilizar PuLP, incluso si no tienes experiencia previa en programación. Al final, serás capaz de modelar y resolver problemas que son fundamentales en economía y muchas aplicaciones de negocios.

Este es un tutorial que hice para mis alumnos de la clase de Investigación de Operaciones. En la clase nos hemos enfocado mucho en el planteamiento de los problemas y en su solución usando la computadora. Previamente ya hice un tutorial para resolver problemas de PL con el método simplex usando Solver de Excel.

Si quieres verlo, puedes entrar aquí:

¿Qué es PuLP y por qué deberías conocerlo?

PuLP es una biblioteca de Python que facilita la formulación y resolución de problemas de programación lineal (LP) y programación entera mixta (MILP). En términos sencillos, te permite:

  • Definir variables de decisión: las incógnitas que quieres determinar.
  • Establecer funciones objetivo: lo que deseas maximizar o minimizar (por ejemplo, ganancias o costos).
  • Agregar restricciones: limitaciones o condiciones que deben cumplirse (como recursos disponibles).
  • Resolver el problema: encontrar la mejor solución posible dentro de las restricciones.

¿Por qué es importante? Porque la optimización es clave para mejorar la eficiencia y rentabilidad en cualquier negocio. Con PuLP, puedes tomar decisiones informadas basadas en datos y modelos matemáticos.


Paso 1: Instalación de PuLP

Antes de comenzar, necesitamos instalar PuLP en tu sistema. No te preocupes, es más sencillo de lo que parece.

  1. Abre tu terminal o línea de comandos.
  2. Verifica que la instalación fue exitosa.No debería aparecer ningún mensaje de error. Si todo salió bien, ¡ya estás listo para usar PuLP!

Escribe el siguiente comando y presiona Enter:

pip install pulp

Si estás utilizando Jupyter Notebook o un entorno similar, puedes instalarlo directamente en una celda:

!pip install pulp

Nota: PuLP incluye el solucionador CBC por defecto. Para problemas más complejos o requerimientos específicos, podrías considerar instalar solucionadores adicionales como Gurobi o CPLEX, aunque estos pueden requerir licencias separadas.


Paso 2: Entendiendo la Programación Lineal

Antes de sumergirnos en el código, es fundamental comprender qué es la programación lineal y cómo se aplica en economía y negocios.

La programación lineal es una técnica matemática que busca optimizar (maximizar o minimizar) una función objetivo, sujeta a ciertas restricciones lineales. Estas restricciones representan limitaciones en recursos como tiempo, dinero o materiales.

Ejemplo práctico:

Imagina que eres el gerente de producción de una fábrica que produce dos productos. Quieres saber cuántas unidades de cada producto debes fabricar para maximizar tus ganancias, considerando las limitaciones en materia prima y horas de trabajo.


Paso 3: Formulando un Problema de Programación Lineal

Veamos un problema sencillo para ilustrar los conceptos básicos.

Escenario:

Una empresa produce dos productos: Producto A y Producto B.

  • Producto A:
    • Beneficio por unidad: $3
    • Consumo de recursos:
      • Recurso 1: 2 unidades por producto
      • Recurso 2: 1 unidad por producto
  • Producto B:
    • Beneficio por unidad: $2
    • Consumo de recursos:
      • Recurso 1: 1 unidad por producto
      • Recurso 2: 1 unidad por producto

Disponibilidad de recursos:

  • Recurso 1: 100 unidades
  • Recurso 2: 80 unidades

Objetivo:

Determinar cuántas unidades de cada producto deben fabricarse para maximizar el beneficio total, sin exceder la disponibilidad de recursos.

Formulación matemática:

  1. Variables de decisión:
    • $x$: Número de unidades del Producto A a producir.
    • $y$: Número de unidades del Producto B a producir.
  2. Función objetivo:
    • Maximizar \( Z = 3x + 2y \)
  3. Restricciones:
    • Recurso 1: \( 2x + y \leq 100 \)
    • Recurso 2: \( x + y \leq 80 \)
    • No negatividad: \( x \geq 0 \), \( y \geq 0 \)

Paso 4: Implementando el Problema con PuLP

Ahora, traduciremos este problema matemático al lenguaje de programación usando PuLP.

1. Importar PuLP

Comenzamos importando la biblioteca PuLP en nuestro script de Python.

from pulp import *

2. Definir el Problema

Creamos una instancia del problema, indicando que se trata de una maximización.

prob = LpProblem("Maximización_de_Beneficios", LpMaximize)

3. Definir las Variables de Decisión

Declaramos las variables de decisión con sus límites inferiores.

x = LpVariable('Producto_A', lowBound=0)
y = LpVariable('Producto_B', lowBound=0)

4. Establecer la Función Objetivo

Añadimos la función objetivo al problema.

prob += 3 * x + 2 * y, "Beneficio_Total"

5. Agregar las Restricciones

Incorporamos las restricciones que representan las limitaciones de recursos.

prob += 2 * x + y <= 100, "Restricción_Recurso_1"
prob += x + y <= 80, "Restricción_Recurso_2"

6. Resolver el Problema

Utilizamos el método solve() para resolver el problema.

prob.solve()

7. Mostrar los Resultados

Finalmente, imprimimos el estado y los valores de las variables.

print("Estado de la solución:", LpStatus[prob.status])

print(f"Cantidad óptima de Producto A: {x.varValue}")
print(f"Cantidad óptima de Producto B: {y.varValue}")

print(f"Beneficio total máximo: ${value(prob.objective)}")

¡Genial! Te has registrado exitosamente.

¡Bienvenido de vuelta! Has iniciado sesión correctamente.

Te has suscrito correctamente a Escribe tu primer paper de Economía usando Inteligencia Artificial.

¡Éxito! Revisa tu correo electrónico para obtener el enlace mágico para iniciar sesión.

¡Éxito! Se ha actualizado la información de facturación.

No se actualizó tu información de facturación.