A másodfokú programozás ( angolul quadratic programming , QP ) egy speciális típusú optimalizálási probléma megoldásának folyamata, nevezetesen több változó másodfokú függvényének optimalizálási problémája (minimalizálása vagy maximalizálása) , ezekre a változókra vonatkozó lineáris megszorítások mellett. A kvadratikus programozás a nemlineáris programozás speciális esete .
Az n változós és m kényszerű másodfokú programozás problémája a következőképpen fogalmazható meg [1] .
Adott:
A másodfokú programozási feladat célja egy n -dimenziós x vektor megtalálása
minimalizálja | |
feltételek mellett |
ahol x T jelöli a transzponált vektort. Az A x ≤ b jelölés azt jelenti, hogy az A x vektor egyetlen eleme sem haladja meg a b vektor megfelelő elemét .
Egy kapcsolódó programozási probléma, a Quadratic Problem with Quadratic Constraints másodfokú kényszereket tartalmaz a változókra.
A közös értékekre különféle módszereket alkalmaznak, többek között
Abban az esetben, ha Q pozitív definit , a probléma az általánosabb konvex optimalizálási probléma speciális esete .
A másodfokú programozás problémája valamivel egyszerűbb, ha Q pozitív határozott és minden kényszer egyenlő (nincs egyenlőtlenség), mivel ebben az esetben a feladatot le lehet redukálni egy lineáris egyenletrendszer megoldására. Ha Lagrange-szorzókat használunk , és a Lagrange-féle szélsőértéket keressük, könnyen megmutathatjuk, hogy a probléma megoldása
minimalizálni | |
feltételek mellett |
lineáris egyenletrendszer határozza meg
ahol a megoldással együtt megjelenő Lagrange-szorzók halmaza .
Ezt a rendszert a legegyszerűbben direkt módszerekkel lehet megoldani (például LU dekompozíció használatával , ami nagyon kényelmes kis problémák esetén). Nagy problémák esetén szokatlan nehézségek merülnek fel, leginkább akkor, ha a probléma nem pozitív határozott (még akkor is, ha pozitív határozott), ami potenciálisan nagyon megnehezíti a jó matematikai megközelítés megtalálását, és sok problémafüggő megközelítés létezik. .
Ha a megszorítások száma nem egyenlő a változók számával, akkor egy viszonylag egyszerű támadást meg lehet próbálni a változók oly módon történő cseréjével, hogy a megszorítások feltétel nélkül teljesüljenek. Tegyük fel például, hogy (a nem nulla értékekre való átállás elég egyszerű). Vegye figyelembe a korlátozásokat
Bevezetünk egy új vektort , amelyet az egyenlőség határoz meg
ahol a dimenzió mínusz a kényszerek száma. Akkor
és ha a mátrixot úgy választjuk meg, hogy a megszorítások egyenlőségei mindig érvényben maradnak. A mátrix megtalálása azt jelenti, hogy megtaláljuk a mátrix magját , ami többé-kevésbé egyszerű, a mátrix szerkezetétől függően . Az új vektort a kezdeti feltételekbe behelyettesítve egy korlátok nélküli másodfokú feladatot kapunk:
a megoldást pedig az egyenlet megoldásával találhatjuk meg
A redukált mátrixra vonatkozó bizonyos korlátozások mellett pozitív határozott lesz. Megírhatja a konjugált gradiens módszer változatát , amelyben nincs szükség a mátrix explicit kiszámítására [5] .
A másodfokú programozás kettős Lagrange-problémája egyben másodfokú programozási probléma is. Ennek megértéséhez nézzünk meg egy Q pozitív határozott mátrixú esetet. Írjuk ki a függvény Lagrange-szorzóit
Ha a (Lagrange-féle) duális függvényt így definiáljuk , akkor a Q mátrix pozitív meghatározottságának felhasználásával alsó korlátot keresünk :
Ezért a kettős függvény egyenlő
és az eredeti probléma kettős Lagrange-problémája az
minimalizálni | |
feltételek mellett | . |
A Lagrange-dualitás-elmélet mellett más duális problémapárok is léteznek (például Wolfe dualitás ).
Pozitív határozott Q mátrix esetén az ellipszoid módszer polinomiális időben oldja meg a problémát [6] . Ha viszont Q nem pozitív határozott, akkor a probléma NP-nehéz lesz [7] . Valójában még akkor is, ha Q -nak egyetlen negatív sajátértéke van, a probléma NP-nehéz [8] .
Név | Leírás |
---|---|
CÉLKITŰZÉS | Optimalizációs és ütemezési problémák modellezésére és megoldására szolgáló rendszer |
ALGLIB | Programkönyvtár (C++, .NET) numerikus elemzéshez kettős licenccel (GPL/tulajdonos). |
AMPL | Népszerű modellező nyelv nagyszabású matematikai optimalizáláshoz. |
APMonitor | Modellezés és optimalizálás LP (lineáris programozás), QP (kvadratikus programozás), NLP (nemlineáris programozás), MILP (egészszámú programozás), MINLP (kevert egészszámú nemlineáris programozás) és DAE (differenciálalgebrai egyenletek) problémákhoz MATLAB és Piton. |
CGAL | Nyílt forráskódú geometriai számítástechnikai csomag, amely másodfokú programozási problémák megoldására szolgáló rendszert tartalmaz. |
CPLEX | Népszerű problémamegoldó rendszer API-kkal (C, C++, Java, .Net, Python, Matlab és R). Tanulmányi használatra ingyenes. |
Megoldáskereső Excelben | Táblázatokhoz adaptált nemlineáris problémamegoldó rendszer, amelyben a függvényszámítások a cellák értékén alapulnak. Az alapverzió az Excel szabványos kiegészítőjeként érhető el. |
GAMS | Magas szintű szimulációs rendszer a matematikai optimalizáláshoz |
Gurobi_ | Nagyméretű lineáris programozási feladatok, másodfokú programozási feladatok és vegyes egészszámú feladatok párhuzamos algoritmusokkal történő problémák megoldására szolgáló rendszer. Tanulmányi használatra ingyenes. |
IMSL_ | Matematikai és statisztikai függvények halmaza, amelyeket a programozó beépíthet az alkalmazásába. |
IPOPT | Az IPOPT (Interior Point OPTimizer) csomag egy programcsomag nagy nemlineáris problémákhoz. |
Artelys | Kereskedelmi integrált csomag nemlineáris optimalizáláshoz |
juharfa | Általános célú programozási nyelv matematikához. A Maple a QPSolve parancsot használja a kvadratikus problémák megoldására . Archiválva : 2021. május 12. a Wayback Machine -en . |
MATLAB | Mátrix-orientált általános célú programozási nyelv numerikus számításokhoz. A MATLAB másodfokú programozási problémáinak megoldásához az alap MATLAB terméken kívül szükség van az „Optimization Toolbox” kiegészítőre |
Mathematica | Általános célú programozási nyelv matematikához, szimbolikus és numerikus képességekkel. |
MOSEK_ | Rendszer nagyszabású optimalizálási problémák megoldására, API-t tartalmaz több nyelvhez (C++, Java, .Net, Matlab és Python) |
NAG Numerical Library | A Numerical Algorithms Group által kifejlesztett matematikai és statisztikai eljárások készlete több programozási nyelvhez (C, C++, Fortran, Visual Basic, Java és C#) és csomagokhoz (MATLAB, Excel, R, LabVIEW). A NAG-könyvtár optimalizálási szekciója másodfokú programozási problémákat tartalmaz ritka és sűrű kényszermátrixokkal, valamint eljárásokat lineáris és nemlineáris függvények, lineáris és nemlineáris függvények négyzetösszegei optimalizálására. A NAG könyvtár mind a lokális, mind a globális optimalizáláshoz, valamint az egész számok programozási problémáihoz tartalmaz eljárásokat. |
OptimJ_ | Egy szabadon terjesztett, Java alapú optimalizálási modellező nyelv, amely több céldöntési rendszert is támogat. Van egy bővítmény az Eclipse-hez [9] [10] |
R | GPL -licenccel rendelkező, általános célú, többplatformos számítástechnikai csomag (lásd a quadprog szakaszt, archiválva 2017. június 19-én a csomag Wayback Machine -jén ). Lefordítva javascriptre Archiválva 2017. április 11-én a Wayback Machine -nél az MIT licence alatt . Lefordítva C# nyelvre, archiválva 2015. április 8-án a Wayback Machine -nél LGPL alatt . |
SAS /VAGY | Lineáris, egészszámú, kombinatorikus, nemlineáris, nem differenciálható problémák, hálózatok problémáinak és kényszerű optimalizálásnak megoldására szolgáló rendszer. Algebrai modellező nyelv OPTMODEL Archiválva : 2016. szeptember 8. a Wayback Machine -nél , és számos konkrét feladatokat célzó vertikális megoldás teljes mértékben integrálva van a |SAS/ rendszerrel. |
Megoldó | Termelési szabályokon alapuló deklaratív nyelven alapuló matematikai modellezés és problémamegoldó rendszer. A rendszert a Universal Technical Systems, Inc. forgalmazza. Archiválva : 2022. április 1. a Wayback Machine -nél . |
TOMLAB | Támogatja a globális optimalizálást, az egész számok programozását, a legkisebb négyzetek minden típusát, a lineáris másodfokú programozást a MATLAB számára . A TOMLAB támogatja a Gurobi, CPLEX , SNOPT és KNITRO megoldási rendszereket . |