CAChemE es una comunidad formada por ingenieros químicos y estudiantes que pretende estimular las posibilidades de software en la ingeniería de procesos química y organización industrial. Nuestro objetivo es fomentar el uso de las nuevas posibilidades que ofrece el software de libre con su más directa aplicación a la universidad e industria.
Python es un lenguaje de programación libre y gratuito que está sustituyendo a MATLAB (entre otros) en universidades norteamericanas tales como MIT, Stanford o Caltech, y que está siendo utilizado por empresas como Google o la NASA. La temática de la charla está orientada descubrir o conocer más detalles de este lenguaje y el cambio que está suponiendo en el ámbito científico e ingenieril.
Juan Luis Cano es estudiante de Ingeniería Aeronáutica de último año en la Universidad Politécnica de Madrid y editor del blog de Pybonacci, referencia a nivel nacional en cuanto al uso de Python en cálculo científico e ingenieril. Juan Luis se encargó de la organización del track científico de la PyConES (primera conferencia nacional dedicada a Python) dando varios cursos de introducción así como avanzados. Es desarrollador de varios paquetes especializados en ingeniería y ha sido formador para empresas interesadas en adoptar Python como herramienta de trabajo.
Nelson Carrasquel presenta un Controlador PID con interfaz web realizado en Python. Para ello usa un PC para controlar un proceso dinámico que incluye:
Una interfaz gráfica web (javascript) para monitoreo y ajuste de control mediante Bottle.py
Servidor Modbus que permite la conexión a través del protocolo TCP/IP
Previsto para comunicación OPC (adquisición de las variables de campo), aunque en el ejemplo se hace uso de NI Modbus para obtener las variables de un reactor químico simulado mediante LabVIEW
Algoritmo genérico de PID y la librería threading que permite la ejecución de los sistemas en paralelo con Python
El siguiente vídeo presenta PIDW (PID-web) y lo pone en práctica para simular el control PID de un reactor químico.
El propósito del proyecto PID-web es investigar los resultados del mismo probando unas simulaciones dinámicas en la escuela de Ing. Química de la Universidad Central de Venezuela. A largo plazo, se pretende llevar a cabo una prueba de concepto donde se logre sustituir todos los elementos de control tanto por software como hardware libre.
Si deseas aprender más sobre teoría de control, te recomendamos las entradas de Pybonacci:
Aprovechando que es año nuevo, queremos hacer un alto en el camino para analizar todo lo que ha pasado desde que dos ingenieros químicos nos juntamos a finales del 2012 a hablar de lo que podía ser CAChemE.
Sin entrar mucho en detalle, la idea general de por qué se creó CAChemE fue la necesidad de fomentar aquello que nos había distinguido profesionalmente frente a otros ingenieros así como demostrar las capacidades del software libre actual en este aspecto.
Mapa de visitas durante el 2013 – CAChemE.org
CAChemE es a día de hoy una joven comunidad de ingenieros que engloba tanto a estudiantes como profesores así como a profesionales del sector. Nuestras siglas (Computer-Aided Chemical Engineering) recogen varias áreas como programación, análisis numérico, modelado, simulación, optimización y control de procesos. Por tanto, si aún desconocías qué hace un Ingeniero Químico en CAChemE, otro nombre más específico podría ser el de Ingeniero de Procesos (Químicos o no).
1. ¿Cuál es la aplicación, framework o biblioteca Python más interesante que has descubierto en el 2013?
Anaconda es sin duda uno de los paquetes que recomendamos para instalar Python y todo su ecosistema de bibliotecas científicas. También está disponible winpython (Windows) que permite trabajar de forma portátil con Python (sin instalación) desde un USB. Si quieres trabar desde el navegador, Wakari o Sage Cloud pueden ser interesantes.
Por otro lado y tras nuestra charla en la magnífica PyConES, descubrimos y presentamos Pyomo (alternativa a CVXOpt más similar a GAMS-AMPL) y FyPy para la resolución de ecuaciones en derivadas parciales mediante el método de volúmenes finitos.
CAChemE en el track científico de la PyConES
Además de Python, también hemos trabajado con XCOS (Scilab), que es, a día de hoy, lo único que se puede considerar como ‘alternativa’ a Simulink. Por otro lado, también hemos presentado ChemSep y COCO simulator como alternativas a simuladores de procesos tipo ASPEN y ChemCAD.
2. ¿Qué nueva técnica de programación aprendiste en el 2013?
En realidad, somos bastante neófitos en el mundo de Python y nuestra experiencia hasta ahora había sido MATLAB. Es por ello que estamos tratando migrar a este lenguaje de programación (NumPy, SciPy, matplotlib, etc.) así como a la programación orientada a objetos mediante el mismo. Es inútil decir que entre CAChemE y Python fue amor a primera vista.
3. ¿A qué proyecto de software libre contribuiste más en el 2013? ¿Qué hiciste?
Aún somos muy principiantes como para contribuir de forma directa en proyectos de software libre. No obstante, tenemos varios videotutoriales en nuestro canal de YouTube, así como cursos de XCOS (Simulink). También tradujimos al español el espectacular curso de CFD con Python de Lorena Barba que cuenta además con una introducción rápida a Pyton (NumPy). Además, hemos publicado varias entradas que tratan sobre Python para aprendices.
Por otro lado, participamos en la PyConES con la charla ya mencionada: “El uso de Python en la Ingeniería Química”, donde conocimos a gente espectacular y descubrimos la comunidad de Python en España.
Y nos dejamos para el final nuestro nuevo y flamante Podcast de CAChemE en el que hablamos de Python, Octave UPM y la PyConES 2013 haciendo disponible información sobre el software libre también en este formato.
Como puedes ver, se puede contribuir de numerosas formas al software libre. ¡Si tienes ganas de aprender siempre eres bienvenido! 🙂
4. ¿Qué blog o web sobre Python leíste más en el 2013?
Sin duda alguna, el blog de Pybonacci ha sido y es una referencia en cuanto a programación de Python científico en español. De hecho, esta entrada viene inspirada por ellos. Lo dicho, no nos cansaremos nunca de recomendarlos 😉
5. ¿Cuáles son las tres cosas que más te gustaría aprender en el 2014?
¿Sólo tres? Bueno, vamos allá:
Computación eficiente con Python.
Análisis de datos y aprendizaje automático (machine learning).
Creación de interfaces gráficas (GUIs) con Python
6. ¿Cuál es el programa, aplicación o biblioteca que más te gustaría que alguien escribiera en 2014?
Mejoras en SciPy sobre el control de procesos en Python así como una alternativa a Simulink. Descubre el potencial de Python sobre esta área de aplicación en Pybonacci.
Si quieres hacer tu propia versión de este meme de Python, recuerda:
Copia y responde las preguntas en tu blog. Si tienes tuiter, anúncialo en el hashtag #2014pythonmeme
Y poco más, agradecer a todos vosotros por estar participando y apoyando nuestro proyecto, CAChemE. Si tienes alguna sugerencia para el nuevo año, puedes comentárnosla en esta entrada o por nuestro formulario de contacto 🙂
SymPy y Sage son dos alternativas de código abierto y gratuitas a Maple / Mathematica / Mupad (MATLAB). Permiten realizar operaciones de Cálculo Simbólico y proporcionan un sistema de álgebra computacional (en inglés CAS, Computer Algebraic System) haciendo uso de Python para ello. Pero, ¿cuál es mejor? ¿tiene sentido hacerse esa pregunta?
Sage pretende agrupar todos los paquetes de software de código abierto de matemática (de hecho, SymPy está incluido en Sage) y proporciona una interfaz para todos ellos. A día de hoy, Sage puede parecer mucho más completo ya que hace uso de varías funcionalidades de estos paquetes en un mismo entorno. Dada su licencia GPL, su código se puede reutilizar siempre que se mantenga esta misma licencia.
SymPy utiliza un enfoque diferente ya que es un módulo (biblioteca) de Python, ligero, fácil de instalar y utilizar. Así, la principal ventaja de SymPy es que está escrito en Python puro (no se necesita nada más) y es perfectamente multiplataforma (Sage no se encuentra en Windows). Su licencia además es BSD lo cual permite utilizar el código para un proyecto y decidir si se libera o no.
Diferencias de sintaxis entre Sage y SymPy
Sus sintaxis es diferente ya que SymPy no pretende crear un entorno nuevo y sigue una nomenclatura tipo Python a diferencia de Sage que es más similar a un entorno más clásico. Sin duda, este extenso análisis de diferencias de sintaxis y posibilidades entre Sage y SymPy (en inglés) te ayudará a ver tales diferencias. Por ejemplo, en SymPy el operador de exponenciación es ** tal y como lo es en Python. Sage admite además ^ como en muchos otros sistemas.
Conclusión ¿Sage o Sympy?
En nuestra opinión, la filosofía de SymPy y su integración completa con Python y por ende su compatibilidad con el resto de librerías en el ecosistema de Python científico (NumPy, matplotlib etc) lo hace más interesante.
Pero, sin duda dependerá de las necesidades de cada uno. Lo bueno es que ambas son alternativas libres y gratuitas 😉
Si te decides por empezar con SymPy, te recomendamos las entradas del magnífico blog de Pybonacci: Introducción y ejemplos reales con SymPy.
Y tú, ¿crees que es mejor Sage o SymPy?, ¿qué ventajas o inconvenientes les ves frente a Mathematica o Maple?
El pasado mes de noviembre se celebró la PyConES, primera conferencia dedicada a Python de forma exclusiva en España. Para hacer un análisis más interesante hemos entrevistado a @pybonacci (organizador), @jlcercos (ponente) y @herraiz (asistente):
Secciones de la entrevista con links para obtener más información:
Podcast #1: Descubre que ventajas está suponiendo el uso de Python en el ámbito científico e ingenieril. Entrevistamos a Juan Luis Cano de Pybonacci (@Pybonnaci) que nos resumió Python y su ecosistema en menos de 30 minutos.
Librerías principales: NumPy / SciPy para operaciones númericas, Cython para optimizaciones de código a bajo nivel, IPython para trabajar de forma interactiva, Pandas para análisis de datos y matplotlib para gráficas.
CAChemE es una comunidad formada por ingenieros químicos y estudiantes que pretende estimular las posibilidades de software en la ingeniería química y organización industrial. Nuestro objetivo es promover las ventajas de las nuevas herramientas de software libre disponibles y fomentar su uso en la universidad e industria. En la conferencia de Python nacional (PyConES) que se celebró en madrid se propuso la introducción teórica y resolución de ejemplos mediante Python de problemas clásicos presentes en ingeniería química.
Diapositivas de nuestra ponencia en el track científico realizado en la PyConES 2013 (Madrid)Autores: Francisco J. Navarro, Isaías Cuenca, Jorge Bernabé, Rubén Ruíz-Femenia.
Resumen:
Python para resolver Ecuaciones en Derivadas Parciales (EDPs):
La resolución de ecuaciones diferenciales parciales (EDPs) mediante métodos numéricos permite obtener soluciones a problemas típicos presentes tanto en el ámbito ingenieril como científico. Tales problemas incluyen diferentes fenómenos físicos como propagación del sonido o del calor, la electrostática, la electrodinámica, la dinámica de fluidos, la elasticidad, etc.Existen numerosos paquetes de software para resolver EDPs, usando una variedad de idiomas y métodos numéricos. Muchos de ellos son propietarios y suponen un alto coste para las empresas y/o universidades. Además, la madurez de los mismos y su sencillez de uso pueden ocasionar efectos adversos convirtiendo estás herramientas en auténticas cajas negras.
En este marco, Python, en conjunto con sus librerías (NumPy, SciPy, FiPy), proporciona una herramienta perfecta que facilita el aprendizaje y desarrollo de la intuición necesarias para la resolución de estos problemas de forma libre y gratuita. Para problemas multifísicos y con geometrías especiales, FiPy permite resolver EDPs mediante el método de volúmenes finitos.
Programación matématica (optimización) con Python:
Los programas de modelado algebraico son utilizados para la resolución de diferentes problemas que van desde la selección óptima de equipos y recursos en sector industrial químico a la gestión logística de una empresa genérica. La resolución de casos de estudio reales de la industria mediante métodos de optimización, tan comunes en un ámbito de investigación científica, son a menudo desconocidos por las empresas, que resuelven estos problemas mediante métodos menos eficientes y a que a menudo les conducen a trabajar en unas condiciones sub-optimizas. El paquete basado en Python llamado pyomo permite la formulación y resolución de problemas de optimización con restricciones no lineales de manera eficiente, reutilizable y portátil.
Diseño de reactores químicos con Python
Un reactor químico es un equipo en cuyo interior tiene lugar una reacción química, estando éste diseñado para maximizar la conversión y selectividad de la misma con el menor coste posible. El diseño de un reactor químico requiere conocimientos de termodinámica, cinética química, transferencia de masa y energía, así como de mecánica de fluidos; balances de materia y energía son necesarios. Por lo general se busca conocer el tamaño y tipo de reactor, así como el método de operación, además en base a los parámetros de diseño se espera poder predecir con cierta certidumbre la conducta de un reactor ante ciertas condiciones, por ejemplo un salto en escalón en la composición de entrada. En estas diapositivas indicamos las ecuaciones y la llamada al ODE necesario para resolverlo con Python.
Aquí recogemos el material del curso gratuito que tuvo lugar durante la primera y segunda semana de diciembre de 2013 para alumnos de grado de Ingeniería Química. Octave UPM que es la alternativa a MATLAB más interesante para los que busquen máxima compatibilidad.
[box]Accede a los contenidos actualizados de la segunda edición de este curso
Horario y aulas
Horario de 16 a 18 h para los siguientes días de diciembre, y en las aulas de informática de la EPS:
martes 3 (L25);
miercoles 4 (L18);
jueves 5 (L13);
martes 10 (L25);
miercoles 11 (L25);
jueves 12 (L13);
¡Aquellos alumnos que asistan a un 80% del curso, recibirán un certificado de asistencia! ¿Por qué Octave UPM y no MATLAB?
Octave UPM es una adaptación de GNU Octave que se emplea para la docencia de Informática en la Escuela de Ingenieros de Caminos, Canales y Puertos de la UPM y ha sido desarrollado por Israel Herraiz (@herraiz)
Es altamente compatible con MATLAB.
Es software libre y gratuito, disponible para Windows y Linux
Entorno de programación de Octave UPM (similar a MATLAB)
El curso es gratuito y de acceso libre, todo el material utilizado durante el mismo será también públicado para aquellos que no puedan asistir. No obstante, recomendamos este curso ya que su intención es más práctica que teórica y además estaremos a vuestra disposición para ayudaros a encontrar fallos en vuestros scripts así como resolver dudas puntuales que tengáis. Recomendamos que vengáis con vuestro portátil para poder trabajar siempre que queráis con Octave UPM en vuestro ordenador.
¿Por dónde empezar?
Los requisitos del curso serán tener conocimientos básicos de programación y de reactores químicos. Para el que quiera ir repasando:
MateWiki (UPM): Video tutoriales y materiales para aprender a programar en MATLAB-Octave
pkg load odepkg
close all
clear all
clc
global k0 Ea R Seccion Qv1 alfa U Tw Tref d DCp DHref Cp Qv2
%Sacarosa(A) medioacido(B) glocosa(C) fructosa(D) indes(E)
%DATOS TERMODINAMICOS Y CINETICOS
% A B C D E
alfa = [-1 -1 1 1 0
-1 -1 0 0 2];
Cp = [62.0 75.2 80.0 80.0 80.0]; % kJ/kmol.K
PM = [342 18 180 180 180]; % Kg/Kmol
DHref = [-11000 -12000]; % kJ/kmol
Ea = 125300; % J/mol
R = 8.314; % kJ/kmol.K o J/mol.K
k0 = 0.0193/(exp(-Ea/R/(273+50)));
DCp = Cp*alfa'; % Equivalente a sum(Cp.*alfa)
Tref = 25+273; % K
% DATOS DE LOS REACTORES Y REFRIGERACION
Seccion = 0.1; % m2
d = (Seccion*4/pi)^0.5; % m
U = 1.0; % kJ/s·m2·K
Tw = 30+273; % K
% DATOS ALIMENTO
Talim = 50+273; % K
Qv0 = 0.4/60; % m3/s
Qv1 = 0.2/60; % m3/s
Qv2 = 0.3/60; % m3/s
Qv3 = 0.1/60; % m3/s
% EJECUTO PRIMER REACTOR Y TANTEANDO VOY A VER QUE LONGITUD DE REACTOR
% NECESITO PARA LLEGAR A LA SALIDA A C(3)=1.5M
C0 = [2 16.6 0.1 0 0]; % kmol/m3
L1 = 1; % no conocemos este valor, se pone 1 para empezar
y0 = [C0 Talim]; % Condiciones iniciales
[x1,Y1] = ode45(@fdif_rfp1,[0 L1],y0);
% REPRESENTACIÓN DE RESULTADOS
L_r1 = x1; % variable independiente
C_r1 = Y1(:,1:5);
T_r1 = Y1(:,6);
C_salida_r1 = Y1(end,1:5); % variable dependiente (C)
T_salida_r1 = Y1(end,6); % variable dependiente (Tª)
figure(1)
plot(L_r1,C_r1)
xlabel('L / m')
ylabel('C_j / kmol/m^3')
title('Variación de concentraciones en el RFP_1')
legend('Sacarosa', 'Agua acidulada', 'glucosa', 'Fructosa', 'indesada')
figure(2)
plot(L_r1,T_r1)
xlabel('L / m')
ylabel('T / K')
title('Variación de temperatura en el RFP_1')
Archivo de función:
function z=fdif_rfp1(x,y)
global k0 Ea R Seccion Qv1 alfa U Tw Tref d DCp DHref Cp
% Se asginan de nuevo las variables del vector de
% condiciones iniciales "y"
%Sacarosa(A) medioacido(B) glocosa(C) fructosa(D) indes(E)
C=y(1:5);
T=y(6);
n = C*Qv1; % Flujo molar;
% BALANCE DE MATERIA
k1 = k0*exp(-Ea/R/T);
k2 = exp(-5.64-220/T);
k = [k1 k2];
r(1) = k(1)*C(1);
r(2) = k(2)*C(1);
dndL(1) = Seccion*r*alfa(:,1);
dndL(2) = Seccion*r*alfa(:,2);
dndL(3) = Seccion*r*alfa(:,3);
dndL(4) = Seccion*r*alfa(:,4);
dndL(5) = Seccion*r*alfa(:,5);
dCdL = dndL/Qv1;
% % Equivalente pero mediante bucle:
% for i=1:5;
% z(i)=(Seccion/Qv1)*r*alfa(:,i);
% end
% BALANCE DE ENERGIA
for i=1:2;
DH(i)=DHref(i)+DCp(i)*(T-Tref);
end
Q = U*pi*d*(Tw-T);
dTdL = (Q - Seccion*sum(r.*DH))/ sum(n'.*Cp);
z = [dCdL, dTdL]';
end
¿Buscas una alternativa a MATLAB libre y que sea compatible con tu trabajo ya hecho? ¿tienes problemas de licencias o te gustaría reducir el coste de las mismas?
En esta ocasión entrevistamos al desarrollador principal de Octave UPM, una de las alternativas más atractivas a MATLAB. Israel Herraiz (@herraiz) nos responde a todas las preguntas sobre este proyecto basado en GNU Octave que busca la máxima compatibilidad con MATLAB y le añade una entorno gráfico también similar.
Disclaimer: Después de este podcast no te quedarán casi excusas para no probar software libre «tipo MATLAB».
Secciones de la entrevista con links para obtener más información:
[EN] Problemas de licencia con MATLAB y sus toolboxes diseñados para pasar por caja (ej. el toollbox de estadística necesario para funcionesciones triviales como random entre a y b).
GNU Octave (Wikipedia) – ¡Originalmente creado con la finalidad de calcular reactores para procesos Químicos!
¿Por qué voy a querer una alternativa a MATLAB si funciona tan bien y es tan solicitado?
Descubre que ventajas está suponiendo el uso de Python en el ámbito científico e ingenieril. Entrevistamos a Juan Luis Cano de Pybonacci (@Pybonnaci) para que nos hable y responda a todas las preguntas sobre Python y su ecosistema. Escucha online o descárgate nuestro (primer) podcast y te contamos todo lo que siempre quisiste saber en menos de 30 minutos.
Disclaimer: Después de este podcast quedarás pythonizado y aún no existe cura (que sepamos).
Secciones de la entrevista con links para obtener más información:
Librerías principales: NumPy / SciPy para operaciones númericas, Cython para optimizaciones de código a bajo nivel, IPython para trabajar de forma interactiva, Pandas para análisis de datos y matplotlib para gráficas.
Antes de seguir,vamos a resumir las mayores virtudes de Python que explican por qué, en estos últimos 10 años, se ha establecido como uno de los lenguajes más comunes para el cálculo científico:
Python es lenguaje de alto nivel conveniente para un desarrollo rápido de código
Su filosofía de diseño enfatiza la simplicidad y legibilidad de código
Posee núcleo de lenguaje relativamente pequeño con el apoyo de magníficas librerías (NumPy, SciPy, pandas, matplotlib etc.)
Lenguaje de programación interpretado en lugar de compilado.
Es multiplataforma (Windows, MacOS y Linux), gratuito y open source.
Eso esta muy bien, pero entonces, sin ser tan rápido como Fortran o C, ¿por qué es interesante usar Python para cálculo científico?
Hay que recordar tu tiempo es un recurso mucho más valioso que el tiempo de cálculo de un ordenador.
La función objetivo correcta para minimizar el tiempo total sería:
donde el primer término es un factor humano mientras que el segundo es computacional.
Lenguajes de alto nivel como Python o MATLAB están optimizados para humanos, mientras que lenguajes de de nivel inferior, como Fortran y C, están optimizados para ordenadores.
Así, aunque C y Fortran funcionen (mucho) más rápido y den mayor control, usarlos conlleva:
dedicarle más tiempo a aprender, escribir y depurar código
direccionamiento detallado (declaración de variables, asignación/desasignación de memoria , etc.)
necesidad de código repetitivo el cual es tedioso y propenso a errores
Por estas razones, el paradigma científico actual resulta de la combinación de los puntos fuertes de lenguajes de alto y bajo nivel de la siguiente forma:
Escribir un programa prototipo en un lenguaje de alto nivel como Python
Si el programa es demasiado lento, entonces analizarlo (profiling) para averiguar donde están los cuellos de botella
Volver a escribir esas y sólo esas pequeñas partes del código en Fortran / C
Modificar el programa Python existente para llamar a este nuevo código Fortran / C cuando sea necesario
Si deseas saber cómo implementar código C y Fortran en Python puedes echar un vistazo a este notebook de J.R. Johansson
Nota: Esta entrada es una traducción libre del material disponible (y muy recomendable) de Quantitative Economics.