APMonitor - APMonitor
| Desenvolvedor (s) | APMonitor |
|---|---|
| Versão estável | v0.7.6 / 31 de janeiro de 2018
|
| Repositório | https://github.com/APMonitor/ |
| Sistema operacional | Plataforma cruzada |
| Modelo | Computação técnica |
| Licença | Proprietário , BSD |
| Local na rede Internet | Página do produto APMonitor |
Monitor de processo avançado (APMonitor) é uma linguagem de modelagem para equações algébricas diferenciais ( DAE ). É um serviço da web gratuito ou servidor local para resolver representações de sistemas físicos na forma de modelos DAE implícitos. APMonitor é adequado para problemas de grande escala e resolve programação linear , programação inteira , programação não linear, programação inteira mista não linear, simulação dinâmica, estimativa de horizonte móvel e controle preditivo de modelo não linear . O APMonitor não resolve os problemas diretamente, mas chama solucionadores de programação não linear , como APOPT , BPOPT , IPOPT , MINOS e SNOPT . O APMonitor API fornece primeiro e segundo derivados exatos de funções contínuas para os solucionadores por meio de diferenciação automática e em forma de matriz esparsa .
Integração de linguagem de programação
Julia , MATLAB , Python são linguagens de programação matemática que possuem integração APMonitor por meio de APIs de serviço da web. O GEKKO Optimization Suite é uma extensão recente do APMonitor com integração Python completa. As interfaces são caixas de ferramentas ou módulos de otimização integrados para carregar e processar soluções de problemas de otimização. APMonitor é uma linguagem de modelagem orientada a objetos e suíte de otimização que se baseia em linguagens de programação para carregar, executar e recuperar soluções. Os modelos e dados do APMonitor são compilados em tempo de execução e traduzidos em objetos que são resolvidos por um mecanismo de otimização, como APOPT ou IPOPT . O mecanismo de otimização não é especificado pelo APMonitor, permitindo que vários mecanismos de otimização diferentes sejam trocados. O modo de simulação ou otimização também é configurável para reconfigurar o modelo para simulação dinâmica , controle preditivo de modelo não linear , estimativa de horizonte móvel ou problemas gerais em otimização matemática .
Como uma primeira etapa na solução do problema, um modelo matemático é expresso em termos de variáveis e equações, como o Problema de Referência de Hock & Schittkowski nº 71 usado para testar o desempenho de solucionadores de programação não linear . Este problema de otimização em particular tem uma função objetivo e está sujeito à restrição de desigualdade e à restrição de igualdade . As quatro variáveis devem estar entre um limite inferior de 1 e um limite superior de 5. Os valores estimados iniciais são . Este modelo matemático é traduzido para a linguagem de modelagem APMonitor no seguinte arquivo 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
O problema é então resolvido em Python instalando primeiro o pacote APMonitor com pip install APMonitor ou a partir do seguinte código Python.
# Install APMonitor
import pip
pip.main(['install','APMonitor'])
A instalação de um Python é necessária apenas uma vez para qualquer módulo. Depois que o pacote APMonitor é instalado, ele é importado e a função apm_solve resolve o problema de otimização. A solução é devolvida à linguagem de programação para posterior processamento e análise.
# 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']
Interfaces semelhantes estão disponíveis para MATLAB e Julia com pequenas diferenças da sintaxe acima. Estender a capacidade de uma linguagem de modelagem é importante porque um pré ou pós-processamento significativo de dados ou soluções geralmente é necessário ao resolver problemas complexos de otimização, simulação dinâmica, estimativa ou controle.
DAEs de alto índice
A ordem mais alta de uma derivada necessária para retornar uma forma DAE para ODE é chamada de índice de diferenciação . Uma maneira padrão de lidar com DAEs de alto índice é diferenciar as equações para colocá-las na forma DAE de índice 1 ou ODE (consulte o algoritmo de Pantelides ). No entanto, essa abordagem pode causar uma série de problemas numéricos indesejáveis, como instabilidade. Embora a sintaxe seja semelhante a outras linguagens de modelagem, como gProms, o APMonitor resolve DAEs de qualquer índice sem rearranjo ou diferenciação. Como exemplo, um índice 3 DAE é mostrado abaixo para as equações do movimento do pêndulo e os rearranjos do índice inferior podem retornar este sistema de equações à forma ODE (consulte o exemplo do índice 0 a 3 do pêndulo ).
Movimento pendular (índice-3 formulário DAE)
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
Aplicativos em linguagem de modelagem APMonitor
Muitos sistemas físicos são naturalmente expressos por equações algébricas diferenciais . Alguns deles incluem:
- culturas de células
- reatores químicos
- cogeração (energia e calor)
- colunas de destilação
- automação de perfuração
- destilação a vapor de óleo essencial
- soldagem por fricção
- formação de hidratos em dutos de alto mar
- propagação de doenças infecciosas
- osciladores
- controle de slugging severo
- produção de energia solar térmica
- células de combustível de óxido sólido
- simulação de lançamento de ônibus espacial
- Veículos aéreos não tripulados (UAVs)
Modelos para um motor de corrente contínua (DC) e resposta de glicose no sangue de um paciente dependente de insulina estão listados abaixo. Eles são representativos de equações diferenciais e algébricas encontradas em muitos ramos da ciência e da engenharia.
Motor de corrente contínua (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
Resposta de glicose no sangue de um paciente dependente de insulina
! 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
Veja também
Referências
links externos
- Página inicial do APMonitor
- Curso de otimização dinâmica com APMonitor
- Documentação APMonitor
- Citações do APMonitor
- Motor de solução online com IPOPT
- Comparação de sintaxe de linguagem de modelagem popular
- Baixe o cliente APM MATLAB , APM Python ou APM Julia para APMonitor
- Baixe o APMonitor Server (Windows)
- Baixe o servidor APMonitor (Linux)