APMonitor - APMonitor

APMonitor
APMonitor Logo2.png
Utvecklare APMonitor
Stabil frisättning
v0.7.6 / 31 januari 2018 ( 2018-01-31 )
Förvar https://github.com/APMonitor/
Operativ system Plattformsoberoende
Typ Teknisk beräkning
Licens Proprietär , BSD
Hemsida APMonitors produktsida

Avancerad processövervakare (APMonitor) är ett modelleringsspråk för differentialalgebraiska ( DAE ) ekvationer. Det är en gratis webbtjänst eller lokal server för att lösa representationer av fysiska system i form av implicita DAE-modeller. APMonitor är lämplig för storskaliga problem och löser linjär programmering , heltalsprogrammering , olinjär programmering , olinjär blandad heltalsprogrammering, dynamisk simulering, rörlig horisontestimering och olinjär modellprognostisk kontroll . APMonitor löser inte problemen direkt, men anropar olinjära programmeringslösare som APOPT , BPOPT , IPOPT , MINOS och SNOPT . APMonitor API tillhandahåller exakta första och andra derivat av kontinuerliga funktioner till lösarna genom automatisk differentiering och i gles matrisform .

Programmeringsspråkintegrering

Julia , MATLAB , Python är matematiska programmeringsspråk som har APMonitor-integration via webbtjänst-API: er. Den GEKKO Optimization Suite är en ny förlängning av APMonitor med fullständig Python integration. Gränssnitten är inbyggda optimeringsverktygslådor eller moduler för både laddning och processlösningar av optimeringsproblem. APMonitor är ett objektorienterat modelleringsspråk och optimeringssvit som bygger på programmeringsspråk för att ladda, köra och hämta lösningar. APMonitor-modeller och data sammanställs vid körning och översätts till objekt som löses av en optimeringsmotor som APOPT eller IPOPT . Optimeringsmotorn är inte specificerad av APMonitor, så att flera olika optimeringsmotorer kan stängas av. Simulerings- eller optimeringsläget är också konfigurerbart för att omkonfigurera modellen för dynamisk simulering , olinjär modellprediktiv kontroll , rörlig horisontestimering eller allmänna problem i matematisk optimering .

Som ett första steg för att lösa problemet uttrycks en matematisk modell i termer av variabler och ekvationer som Hock & Schittkowski Benchmark Problem #71 som används för att testa prestandan hos olinjära programmeringslösare . Just detta optimeringsproblem har en objektiv funktion och är föremål för ojämlikhetsbegränsning och jämlikhetsbegränsning . De fyra variablerna måste ligga mellan en nedre gräns på 1 och en övre gräns på 5. De första gissningsvärdena är . Denna matematiska modell översätts till APMonitors modelleringsspråk i följande textfil.

! 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

Problemet löses sedan i Python genom att först installera APMonitor -paketet med pipinstallera APMonitor eller från följande Python -kod.

# Install APMonitor
import pip
pip.main(['install','APMonitor'])

Att installera en Python krävs bara en gång för någon modul. När paketet APMonitor är installerat importeras det och funktionen apm_solve löser optimeringsproblemet. Lösningen återförs till programmeringsspråket för vidare bearbetning och analys.

# 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']

Liknande gränssnitt är tillgängliga för MATLAB och Julia med mindre skillnader från syntaxen ovan. Att utöka kapaciteten hos ett modelleringsspråk är viktigt eftersom betydande för- eller efterbehandling av data eller lösningar ofta krävs vid lösning av komplex optimering, dynamisk simulering, uppskattning eller kontrollproblem.

DAE med högt index

Den högsta ordningen på ett derivat som är nödvändigt för att returnera en DAE till ODE -form kallas differentieringsindex . Ett vanligt sätt att hantera DAE med hög index är att differentiera ekvationerna för att sätta dem i index-1 DAE- eller ODE-form (se Pantelides-algoritmen ). Detta tillvägagångssätt kan emellertid orsaka ett antal oönskade numeriska problem som instabilitet. Medan syntaxen liknar andra modelleringsspråk som gProms, löser APMonitor DAE för alla index utan omorganisation eller differentiering. Som ett exempel visas en index-3 DAE nedan för pendelrörelsekvationerna och lägre indexarrangemang kan återföra detta ekvationssystem till ODE-form (se Index 0 till 3 Pendulum-exempel ).

Pendelrörelse (index-3 DAE-form)

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

Applikationer i APMonitor Modeling Language

Många fysiska system uttrycks naturligt genom differentiell algebraisk ekvation . Några av dessa inkluderar:

Modeller för en likströmsmotor och blodsockersvar hos en insulinberoende patient listas nedan. De är representativa för differential- och algebraiska ekvationer som påträffas inom många grenar av vetenskap och teknik.

Likströmsmotor (likström)

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

Blodsockersvar hos en insulinberoende patient

! 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

Se även

Referenser

externa länkar