QP_OASES – Kvadratické programování pomocí metody aktivní množiny
Symbol blokuPotřebná licence: ADVANCED
Popis funkce
Blok QP_OASES řeší kvadratický program pomocí metody aktivní množiny
[13]:
kde je počet proměnných, je počet omezení, Hessova matice je symetrická a pozitivně (semi-)definitní, vektor gradientu , matice omezení , vektory omezujících hodnot a vektory omezujících hodnot .
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 referencovaného uG, hodnota nV je nastavena na počet řádků matice referencované uA. Pokud reference uA není definována (matice 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í 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í , pokud je připojeno k uYopt, výstup yYopt bude odkazovat na duální řešení 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 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 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 nebo 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) |
[Předchozí] [Na začátek] [Výše] [Další]
2024 © REX Controls s.r.o., www.rexygen.com