APMonitor - APMonitor

APMonitor
APMonitor Logo2.png
Desenvolvedor (s) APMonitor
Versão estável
v0.7.6 / 31 de janeiro de 2018 ( 31/01/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:

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