90 likes | 191 Views
SNOPT - yleistä. Soveltuu sekä lineaaristen että epälineaaristen ongelmien ratkaisemiseen Perustuu SQP-algoritmille Hakusuunta QP-tehtävän ratkaisuna Askelpituus minimoimalla meriittifunktiota Iteraatio suppenee kohti ratkaisua, joka toteuttaa 1. asteen optimaalisuusehdot. SNOPT - rajapinnat.
E N D
SNOPT - yleistä • Soveltuu sekä lineaaristen että epälineaaristen ongelmien ratkaisemiseen • Perustuu SQP-algoritmille • Hakusuunta QP-tehtävän ratkaisuna • Askelpituus minimoimalla meriittifunktiota • Iteraatio suppenee kohti ratkaisua, joka toteuttaa 1. asteen optimaalisuusehdot
SNOPT - rajapinnat • Toteutettu Fortran 77 –ohjelmointikielellä • Kätevintä käyttää kääntämällä kirjastoksi • Useita rajapintoja • Jos Jakobin matriisi on rakenteeltaan harva: • snOptA, snOptB, snOptC • Jos taas tiheä: • npOpt (sama rajapinta kuin NPSOL:issa)
SNOPT - snOptA • Ongelman formaatti • Ratkaisuvektori, ala- ja ylärajat x(n), xlow(n), xupp(n) • Rajoitteet, ala- ja ylärajat F(m), Flow(m), Fupp(m) • Kohdefunktio F(ObjRow) • Jakobin matriisin G nollasta poikkeavat alkiot G(nG) • Jos alkion koordinaatit ovat i = iGfun(k), j = jGvar(k), niin G(k) = Gij
SNOPT – snOptA F(1) = x(2) F(2) = x(1)**2 + 4*x(2)**2 F(3) = (x(1) – 2)**2 + x(2)**2 xlow(1) = 0 xupp(1) = bigbnd xlow(2) = -bigbnd xupp(2) = bigbnd G(1) = 1 G(2) = 2*x(1) G(3) = 8*x(2) G(4) = 2*(x(1) – 2) G(5) = 2*x(2) Flow(1) = -bigbnd Fupp(1) = bigbnd Flow(2) = -bigbnd Fupp(2) = 4 Flow(3) = -bigbnd Fupp(3) = 5 iGfun(1) = 1, jGvar(1) = 2 iGfun(2) = 2, jGvar(2) = 1 iGfun(3) = 2, jGvar(3) = 2 iGfun(4) = 3, jGvar(4) = 1 iGfun(5) = 3, jGvar(5) = 2 Huom! G:tä ei ole pakko määritellä!
SNOPT - snOptA • Apufunktiot • Rajat ja G:n rakenne ennen snOptA:n kutsumista • F ja G lasketaan usrfun-rutiinissa • snInit: optimoijan alustus • snSpec: optioiden lukeminen tiedostosta • snJac: määrittelee J:n rakenteen automaattisesti • snMem: määrittelee työvektorien minimikoon • Ulostulona INFO, joka kertoo iteraation lopputuloksen
SNOPT - npOpt • Ongelman formaatti • Ratkaisuvektori x(n), kohdefunktio fObj • Lineaaristen rajoitteiden kerroinmatriisi A(nclin,n) • Epälineaariset rajoitteet fCon(ncnln) • Ala- ja ylärajat bl(n + nclin + ncnln), bu(n + nclin + ncnln) • Jakobin matriisi gCon(ncnln,n)
SNOPT – npOpt bl(1) = -bigbnd bu(1) = bigbnd bl(2) = 0 bu(2) = bigbnd bl(3) = -bigbnd bu(3) = 4 bl(4) = -bigbnd bu(4) = 5 fObj = x(2) gObj(1) = 0 gObj(2) = 1 fCon(1) = x(1)**2 + 4*x(2)**2 fCon(2) = (x(1) – 2)**2 + x(2)**2 gCon(1,1) = 2*x(1) gCon(1,2) = 8*x(2) gCon(2,1) = 2*(x(1) – 2) gCon(2,2) = 2*x(2) Huom! gObj:ia ja gCon:ia ei ole pakko määritellä!
SNOPT - npOpt • Apufunktiot • Rajat määriteltävä ennen npOpt:in kutsumista • fObj lasketaan funobj-rutiinissa • fCon ja gCon lasketaan funcon-rutiinissa • npInit: optimoijan alustus • npSpec: optioiden lukeminen tiedostosta • npMem: määrittelee työvektorien minimikoon • Ulostulona INFO, joka kertoo iteraation lopputuloksen
SNOPT - skaalaus • Skaalaus vaikuttaa algoritmin suorituskykyyn • Muuttujat, kohdefunktio ja rajoitteet ”samalle hehtaarille” • Esim. • Valitaan skaalauskertoimet esim. siten, että • Jos muuttujilla ala- ja ylärajat, niin esim.