APMonitor - APMonitor

APMonitor
APMonitor Logo2.png
Kehittäjä (t) APMonitor
Vakaa julkaisu
v0.7.6 / 31. tammikuuta 2018 (2018-01-31)
Varasto https://github.com/APMonitor/
Käyttöjärjestelmä Monialustainen
Tyyppi Tekninen laskenta
Lisenssi Oma , BSD
Verkkosivusto APMonitor -tuotesivu

Kehittyneet monitori (APMonitor) on mallinnus kieli ero algebrallinen ( DAE ) yhtälöt. Se on ilmainen verkkopalvelu tai paikallinen palvelin fyysisten järjestelmien esitysten ratkaisemiseksi implisiittisten DAE-mallien muodossa. APMonitor soveltuu laajamittaisiin ongelmiin ja ratkaisee lineaarisen ohjelmoinnin , kokonaislukuohjelman , epälineaarisen ohjelmoinnin , epälineaarisen kokonaislukuohjelmoinnin, dynaamisen simuloinnin, liikkuvan horisontin estimoinnin ja epälineaarisen mallin ennustavan ohjauksen . APMonitor ei ratkaise ongelmia suoraan, vaan kutsuu epälineaarisia ohjelmointiratkaisijoita , kuten APOPT , BPOPT , IPOPT , MINOS ja SNOPT . APMonitor API tarjoaa ratkaisijoille tarkan ensimmäisen ja toisen johdannaisen jatkuvista funktioista automaattisen erilaistumisen kautta ja harvassa matriisimuodossa .

Ohjelmointikielen integrointi

Julia , MATLAB ja Python ovat matemaattisia ohjelmointikieliä, joilla on APMonitor-integrointi verkkopalvelusovellusliittymien kautta. GEKKO optimointi Suite on äskettäin laajennettu APMonitor täysin Python yhdentymistä. Liitännät ovat sisäänrakennettuja optimointityökalupaketteja tai -moduuleja optimointitehtävien lataamiseen ja prosessin ratkaisemiseen. APMonitor on olio-suuntainen mallinnuskieli ja optimointipaketti, joka käyttää ohjelmointikieliä ratkaisujen lataamiseen, suorittamiseen ja hakemiseen. APMonitor-mallit ja -tiedot kootaan ajon aikana ja muunnetaan objekteiksi, jotka ratkaistaan ​​optimointimoottorilla, kuten APOPT tai IPOPT . APMonitor ei määritä optimointimoottoria, joten useat eri optimointimoottorit voidaan kytkeä pois päältä. Simulointi- tai optimointitila voidaan myös konfiguroida määrittämään malli uudelleen dynaamista simulaatiota , epälineaarista mallin ennustavaa ohjausta , liikkuvan horisontin arviointia tai yleisiä matemaattisen optimoinnin ongelmia varten .

Ensimmäisenä askeleena ongelman ratkaisemisessa matemaattinen malli ilmaistaan ​​muuttujina ja yhtälöinä, kuten Hock & Schittkowski -vertailutehtävä 71, jota käytetään epälineaaristen ohjelmointiratkaisijoiden suorituskyvyn testaamiseen . Tällä erityisellä optimointitehtävällä on objektiivinen tehtävä, ja siihen liittyy eriarvoisuusrajoitus ja tasa -arvorajoitus . Neljän muuttujan on oltava alarajan 1 ja ylärajan 5 välissä. Alkuperäiset arvot ovat . Tämä matemaattinen malli käännetään APMonitor -mallinnuskielelle seuraavassa tekstitiedostossa.

! 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

Ongelma ratkaistaan ​​sitten Pythonissa asentamalla ensin APMonitor -paketti pip install APMonitorilla tai seuraavasta Python -koodista .

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

Python on asennettava vain kerran mille tahansa moduulille. Kun APMonitor -paketti on asennettu, se tuodaan ja apm_solve -toiminto ratkaisee optimointitehtävän. Ratkaisu palautetaan ohjelmointikielelle jatkokäsittelyä ja analysointia varten.

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

Samanlaisia ​​rajapintoja on saatavana MATLABille ja Julialle pienillä eroilla yllä olevasta syntaksista. Mallinnuskielen valmiuksien laajentaminen on tärkeää, koska tietojen tai ratkaisujen esikäsittelyä tai jälkikäsittelyä tarvitaan usein, kun ratkaistaan ​​monimutkaisia ​​optimointi-, dynaamisia simulointi-, arviointi- tai ohjausongelmia.

Korkean indeksin DAE: t

Johdannaisen korkeinta järjestystä, joka on tarpeen DAE: n palauttamiseksi ODE -muotoon, kutsutaan erilaisuusindeksiksi . Tavallinen tapa käsitellä korkean indeksin DAE: itä on erottaa yhtälöt ja asettaa ne indeksi-1 DAE- tai ODE-muotoon (katso Pantelides-algoritmi ). Tämä lähestymistapa voi kuitenkin aiheuttaa useita ei -toivottuja numeerisia ongelmia, kuten epävakautta. Vaikka syntaksi on samanlainen kuin muut mallinnuskielet, kuten gProms, APMonitor ratkaisee minkä tahansa indeksin DAE: t ilman uudelleenjärjestelyä tai erilaistumista. Esimerkkinä alla on esitetty indeksi-3 DAE heilurin liikeyhtälöille ja alemman indeksin uudelleenjärjestelyt voivat palauttaa tämän yhtälöjärjestelmän ODE-muotoon (katso esimerkki 0–3 heilurin esimerkki ).

Heilurin liike (indeksi-3 DAE-muoto)

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

Sovellukset APMonitor -mallinnuskielellä

Monet fyysiset järjestelmät ilmaistaan ​​luonnollisesti differentiaalialgebrallisella yhtälöllä . Jotkut näistä ovat:

Alla on lueteltu mallit tasavirtamoottorille ja insuliiniriippuvaisen potilaan verensokerivasteelle. Ne edustavat differentiaali- ja algebrallisia yhtälöitä, joita esiintyy monilla tieteen ja tekniikan aloilla.

Tasavirtamoottori

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

Insuliiniriippuvaisen potilaan verensokerivaste

! 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

Katso myös

Viitteet

Ulkoiset linkit