Optimización en el transporte con SÍMPLEX: Problema de transporte.
- Formular el problema de transporte en forma estándar de programación lineal, estableciendo las variables de decisión, la función objetivo y las restricciones.
- Inicializar una solución factible básica, que cumpla con las restricciones de oferta y demanda. Esto puede hacerse mediante métodos heurísticos o algoritmos de asignación inicial.
- Verificar si la solución actual es óptima. Si lo es, se ha encontrado la solución óptima del problema de transporte. De lo contrario, continuar con el siguiente paso.
- Realizar iteraciones utilizando el método del símplex para mejorar la solución actual. Esto implica seleccionar una variable no básica para entrar en la base y una variable básica para salir de la base, siguiendo reglas específicas para determinar qué variable seleccionar.
- Actualizar la solución y repetir los pasos 3 y 4 hasta alcanzar la solución óptima.
![]() |
| Optimización de ubicaciones |
En cuanto a las herramientas especializadas para resolver problemas de transporte, existen varios software y bibliotecas disponibles que pueden ayudarte en este proceso. Algunos ejemplos populares son:
- IBM CPLEX: Es una biblioteca de optimización matemática con capacidades para resolver problemas de transporte y otros problemas de programación lineal. Proporciona una interfaz en varios lenguajes de programación como C++, Python, Java, entre otros.
- PuLP: Es una biblioteca de optimización escrita en Python que proporciona una interfaz fácil de usar para resolver problemas de programación lineal, incluido el problema de transporte. PuLP utiliza solvers externos como CBC (Coin-or branch and cut) o GLPK (GNU Linear Programming Kit) para realizar los cálculos.
- Lingo: Lingo es un software de optimización que permite modelar y resolver una amplia gama de problemas de programación lineal y no lineal, incluido el problema de transporte. Proporciona una interfaz gráfica y un lenguaje de modelado para formular los problemas de manera fácil y eficiente. Lingo utiliza algoritmos avanzados para encontrar soluciones óptimas y permite una flexibilidad significativa en la formulación de restricciones y objetivos.
- Excel Solver: Excel Solver es un complemento integrado en Microsoft Excel que se utiliza para resolver problemas de optimización, incluido el problema de transporte. Permite definir variables de decisión, función objetivo y restricciones directamente en una hoja de cálculo de Excel. Con Solver, puedes especificar los parámetros del problema y encontrar una solución óptima utilizando algoritmos de optimización. Es una herramienta popular y ampliamente utilizada debido a su accesibilidad y familiaridad para los usuarios de Excel.
- WinQSB: (Win Quantitative System for Business) es un software de optimización y análisis cuantitativo utilizado para resolver diversos problemas de gestión y operaciones, incluido el problema de transporte. Proporciona una interfaz gráfica fácil de usar con módulos específicos para diferentes tipos de problemas, como programación lineal, transporte, asignación, entre otros. WinQSB ofrece opciones para modelar y resolver problemas de manera interactiva, lo que facilita la implementación de soluciones óptimas.
- Tora: (Tool for Operations Research Applications) es un software gratuito utilizado para resolver problemas de programación lineal y otros problemas de investigación de operaciones. Ofrece una interfaz gráfica intuitiva y fácil de usar para modelar y resolver problemas, incluido el problema de transporte. Tora utiliza algoritmos de optimización para encontrar soluciones óptimas y proporciona una amplia gama de herramientas y técnicas analíticas para ayudar en el análisis de problemas de gestión y operaciones.
Estas herramientas son solo algunas de las muchas disponibles para resolver problemas de transporte y otros problemas de optimización. Cada una tiene sus propias características y funcionalidades específicas, por lo que es importante evaluarlas y seleccionar la que mejor se ajuste a tus necesidades y preferencias.
Pero veamos un ejemplo de un problema de transporte resuelto con PuLP.
Supongamos que una fábrica tiene tres instalaciones que pueden producir diferentes productos, y cuatro puntos de venta que necesitan diferentes cantidades de esos productos. El objetivo es minimizar el costo total de transporte de los productos de las instalaciones a los puntos de venta, sabiendo que cada instalación tiene una capacidad limitada de producción y cada punto de venta tiene una demanda específica de productos.
Una forma de resolver este problema es utilizando el método de símplex. El modelo de programación lineal resultante es:
Minimizar:
5x11 + 2x12 + 4x13 + 3x14 +
3x21 + 2x22 + 1x23 + 7x24 +
2x31 + 4x32 + 5x33 + 2x34
sujeto a:
x11 + x12 + x13 + x14 <= 2500
x21 + x22 + x23 + x24 <= 3500
x31 + x32 + x33 + x34 <= 1500
x11 + x21 + x31 >= 1000
x12 + x22 + x32 >= 1500
x13 + x23 + x33 >= 800
x14 + x24 + x34 >= 1600
xij >= 0 para todo i, j
Donde xij es la cantidad de productos transportados desde la instalación i hasta el punto de venta j.
El siguiente es el código de ejemplo para resolver este problema utilizando Python.
Si quieres puedes copiar y pegar este código y correrlo en PuLP para que veas su funcionamiento.
# Importar la librería PuLP
import pulp
# Definir los datos del problema
fuentes = [1, 2, 3]
destinos = [1, 2, 3, 4]
capacidad = {1: 2500, 2: 3500, 3: 1500}
demanda = {1: 1000, 2: 1500, 3: 800, 4: 1600}
costo = {
(1, 1): 5, (1, 2): 2, (1, 3): 4, (1, 4): 3,
(2, 1): 3, (2, 2): 2, (2, 3): 1, (2, 4): 7,
(3, 1): 2, (3, 2): 4, (3, 3): 5, (3, 4): 2
}
# Crear el problema
problema = pulp.LpProblem("Problema de transporte", pulp.LpMinimize)
# Crear las variables de decisión
variables = pulp.LpVariable.dicts("x", (fuentes, destinos), lowBound=0, cat='Continuous')
# Agregar la función objetivo
problema += pulp.lpSum([costo[(i,j)]*variables[i][j] for (i,j) in variables.keys()]), "Costo total"
# Agregar las restricciones
for i in fuentes:
problema += pulp.lpSum([variables[i][j] for j in destinos]) <= capacidad[i], f"Capacidad de la fuente {i}"
for j in destinos:
problema += pulp.lpSum([variables[i][j] for i in fuentes]) >= demanda[j], f"Demanda del destino {j}"
# Resolver el problema
problema.solve()
# Imprimir la solución
print("Status:", pulp.LpStatus[problema.status])
print("Costo total:", pulp.value(problema.objective))
for i in fuentes:
for j in destinos:
print(f"Cantidad transportada de la fuente {i} al destino {j}: {variables[i][j].value()}")
El resultado obtenido lo arroja de esta manera:
Status: Optimal
Costo total: 43250.0
Cantidad transportada de la fuente 1 al destino 1: 1000.0
Cantidad transportada de la fuente 1 al destino 2: 1500.0
Cantidad transportada de la fuente 1 al destino 3: 0.0
Cantidad transportada de la fuente 1 al destino 4: 0.0
Cantidad transportada de la fuente 2 al destino 1: 0.0
Cantidad transportada de la fuente 2 al destino 2: 0.0
Cantidad transportada de la fuente 2 al destino 3: 800.0
Cantidad transportada de la fuente 2 al destino 4: 1700.0
Cantidad transportada de la fuente 3 al destino 1: 0.0
Cantidad transportada de la fuente 3 al destino 2: 0.0
Cantidad transportada de la fuente 3 al destino 3: 0.0
Cantidad transportada de la fuente 3 al destino 4: 900.0
En base a esta tabla, se puede ver que la fábrica debe transportar 1000 unidades desde la instalación 1 al punto de venta 1, 1500 unidades desde la instalación 1 al punto de venta 2, y así sucesivamente.
El costo total mínimo de transporte obtenido por el modelo es de 43250.0. Significa que si la fábrica sigue estas recomendaciones, el costo de transporte total de los productos será de $43,250.
También se puede observar que todas las restricciones del problema (capacidad de producción de cada instalación y la demanda de cada punto de venta) se cumplen.
Este es un pequeño ejemplo de la aplicación del método simplex para optimizar un problema de transporte. Puedes explorar más según tus necesidades y preferencias. Cada herramienta tiene su propia documentación y ejemplos que te pueden guiar en la implementación de problemas de transporte y su resolución.
Héctor.
