Kvadratisk programmering ( engelsk quadratic programmering , QP ) er processen med at løse en speciel type optimeringsproblem , nemlig optimeringsproblemet (minimering eller maksimering) af en kvadratisk funktion af flere variable under lineære begrænsninger på disse variable. Kvadratisk programmering er et særligt tilfælde af ikke-lineær programmering .
Problemet med kvadratisk programmering med n variable og m begrænsninger kan formuleres som følger [1] .
Givet:
Målet med et kvadratisk programmeringsproblem er at finde en n - dimensional vektor x , dvs
minimerer | |
under forhold |
hvor x T angiver den transponerede vektor. Notationen A x ≤ b betyder, at ethvert element i vektoren A x ikke overstiger det tilsvarende element i vektoren b .
Et relateret programmeringsproblem, Quadratic Problem with Quadratic Constraints har kvadratiske begrænsninger på variabler.
Forskellige metoder bruges til fælles værdier, bl.a
I det tilfælde, hvor Q er positiv bestemt , er problemet et specialtilfælde af det mere generelle konvekse optimeringsproblem .
Problemet med kvadratisk programmering er noget enklere, hvis Q er positiv bestemt , og alle begrænsninger er ens (ingen uligheder), da det i dette tilfælde er muligt at reducere problemet til at løse et system af lineære ligninger. Hvis vi bruger Lagrange-multiplikatorer og leder efter ekstremum af Lagrangian, kan vi nemt vise, at løsningen på problemet
minimere | |
under forhold |
bestemmes af systemet af lineære ligninger
hvor er mængden af Lagrange-multiplikatorer, der vises sammen med løsningen .
Den nemmeste måde at løse dette system på er at løse det ved direkte metoder (for eksempel ved hjælp af LU-nedbrydning , hvilket er meget praktisk til små problemer). For store problemer opstår nogle usædvanlige vanskeligheder, mest bemærkelsesværdige, når problemet ikke er positivt bestemt (selvom positivt bestemt), hvilket gør det potentielt meget svært at finde en god matematisk tilgang, og der er mange problemafhængige tilgange. .
Hvis antallet af begrænsninger ikke er lig med antallet af variable, kan et relativt simpelt angreb forsøges ved at erstatte variablerne på en sådan måde, at begrænsningerne ubetinget er opfyldt. Lad os for eksempel sige, at (det er nemt nok at overføre til ikke-nul-værdier). Overvej begrænsningerne
Vi introducerer en ny vektor defineret af ligheden
hvor har dimensionen minus antallet af begrænsninger. Derefter
og hvis matrixen er valgt sådan , vil lighederne i begrænsningerne altid holde. At finde en matrix betyder at finde kernen af en matrix , hvilket er mere eller mindre nemt, afhængigt af matrixens struktur . Ved at indsætte den nye vektor i startbetingelserne får vi et kvadratisk problem uden begrænsninger:
og løsningen kan findes ved at løse ligningen
Under nogle restriktioner på den reducerede matrix vil den være positiv bestemt. Du kan skrive en variant af den konjugerede gradientmetode , hvor der ikke er behov for eksplicit at beregne matricen [5] .
Det dobbelte Lagrange-problem til kvadratisk programmering er også et kvadratisk programmeringsproblem. For at forstå dette, lad os dvæle ved tilfældet med en positiv bestemt matrix Q. Lad os udskrive Lagrange-multiplikatorerne for funktionen
Hvis vi definerer den (lagrangske) dobbeltfunktion som , leder vi efter en nedre grænse ved at bruge den positive bestemthed af matrixen Q:
Derfor er den dobbelte funktion lig med
og det dobbelte Lagrange-problem for det oprindelige problem er
minimere | |
under forhold | . |
Ud over Lagrange-dualitetsteorien er der andre dobbelte par af problemer (for eksempel Wolfe-dualitet ).
For en positiv bestemt matrix Q løser ellipsoidmetoden problemet i polynomisk tid [6] . Hvis Q på den anden side ikke er positiv bestemt, så bliver problemet NP-hårdt [7] . Faktisk, selvom Q har en enkelt negativ egenværdi , er problemet NP-hårdt [8] .
Navn | Beskrivelse |
---|---|
AIMMS | System til modellering og løsning af optimerings- og planlægningsproblemer |
ALGLIB | Programbibliotek (C++, .NET) til numerisk analyse med dobbelt licens (GPL/proprietær). |
AMPL | Et populært modelleringssprog til matematisk optimering i stor skala. |
APMonitor | Modellering og optimering for LP (lineær programmering), QP (kvadratisk programmering), NLP (ikke-lineær programmering), MILP (heltalsprogrammering), MINLP (blandet heltals ikke-lineær programmering) og DAE (Differential Algebraic Equations) problemer i MATLAB og Python. |
CGAL | En open source geometri computing-pakke, der inkluderer et system til løsning af kvadratiske programmeringsproblemer. |
CPLEX | Populært problemløsningssystem med API'er (C, C++, Java, .Net, Python, Matlab og R). Gratis til akademisk brug. |
Solution Finder i Excel | Et ikke-lineært problemløsningssystem tilpasset til regneark, hvor funktionsberegninger er baseret på værdien af celler. Basisversionen er tilgængelig som en standard tilføjelse til Excel. |
GAMS | Simuleringssystem på højt niveau til matematisk optimering |
Gurobi | Et system til løsning af problemer med parallelle algoritmer til store lineære programmeringsproblemer, kvadratiske programmeringsproblemer og blandede heltalsproblemer. Gratis til akademisk brug. |
IMSL | Et sæt matematiske og statistiske funktioner, som en programmør kan inkludere i sin ansøgning. |
IPOPT | IPOPT (Interior Point OPTimizer) pakken er en programmeringspakke til store ikke-lineære problemer. |
Artelys | Kommerciel integreret pakke til ikke-lineær optimering |
ahorn | Generelt programmeringssprog til matematik. Maple bruger QPSolve- kommandoen til at løse kvadratiske problemer Arkiveret 12. maj 2021 på Wayback Machine . |
MATLAB | Matrix-orienteret alment programmeringssprog til numeriske beregninger. For at løse kvadratiske programmeringsproblemer i MATLAB er tilføjelsen "Optimization Toolbox" ud over det grundlæggende MATLAB-produkt påkrævet |
Mathematica | Et generelt programmeringssprog til matematik, herunder symbolske og numeriske evner. |
MOSEK | System til løsning af store optimeringsproblemer, inkluderer API til flere sprog (C++, Java, .Net, Matlab og Python) |
NAG Numerical Library | Et sæt matematiske og statistiske procedurer udviklet af Numerical Algorithms Group til flere programmeringssprog (C, C++, Fortran, Visual Basic, Java og C#) og pakker (MATLAB, Excel, R, LabVIEW). Optimeringsdelen af NAG-biblioteket omfatter procedurer for kvadratiske programmeringsproblemer med sparsomme og tætte begrænsningsmatricer, samt procedurer til optimering af lineære og ikke-lineære funktioner, summer af kvadrater af lineære og ikke-lineære funktioner. NAG-biblioteket indeholder procedurer for både lokal og global optimering, samt for heltalsprogrammeringsproblemer. |
OptimJ | Et frit distribueret, Java-baseret optimeringsmodelleringssprog, der understøtter flere målbeslutningssystemer. Der er et plugin til Eclipse [9] [10] |
R | GPL -licenseret generel computerpakke på tværs af platforme (se afsnittet quadprog Arkiveret 19. juni 2017 på denne pakkes Wayback Machine ). Oversat til javascript Arkiveret 11. april 2017 på Wayback Machine under MIT-licensen . Oversat til C# Arkiveret 8. april 2015 på Wayback Machine under LGPL . |
SAS /ELLER | Et system til løsning af lineære, heltallige, kombinatoriske, ikke-lineære, ikke-differentierbare problemer, problemer på netværk og begrænset optimering. Algebraic Modeling Language OPTMODEL Arkiveret 8. september 2016 på Wayback Machine og en række vertikale løsninger rettet mod specifikke opgaver er fuldt integreret med |SAS/. |
Solver | Et system af matematisk modellering og problemløsning baseret på et deklarativt sprog baseret på produktionsregler. Systemet kommercialiseres af Universal Technical Systems, Inc. Arkiveret 1. april 2022 på Wayback Machine . |
TOMLAB | Understøtter global optimering, heltalsprogrammering, alle typer mindste kvadrater, lineær kvadratisk programmering til MATLAB . TOMLAB understøtter Gurobi, CPLEX , SNOPT og KNITRO løsningssystemer . |