0% encontró este documento útil (0 votos)
86 vistas29 páginas

Class 04. Programacion Lineal Con Python

El documento aborda la programación lineal utilizando Python, incluyendo la instalación de bibliotecas como SciPy y PuLP para optimización. Se presentan ejercicios prácticos para resolver problemas de optimización lineal, así como la función 'linprog' de SciPy para minimizar funciones objetivo bajo restricciones. Además, se incluye una tarea que requiere desarrollar ejercicios utilizando diversas librerías de optimización en Python.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
86 vistas29 páginas

Class 04. Programacion Lineal Con Python

El documento aborda la programación lineal utilizando Python, incluyendo la instalación de bibliotecas como SciPy y PuLP para optimización. Se presentan ejercicios prácticos para resolver problemas de optimización lineal, así como la función 'linprog' de SciPy para minimizar funciones objetivo bajo restricciones. Además, se incluye una tarea que requiere desarrollar ejercicios utilizando diversas librerías de optimización en Python.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Investigación de Operaciones

UNIDAD 1
PROGRAMACIÓN LINEAL

PROGRAMACION LINEAL
CON PYTHON

Samuel Oporto Díaz


Temario
1. Ejercicio 1
2. Ejercicio 2
3. Ejercicio 3
4. Ejercicio 4
5. Ejercicio 5
6. Ejercicio 6

Samuel Alonso, Oporto Díaz 2


OPTIMIZACIÓN CON PYTHON
Optimización con Python
• CVXOPT – Notación Matricial, Optimización convexa.

• PuLP – Orientado a la programación matemática. Resuelve LP o MIP. No resuelve NLP.

• OpenOpt – Acepta más de 30 solvers para solucionar el modelado, incluyendo el NLP.

Samuel Alonso, Oporto Díaz 4


PYTHON
Python
1. Desinstalar versiones anteriores y reiniciar la máquina.

2. Descargarlo desde:
– https://www.python.org/downloads/

3. Instalarlo.

Samuel Alonso, Oporto Díaz 6


Python - Librerías

1. Actualizar el pip
1. python -m pip install --upgrade pip
2. pip list

2. Instalar packages
1. pip install numpy
2. pip install matplotlib
3. pip install scipy
4. pip list

Samuel Alonso, Oporto Díaz 7


Editor – Sublime Text
1. Desinstalar versiones anteriores

2. Descargarlo desde:
– https://www.sublimetext.com

Samuel Alonso, Oporto Díaz 8


Instalar Librerías
py -m pip install --upgrade pip setuptools wheel
python -m pip install --upgrade pip

pip install -U numpy


pip install -U pandas
pip install -U matplotlib
pip install -U timedelta
pip install jupyterlab
pip3 install jupyterlab
pip install -U scikit-learn
pip install openpyxl
winget install OpenJS.NodeJS
python --version
pip list

jupyter-lab.exe

Samuel Alonso, Oporto Díaz 9


SciPy
SciPy
SciPy es una biblioteca Python de código abierto que se utiliza para resolver problemas
científicos y matemáticos.
Está construido sobre la extensión NumPy y permite al usuario manipular y visualizar datos
con una amplia gama de comandos de alto nivel.

Samuel Alonso, Oporto Díaz 11


SciPy
cluster Algoritmos de agrupamiento
constants Constantes físicas y matemáticas.
fftpack Rutinas rápidas de transformada de Fourier
integrate Integración y solucionadores de ecuaciones diferenciales ordinarias.
interpolate Interpolación y suavizado de splines.
io Entrada y salida
linalg Álgebra lineal
ndimage Procesamiento de imágenes N-dimensionales
odr Regresión de distancia ortogonal
optimize Rutinas de optimización y búsqueda de raíces.
signal Procesamiento de la señal
sparse Matrices dispersas y rutinas asociadas.
spatial Algoritmos y estructuras de datos espaciales.
special Funciones especiales
stats Distribuciones y funciones estadísticas.
Samuel Alonso, Oporto Díaz 12
Optimización con SciPy
1. Unconstrained minimization of multivariate scalar functions (minimize)
2. Constrained minimization of multivariate scalar functions (minimize)
3. Global optimization
4. Least-squares minimization (least_squares)
– Example of solving a fitting problem
– Further examples
5. Univariate function minimizers (minimize_scalar)
– Unconstrained minimization (method='brent')
– Bounded minimization (method='bounded')
6. Custom minimizers
7. Root finding
– Scalar functions
– Fixed-point solving
– Sets of equations
– Root finding for large problems
– Still too slow? Preconditioning.
8. Linear programming (linprog)
– Linear programming example
9. Assignment problems
– Linear sum assignment problem example
10. Mixed integer linear programming
– Knapsack problem example
Samuel Alonso, Oporto Díaz 13
LINPROG
La función linprog
La función linprog puede minimizar una función objetivo
lineal sujeta a restricciones de igualdad y desigualdad
lineal.

Dónde:
• x es un vector de variables de decisión;
• c, bub, beq, k y u son vectores
• Aub y Aeq son matrices.

scipy.optimize.linprog(c, A_ub=None, b_ub=None,


A_eq=None, b_eq=None, bounds=None, method='highs',
callback=None, options=None, x0=None,
integrality=None)

Samuel Alonso, Oporto Díaz 15


La función linprog
• Convertir un problema de maximización en otro de minimización

Samuel Alonso, Oporto Díaz 16


Ejercicio 1
Resolver el siguiente problema con SciPy

Verifique los resultados con el solver de Excel.

Samuel Alonso, Oporto Díaz 17


Ejercicio 1
• El problema se debe de transformar a un problema de minimización.

Samuel Alonso, Oporto Díaz 18


Ejercicio 1
# importar la libreria del optimizador
from scipy.optimize import linprog
# configurar la lista de costos
c = [-2,-3]
# configurar matriz de coeficientes de restricción
A_ub = [[1,1],
[2,1]]
# lista de restricciones para límites superiores
b_ub =[10,15]
# además, necesito preparar una tupla de límites para cada variable de optimización y
resumirlos en una lista
x1_bounds = (0,None)
x2_bounds = (0,None)
# ahore, puedo resolver
model_linear = linprog(c=c,
A_ub=A_ub,
b_ub = b_ub,
bounds = [x1_bounds,x2_bounds])
# la solución
print(str(model_linear))

Samuel Alonso, Oporto Díaz 19


Ejercicio 1
con: array([], dtype=float64)
crossover_nit: 0
eqlin: marginals: array([], dtype=float64)
residual: array([], dtype=float64)
fun: -30.0
ineqlin: marginals: array([-3., -0.])
residual: array([0., 5.])
lower: marginals: array([1., 0.])
residual: array([ 0., 10.])
message: 'Optimization terminated successfully. (HiGHS Status 7: Optimal)'
nit: 2
slack: array([0., 5.])
status: 0
success: True
upper: marginals: array([0., 0.])
residual: array([inf, inf])
x: array([ 0., 10.])

Samuel Alonso, Oporto Díaz 20


Ejercicio 2
Resolver el siguiente problema con linprog

Verifique los resultados con el solver de Excel.

Samuel Alonso, Oporto Díaz 21


Ejercicio 2
# importar la libreria del optimizador
from scipy.optimize import linprog
# configurar la lista de costos
c = [-1, 4]
# configurar matriz de coeficientes de restricción
A_ub = [[-3, 1],
[ 1, 2]]
# lista de restricciones para límites superiores
b_ub =[6, 4]
# además, necesito preparar una tupla de límites para cada variable de optimización y resumirlos en una lista
x1_bounds = (None,None)
x2_bounds = (-3 ,None)
# ahore, puedo resolver
model_linear = linprog(c=c, A_ub=A_ub, b_ub = b_ub, bounds = [x1_bounds,x2_bounds])
print('fun..')
print(model_linear.fun)
print('x..')
print(model_linear.x)
print('message..')
print(model_linear.message)
print('ineqlin')
print(model_linear.ineqlin)
# la solución
print('')
print('model_linear..')
print(str(model_linear))

Samuel Alonso, Oporto Díaz 22


Ejercicio 2
fun..
-22.0
x..
[10. -3.]
message..
Optimization terminated successfully. (HiGHS Status 7: Optimal)
ineqlin
marginals: array([-0., -1.])
residual: array([39., 0.])
model_linear..
con: array([], dtype=float64)
crossover_nit: 0
eqlin: marginals: array([], dtype=float64)
residual: array([], dtype=float64)
fun: -22.0
ineqlin: marginals: array([-0., -1.])
residual: array([39., 0.])
lower: marginals: array([0., 6.])
residual: array([inf, 0.])
message: 'Optimization terminated successfully. (HiGHS Status 7: Optimal)'
nit: 0
slack: array([39., 0.])
status: 0
success: True
upper: marginals: array([0., 0.])
residual: array([inf, inf])
x: array([10., -3.])
[Finished in 1.4s]

Samuel Alonso, Oporto Díaz 23


Ejercicio 3
Resolver el siguiente problema con linprog

Verifique los resultados con el solver de Excel.

Samuel Alonso, Oporto Díaz 24


Ejercicio 3
# importar la libreria del optimizador
from scipy.optimize import linprog
# configurar la lista de costos
c = [-20, -12, -40, -25]
# configurar matriz de coeficientes de restricción
A_ub = [[ 1, 1, 1, 1],
[ 3, 2, 1, 0],
[ 0, 1, 2, 3]]
# lista de restricciones para límites superiores
b_ub =[50, 100, 90]
# además, necesito preparar una tupla de límites para cada variable de optimización y resumirlos en una lista
x1_bounds = (0 ,None)
x2_bounds = (0 ,None)
x3_bounds = (0 ,None)
x4_bounds = (0 ,None)
# ahore, puedo resolver
model_linear = linprog(c=c,
A_ub=A_ub,
b_ub = b_ub,
bounds = [x1_bounds, x2_bounds,x3_bounds,x4_bounds])
print('fun..')
print(model_linear.fun)
print('x..')
print(model_linear.x)
print('message..')
print(model_linear.message)
print('ineqlin')
print(model_linear.ineqlin)
# la solución
print('')
print('model_linear..')
print(str(model_linear))

Samuel Alonso, Oporto Díaz 25


Ejercicio 3
fun..
-1900.0
x..
[ 5. 0. 45. 0.]
message..
Optimization terminated successfully. (HiGHS Status 7: Optimal)
ineqlin
marginals: array([-20., -0., -10.])
residual: array([ 0., 40., 0.])
model_linear..
con: array([], dtype=float64)
crossover_nit: 0
eqlin: marginals: array([], dtype=float64)
residual: array([], dtype=float64)
fun: -1900.0
ineqlin: marginals: array([-20., -0., -10.])
residual: array([ 0., 40., 0.])
lower: marginals: array([ 0., 18., 0., 25.])
residual: array([ 5., 0., 45., 0.])
message: 'Optimization terminated successfully. (HiGHS Status 7: Optimal)'
nit: 4
slack: array([ 0., 40., 0.])
status: 0
success: True
upper: marginals: array([0., 0., 0., 0.])
residual: array([inf, inf, inf, inf])
x: array([ 5., 0., 45., 0.])
[Finished in 2.0s]

Samuel Alonso, Oporto Díaz 26


Ejercicio 4
• Una empresa elabora tres tipos de bebidas utilizando zumo de piña y zumo de melocotón.
El dueño de la empresa ha comprado 1.500 litros de zumo de piña y 2.000 de zumo de
melocotón. Los litros de zumo requeridos en la fabricación de cada bebida vienen dados en
la tabla siguiente.

• El precio de venta de cada bebida es 15 euros el litro. El coste del zumo de piña es de 1
euro el litro y 2 euros el litro de zumo de melocotón. Se conoce que la demanda de bebidas
asciende a 400 litros.

Samuel Alonso, Oporto Díaz 27


Tarea 3
• Desarrollar al menos cuatro de los ejercicios del conjunto de
problemas 2.4A (página 37 a página 40), del libro de texto

• Desarrolle solo ejercicios con 3 o más variables.

• Desarrolle los ejercicios haciendo uso de algunas de las


siguientes librerías del Python:
– SciPy Optimization
– PuLP
– Pyomo
– CVXOPT

• Explique con claridad los resultados obtenidos, no solo se


trata de presentar los resultados.

• Tarea individual.

Samuel Alonso, Oporto Díaz 28


PREGUNTAS
[email protected]

También podría gustarte