APMonitor - APMonitor
| Kehittäjä (t) | APMonitor |
|---|---|
| Vakaa julkaisu | v0.7.6 / 31. tammikuuta 2018
|
| 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:
- soluviljelmät
- kemialliset reaktorit
- yhteistuotanto (teho ja lämpö)
- tislauskolonnit
- porausautomaatio
- eteerisen öljyn höyrytislaus
- kitkasekoitushitsaus
- hydraatin muodostumista syvänmeren putkilinjoissa
- tartuntataudin leviäminen
- oskillaattorit
- voimakas liukastumisen hallinta
- aurinkoenergian tuotanto
- kiinteiden oksidien polttokennot
- avaruussukkulan laukaisusimulaatio
- Miehittämättömät ilma -autot (UAV)
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
- APMonitorin kotisivu
- Dynaaminen optimointikurssi APMonitorilla
- APMonitor -dokumentaatio
- APMonitor -sitaatit
- Online -ratkaisumoottori, jossa IPOPT
- Suositun mallinnuskielen syntaksin vertailu
- Lataa APM MATLAB- , APM Python- tai APM Julia -asiakas APMonitorille
- Lataa APMonitor Server (Windows)
- Lataa APMonitor Server (Linux)