Programarea pătratică ( English quadratic Programming , QP ) este procesul de rezolvare a unui tip special de problemă de optimizare , și anume, problema de optimizare (minimizarea sau maximizarea) a unei funcții pătratice a mai multor variabile sub constrângeri liniare asupra acestor variabile. Programarea pătratică este un caz special de programare neliniară .
Problema programării pătratice cu n variabile și m constrângeri poate fi formulată după cum urmează [1] .
Dat:
Scopul unei probleme de programare pătratică este de a găsi un vector n - dimensional x , adică
minimizează | |
in conditii |
unde x T desemnează vectorul transpus . Notația A x ≤ b înseamnă că orice element al vectorului A x nu depășește elementul corespunzător al vectorului b .
O problemă de programare înrudită, Problema cuadratică cu constrângeri cuadratice are constrângeri pătratice asupra variabilelor.
Pentru valorile comune se folosesc diverse metode, printre care
În cazul în care Q este definit pozitiv , problema este un caz special al problemei de optimizare convexă mai generală .
Problema programării pătratice este oarecum mai simplă dacă Q este definit pozitiv și toate constrângerile sunt egale (fără inegalități), deoarece în acest caz este posibil să se reducă problema la rezolvarea unui sistem de ecuații liniare. Dacă folosim multiplicatori Lagrange și căutăm extremul lui Lagrange, putem arăta cu ușurință că soluția problemei
minimiza | |
in conditii |
determinată de sistemul de ecuații liniare
unde este setul multiplicatorilor Lagrange care apar odata cu solutia .
Cel mai simplu mod de a rezolva acest sistem este de a-l rezolva prin metode directe (de exemplu, folosind descompunerea LU , care este foarte convenabilă pentru probleme mici). Pentru probleme mari, apar unele dificultăți neobișnuite, cele mai notabile atunci când problema nu este definită pozitivă (chiar dacă este definită pozitivă), ceea ce face, potențial, foarte dificilă găsirea unei abordări matematice bune și există multe abordări dependente de problemă. .
Dacă numărul de constrângeri nu este egal cu numărul de variabile, se poate încerca un atac relativ simplu prin înlocuirea variabilelor în așa fel încât constrângerile să fie satisfăcute necondiționat. De exemplu, să spunem că (trecerea la valori non-nule este destul de ușoară). Luați în considerare restricțiile
Introducem un nou vector definit de egalitate
unde are dimensiunea minus numărul de constrângeri. Apoi
iar dacă matricea este aleasă astfel încât , egalitățile din constrângeri vor fi întotdeauna valabile. Găsirea unei matrice înseamnă găsirea nucleului unei matrice , ceea ce este mai mult sau mai puțin ușoară, în funcție de structura matricei . Substituind noul vector în condițiile inițiale, obținem o problemă pătratică fără restricții:
iar soluția poate fi găsită prin rezolvarea ecuației
Sub unele restricții ale matricei reduse , aceasta va fi definitivă pozitivă. Puteți scrie o variantă a metodei gradientului conjugat , în care nu este nevoie să calculați în mod explicit matricea [5] .
Problema duală Lagrange pentru programarea pătratică este, de asemenea, o problemă de programare pătratică. Pentru a înțelege acest lucru, să ne oprim asupra cazului cu o matrice Q definită pozitivă. Să scriem multiplicatorii Lagrange ai funcției
Dacă definim funcția duală (lagrangiană) ca , căutăm o limită inferioară folosind definiția pozitivă a matricei Q:
Prin urmare, funcția duală este egală cu
iar problema duală Lagrange pentru problema originală este
minimiza | |
in conditii | . |
Pe lângă teoria dualității Lagrange, există și alte perechi duale de probleme (de exemplu, dualitatea Wolfe ).
Pentru o matrice definită pozitivă Q , metoda elipsoidală rezolvă problema în timp polinomial [6] . Dacă, pe de altă parte, Q nu este definit pozitiv, atunci problema devine NP-hard [7] . De fapt, chiar dacă Q are o singură valoare proprie negativă , problema este NP-hard [8] .
Nume | Descriere |
---|---|
AIMMS | Sistem de modelare si rezolvare a problemelor de optimizare si programare |
ALGLIB | Bibliotecă de programe (C++, .NET) pentru analiză numerică cu licență duală (GPL/proprietar). |
AMPL | Un limbaj de modelare popular pentru optimizarea matematică la scară largă. |
APMonitor | Modelare și optimizare pentru probleme LP (Programare liniară), QP (Programare cuadratică), NLP (Programare neliniară), MILP (programare întregi), MINLP (programare neliniară cu întregi mixte) și DAE (Ecuații algebrice diferențiale) în MATLAB și Piton. |
CGAL | Un pachet de calcul cu geometrie open source care include un sistem pentru rezolvarea problemelor de programare pătratică. |
CPLEX | Sistem popular de rezolvare a problemelor cu API-uri (C, C++, Java, .Net, Python, Matlab și R). Gratuit pentru uz academic. |
Găsitor de soluții în Excel | Un sistem neliniar de rezolvare a problemelor adaptat pentru foi de calcul, în care calculele funcțiilor se bazează pe valoarea celulelor. Versiunea de bază este disponibilă ca supliment standard pentru Excel. |
GAMS | Sistem de simulare la nivel înalt pentru optimizare matematică |
Gurobi | Un sistem pentru rezolvarea problemelor cu algoritmi paraleli pentru probleme de programare liniară la scară largă, probleme de programare pătratică și probleme cu numere întregi mixte. Gratuit pentru uz academic. |
IMSL | Un set de funcții matematice și statistice pe care un programator le poate include în aplicația sa. |
IPOPT | Pachetul IPOPT (Interior Point OPTimizer) este un pachet de programare pentru probleme mari neliniare. |
Artelys | Pachet integrat comercial pentru optimizare neliniară |
arțar | Limbajul de programare de uz general pentru matematică. Maple folosește comanda QPSolve pentru a rezolva probleme pătratice Arhivat 12 mai 2021 la Wayback Machine . |
MATLAB | Limbajul de programare de uz general orientat pe matrice pentru calcule numerice. Pentru a rezolva problemele de programare pătratică în MATLAB, în plus față de produsul de bază MATLAB, este necesar add-on-ul „Optimization Toolbox” |
Mathematica | Un limbaj de programare de uz general pentru matematică, inclusiv capabilități simbolice și numerice. |
MOSEK | Sistem pentru rezolvarea problemelor de optimizare la scară largă, include API pentru mai multe limbi (C++, Java, .Net, Matlab și Python) |
Biblioteca numerică NAG | Un set de proceduri matematice și statistice dezvoltate de Numerical Algorithms Group pentru mai multe limbaje de programare (C, C++, Fortran, Visual Basic, Java și C#) și pachete (MATLAB, Excel, R, LabVIEW). Secțiunea de optimizare a bibliotecii NAG include proceduri pentru probleme de programare pătratică cu matrici de constrângeri rare și dense, precum și proceduri pentru optimizarea funcțiilor liniare și neliniare, sume de pătrate ale funcțiilor liniare și neliniare. Biblioteca NAG conține proceduri atât pentru optimizarea locală, cât și globală, precum și pentru problemele de programare cu numere întregi. |
OptimJ | Un limbaj de modelare de optimizare, distribuit gratuit, bazat pe Java, care acceptă mai multe sisteme de decizie țintă. Există un plugin pentru Eclipse [9] [10] |
R | Pachetul de calcul multiplatform cu licență GPL (vezi secțiunea quadprog Arhivat la 19 iunie 2017 pe Wayback Machine a acestui pachet). Tradus în javascript Arhivat 11 aprilie 2017 la Wayback Machine sub licență MIT . Tradus în C# Arhivat 8 aprilie 2015 la Wayback Machine sub LGPL . |
SAS /OR | Un sistem pentru rezolvarea problemelor liniare, întregi, combinatorii, neliniare, nediferențiabile, probleme pe rețele și optimizare constrânsă. Limbajul de modelare algebrică OPTMODEL Arhivat pe 8 septembrie 2016 la Wayback Machine și o serie de soluții verticale care vizează sarcini specifice sunt complet integrate cu |SAS/. |
Solver | Un sistem de modelare matematică și rezolvare de probleme bazat pe un limbaj declarativ bazat pe reguli de producție. Sistemul este comercializat de Universal Technical Systems, Inc. Arhivat la 1 aprilie 2022 la Wayback Machine . |
TOMLAB | Suportă optimizare globală, programare cu numere întregi, toate tipurile de cele mai mici pătrate, programare liniară pătratică pentru MATLAB . TOMLAB acceptă sistemele de soluții Gurobi, CPLEX , SNOPT și KNITRO . |