Omezení: meze, projekce, penalizace
Skutečná úloha málokdy dovolí libovolné x. Kloub má dorazy, motor má maximální moment, tloušťka nesmí být záporná. Dvě omezení, která robotika potkává nejčastěji, jsou v solveru, a zbytek je vědomě vynechaný.
Meze na proměnné, a projekce
Nejjednodušší omezení je interval na každou proměnnou zvlášť. Řeší se tak, že se udělá obyčejný krok a pak se výsledek vrátí do boxu:
Tady je past, na kterou se naráží pokaždé. Konvergenci nelze posuzovat podle obyčejného gradientu: v bodě, který leží na mezi, gradient nemusí být nulový — tlačí do stěny a stěna tlačí zpět. Kdo čeká na ‖∇f‖ = 0, čeká navždy. Rozhoduje projektovaný gradient, kde se složky tlačící ven přes aktivní mez nulují.
Solver proto u každé proměnné hlásí, jestli je její mez aktivní. To je informace, kterou konstruktér chce vidět: „optimum leží na dorazu" znamená něco úplně jiného než „optimum leží uvnitř".
Penalizace, a proč je vždycky trochu mimo
Obecné omezení g(x) ≤ 0 se dá přidat do účelové funkce jako pokuta za porušení:
Funguje to, je to triviální na implementaci a má to jednu vlastnost, kterou je poctivé přiznat: výsledek je vždycky mírně nepřípustný. Minimum penalizované úlohy leží kousek za hranicí, protože právě tam se vyplatí vyměnit malou pokutu za větší pokles f. Porušení klesá s rostoucí váhou — a s rostoucí váhou se úloha zhoršuje v podmíněnosti. Je to obchod, ne řešení.
| váha w | co se stane |
|---|---|
| malá | omezení se skoro nedodrží, ale úloha je dobře podmíněná |
| velká | omezení téměř platí, ale úloha je špatně podmíněná a hůř se řeší |
| ∞ | teoreticky přesné, prakticky neřešitelné |
Testy v téhle labce právě tenhle kompromis měří: porušení musí s rostoucí vahou monotónně klesat, a přitom nikdy nesmí být přesně nula.
Co tady vědomě není
Podmínky KKT, aktivní množiny, vnitřní bod, SQP. Jsou to správné nástroje pro obecná omezení a patří do úlohy, která je má — ale postavit je pořádně by znamenalo další labku, ne kapitolu. Poslední kapitola to vypisuje jako díru.