Neliöllinen ohjelmointi

Neliöllinen ohjelmointi ( englanniksi  quadratic programming , QP ) on prosessi, jossa ratkaistaan ​​erityinen optimointiongelma , nimittäin useiden muuttujien neliöfunktion optimointiongelma (minimointi tai maksimointi) näiden muuttujien lineaaristen rajoitusten alaisena . Neliöllinen ohjelmointi on epälineaarisen ohjelmoinnin erikoistapaus .

Ongelman kuvaus

Neliöllisen ohjelmoinnin ongelma n muuttujan ja m rajoitteen kanssa voidaan muotoilla seuraavasti [1] .

Annettu:

Neliöllisen ohjelmointitehtävän tavoitteena on löytää n - ulotteinen vektori x , joka on

minimoi
olosuhteissa

missä x T tarkoittaa transponoitua vektoria. Merkintä A xb tarkoittaa, että mikään vektorin A x alkio ei ylitä vektorin b vastaavaa alkiota .

Asiaan liittyvä ohjelmointiongelma, Quadratic Problem with Quadratic Constraints sisältää neliötason rajoituksia muuttujille.

Ratkaisumenetelmät

Yhteisille arvoille käytetään erilaisia ​​menetelmiä mm

Siinä tapauksessa, että Q on positiivinen definiitti , ongelma on yleisemmän konveksin optimointitehtävän erikoistapaus .

Rajoitukset - yhtäläisyydet

Neliöllisen ohjelmoinnin ongelma on hieman yksinkertaisempi, jos Q ​​on positiivinen määrätty ja kaikki rajoitukset ovat yhtä suuret (ei epäyhtälöjä), koska tässä tapauksessa on mahdollista pelkistää ongelma lineaarisen yhtälöjärjestelmän ratkaisemiseksi. Jos käytämme Lagrangen kertoimia ja etsimme Lagrangenin ääripäätä, voimme helposti osoittaa, että ongelman ratkaisu

minimoida
olosuhteissa

määritetään lineaarisen yhtälöjärjestelmän avulla

missä on ratkaisun mukana ilmestyvien Lagrange-kertoimien joukko .

Helpoin tapa ratkaista tämä järjestelmä on ratkaista se suorilla menetelmillä (esimerkiksi käyttämällä LU-hajoamista , joka on erittäin kätevä pienille ongelmille). Suurissa ongelmissa esiintyy epätavallisia vaikeuksia, jotka ovat merkittävimpiä silloin, kun ongelma ei ole positiivinen (vaikka se olisi positiivinen), mikä tekee hyvän matemaattisen lähestymistavan löytämisen mahdollisesti erittäin vaikeaksi, ja ongelmariippuvaisia ​​lähestymistapoja on monia. .

Jos rajoitusten määrä ei ole yhtä suuri kuin muuttujien lukumäärä, voidaan kokeilla suhteellisen yksinkertaista hyökkäystä korvaamalla muuttujat siten, että rajoitukset täyttyvät ehdoitta. Oletetaan esimerkiksi, että (ei-nolla-arvoihin siirtyminen on tarpeeksi helppoa). Harkitse rajoituksia

Esittelemme uuden tasa-arvon määrittelemän vektorin

missä on ulottuvuus miinus rajoitusten määrä. Sitten

ja jos matriisi valitaan niin, että , yhtäläisyydet rajoituksissa pysyvät aina. Matriisin löytäminen tarkoittaa matriisin ytimen löytämistä , mikä on enemmän tai vähemmän helppoa matriisin rakenteesta riippuen . Korvaamalla uuden vektorin alkuehtoihin, saadaan neliöllinen ongelma ilman rajoituksia:

ja ratkaisu löytyy ratkaisemalla yhtälö

Joillakin pelkistetyn matriisin rajoituksilla se on positiivinen. Voit kirjoittaa muunnelman konjugaattigradienttimenetelmästä , jossa matriisia ei tarvitse erikseen laskea [5] .

Lagrangian kaksinaisuus

Kaksois -Lagrange-tehtävä neliöllisen ohjelmoinnin yhteydessä on myös neliöllisen ohjelmoinnin ongelma. Tämän ymmärtämiseksi tarkastellaan tapausta positiivisen määrätyn matriisin Q kanssa. Kirjoitetaan funktion Lagrange-kertoimet

Jos määritämme (Lagrangin) kaksoisfunktion muodossa , etsimme alarajaa käyttämällä matriisin Q positiivista määritystä:

Siksi kaksoisfunktio on yhtä suuri kuin

ja alkuperäisen ongelman kaksois-Lagrangen ongelma on

minimoida
olosuhteissa .

Lagrangen duaalisuusteorian lisäksi on olemassa muita ongelmapareja (esim. Wolfe duality ).

Vaikeus

Positiiviselle määrätylle matriisille Q ellipsoidimenetelmä ratkaisee ongelman polynomiajassa [6] . Jos toisaalta Q ei ole positiivinen definiitti, niin ongelmasta tulee NP-kova [7] . Itse asiassa, vaikka Q :lla olisi yksi negatiivinen ominaisarvo , ongelma on NP-kova [8] .

Ratkaisupaketit ja komentosarjakielet

Nimi Kuvaus
AIMMS Järjestelmä optimointi- ja aikataulutusongelmien mallintamiseen ja ratkaisemiseen
ALGLIB Ohjelmakirjasto (C++, .NET) numeerista analyysiä varten kaksoislisensoinnilla (GPL/omistettu).
AMPL Suosittu mallinnuskieli laajamittaiseen matemaattiseen optimointiin.
APMonitor Mallintaminen ja optimointi LP (Lineaarinen ohjelmointi), QP (Kvadraattinen ohjelmointi), NLP (Epälineaarinen Ohjelmointi), MILP (Integer Programming), MINLP (Mixed Integer Nonlinear Programming) ja DAE (differentiaalialgebralliset yhtälöt) -ongelmille MATLABissa ja Python.
CGAL Avoimen lähdekoodin geometrialaskentapaketti, joka sisältää järjestelmän neliöllisen ohjelmoinnin ongelmien ratkaisemiseen.
CPLEX Suosittu ongelmanratkaisujärjestelmä API:illa (C, C++, Java, .Net, Python, Matlab ja R). Ilmainen akateemiseen käyttöön.
Ratkaisuhaku Excelissä Laskentataulukoihin sovitettu epälineaarinen ongelmanratkaisujärjestelmä, jossa funktiolaskelmat perustuvat solujen arvoon. Perusversio on saatavana Excelin vakiolisäosana.
GAMS Korkean tason simulointijärjestelmä matemaattiseen optimointiin
Gurobi_ Järjestelmä ongelmien ratkaisemiseen rinnakkaisilla algoritmeilla suurissa lineaarisissa ohjelmointitehtävissä, neliöllisen ohjelmoinnin tehtävissä ja sekakokonaislukutehtävissä. Ilmainen akateemiseen käyttöön.
IMSL_ Joukko matemaattisia ja tilastollisia toimintoja, jotka ohjelmoija voi sisällyttää sovellukseensa.
IPOPT IPOPT (Interior Point OPTimizer) -paketti on ohjelmointipaketti suuriin epälineaarisiin ongelmiin.
Artelys Kaupallinen integroitu paketti epälineaariseen optimointiin
vaahtera Yleiskäyttöinen ohjelmointikieli matematiikan tarpeisiin. Maple käyttää QPSolve- komentoa kvadraattisten ongelmien ratkaisemiseen . Arkistoitu 12. toukokuuta 2021 Wayback Machinessa .
MATLAB Matriisisuuntautunut yleiskäyttöinen ohjelmointikieli numeerisia laskelmia varten. Kvadraattisten ohjelmointiongelmien ratkaisemiseksi MATLABissa tarvitaan MATLAB-perustuotteen lisäksi "Optimization Toolbox" -lisäosa.
Mathematica Yleiskäyttöinen matematiikan ohjelmointikieli, joka sisältää symbolisia ja numeerisia ominaisuuksia.
MOSEK Järjestelmä laajamittaisten optimointiongelmien ratkaisemiseen, sisältää API useille kielille (C++, Java, .Net, Matlab ja Python)
NAG Numerical Library Numerical Algorithms Groupin kehittämä matemaattisten ja tilastollisten menettelyjen sarja useille ohjelmointikielille (C, C++, Fortran, Visual Basic, Java ja C#) ja paketeille (MATLAB, Excel, R, LabVIEW). NAG-kirjaston optimointiosio sisältää proseduurit toisen asteen ohjelmointiongelmiin, joissa on harvat ja tiheät rajoitematriisit, sekä menettelyt lineaaristen ja epälineaaristen funktioiden, lineaaristen ja epälineaaristen funktioiden neliösumman optimoimiseksi. NAG-kirjasto sisältää menettelyjä sekä paikallista että globaalia optimointia varten sekä kokonaislukuohjelmointiongelmia.
OptimJ_ Vapaasti jaettu Java-pohjainen optimointimallinnuskieli, joka tukee useita kohdepäätösjärjestelmiä. Eclipselle on lisäosa [9] [10]
R GPL -lisensoitu yleiskäyttöinen cross-platform laskentapaketti (katso osa quadprog Arkistoitu 19. kesäkuuta 2017 tämän paketin Wayback Machinessa ). Käännetty javascriptiksi Arkistoitu 11. huhtikuuta 2017 Wayback Machinessa MIT -lisenssillä . Käännetty C#: ksi Arkistoitu 8. huhtikuuta 2015 Wayback Machinessa LGPL :n alla .
SAS /TAI Järjestelmä lineaaristen, kokonaislukujen, kombinatoristen, epälineaaristen, ei-differentoivien ongelmien, verkkoongelmien ja rajoitetun optimoinnin ratkaisemiseen. Algebrallinen mallinnuskieli OPTMODEL Arkistoitu 8. syyskuuta 2016 Wayback Machinessa , ja joukko tiettyihin tehtäviin tarkoitettuja vertikaalisia ratkaisuja on täysin integroitu |SAS/:n kanssa.
Ratkaisija Matemaattisen mallinnuksen ja ongelmanratkaisun järjestelmä, joka perustuu tuotantosääntöihin perustuvaan deklaratiiviseen kieleen. Järjestelmän kaupallistaa Universal Technical Systems, Inc. Arkistoitu 1. huhtikuuta 2022 Wayback Machinessa .
TOMLAB Tukee maailmanlaajuista optimointia, kokonaislukuohjelmointia, kaikentyyppisiä pienimmän neliösumman laskentaa, lineaarista neliöllistä ohjelmointia MATLABille . TOMLAB tukee Gurobi-, CPLEX- , SNOPT- [ - ja KNITRO- ratkaisujärjestelmiä .

Katso myös

Muistiinpanot

  1. Nocedal, Wright, 2006 , s. 449.
  2. 1 2 Murty, 1988 , s. xlviii+629.
  3. Delbos, Gilbert, 2005 , s. 45–69.
  4. Künzi, Crelle, 1965 , s. 161-179.
  5. Gould, Hribar, Nocedal, 2001 , s. 1376-1395
  6. Kozlov, Tarasov, Khachiyan, 1980 , s. 1049–1051.
  7. Sahni, 1974 , s. 262-279.
  8. Pardalos ja Vavasis, 1991 , s. 15–22.
  9. Zesch, Hellingrath, 2010 .
  10. Burkov, Chaibdraa, 2010 .

Kirjallisuus

Linkit