3 Podmínky optimality - příklady
Nyní si na konkrétních příkladech ukážeme způsob testování optimality předem daného bodu. Pro jednoduchost začneme funkcí jedné proměnné, pokračovat budeme funkcí dvou proměnných.
3.1 Funkce jedné proměnné
Mějme následující funkci jedné proměnné:
(3.1)
|
Myslíme si, že tato funkce má minima v bodech x1 = -1, x2 = 0 a x3 = +1. Našim úkolem je ověřit, zda tomu
tak skutečně je.
Nejprve se zaměříme na podmínku stacionarity. Vypočteme první derivaci
funkce (3.1)
(3.2)
|
a
vyčíslíme její hodnotu v bodech x1,
x2 a x3. Zatímco v prvním a třetím bodě vychází
derivace nulová, v druhém bodě je hodnota první derivace -2. Zatímco v
bodech x1 a x3 je podmínka optimality prvního řádu
splněna, v bodě x2
splněna není, a tudíž minimum v něm určitě nebude.
V dalším kroku musíme ověřit, zda se v bodech x1 a x3
nachází minimum, maximum či inflexní bod. Musíme tedy vypočíst druhou
derivaci kriteriální funkce
(3.3)
|
a vyčíslit její hodnotu v bodech x1
a x3. V obou případech dostáváme hodnotu +802.
Kladná hodnota druhé derivace potvrzuje minimum v bodech x1 a x3.
O správnosti výpočtu se můžeme přesvědčit na obr. 3.1, na němž je
vykreslen průběh funkce (3.1) v okolí počátku souřadné osy. Z průběhu
je vidět, že v bodech x1
a x3 se nacházejí skutečně minima a že v malé
vzdálenosti od bodu x2
má funkce své lokální maximum.
3.2 Funkce dvou proměnných
Mějme následující funkci dvou proměnných:
(3.4)
|
Funkce (3.4) se nazývá Rosenbrockova funkce. Rosenbrockova funkce
má tvar banánovitého údolí se strmými srázy v jednom směru a s plochým
dnem ve směru druhém. To je z hlediska optimalizačních metod "vražedná
kombinace", a proto Rosenbrockovu funkci používáme k testování
vlastností optimalizačních metod. Průběh Rosenbrockovy funkce v okolí
počátku souřadného systému je nakreslen na obr. 3.2.
Našim úkolem je ověřit, zda se v bodě [1, 1] nachází minimum
Rosenbrockovy funkce.
Abychom mohli ověřit splnění podmínky optimality prvního řádu, musíme
vypočíst gradient funkce (3.4)
(3.5)
|
Dosadíme-li do (3.5) za x1 = 1 a za x2 = 1, vyjde hodnota obou složek gradientu nulová. Norma gradientu je tedy v bodě [1, 1] nulová, takže se v tomto bodě může nacházet minimum, maximum nebo sedlový bod. Abychom mohli rozhodnout o tom, která ze tří uvedených možností nastává, musíme vypočíst Hessovu matici
(3.6)
|
Dále dosadíme do (3.6) za x1 = 1 a za x2 = 1 a vypočteme v MATLABu pomocí funkce eig vlastní čísla hessiánu k1 = 1001,6 a k2 = 0,4. Obě vlastní čísla jsou kladná, hessián je pozitivně definitní a v bodě [1,1] se tedy nachází minimum Rosenbrockovy funkce.
3.3 Když neznáme derivace ...
Při
řešení praktických optimalizačních úloh jsme schopni analyticky
vypočíst hodnoty derivací v předpokládaném optimu spíše výjimečně.
Navrhujeme-li např. nějakou anténu, máme v počítači k dispozici její
numerický model, který pro dané rozměry a danou frekvenci vypočte
proudové rozložení na anténním vodiči nebo rozložení intenzity pole v
anténní apertuře. Numerický model v podstatě zobrazuje rozměry jako
stavové proměnné na elektrické veličiny jako posuzované parametry
optimalizačního problému. Analytické vyjádření kriteriální funkce
neznáme, a proto musíme gradient a hessián počítat numericky.
Numerický výpočet gradientu je založen na náhradě parciálních derivací
středovými diferencemi (obr. 3.3). Počítáme-li hodnotu první derivace
funkce v bodě x, počítáme směrnici červené tečny. Uděláme-li
úkrok h nad hodnotu x a úkrok h pod
hodnotu x, vytvoříme modrý pravoúhlý trojúhelník, jehož
přepona má směrnici blízkou směrnici tečny. Shoda obou směrnic bude tím
lepší, čím menší úkrok h zvolíme. Matematicky můžeme náhradu
derivace diferencí zapsat následovně:
(3.7)
|
Ze vztahu (3.7) však dále vyplývá, že délku úkroku nemůžeme
nepřiměřeně zkracovat. Při dělení velmi malým číslem totiž narůstá
numerická chyba výpočtu (3.7).
Počítáme-li pomocí středových diferencí druhou derivaci, postupujeme ve
dvou krocích:
- pomocí diferencí spočteme první derivace v bodech x-h
a x+h
(3.8)
|
- středovou direrencí z diferencí (3.8) vytvoříme odhad druhé derivace v bodě x.
Při středovém diferencování musíme pečlivě hlídat body, v nichž byl
odhad derivace vypočten.
Nyní si ukážeme popsaný postup na konkrétním příkladu. V matlabovském
souboru rosenbrock.m je uložena
Rosenbrockova funkce (3.4). Předpokládáme, že obsah souboru neznáme a
že jen umíme na základě hodnot x1
a x2 vypočíst funkční
hodnotu. Našim úkolem je opět zjistit, zda se v bodě [1,1] nachází
minimum Rosenbrockovy funkce či nikoli.
Začněme podmínkou stacionarity a pomocí středových diferencí vyjádřeme
složky gradientu cond01.m:
X2(1,1) = rosenbrock( [x(1,1);
x(2,1) + h]); g(1,1) = (X1(1,1) - X1(2,1)) /
(2*h); |
Při počítání první složky gradientu pracujeme jen s první proměnnou,
zatímco druhá souřadná proměnná zůstává konstantní. Při počítání druhé
složky postupujeme obdobně. Při délce úkroku h = 10-6 vycházejí hodnoty složek gradientu
menší než 10-10, při délce
úkroku h = 10-8
klesají hodnoty složek gradientu pod 10-13.
Lze tedy říci, že s klesající délkou úkroku h konverguje
norma gradientu k nule, a tudíž lze podmínku stacionarity považovat za
splněnou.
Nyní se tedy soustřeďme na podmínku optimality cond02.m:
h = 1e-8; X1(1,1) = rosenbrock( [x(1,1) + 2*h; x(2,1)]); f1 = (X1(1,1) - X1(2,1)) / (2*h); G(1,1) = (f1 - f2) / (2*h); X2(1,1) = rosenbrock( [x(1,1); x(2,1) + 2*h]); f1 = (X2(1,1) - X2(2,1)) / (2*h); G(2,2) = (f1 - f2) / (2*h); X3(1,1) = rosenbrock( [x(1,1) + h; x(2,1) + h]); G(1,2) = (X3(1,1) - X3(2,1) - X3(3,1) +
X3(4,1)) / (2*h)^2; g = eig( G); |
V prvních dvou blocích počítáme pomocí středových diferencí druhou
derivaci podle x1 a
druhou derivaci podle x2.
Dostáváme tak složky Hessovy matice G(1,1) a G(2,2). Výpočet odpovídá
výše popsanému postupu (viz vztah 3.8).
Prvky Hessovy matice G(1,2) a G(2,1) počítáme podle vztahu
(3.9)
|
Při volbě délky úkroku h = 10-8 získáme vlastní čísla hessiánu, která jsou totožná s analytickým výpočtem.