Kvadratisk programmering

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 .

Problemformulering

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 xb 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.

Løsningsmetoder

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 .

Begrænsninger - ligheder

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] .

Lagrangiansk dualitet

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 ).

Sværhedsgrad

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] .

Løsningspakker og scriptsprog

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 .

Se også

Noter

  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 og Vavasis, 1991 , s. 15-22.
  9. Zesch, Hellingrath, 2010 .
  10. Burkov, Chaibdraa, 2010 .

Litteratur

Links