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 .
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 x ≤ b 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.
Yhteisille arvoille käytetään erilaisia menetelmiä mm
Siinä tapauksessa, että Q on positiivinen definiitti , ongelma on yleisemmän konveksin optimointitehtävän erikoistapaus .
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] .
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 ).
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] .
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ä . |