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.
En ingeniería química es común el uso de largas y complejas expresiones matemáticas para, por ejemplo, la obtención de parámetros termodinámicos en compuestos que intervienen en un proceso a modelar.
pyBigParser es una librería escrita en Python que permite crear objetos para el almacenamiento de funciones y su evaluación. Gracias a esta librería la función se puede dividir en «bloques» facilitando su implementación y evaluando la misma con otros parámetros a posteriori.
¿Sencillo no? En el momento de escribir esta entrada pyBigParser tiene una media de 500 descargas diarías.
Si estás iniciandote en programación con Python, puede que te ayude ver el vídeo-ejemplo que el propio creador (Nelson Carrasquel) ha publicado en nuestro canal de YouTube de CAChemE.
Trabajar y ejecutar código Python desde servidores externos (la nube) se está convirtiendo en una alternativa cada vez más atractiva. La principal ventaja, aparte de poder disponer de mayores prestaciones que en un equipo local, es la posibilidad de compartir configuraciones y realizar trabajos en colaboración de forma sencilla. Debido a que el ecosistema de Python está evolucionando a un ritmo vertiginoso, se pueden tener problemas a la hora de compartir el trabajo realizado debido a que la configuración de las librerías (y versiones) es diferente entre los miembros del equipo.
Una solución excelente es Wakari.io de los mismos desarrolladores de Anaconda (Continiuum Analytics). Wakari permite acceder a través de un navegador a un entorno Python (NumPy, SciPy, Pandas etc.) listo para usar y completamente configurado incluyendo además los archivos o datos de partida. Permite además ver, clonar y editar notebooks de IPython e incluye opciones para compartir el trabajo entre colaboradores y/o mediante enlaces directos.
Wakari permite la configuración de diferentes entornos y consolas desde el navegador
IPython es un interprete interactivo avanzado que ha revolucionando la manera en que se utiliza Python en ámbitos científicos, conferencias y tutoriales. Inspirados por los notebooks de Mathematica y Sage, el notebook de IPython es una interfaz web para IPython. El blog de Pybonacci, que debería de estar ya en tu lista de favoritos, habló del mismo hace un año: Introducción a IPython, mucho más que un intérprete de Python.
Wakari permite trabajar en la nube con Notebook de IPython
ChemSep es un simulador de columnas de destilación, absorción y operaciones de extracción con una interfaz fácil e intuitiva. Combina el modelo de columna de etapas de equilibrio clásico con un modelo de columna de no-equilibrio en una interfaz fácil e intuitiva. Su base de datos abarca 400 productos químicos y se puede probar la versión totalmente gratuita limitada a 150 etapas y 10 componentes.
Interfaz y ejemplos resueltos mediante ChemSep
Este programa aunque autónomo, pertenece al paquete de simulación de COCO que es un simulador similar a CHEMCAD, pero este programa es gratuito. ChemSep sirve para describir o simular un único proceso de separación de componentes y no un conjunto de procesos; no obstante el programa nos parece muy interesante primero porque funciona muy bien ya que tiene gran cantidad de opciones, porque se puede obtener muchísima información de él una vez finalizada la simulación, ya sea en forma de gráficas o tablas y finalmente porque es muy intuitivo y fácil de utilizar. Por lo tanto es muy recomendable para utilizarlo en el caso de la docencia y para aprender los distintos procesos de separación, e incluso en algunos casos como ayuda previa al diseño de estos equipos de separación.
Hay que destacar opciones de análisis como el estudio paramétrico o el mapa de curvas de residuo que hacen de este programa una elección más que recomendable.
ChemSep está disponible en dos versiones. Su versión Lite puede ser usado tanto a nivel personal como industrial sin coste. La versión completa permite la simulación de columnas dinámicas y es gratuita para uso académico (http://www.chemsep.com/program/faq.html)
Además, ChemSep se pueden insertar en cualquier paquete de simulación de procesos acorde con CAPE-OPEN (como COCO –http://www.cocosimulator.org/), por lo que el modelo de la columna específico puede ser usado en la simulación de una planta química completa.
¿Enthought Canopy o Anaconda? Ambas son distribuciones de Python que se presentan como alternativas a MATLAB. La ventaja que tienen es que simplifican enormemente la instalación de Python incluyendo los paquetes más populares.
[box]Actualización (2015): Anaconda de Continuum es a día de hoy la mejor opción para instalar Python 3. Ver vídeo de instalación Spyder es el entorno de desarrollo de Python más similar a MATLAB
A pesar de que el producto de Mathworks no tiene rival en ciertas áreas, Pyhton tiene una serie de ventajas muy importantes frente a MATLAB.
En cualquier caso en el 2013, no existía una selección clara de por dónde empezar. Canopy express (la versión gratuita) presentaba más paquetes que Anaconda pero una limitación de 32bit , mientras que Anaconda permitía trabajar directamente a 64bit.
Pero en la actualidad (2015), el número de paquetes de Anaconda ha aumentado y a diferencia de Canopy express, Anaconda viene con Python 3 y es totalmente gratuito incluso para uso comercial. Su gestor de paquetes conda resuelve el problema de dependencias de forma elegante.
Entonces, ¿qué es mejor Anaconda o Canopy Express?
Hasta hace unos años Enthought (Canopy) lideraba el sector, pero su licencia sólo permite el uso personal. Además, sigue sin dar soporte a Python 3 (cuando para el 2020 no habrá más soporte de Python 2.7).
Anaconda/conda es la mejor opción con diferencia ya que sigue siendo totalmente gratuita tanto para usuarios como para empresas y ha liberado su código y licencia, soporta Python 3 e incluye ahora una interfaz gráfica.