QP_OASES – Kvadratické programování pomocí metody aktivní množiny

Symbol blokuPotřebná licence: ADVANCED
Qt SVG Document Exported by REXYGEN Studio uQP uH uG uA uLB uUB uLBA uUBA uXopt uYopt unWSR utime VAR INIT HLD yQP yH yG yA yLB yUB yLBA yUBA yXopt yYopt ynWSR ytime objval E iE QP_OASES

Popis funkce
Blok QP_OASES řeší kvadratický program pomocí metody aktivní množiny [13]:

minxnV 1 2xT Hx + xT G, s. t. lbA Ax ubA, lb x ub,

kde nV je počet proměnných, nC je počet omezení, Hessova matice H nV×nV je symetrická a pozitivně (semi-)definitní, vektor gradientu G nV, matice omezení A nC×nV, vektory omezujících hodnot lb,ub nV a vektory omezujících hodnot lbA,ubA RnC.

Blok obaluje knihovnu qpOASES (qpOASES, která je distribuována pod licencí GNU Lesser General Public License, viz Příloha A k [14].), jejíž použití je popsáno v manuálu [14].

Výstupní reference yH, yG, yA, yLB, yUB, yLBA, yUBA, yXopt a yYopt jsou vždy nastaveny na odpovídající vstup uH, uG, uA, uLB, uUB, uLBA, uUBA, uXopt a uYopt. Pokud není připojeno uQP, konkrétní kvadratický problém (QP) je alokován při prvním spuštění funkčního bloku (viz níže) a výstup yQP je nastaven na referenci alokovaného QP. Pokud je uQP připojeno (na výstup yQP předchozího bloku QP_OASES), výstup yQP je nastaven na uQP a blok pracuje s již alokovaným QP.

Blok používá interní proměnné nV a nC. Hodnota nV je nastavena na počet řádků vektoru G referencovaného uG, hodnota nV je nastavena na počet řádků matice A referencované uA. Pokud reference uA není definována (matice A není připojena), hodnota nC = 0.

Pro řešení QP problému je v obecném případě vytvořen objekt QProblem (viz Kapitola 3 [14]). Blok může také řešit následující speciální případy v závislosti na vstupních referencích a parametru hessianType:

uH není připojeno.
V tomto případě se předpokládá, že Hessova matice má triviální hodnotu identitní nebo nulovou matici. Parametr hessianType musí být roven HST_ZERO nebo HST_IDENTITY, viz Sekce 4.5 manuálu [14].
uA není připojeno.
V tomto případě se matice omezení A nepoužívá (nC = 0), je vytvořen objekt QProblemB, viz Sekce 4.3 manuálu [14]. Parametr hessianType může být libovolná povolená hodnota.
VAR = on.
Pokud je vstup VAR = on během prvního spuštění bloku, je vytvořen objekt třídy SQProblem, viz Sekce 4.2 manuálu [14]. V tomto případě mohou všechny vstupní matice a vektory měnit v každém kroku provedení, když VAR = on.

Pro získání řešení QP problému musí být alespoň jedna z vstupních referencí uXopt a uYopt definována (připojena k vektoru). Pokud je připojeno k uXopt, výstup yXopt bude odkazovat na primární řešení Xopt nV, pokud je připojeno k uYopt, výstup yYopt bude odkazovat na duální řešení Yopt nV+nC QP problému. Pokud jsou oba vstupy připojeny, obě řešení budou získána v každém kroku. Optimální hodnota objektivní funkce je uvedena na výstupu objval.

Celočíselný vstup unWSR určuje maximální počet rekalkulací pracovní sady, které mají být provedeny během počáteční homotopie, viz Sekce 3.2 manuálu [14]. Výstup ynWSR obsahuje skutečný počet provedených rekalkulací pracovní sady. Pokud je připojen dvojitý vstup utime a má kladnou hodnotu, obsahuje maximální povolený čas CPU v sekundách pro celou inicializaci. Skutečný požadovaný čas CPU pro inicializaci je uveden na výstupu ytime.

Alespoň jeden vektor musí být připojen k vstupu uXopt nebo uYopt a oba musí být připojeny k získání řešení QP problému. Pokud je připojeno uXopt, výstup yXopt bude odkazovat na primární řešení Xopt, pokud je připojeno uYopt, výstup yYopt bude odkazovat na duální řešení Yopt úlohy QP. Pokud jsou oba vstupy připojeny, obě řešení budou získána v každém kroku.

Pokud je vstup INIT = on, pak je konkrétní alokovaný QP problém znovu inicializován. INIT by mělo být on po dobu jediného období (hrany), protože během inicializace QP není vypočteno žádné řešení. Pokud je HLD = on, pak se nic nepočítá.

Chybový příznak E je nastaven na on a chybový kód iE je nastaven na nulu, pokud:

  • reference uG nebo uLB nebo uUB není definována (tj. vstup uG nebo uLB nebo uUB není připojen),
  • reference uA je definována a uLBA nebo uUBA není definována (tj. vstup uA je připojen a uLBA nebo uUBA není připojena),
  • obě reference uXopt a uYopt nejsou definovány (tj. není připojen žádný z vstupů uXopt a uYopt),
  • Hessova matice H referencovaná uH má odlišný počet řádků a sloupců než nV,
  • počet řádků vektorů referencovaných uLB a uUB není roven nV (nebo počet jejich sloupců není roven 1),
  • počet řádků vektorů referencovaných uLBA a uUBA není roven nC (nebo počet jejich sloupců není roven 1) pokud je matice A referencovaná uA připojena,
  • počet řádků vektoru referencovaného uXopt není roven nV nebo počet řádků vektoru referencovaného yOpt není roven nV+nC (nebo počet jejich sloupců není roven 1),
  • interní prostor pro transponované kopie matic H nebo A je příliš malý.

Pokud je příznak E nastaven na on a chybový kód iE není nula, pak iE označuje chybový kód qpOASES, viz soubor MessageHandling.hpp z knihovny qpOASES.

Tento blok nepropaguje kvalitu signálu. Více informací je uvedeno v sekci 1.4.

Vstup

uQP

Vstupní odkaz na úlohu kvadratického programování

Reference

uH

Vstupní odkaz na Hessovu matici H

Reference

uG

Vstupní odkaz na gradientní vektor G

Reference

uA

Vstupní odkaz na matici omezení A

Reference

uLB

Vstupní odkaz na vektor dolních mezí LB

Reference

uUB

Vstupní odkaz na vektor horních mezí UB

Reference

uLBA

Vstupní odkaz na vektor dolních mezí LBA omezujících podmínek

Reference

uUBA

Vstupní odkaz na vektor horních mezí UBA omezujících podmínek

Reference

uXopt

Vstupní odkaz na vektor prvotního optimálního řešení

Reference

uYopt

Vstupní odkaz na vektor duálního optimálního řešení

Reference

unWSR

Maximální počet výpočtů pracovní množiny během inicializace

Long (I32)

utime

Maximální dovolený čas CPU v sekundách pro celou inicializaci

Double (F64)

VAR

Příznak časové variantnosti matic H a A

Bool

INIT

Při každém spuštění bloku volá funkci init() místo hotstart()

Bool

HLD

Pozastavení

Bool

Parametr

nVmax

Maximální počet optimalizačních proměnných nV

Long (I32)

nCmax

Maximální počet optimalizačních omezujících podmínek nC

Long (I32)

hessianType

Typ Hessovy matice

Long (I32)

printLevel

Úroveň výpisů

Long (I32)

enableRamping

Povolit tzv. rampování

Bool

enableFarBounds

Povolit použití tzv. dalekých mezí

Bool

enableFlippingBounds

Povolit používání tzv. převrácených mezí (flipping bounds)

Bool

enableRegularisation

Povolit regularizaci semidefinitní Hessovy matice

Bool

enableFullLITests

Povolit použití tvrdších testů lineární nezávislosti

Bool

enableNZCTests

Povolit testy nenulového zakřivení

Bool

enableDriftCorrection

Korekce frekvence nebo driftu (0 = off)

Long (I32)

enableCholeskyRefact

Frekvence plné refaktorizace projektovaného Hessiánu (0 = off)

Long (I32)

enableEqualities

Rovnosti se vždy považují za aktivní omezení

Bool

terminationTolerance

Ukončovací tolerance

Double (F64)

boundTolerance

Pokud se horní a spodní meze liší méně než o tuto toleranci, jsou považovány za shodné, tj. za podmínku s rovností

Double (F64)

boundRelaxation

Počáteční relaxace mezí pro startovací homotopii a počáteční hodnota dalekých mezí

Double (F64)

epsNum

Tolerance čitatele pro poměrové testy

Double (F64)

epsDen

Tolerance jmenovatele pro poměrové testy

Double (F64)

maxPrimalJump

Maximálně povolený skok v primálních proměnných pro testy lineární nezávislosti

Double (F64)

maxDualJump

Maximálně povolený skok v duálních proměnných pro testy lineární nezávislosti

Double (F64)

initialRamping

Počáteční hodnota pro strategii rampování

Double (F64)

finalRamping

Koncová hodnota pro strategii rampování

Double (F64)

initialFarBounds

Počáteční velikost dalekých mezí

Double (F64)

growFarBounds

Faktor zvětšování dalekých mezí

Double (F64)

initialStatusBounds

Počáteční stav mezí v první iteraci

Long (I32)

epsFlipping

Tolerance kvadrátu prvku na Choleského diagonále, která aktivuje tzv. převrácené meze (flipping bounds)

Double (F64)

numRegularisationSteps

Maximální počet po sobě jdoucích regularizačních kroků

Long (I32)

epsRegularisation

Měřítkovací faktor identické matice použitý pro regularizaci Hessiánu

Double (F64)

numRefinementSteps

Maximální počet kroků pro iteračních upřesnění

Long (I32)

epsIterRef

Tolerance předčasného ukončení pro iterativní upřesnění

Double (F64)

epsLITests

Tolerance pro testy lineární nezávislosti

Double (F64)

epsNZCTests

Tolerance pro testy nenulového zakřivení

Double (F64)

Výstup

yQP

Výstupní odkaz na úlohu kvadratického programování

Reference

yH

Výstupní odkaz na Hessovu matici H

Reference

yG

Výstupní odkaz na gradientní vektor G

Reference

yA

Výstupní odkaz na matici omezení A

Reference

yLB

Výstupní odkaz na vektor dolních mezí LB

Reference

yUB

Výstupní odkaz na vektor horních mezí UB

Reference

yLBA

Výstupní odkaz na vektor dolních mezí LBA omezujících podmínek

Reference

yUBA

Výstupní odkaz na vektor horních mezí UBA omezujících podmínek

Reference

yXopt

Výstupní odkaz na vektor prvotního optimálního řešení

Reference

yYopt

Výstupní odkaz na vektor duálního optimálního řešení

Reference

ynWSR

Skutečný počet výpočtů pracovní množiny během inicializace

Long (I32)

ytime

Spotřebovaný čas CPU v sekundách pro celou inicializaci

Double (F64)

objval

Optimální hodnota účelové funkce

Double (F64)

E

Příznak chyby

Bool

iE

Kód chyby

Long (I32)

2024 © REX Controls s.r.o., www.rexygen.com