Advanced process monitor (APMonitor) es un lenguaje de modelado para ecuaciones algebraicas diferenciales ( DAE ). [1] Es un servicio web gratuito o un servidor local para resolver representaciones de sistemas físicos en forma de modelos DAE implícitos. APMonitor es adecuado para problemas a gran escala y resuelve programación lineal , programación entera , programación no lineal , programación entera mixta no lineal, simulación dinámica, [2] estimación de horizonte móvil , [3] y control predictivo de modelos no lineales . [4] APMonitor no resuelve los problemas directamente, sino que llama a solucionadores de programación no lineal como APOPT , BPOPT, IPOPT , MINOS y SNOPT . La API de APMonitor proporciona derivadas primera y segunda exactas de funciones continuas a los solucionadores a través de diferenciación automática y en forma de matriz dispersa .
Julia , MATLAB y Python son lenguajes de programación matemática que tienen integración con APMonitor a través de API de servicios web. GEKKO Optimization Suite es una extensión reciente de APMonitor con integración completa con Python. Las interfaces son cajas de herramientas o módulos de optimización integrados para cargar y procesar soluciones de problemas de optimización. APMonitor es un lenguaje de modelado orientado a objetos y una suite de optimización que se basa en lenguajes de programación para cargar, ejecutar y recuperar soluciones. Los modelos y datos de APMonitor se compilan en tiempo de ejecución y se traducen en objetos que se resuelven mediante un motor de optimización como APOPT o IPOPT . APMonitor no especifica el motor de optimización, lo que permite cambiar entre varios motores de optimización diferentes. El modo de simulación u optimización también se puede configurar para reconfigurar el modelo para simulación dinámica , control predictivo de modelos no lineales , estimación de horizonte móvil o problemas generales en optimización matemática .
Como primer paso para resolver el problema, se expresa un modelo matemático en términos de variables y ecuaciones, como el Problema de referencia de Hock y Schittkowski n.° 71 [5] utilizado para probar el rendimiento de los solucionadores de programación no lineal . Este problema de optimización en particular tiene una función objetivo y está sujeto a la restricción de desigualdad y la restricción de igualdad . Las cuatro variables deben estar entre un límite inferior de 1 y un límite superior de 5. Los valores de estimación iniciales son . Este modelo matemático se traduce al lenguaje de modelado APMonitor en el siguiente archivo de texto.
! archivo guardado como hs71 . apm Variables x1 = 1 , >= 1 , <= 5 x2 = 5 , >= 1 , <= 5 x3 = 5 , >= 1 , <= 5 x4 = 1 , >= 1 , <= 5 Fin de variablesLas ecuaciones minimizan x1 * x4 * ( x1 + x2 + x3 ) + x3 x1 * x2 * x3 * x4 > 25 x1 ^ 2 + x2 ^ 2 + x3 ^ 2 + x4 ^ 2 = 40 Fin de ecuaciones
El problema se resuelve en Python instalando primero el paquete APMonitor con pip install APMonitor o desde el siguiente código Python.
# Instalar APMonitor import pip pip . main ([ 'install' , 'APMonitor' ])
Solo es necesario instalar Python una vez por módulo. Una vez instalado el paquete APMonitor, se importa y la función apm_solve resuelve el problema de optimización. La solución se devuelve al lenguaje de programación para su posterior procesamiento y análisis.
# Ejemplo de Python para resolver un problema de optimización desde APMonitor.apm import *# Resolver el problema de optimización sol = apm_solve ( "hs71" , 3 )# Solución de acceso x1 = sol [ "x1" ] x2 = sol [ "x2" ]
Existen interfaces similares para MATLAB y Julia con pequeñas diferencias con respecto a la sintaxis anterior. Ampliar la capacidad de un lenguaje de modelado es importante porque, a menudo, se requiere un preprocesamiento o posprocesamiento significativo de datos o soluciones cuando se resuelven problemas complejos de optimización, simulación dinámica, estimación o control.
El orden más alto de una derivada que es necesaria para devolver una DAE a la forma de EDO se llama índice de diferenciación . Una forma estándar de tratar con DAE de alto índice es diferenciar las ecuaciones para ponerlas en forma de DAE o EDO de índice 1 (ver algoritmo de Pantelides ). Sin embargo, este enfoque puede causar una serie de problemas numéricos indeseables, como la inestabilidad. Si bien la sintaxis es similar a otros lenguajes de modelado como gProms, APMonitor resuelve DAE de cualquier índice sin reordenamiento ni diferenciación. [6] Como ejemplo, a continuación se muestra una DAE de índice 3 para las ecuaciones de movimiento del péndulo y los reordenamientos de índice más bajos pueden devolver este sistema de ecuaciones a la forma de EDO (ver ejemplo de péndulo de índice 0 a 3).
Péndulo modelo Parámetros m = 1 g = 9,81 s = 1 Parámetros finales Variables x = 0 y = - s v = 1 w = 0 lam = m * ( 1 + s * g ) / 2 * s ^ 2 Variables finales Ecuaciones x ^ 2 + y ^ 2 = s ^ 2 $ x = v $ y = w m * $ v = - 2 * x * lam m * $ w = - m * g - 2 * y * lam Fin de ecuaciones Fin del modelo
Muchos sistemas físicos se expresan de forma natural mediante ecuaciones algebraicas diferenciales . Algunas de ellas son:
A continuación se enumeran los modelos de un motor de corriente continua (CC) y la respuesta de la glucosa en sangre de un paciente dependiente de insulina. Son representativos de ecuaciones diferenciales y algebraicas que se encuentran en muchas ramas de la ciencia y la ingeniería.
Parámetros ! parámetros del motor (motor de corriente continua) v = 36 ! voltaje de entrada al motor (voltios) rm = 0,1 ! resistencia del motor (ohmios) lm = 0,01 ! inductancia del motor (henrios) kb = 6,5e-4 ! constante de fuerza contraelectromotriz (voltios·s/rad) kt = 0,1 ! constante de par (N·m/a) jm = 1,0e-4 ! inercia del rotor (kg m<sup>2</sup>) bm = 1,0e-5 ! amortiguamiento mecánico (modelo lineal de fricción: bm * dth) ! parámetros de carga jl = 1000 * jm ! inercia de la carga (1000 veces el rotor) bl = 1.0e-3 ! amortiguación de la carga (fricción) k = 1.0e2 ! constante de resorte para que el eje del motor se cargue b = 0.1 ! amortiguación del resorte para que el eje del motor se cargue Parámetros finales Variables i = 0 ! corriente eléctrica del motor (amperios) dth_m = 0 ! velocidad angular del rotor, a veces llamada omega (radianes/seg) th_m = 0 ! ángulo del rotor, theta (radianes) dth_l = 0 ! velocidad angular de la rueda (rad/s) th_l = 0 ! ángulo de la rueda (radianes) Variables finales Ecuaciones lm * $ i - v = - rm * i - kb * $ th_m jm * $ dth_m = kt * i - ( bm + b ) * $ th_m - k * th_m + b * $ th_l + k * th_l jl * $ dth_l = b * $ th_m + k * th_m - ( b + bl ) * $ th_l - k * th_l dth_m = $ th_m dth_l = $ th_l Fin de ecuaciones
! Fuente del modelo: ! A. Roy y RS Parker. “Modelado dinámico de ácidos grasos libres, glucosa e insulina: un modelo mínimo extendido”, ! Diabetes Technology and Therapeutics 8(6), 617-626, 2006. Parámetros p1 = 0,068 ! 1/min p2 = 0,037 ! 1/min p3 = 0,000012 ! 1/min p4 = 1,3 ! mL/(min·µU) p5 = 0,000568 ! 1/mL p6 = 0,00006 ! 1/(min·µmol) p7 = 0,03 ! 1/min p8 = 4,5 ! mL/(min·µU) k1 = 0,02 ! 1/min k2 = 0,03 ! 1/min pF2 = 0,17 ! 1/min pF3 = 0,00001 ! 1/min n = 0,142 ! 1/min VolG = 117 ! dL VolF = 1 1,7 ! L ! parámetros basales para diabético tipo I Ib = 0 ! Insulina (µU/mL) Xb = 0 ! Insulina remota (µU/mL) Gb = 98 ! Glucosa en sangre (mg/dL) Yb = 0 ! Insulina para lipogénesis (µU/mL) Fb = 380 ! Ácido graso libre plasmático (µmol/L) Zb = 380 ! Ácido graso libre remoto (µmol/L) ! velocidad de infusión de insulina u1 = 3 ! µU/min ! velocidad de captación de glucosa u2 = 300 ! mg/min ! Infusión lipídica externa u3 = 0 ! mg/min Parámetros finales Intermedios p9 = 0,00021 * exp ( - 0,0055 * G ) ! dL/(min*mg) Intermedios finales Variables I = Ib X = Xb G = Gb Y = Yb F = Fb Z = Zb Variables finales Ecuaciones Dinámica de la insulina $ I = - n * I + p5 * u1 Dinámica del compartimento remoto de insulina $ X = - p2 * X + p3 * I Dinámica de la glucosa $ G = - p1 * G - p4 * X * G + p6 * G * Z + p1 * Gb - p6 * Gb * Zb + u2 / VolG Dinámica de la insulina para la lipogénesis $ Y = - pF2 * Y + pF3 * I Dinámica de los ácidos grasos libres (FFA) plasmáticos $ F = - p7 * ( F - Fb ) - p8 * Y * F + p9 * ( F * G - Fb * Gb ) + u3 / VolF Dinámica de los FFA remotos $ Z = - k2 * ( Z - Zb ) + k1 * ( F - Fb ) Fin de las ecuaciones