APMonitor - APMonitor
| Desarrollador (es) | APMonitor |
|---|---|
| Lanzamiento estable | v0.7.6 / 31 de enero de 2018
|
| Repositorio | https://github.com/APMonitor/ |
| Sistema operativo | Multiplataforma |
| Escribe | Computación técnica |
| Licencia | Propietario , BSD |
| Sitio web | Página del producto APMonitor |
El monitor de proceso avanzado (APMonitor) es un lenguaje de modelado para ecuaciones algebraicas diferenciales ( DAE ). 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 de enteros , programación no lineal, programación de enteros mixtos no lineales, simulación dinámica, estimación de horizonte móvil y control predictivo de modelos no lineales . APMonitor no resuelve los problemas directamente, pero llama a solucionadores de programación no lineal como APOPT , BPOPT , IPOPT , MINOS y SNOPT . La API APMonitor proporciona la primera y segunda derivadas exactas de funciones continuas a los solucionadores a través de la diferenciación automática y en forma de matriz dispersa .
Integración del lenguaje de programación
Julia , MATLAB , Python son lenguajes de programación matemática que tienen integración APMonitor a través de API de servicios web. El GEKKO Optimization Suite es una extensión reciente de APMonitor con la integración completa de Python. Las interfaces son cajas de herramientas de optimización integradas o módulos 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 varios motores de optimización diferentes. El modo de simulación u optimización también es configurable para reconfigurar el modelo para simulación dinámica , control predictivo del modelo no lineal , estimación de horizonte móvil o problemas generales de 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 & Schittkowski # 71 que se usa para probar el desempeño 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 iniciales de estimación son . Este modelo matemático se traduce al lenguaje de modelado APMonitor en el siguiente archivo de texto.
! file saved as hs71.apm
Variables
x1 = 1, >=1, <=5
x2 = 5, >=1, <=5
x3 = 5, >=1, <=5
x4 = 1, >=1, <=5
End Variables
Equations
minimize x1*x4*(x1+x2+x3) + x3
x1*x2*x3*x4 > 25
x1^2 + x2^2 + x3^2 + x4^2 = 40
End Equations
Luego, el problema se resuelve en Python instalando primero el paquete APMonitor con pip install APMonitor o desde el siguiente código Python.
# Install APMonitor
import pip
pip.main(['install','APMonitor'])
La instalación de Python solo es necesaria una vez para cualquier módulo. Una vez que se instala 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.
# Python example for solving an optimization problem
from APMonitor.apm import *
# Solve optimization problem
sol = apm_solve('hs71', 3)
# Access solution
x1 = sol['x1']
x2 = sol['x2']
Hay interfaces similares disponibles 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 procesamiento previo o posterior significativo de datos o soluciones al resolver problemas complejos de optimización, simulación dinámica, estimación o control.
DAE de alto índice
El orden más alto de una derivada que es necesario para devolver un DAE a la forma ODE se llama índice de diferenciación . Una forma estándar de tratar con DAE de índice alto es diferenciar las ecuaciones para ponerlas en formato DAE u ODE de índice 1 (consulte el algoritmo de Pantelides ). Sin embargo, este enfoque puede provocar una serie de problemas numéricos indeseables, como la inestabilidad. Si bien la sintaxis es similar a la de otros lenguajes de modelado como gProms, APMonitor resuelve DAE de cualquier índice sin reordenamiento ni diferenciación. A modo de ejemplo, a continuación se muestra un DAE de índice 3 para las ecuaciones de movimiento del péndulo y las reordenaciones de índices inferiores pueden devolver este sistema de ecuaciones a la forma ODE (consulte el ejemplo del péndulo del índice 0 a 3 ).
Movimiento de péndulo (forma DAE de índice 3)
Model pendulum
Parameters
m = 1
g = 9.81
s = 1
End Parameters
Variables
x = 0
y = -s
v = 1
w = 0
lam = m*(1+s*g)/2*s^2
End Variables
Equations
x^2 + y^2 = s^2
$x = v
$y = w
m*$v = -2*x*lam
m*$w = -m*g - 2*y*lam
End Equations
End Model
Aplicaciones en APMonitor Modeling Language
Muchos sistemas físicos se expresan naturalmente mediante ecuaciones algebraicas diferenciales . Algunos de estos incluyen:
- Culturas celulares
- reactores quimicos
- cogeneración (energía y calor)
- columnas de destilación
- automatización de perforación
- destilación de vapor de aceite esencial
- soldadura por fricción-agitación
- formación de hidratos en oleoductos de aguas profundas
- propagación de enfermedades infecciosas
- osciladores
- control de slugging severo
- producción de energía solar térmica
- pilas de combustible de óxido sólido
- simulación de lanzamiento de transbordador espacial
- Vehículos aéreos no tripulados (UAV)
Los modelos para un motor de corriente continua (CC) y la respuesta de glucosa en sangre de un paciente insulinodependiente se enumeran a continuación. Son representativos de ecuaciones diferenciales y algebraicas que se encuentran en muchas ramas de la ciencia y la ingeniería.
Motor de corriente continua (DC)
Parameters
! motor parameters (dc motor)
v = 36 ! input voltage to the motor (volts)
rm = 0.1 ! motor resistance (ohms)
lm = 0.01 ! motor inductance (henrys)
kb = 6.5e-4 ! back emf constant (volt·s/rad)
kt = 0.1 ! torque constant (N·m/a)
jm = 1.0e-4 ! rotor inertia (kg m²)
bm = 1.0e-5 ! mechanical damping (linear model of friction: bm * dth)
! load parameters
jl = 1000*jm ! load inertia (1000 times the rotor)
bl = 1.0e-3 ! load damping (friction)
k = 1.0e2 ! spring constant for motor shaft to load
b = 0.1 ! spring damping for motor shaft to load
End Parameters
Variables
i = 0 ! motor electric current (amperes)
dth_m = 0 ! rotor angular velocity sometimes called omega (radians/sec)
th_m = 0 ! rotor angle, theta (radians)
dth_l = 0 ! wheel angular velocity (rad/s)
th_l = 0 ! wheel angle (radians)
End Variables
Equations
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
End Equations
Respuesta de glucosa en sangre de un paciente insulinodependiente
! Model source:
! A. Roy and R.S. Parker. “Dynamic Modeling of Free Fatty
! Acids, Glucose, and Insulin: An Extended Minimal Model,”
! Diabetes Technology and Therapeutics 8(6), 617-626, 2006.
Parameters
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 = 11.7 ! L
! basal parameters for Type-I diabetic
Ib = 0 ! Insulin (µU/mL)
Xb = 0 ! Remote insulin (µU/mL)
Gb = 98 ! Blood Glucose (mg/dL)
Yb = 0 ! Insulin for Lipogenesis (µU/mL)
Fb = 380 ! Plasma Free Fatty Acid (µmol/L)
Zb = 380 ! Remote Free Fatty Acid (µmol/L)
! insulin infusion rate
u1 = 3 ! µU/min
! glucose uptake rate
u2 = 300 ! mg/min
! external lipid infusion
u3 = 0 ! mg/min
End parameters
Intermediates
p9 = 0.00021 * exp(-0.0055*G) ! dL/(min*mg)
End Intermediates
Variables
I = Ib
X = Xb
G = Gb
Y = Yb
F = Fb
Z = Zb
End variables
Equations
! Insulin dynamics
$I = -n*I + p5*u1
! Remote insulin compartment dynamics
$X = -p2*X + p3*I
! Glucose dynamics
$G = -p1*G - p4*X*G + p6*G*Z + p1*Gb - p6*Gb*Zb + u2/VolG
! Insulin dynamics for lipogenesis
$Y = -pF2*Y + pF3*I
! Plasma-free fatty acid (FFA) dynamics
$F = -p7*(F-Fb) - p8*Y*F + p9 * (F*G-Fb*Gb) + u3/VolF
! Remote FFA dynamics
$Z = -k2*(Z-Zb) + k1*(F-Fb)
End Equations
Ver también
Referencias
enlaces externos
- Página de inicio de APMonitor
- Curso de optimización dinámica con APMonitor
- Documentación de APMonitor
- APMonitor citas
- Motor de soluciones en línea con IPOPT
- Comparación de la sintaxis del lenguaje de modelado popular
- Descargue el cliente APM MATLAB , APM Python o APM Julia para APMonitor
- Descarga APMonitor Server (Windows)
- Descarga APMonitor Server (Linux)