Používam fmincon v Matlab. Snažil som sa zistiť, čo znamená "constrviolation" pri spustení funkcie a volania výstupu. Keď sa dostanete nemožné riešenie alebo solver končí predčasne, dostanete nenulovú (& non-integer) constrviolation.
Vložil som obrazovku na odkaz.
Hľadal som dokumentáciu a hovorí toznamená "maximálne obmedzujúce funkcie" a nemám tušenie, čo to znamená. Nie je to celočíselné číslo, takže môj prvý odhad bol, že je percento obmedzení porušených (alebo spokojných).
Akákoľvek pomoc by bola ocenená.
odpovede:
0 pre odpoveď č. 1Len interpretácia daných dokumentov niektorí Optimalizácia-pozadia:
constrviolation
Maximum of constraint functions
Toto je len maximum všetkých chýb absolútnych obmedzení
Príklad:
x0 + x1 = 1
x0 + x1 + x2 = 2
Riešením je nejako:
x = [0.6, 0.5, 0.9]
Konstrviolation je:
max( abs( 0.6 + 0.5 - 1 ), abs( 0.6 + 0.5 + 0.9 - 2 ) ) = max( 0.1, 0 ) = 0.1
To je zlé a technicky znamená: vaše riešenie je nemožné! (má konvergovať na nulu, napríklad 1e-8)
Keďže riešiteľ nekončil veľmi elegantne, nedá vám skutočný stav o probléme (uskutočniteľný vs. nemožný).
Mohlo by byť cenné pridať: Algoritmy vnútorných bodov (ako sa tu používajú) by mohli (niektorí robia, niektorí nie sú) opakovať cez nemožné riešenia a len konečne konvergovať na uskutočniteľnú (ak existujúcu)!
Aj zlé:
firstorderopt
Measure of first-order optimality
Mali by sa zblížiť aj na nulu (napr. 1e-8)! Nie je dosiahnuté vo vašom príklade!
Teraz existuje veľa možných dôvodov, prečo sa to deje. Keďže ste neposkytli žiadny kód, môžeme len hádať (a nebudeme o ňom spokojní).
Pravdepodobne narazíte na niektoré iterácie ako limit MaxFunctionEvaluations
alebo MaxIterations
, Pomer funcCount
a iterations
vyzerajú ako numerické-diferenciácie, ktoré môžu tlačiť počet funkcií volá veľa!