optimizacion con python (pyomo vs gams vs ampl)

44
Computer-aided Chemical Engineering www.cacheme.org Chem. Engineer Daniel Domene Python en la industria: el problema de optimización (matemática) Carlos Planelles Chem. Engineering Student

Upload: cacheme

Post on 11-Apr-2017

4.323 views

Category:

Engineering


20 download

TRANSCRIPT

Page 1: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

Computer-aided Chemical Engineering

www.cacheme.org

Chem. EngineerDaniel Domene

Python en la industria: el problema de optimización

(matemática)

Carlos PlanellesChem. Engineering Student

Page 2: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

Índice

• Programación matemática• AML (Algebraic Modeling Languages) • Optimización en Python: ¿Por qué

Pyomo?• Ejemplos• Bibliografía

www.cacheme.org

Page 3: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

Índice

• Programación matemática• AML (Algebraic Modeling Languages) • Optimización en Python: ¿Por qué

Pyomo?• Ejemplos• Bibliografía

www.cacheme.org

Page 4: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgProgramación matemáticaOptimización: ¿por qué es importante?

• Mejorar la calidad de un producto• Aumentar beneficios• Reducir riesgos ambientales• Reducir costes de producción• Etc.

En la Ingeniería Química

Selección de equiposGestión logística

Page 5: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgProgramación matemática

©Benmoran

©Benmoran

Page 6: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgProgramación matemáticaProblemas de optimización

• Programación Lineal (LP)• Programación Lineal Mixta Entera (MILP)• Programación No Lineal (NLP)• Programación No Lineal Mixta Entera (MINLP)

Page 7: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgProgramación matemáticaProgramación Lineal (LP)

Función objetivo y restricciones lineales

Algoritmo de SIMPLEX

EJEMPLO: PROBLEMA DEL

TRANSPORTE

Page 8: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgProgramación matemáticaProgramación Lineal Mixta Entera (MILP)

Función objetivo y restricciones lineales.

Incluye la toma de decisiones lógicas con la

incorporación de variables binarias.

Algoritmo de RAMIFICACIÓN Y ACOTAMIENTO

EJEMPLO: SELECCIÓN DE LA MEJOR RUTA DE

PRODUCCIÓN

𝒎𝒊𝒏: 𝒄𝑻𝒙+ 𝒅𝑻𝒚 𝑠.𝑎: 𝐴𝑥+ 𝐵𝑦 ≤ 𝑏 𝑥 ≥ 0 ,𝑥 ∈𝑋 ⊆ ℜ𝑛 𝑦 ∈ ሼ0,1ሽ

Page 9: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgProgramación matemáticaProgramación No Lineal (NLP)

Función objetivo y/o restricciones lineales y no

lineales.

Algoritmo:Condiciones de optimalidad de

Karush-Kuhn-Tucker

EJEMPLO: DISEÑO DE UN REACTOR CONTINUO DE TANQUE AGITADO

Page 10: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.org

{ }

) +) +) +

min (. (

(, 0,1

: , : , :, ,

T

mn

n n l n p

m l m p m

z fsa

f´ ´

==£

Πή ® ®

Î Î Î

¡¡ ¡ ¡ ¡ ¡ ¡¡ ¡ ¡

x d yh x By 0g x Dy 0

x yh g

d B D

Programación matemáticaProgramación No Lineal Mixta Entera (MINLP)

Función objetivo y/o restricciones lineales y no

lineales. Incorporación de decisiones lógicas

mediante la inclusión de variables binarias.

Algoritmo:APROXIMACIONES

EXTERIORES

EJEMPLO: SELECCIÓN DE LA MEJOR RUTA DE

PRODUCCIÓN

Page 11: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

Índice

• Programación matemática• AML (Algebraic Modeling Languages) • Optimización en Python: ¿Por qué

Pyomo?• Ejemplos• Bibliografía

www.cacheme.org

Page 12: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgAML (Algebraic modelling languages)

Software propietario:

AMPL (www.ampl.com) Lenguajesencillo, pero complicado interactuar

- GLPK es una alternativa librepara LP y MILP

GAMS (www.gams.com) Se comunicacon solvers incluso para resolver MINLP

AIMMS (www.aiims.com) Diseñado pararesolver problemas de optimización a granescala, y programación de actividades.

Page 13: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.org

Optimización en Python: ¿Por qué Pyomo?Free Open source:

CVXOPT – M. Andersen, J. Dahl, L. VandenbergheNotación matricial. Optimización Convexa

PuLP – Trabaja con lenguaje Python. Muy buenosresultados para LP y MILP. No resuelve NLP

OpenOpt – Más de 30 solvers para solucionar elmodelado, incluyendo programación no lineal.

Pyomo – Coopr. (Sandia National Laboratories, USA)Permite la formulación de modelos algebraicos enPython.

Page 14: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.org

• Se comunica directamente con los principales solvers de AMPL, GLPK, Gurobi, CPLEZ, CBC y PICO.

• Programación en Python tipo AMPL/GAMS.• Compatible con Python 2 y 3. • Pyomo (Coopr) es un paquete gratuito con licencia BSD, maduro y

bien documentado. • Fácil instalación “pip install pyomo”, instalación de solver aparte. • Adaptabilidad a modelado de la mayoría de problemas.

Optimización en Python: ¿Por qué Pyomo?

Page 15: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

Índice

• Programación matemática• AML (Algebraic Modeling Languages) • Optimización en Python: ¿Por qué

Pyomo?• Ejemplos• Bibliografía

www.cacheme.org

Page 16: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplosEL PROBLEMA DEL TRANSPORTE

Linear Programing

• Problema clásico de optimización LP• Se puede resolver con GLPK• Hay que minimizar el coste en el transporte del producto

Page 17: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplosEL PROBLEMA DEL TRANSPORTE

Linear Programing

Page 18: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplosEL PROBLEMA DEL TRANSPORTE

Linear Programing

Page 19: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplosEL PROBLEMA DEL TRANSPORTE

PROGRAMACIÓN ORIENTADA A OBJETOS: se crea la clase.

Se importan las librerias

Mercados

PlantasDemanda mínima

Producción máxima

Coste/distancia

Distancia plata-mercado

Page 20: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplosEL PROBLEMA DEL TRANSPORTE

Se nombran las variables, que corresponderán con la cantidad de producto desde una planta a un mercado.

No puede ser negativaDepende de las plantas y los mercados.

Declaramos que es una variable

Page 21: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplosEL PROBLEMA DEL TRANSPORTE

Por defecto minimiza. (Para maximizar teclear maximize)

Declaramos que es la función a optimizar

Page 22: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplosEL PROBLEMA DEL TRANSPORTE

Declaramos que es una restricción

Declaramos que es una restricción

Hace referencia a la demanda mínima de los mercados

Hace referencia a la máxima producción por planta

Page 23: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplosEL PROBLEMA DEL TRANSPORTE

Archivo con los datos del problema:Exigencias de los mercados, costes

por transporte…

Mercados

Plantas

Demanda mínima

Producción máxima

Coste/distancia

Distancia plata-mercado

Page 24: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplosEL PROBLEMA DEL TRANSPORTE

Linear Programing

Page 25: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplosEL PROBLEMA DEL TRANSPORTE

Cantidad de producto de

cada planta al correspondien

te mercado

Coste total

Page 26: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplosPROCESS SYNTHESIS PROBLEM

Mixed Integred Linear Programing• Problema de optimización MILP • Se puede resolver con Pyomo, GAMS… • Se puede emplear el solver GLPK• Hay que decidir la ruta optima de producción

https://github.com/Planelles20/pyomo/blob/master/MixedIntegerLinearProgramming/process_synthesis/EnunciadoProcess_Synthesis.pdfSimulation, design and optimization of chemical processes – compute lab GAMS

Grado en Ingeniería Química – Universidad de Alicante

Page 27: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplos

PROGRAMACIÓN ORIENTADA A OBJETOS: se genera el modelo.

Se cargan los operadores y la biblioteca numpy

Variables binarias del sistema para toma de decisiones lógicas ( 0 , 1 )

0: No proceso I , 1: Si proceso I

0: No proceso II , 1: Si proceso II

0: No proceso III , 1: Si proceso III

PROCESS SYNTHESIS PROBLEM

Page 28: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplos

Declaración del resto de variables.

Unidades de producción que circulan por las corrientes

Físicamente no pueden ser negativas

PROCESS SYNTHESIS PROBLEM

Page 29: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplos

Declaración del resto de variables.

Costes asociados a las corrientes

Pueden ser positivas o negativas

PROCESS SYNTHESIS PROBLEM

Page 30: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplos

Declaración de las restricciones

PROCESS SYNTHESIS PROBLEM

Page 31: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplos

Declaración de las restricciones

PROCESS SYNTHESIS PROBLEM

Page 32: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplos

Declaración de las restricciones

PROCESS SYNTHESIS PROBLEM

El proceso II y III son excluyentes, por lo se

introduce esta restricción para que en el resultado final solo se escoja uno de los dos

El problema también establece unos valores máximos para ciertas

variables, por lo que se ha de tener en cuenta con estas

restricciones de límite superior.

Page 33: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplos

FUNCIÓN OBJETIVO

PROCESS SYNTHESIS PROBLEM

Tiene en cuenta los beneficios de venta del producto final

y el coste de los productos y de producción

Page 34: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplosPROCESS SYNTHESIS PROBLEM

Máximo beneficio

Page 35: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplosPROCESS SYNTHESIS PROBLEM

Existe el proceso IIExiste el proceso I

“Es más barato producir B que comprarlo”

Page 36: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplosPROCESS SYNTHESIS PROBLEM

Caso de estudio

Caso para cuando aumenta la producción y el

exceso de C es menos rentable

Page 37: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplosREACTOR DESIGN

Non Linear Programming • Problema NLP• Problema típico en la industria química• Se puede resolver con ipopt • Hay que maximizar la producción de B, atendiendo a la

velocidad espacial

https://en.wikipedia.org/wiki/Continuous_stirred-tank_reactor

Carl D. Laid Chemical Engineer

Page 38: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgEjemplosREACTOR DESIGN

Se cargan los datos del problema

Coeficientes de reacción y concentración inicial de reactivo

PROGRAMACIÓN ORIENTADA A OBJETOS: se crea la clase

Page 39: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.org

REACTOR DESIGNEjemplos

Se crean las variables

Se aporta un valor inicial de las variables para

facilitar el cálculoFísicamente no

pueden ser negativas

Concentraciones de las especies

Page 40: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.org

REACTOR DESIGNEjemplos

RESTRICCIONES

ESTADO ESTACIONARIO

Balance de componente A

Balance de componente B

Tiempo de residencia

Page 41: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.org

REACTOR DESIGNEjemplos

RESTRICCIONES

ESTADO ESTACIONARIO

Balance de componente C

Balance de componente B

Page 42: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.org

REACTOR DESIGNEjemplos

RESTRICCIONES

Función objetivo

Maximizar la concentración de B

Page 43: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

cacheme.orgBibliografía• Apuntes de la asignatura Simulación y Optimización de procesos

Industriales del Grado en Ingeniería Química de la Universidad de Alicante.

• Pyomo – Optimization modeling in Python• Springer Optimization and its aplications Vol. 67. Willian E. Hart• Sandia National Laboratories

Agradecimientos• Dr. Rubén Ruiz-Femenia• Dr. Ignacio Aracil• Francisco J. Navarro-Brull

Page 44: Optimizacion con Python (Pyomo vs GAMS vs AMPL)

@[email protected]

www.cacheme.org

Muchas gracias por su atención

Chem. Engineer

Chem. Engineering Student

Daniel Domene

Carlos Planelles

https://github.com/CAChemE/pyomo