MO Moduł 5: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian |
m Zastępowanie tekstu – „<math> ” na „<math>” |
||
(Nie pokazano 3 wersji utworzonych przez 2 użytkowników) | |||
Linia 15: | Linia 15: | ||
|valign="top"|Powróćmy do naszych rozważań z części drugiej wykładu trzeciego. | |valign="top"|Powróćmy do naszych rozważań z części drugiej wykładu trzeciego. | ||
Jak pamiętamy, Algorytm jest ślepy — nie może zobaczyć rzeźby trenu na którym się znajduje. | Jak pamiętamy, Algorytm jest ślepy — nie może zobaczyć rzeźby trenu na którym się znajduje. | ||
Na schodach szedł w prawo, potem w lewo — sprawdzał swoje otoczenie. Teraz otoczenie ma więcej wymiarów, ale pomysł może być ten sam — '''sprawdzać''' zachowanie funkcji wyboru w sąsiedztwie punktu <math>x</math>, w którym się aktualnie znajduje. | Na schodach szedł w prawo, potem w lewo — sprawdzał swoje otoczenie. Teraz otoczenie ma więcej wymiarów, ale pomysł może być ten sam — '''sprawdzać''' zachowanie funkcji wyboru '''w sąsiedztwie punktu''' <math>\boldsymbol{x}</math>, w którym się aktualnie znajduje. | ||
Natychmiast pojawia się pytanie — '''jak duże powinno być to sąsiedztwo?''' | Natychmiast pojawia się pytanie — '''jak duże powinno być to sąsiedztwo?''' | ||
Udzielenie przemyślanej odpowiedzi nie jest zagadnieniem łatwym, ponieważ wielkość przeszukiwanego obszaru ma, intuicyjnie, wpływ, z jednej strony na szybkość znalezienia ekstremum mierzoną ilością sprawdzanych obszarów (im większy tym szybciej), a z drugiej na dokładność Algorytmu (przy ograniczonych możliwościach przeszukiwania — im mniejszy tym dokładniej). | Udzielenie przemyślanej odpowiedzi nie jest zagadnieniem łatwym, ponieważ wielkość przeszukiwanego obszaru ma, intuicyjnie, wpływ, z jednej strony na szybkość znalezienia ekstremum mierzoną ilością sprawdzanych obszarów (im większy tym szybciej), a z drugiej na dokładność Algorytmu (przy ograniczonych możliwościach przeszukiwania — im mniejszy tym dokładniej). | ||
Linia 44: | Linia 44: | ||
|width="500px" valign="top"|[[Grafika:MO_M5_Slajd7.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:MO_M5_Slajd7.png|thumb|500px]] | ||
|valign="top"|Algorytm może być: | |valign="top"|Algorytm może być: | ||
*'''ostrożny''' (wiem, że schody opadają w prawo, schodzę w prawo jeden stopień) i przyjąć <math>x^{M(k)}</math> za środek nowego otoczenia | *'''ostrożny''' (wiem, że schody opadają w prawo, schodzę w prawo jeden stopień) i przyjąć <math>x^{\mathrm {M}(k)}</math> za środek nowego otoczenia<br><math>x^{(k+1)}=x^{\mathrm{M}(k)}=\alpha (x^{\mathrm{M}(k)}-x^{(k)})+x^{(k)}, \alpha=1</math>, | ||
<math>x^{(k+1)}=x^{M(k)}=\alpha (x^{M(k)}-x^{(k)})+x^{(k)}, \alpha=1</math> | |||
a następnie przeszukiwać je tak jak poprzednio. | a następnie przeszukiwać je tak jak poprzednio. | ||
Linia 55: | Linia 53: | ||
|width="500px" valign="top"|[[Grafika:MO_M5_Slajd8.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:MO_M5_Slajd8.png|thumb|500px]] | ||
|valign="top"|Algorytm może być też: | |valign="top"|Algorytm może być też: | ||
*'''odważny''' (wiem, że schody opadają w prawo, skaczę kilka stopni w prawo) i przesunąć środek kuli poszukiwań wzdłuż kierunku wyznaczonego przez różnicę wektorów <math>x^{M(k)}-x^{k}=d</math> , tzn. ustalić środek nowej kuli w punkcie | *'''odważny''' (wiem, że schody opadają w prawo, skaczę kilka stopni w prawo) i przesunąć środek kuli poszukiwań wzdłuż kierunku wyznaczonego przez różnicę wektorów <math>x^{\mathrm{M}(k)}-x^{(k)}=d</math> , tzn. ustalić środek nowej kuli w punkcie<br><math>x^{\mathrm{M}(k)}=\alpha (x^{\mathrm{M}(k)}-x^{(k)})+x^{(k)}, \alpha>1</math>. | ||
<math>x^{M(k)}=\alpha (x^{M(k)}-x^(k))+x^{(k)}, \alpha>1</math>. | |||
|} | |} | ||
---- | ---- | ||
Linia 69: | Linia 66: | ||
|width="500px" valign="top"|[[Grafika:MO_M5_Slajd10.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:MO_M5_Slajd10.png|thumb|500px]] | ||
|valign="top"|Większość algorytmów deterministycznych poszła w zapomnienie, ale do dzisiaj jest używany algorytm wymyślony przez: | |valign="top"|Większość algorytmów deterministycznych poszła w zapomnienie, ale do dzisiaj jest używany algorytm wymyślony przez: | ||
J. A. Neldera i R. Meada i opublikowany w 1965 r. | <center>J. A. Neldera i R. Meada i opublikowany w 1965 r.</center> | ||
|} | |} | ||
Linia 89: | Linia 86: | ||
|width="500px" valign="top"|[[Grafika:MO_M5_Slajd13.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:MO_M5_Slajd13.png|thumb|500px]] | ||
|valign="top"|Metody oparte na takim rozumowaniu od połowy lat dziewięćdziesiątych XX w nazywa się: | |valign="top"|Metody oparte na takim rozumowaniu od połowy lat dziewięćdziesiątych XX w nazywa się: | ||
'''Metodami obszaru zaufania''' | <center>'''Metodami obszaru zaufania'''<br>'''(Trust region methods)'''</center> | ||
'''(Trust region methods)''' | |||
|} | |} | ||
Linia 98: | Linia 93: | ||
{| border="0" cellpadding="4" width="125%" | {| border="0" cellpadding="4" width="125%" | ||
|width="500px" valign="top"|[[Grafika:MO_M5_Slajd14.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:MO_M5_Slajd14.png|thumb|500px]] | ||
|valign="top"|Przyjmujemy zatem, że dookoła punktu bieżącego <math>x^{(k)}</math> została określona kula <math>\mathbb{K}\ (x, r)</math> i '''funkcja''' <math>x \mapsto f_M(x)</math> '''będąca modelem zachowania się funkcji wyboru''' <math>f</math> '''w tej kuli''', modelem dużo prostszym w analizie niż funkcja oryginalna. Do określenia modelu możemy posłużyć się intuicją opartą na rozważaniach punktu drugiego, co jak pamiętamy przekłada się na przeświadczenie, że funkcja celu dobrze daje się przybliżyć funkcją kwadratową | |valign="top"|Przyjmujemy zatem, że dookoła punktu bieżącego <math>x^{(k)}</math> została określona kula <math>\mathbb{K}\ (x, r)</math> i '''funkcja''' <math>\boldsymbol{x \mapsto f_M(x)}</math> '''będąca modelem zachowania się funkcji wyboru''' <math>\boldsymbol{f}</math> '''w tej kuli''', modelem dużo prostszym w analizie niż funkcja oryginalna. Do określenia modelu możemy posłużyć się intuicją opartą na rozważaniach punktu drugiego, co jak pamiętamy przekłada się na przeświadczenie, że funkcja celu dobrze daje się przybliżyć funkcją kwadratową<center><math>x \mapsto x^TQx+c^Tx+\sigma \quad</math> '''(APR)'''</center> | ||
<math>x \mapsto x^TQx+c^Tx+\sigma</math> | |||
|} | |} | ||
---- | ---- | ||
Linia 106: | Linia 99: | ||
{| border="0" cellpadding="4" width="125%" | {| border="0" cellpadding="4" width="125%" | ||
|width="500px" valign="top"|[[Grafika:MO_M5_Slajd15.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:MO_M5_Slajd15.png|thumb|500px]] | ||
|valign="top"|W takiej sytuacji przeszukanie otoczenia może oznaczać tylko jedno — '''szukanie punktu''' <math>x^{M(k)}</math>, '''minimalizującego funkcję modelującą na kuli'''. | |valign="top"|W takiej sytuacji przeszukanie otoczenia może oznaczać tylko jedno — '''szukanie punktu''' <math>x^{\mathrm{M}(k)}</math>, '''minimalizującego funkcję modelującą na kuli'''.<br>Punkt ten oczywiście będzie się '''różnił''' od rzeczywistego minimum funkcji celu <math>f</math> na kuli zaufania, ale mamy nadzieję, że '''niewiele''', a co ważniejsze będzie spełniona nierówność<center><math>f(x^{\mathrm{M}(k)})<f(x^{k-1})</math></center>oznaczająca, że funkcja celu z kroku na krok maleje. | ||
Punkt ten oczywiście będzie się '''różnił''' od rzeczywistego minimum funkcji celu <math>f</math> na kuli zaufania, ale mamy nadzieję, że '''niewiele''', a co ważniejsze będzie spełniona nierówność | |||
<math>f(x^{M(k)})<f(x^{k-1})</math> | |||
oznaczająca, że funkcja celu z kroku na krok maleje. | |||
|} | |} | ||
Linia 116: | Linia 106: | ||
{| border="0" cellpadding="4" width="125%" | {| border="0" cellpadding="4" width="125%" | ||
|width="500px" valign="top"|[[Grafika:MO_M5_Slajd16.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:MO_M5_Slajd16.png|thumb|500px]] | ||
|valign="top"|Ponieważ punkt <math>x^{M(k)}</math> został wygenerowany w oparciu o model, to gdy kula jest za duża, może nie być właściwy — wartość funkcji celu może być w nim większa niż w punkcie centralnym kuli. Oznacza to, że w stosowny sposób '''trzeba dostosowywać promień kuli''' do zmienności funkcji celu. Zauważmy też, że przy takim podejściu, aby znaleźć rozwiązanie zadania optymalizacji bez ograniczeń trzeba rozwiązywać wielokrotnie zadanie z ograniczeniami ale z prostą funkcją wyboru — kwadratową funkcją aproksymującą. | |valign="top"|Ponieważ punkt <math>x^{\mathrm{M}(k)}</math> został wygenerowany w oparciu o model, to gdy kula jest za duża, może nie być właściwy — wartość funkcji celu może być w nim większa niż w punkcie centralnym kuli. Oznacza to, że w stosowny sposób '''trzeba dostosowywać promień kuli''' do zmienności funkcji celu. Zauważmy też, że przy takim podejściu, aby znaleźć rozwiązanie zadania optymalizacji bez ograniczeń trzeba rozwiązywać wielokrotnie zadanie z ograniczeniami ale z prostą funkcją wyboru — kwadratową funkcją aproksymującą. | ||
|} | |} | ||
---- | ---- | ||
Linia 122: | Linia 112: | ||
{| border="0" cellpadding="4" width="125%" | {| border="0" cellpadding="4" width="125%" | ||
|width="500px" valign="top"|[[Grafika:MO_M5_Slajd17.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:MO_M5_Slajd17.png|thumb|500px]] | ||
|valign="top"|W świetle ostatniej uwagi jest oczywiste, że algorytmy wykorzystujące omawiane podejście mogły liczyć na sukces dopiero w momencie, kiedy opracowano efektywne algorytmy rozwiązywania występujących w nich zadań | |valign="top"|W świetle ostatniej uwagi jest oczywiste, że algorytmy wykorzystujące omawiane podejście mogły liczyć na sukces dopiero w momencie, kiedy opracowano efektywne algorytmy rozwiązywania występujących w nich zadań<center><math>f_M(x)=x^{\mathrm T}Qx+c^{\mathrmT}x+\sigma \rightarrow</math> min <br> p.o. <math>(x-x^{(k)})^{\mathrm{T}}(x-x^{(k)})\le r^2</math>,</center> co nastąpiło w połowie lat siedemdziesiątych ubiegłego wieku. | ||
<math>f_M(x)=x^ | |||
p.o. <math>(x-x^{(k)})^T(x-x^(k))\le r^2</math>, | |||
co nastąpiło w połowie lat siedemdziesiątych ubiegłego wieku. | |||
|} | |} | ||
---- | ---- | ||
Linia 136: | Linia 120: | ||
|valign="top"|'''Podstawowy algorytm obszaru zaufania''' | |valign="top"|'''Podstawowy algorytm obszaru zaufania''' | ||
Inicjalizacja | <u>Inicjalizacja</u> | ||
Wybierz punkt początkowy <math>x^{(0)}</math>. | <br>Wybierz punkt początkowy <math>x^{(0)}</math>. | ||
Ustal początkowy obszar zaufania <math>T(x^{(0)})</math>. | <br>Ustal początkowy obszar zaufania <math>T(x^{(0)})</math>. | ||
Podstaw <math>k := 0</math>. | <br>Podstaw <math>k := 0</math>. | ||
Kroki algorytmu | <u>Kroki algorytmu</u> | ||
#Dla punktu <math>x^{(k)}</math> wyznacz model <math>f_M(\cdot; x^{(k)})</math> funkcji celu w jego otoczeniu. | #Dla punktu <math>x^{(k)}</math> wyznacz model <math>f_M(\cdot; x^{(k)})</math> funkcji celu w jego otoczeniu. | ||
#Znajdź przybliżenie <math>\tilde{x}^{(k)}</math> punktu <math>x^{M(k)}</math> = arg min<math>_{x\epsilon T(x^{(k)})}f_M(x;x^{(k)})</math>. | #Znajdź przybliżenie <math>\tilde{x}^{(k)}</math> punktu <br><math>x^{\mathrm{M}(k)}</math> = arg min<math>_{x\epsilon T(x^{(k)})}f_M(x;x^{(k)})</math>. | ||
#Sprawdź czy wielkość obszaru zaufania została wybrana właściwie. Jeżeli tak, podstaw <math>x^{(k)} :=\tilde x^{(k)}</math> , idź do 5. W przeciwnym przypadku idź do 4. | #Sprawdź czy wielkość obszaru zaufania została wybrana właściwie. Jeżeli tak, podstaw <math>x^{(k)} :=\tilde x^{(k)}</math> , idź do 5. W przeciwnym przypadku idź do 4. | ||
#Zmniejsz obszar zaufania do <math>TS</math>, podstaw <math>T(x^{(k)}) := TS</math>, idź do 2. | #Zmniejsz obszar zaufania do <math>TS</math>, podstaw <math>T(x^{(k)}) := TS</math>, idź do 2. | ||
Linia 169: | Linia 153: | ||
{| border="0" cellpadding="4" width="125%" | {| border="0" cellpadding="4" width="125%" | ||
|width="500px" valign="top"|[[Grafika:MO_M5_Slajd21.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:MO_M5_Slajd21.png|thumb|500px]] | ||
|valign="top"|Ciąg prostszych zadań daje ciąg rozwiązań {<math> x^{(k)}</math>}<math>_{k = 0}^\infty}</math> Naturalne pytanie które postawiliśmy, to kiedy go uciąć – '''które <math>k</math> uznać za ostatnie''', dające rozwiązanie z dostateczną dokładnością. Był to zasygnalizowany problem testu stopu. Związane z tym problemem jest pytanie drugie – '''czy wygenerowany ciąg''' w ogóle '''jest zbieżny''', a gdy jest, to '''czy jego granica jest rozwiązaniem zadania optymalizacji ?''' Jest to pytanie teoretyczne i odpowiemy na nie po konkretyzacji algorytmu w wykładzie siódmym. | |valign="top"|Ciąg prostszych zadań daje ciąg rozwiązań {<math>x^{(k)}</math>}<math>_{k = 0}^\infty}</math> Naturalne pytanie które postawiliśmy, to kiedy go uciąć – '''które <math>k</math> uznać za ostatnie''', dające rozwiązanie z dostateczną dokładnością. Był to zasygnalizowany problem testu stopu. Związane z tym problemem jest pytanie drugie – '''czy wygenerowany ciąg''' w ogóle '''jest zbieżny''', a gdy jest, to '''czy jego granica jest rozwiązaniem zadania optymalizacji ?''' Jest to pytanie teoretyczne i odpowiemy na nie po konkretyzacji algorytmu w wykładzie siódmym. | ||
|} | |} | ||
---- | ---- | ||
Linia 176: | Linia 160: | ||
|width="500px" valign="top"|[[Grafika:MO_M5_Slajd22.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:MO_M5_Slajd22.png|thumb|500px]] | ||
|valign="top"|Tu oczywistym pomysłem jest wykorzystanie rozważań teoretycznych, pokazujących związek kierunku poprawy z gradientem (lemat 4.3). | |valign="top"|Tu oczywistym pomysłem jest wykorzystanie rozważań teoretycznych, pokazujących związek kierunku poprawy z gradientem (lemat 4.3). | ||
Algorytm będzie zatem wykorzystywał: | Algorytm będzie zatem wykorzystywał:<center>'''Metody kierunków poprawy'''</center> | ||
'''Metody kierunków poprawy''' | |||
|} | |} | ||
Linia 197: | Linia 179: | ||
{| border="0" cellpadding="4" width="125%" | {| border="0" cellpadding="4" width="125%" | ||
|width="500px" valign="top"|[[Grafika:MO_M5_Slajd25.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:MO_M5_Slajd25.png|thumb|500px]] | ||
|valign="top"|Zgodnie z określeniem poruszania się wzdłuż kierunku, znalezienie punktu <math>\bar{x} \in P(x^{(k)};d)\subset \mathbb{R}^n</math> jest równoważne ustaleniu pewnego <math>\bar{\alpha} \in \mathbb{R}</math>. Zatem '''zmieniając''' <math>\alpha</math> '''od zera do plus nieskończoności''' ruszamy się wzdłuż prostej <math>P(x^{(k)};d)</math> w kierunku malenia funkcji celu. Konkretną wartość <math>\bar{\alpha}</math> – '''długość kroku''' – możemy ustalić ''a priori''. Intuicyjnie nie jest to najlepszy sposób, bo żeby zabezpieczyć się przed zbytnim przeskoczeniem minimum funkcji celu na zbiorze <math>P(x^{(k)};d)</math> trzeba tą stałą długość kroku wybrać niewielką. Wobec tego można postępować tak: | |valign="top"|Zgodnie z określeniem poruszania się wzdłuż kierunku, znalezienie punktu <math>\bar{x} \in \mathrm P(x^{(k)};d)\subset \mathbb{R}^n</math> jest równoważne ustaleniu pewnego <math>\bar{\alpha} \in \mathbb{R}</math>. Zatem '''zmieniając''' <math>\alpha</math> '''od zera do plus nieskończoności''' ruszamy się wzdłuż prostej <math>\mathrm P(x^{(k)};d)</math> w kierunku malenia funkcji celu. Konkretną wartość <math>\bar{\alpha}</math> – '''długość kroku''' – możemy ustalić ''a priori''. Intuicyjnie nie jest to najlepszy sposób, bo żeby zabezpieczyć się przed zbytnim przeskoczeniem minimum funkcji celu na zbiorze <math>\mathrm P(x^{(k)};d)</math> trzeba tą stałą długość kroku wybrać niewielką. Wobec tego można postępować tak:<br> | ||
wybieramy duży krok początkowy <math>\alpha ^{(0)}</math>,<br> | |||
wybieramy duży krok początkowy <math>\alpha ^{(0)}</math>, | gdy <math>f(x^{(k)}+\alpha ^{(0)}d)<f(x^{(k)})</math> to <math>\alpha^{(0)}</math> uznajemy za długość kroku,<br>gdy przeciwnie – zmniejszamy <math>\alpha^{(0)}</math> do <math>\alpha^{(1)}</math>),<br>powtarzamy sprawdzenie czy wartość funkcji zmalała, itd. aż uzyskamy krok dający poprawę. | ||
gdy <math>f(x^{(k)}+\alpha ^{(0)}d)<f(x^{(k)})</math> | |||
gdy przeciwnie – zmniejszamy <math>\alpha^{(0)}</math> do <math>\alpha^{(1)}</math>), | |||
powtarzamy sprawdzenie czy wartość funkcji zmalała, itd. aż uzyskamy krok dający poprawę. | |||
|} | |} | ||
---- | ---- | ||
Linia 211: | Linia 187: | ||
{| border="0" cellpadding="4" width="125%" | {| border="0" cellpadding="4" width="125%" | ||
|width="500px" valign="top"|[[Grafika:MO_M5_Slajd26.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:MO_M5_Slajd26.png|thumb|500px]] | ||
|valign="top"|Dokonujemy, jak mówimy '''minimalizacji w kierunku'''. Formułując to zadanie przybliżonej minimalizacji funkcji jednej zmiennej <math>\alpha</math> (<math>x^{(k)}</math> i <math>d</math> są ustalone!) wykorzystaliśmy fakt, że zbiór dopuszczalny <math>P(x^{(k)};d)</math> jest określony jednym ograniczeniem równościowym. | |valign="top"|Dokonujemy, jak mówimy '''minimalizacji w kierunku'''. Formułując to zadanie przybliżonej minimalizacji funkcji jednej zmiennej <math>\alpha</math> (<math>x^{(k)}</math> i <math>d</math> są ustalone!) wykorzystaliśmy fakt, że zbiór dopuszczalny <math>\mathrm P(x^{(k)};d)</math> jest określony jednym ograniczeniem równościowym. | ||
Wprawdzie wiemy, że „ruszanie się” wzdłuż kierunku poprawy nie musi doprowadzić do minimum globalnego, ale na pewno poprawi wartość funkcji celu. O ile poprawi ? – Może poprawić bardzo niewiele, ale tak jak przy ustalaniu podstaw poprzednich metod, zgodnie z naszym podejściem optymistycznym, uważamy że ta poprawa będzie istotna. Jak pamiętamy przekonanie to ma podstawy formalne, ponieważ rozważania teoretyczne sugerują, że „porządne” funkcje są lokalnie wypukłe, a co za tym idzie nie powinno być kłopotów ze znalezieniem punktu lepszego niż bieżący. Przy wymyślaniu kryterium stopu pomocny może być warunek stacjonarności gradientu wskazujący na możliwość konstrukcji kryterium stopu w oparciu o jakąś miarę „małości” gradientu. | Wprawdzie wiemy, że „ruszanie się” wzdłuż kierunku poprawy nie musi doprowadzić do minimum globalnego, ale na pewno poprawi wartość funkcji celu. O ile poprawi ? – Może poprawić bardzo niewiele, ale tak jak przy ustalaniu podstaw poprzednich metod, zgodnie z naszym podejściem optymistycznym, uważamy że ta poprawa będzie istotna. Jak pamiętamy przekonanie to ma podstawy formalne, ponieważ rozważania teoretyczne sugerują, że „porządne” funkcje są lokalnie wypukłe, a co za tym idzie nie powinno być kłopotów ze znalezieniem punktu lepszego niż bieżący. Przy wymyślaniu kryterium stopu pomocny może być warunek stacjonarności gradientu wskazujący na możliwość konstrukcji kryterium stopu w oparciu o jakąś miarę „małości” gradientu. | ||
Linia 235: | Linia 211: | ||
'''Podstawowy algorytm kierunków poprawy''' | '''Podstawowy algorytm kierunków poprawy''' | ||
Inicjalizacja | <u>Inicjalizacja</u> | ||
Wybierz punkt początkowy <math>x^{(0)}</math>. | <br>Wybierz punkt początkowy <math>x^{(0)}</math>. | ||
Podstaw <math>k := 0</math>. | <br>Podstaw <math>k := 0</math>. | ||
Kroki algorytmu | <u>Kroki algorytmu</u> | ||
#Dla punktu <math>x^{(k)}</math> wyznacz kierunek poprawy <math>d^{(k)}</math>. | #Dla punktu <math>x^{(k)}</math> wyznacz kierunek poprawy <math>d^{(k)}</math>. | ||
Linia 282: | Linia 258: | ||
|valign="top"| | |valign="top"| | ||
*'''Zbieżność skończona''', która ma miejsce wtedy gdy istnieje taka liczba <math>K</math> dla której <math>x^{(K)} = x^o</math>. Z punktu widzenia znajdowania rozwiązań zadań optymalizacji wydaje się, że to najlepszy rodzaj zbieżności. Taki rodzaj zbieżności ma algorytm SIMPLEX rozwiązywania zadań liniowych. Jednak jak pamiętamy, liczba iteracji może być bardzo duża, co oznacza, że na rozwiązanie zadania trzeba bardzo długo czekać. Metody punktu wewnętrznego nie mają skończonej zbieżności jednak dają zadowalające przybliżenie rozwiązania dużo szybciej. Dlatego wciąż trwają poszukiwania coraz bardziej skutecznych metod tego typu. A wniosek ogólny – z praktycznego punktu widzenia zbieżność skończona z bardzo dużym <math>K</math> może być gorsza niż zbieżność nieskończona, w sytuacji w której ciąg szybko zmierza do niewielkiego otoczenia rozwiązania. | *'''Zbieżność skończona''', która ma miejsce wtedy gdy istnieje taka liczba <math>K</math> dla której <math>x^{(K)} = x^o</math>. Z punktu widzenia znajdowania rozwiązań zadań optymalizacji wydaje się, że to najlepszy rodzaj zbieżności. Taki rodzaj zbieżności ma algorytm SIMPLEX rozwiązywania zadań liniowych. Jednak jak pamiętamy, liczba iteracji może być bardzo duża, co oznacza, że na rozwiązanie zadania trzeba bardzo długo czekać. Metody punktu wewnętrznego nie mają skończonej zbieżności jednak dają zadowalające przybliżenie rozwiązania dużo szybciej. Dlatego wciąż trwają poszukiwania coraz bardziej skutecznych metod tego typu. A wniosek ogólny – z praktycznego punktu widzenia zbieżność skończona z bardzo dużym <math>K</math> może być gorsza niż zbieżność nieskończona, w sytuacji w której ciąg szybko zmierza do niewielkiego otoczenia rozwiązania. | ||
*Znana Państwu z analizy matematycznej '''zbieżność wektorowego ciągu nieskończonego''', zwana jest w teorii metod optymalizacji krótko '''zbieżnością''' (nieskończoną). Jest ona rozumiana dwojako: jako '''zbieżność do rozwiązania''' <math>x^o</math>, albo dla funkcji gładkich – '''zbieżność do punktu stacjonarnego gradientu''', tzn. takiego wektora <math>\hat{x}</math>, że <math>\nabla f (\hat{x})=0</math>. Jak pamiętamy punkt <math>\hat{x}</math> może być punktem lokalnego minimum, maksimum albo lokalne zachowanie funkcji w różnych kierunkach może być różne, np. może to być punkt siodłowy albo punkt przegięcia. Ten ostatni przypadek pokazuje rysunek na następnej stronie. | *Znana Państwu z analizy matematycznej '''zbieżność wektorowego ciągu nieskończonego''', zwana jest w teorii metod optymalizacji krótko '''zbieżnością''' (nieskończoną). Jest ona rozumiana dwojako: jako '''zbieżność do rozwiązania''' <math>\boldsymbol{x^o}</math>, albo dla funkcji gładkich – '''zbieżność do punktu stacjonarnego gradientu''', tzn. takiego wektora <math>\boldsymbol{\hat{x}}</math>, że <center><math>\nabla f (\hat{x})=0</math>.</center> Jak pamiętamy punkt <math>\hat{x}</math> może być punktem lokalnego minimum, maksimum albo lokalne zachowanie funkcji w różnych kierunkach może być różne, np. może to być punkt siodłowy albo punkt przegięcia. Ten ostatni przypadek pokazuje rysunek na następnej stronie. | ||
*Dlatego w niektórych wypadkach twórcom algorytmów udaje się udowodnić własność jeszcze słabszą: '''ciąg''' wektorów generowany przez algorytm '''zawiera podciąg zbieżny'''. Akceptacja zbieżności tego rodzaju po pokazaniu na przykładach, że algorytm w rozsądnej liczbie kroków (iteracji) znajduje dobre przybliżenie rozwiązania mieści się w przyjętym “optymistycznym” podejściu do analizy sytuacji. | *Dlatego w niektórych wypadkach twórcom algorytmów udaje się udowodnić własność jeszcze słabszą: '''ciąg''' wektorów generowany przez algorytm '''zawiera podciąg zbieżny'''. Akceptacja zbieżności tego rodzaju po pokazaniu na przykładach, że algorytm w rozsądnej liczbie kroków (iteracji) znajduje dobre przybliżenie rozwiązania mieści się w przyjętym “optymistycznym” podejściu do analizy sytuacji. | ||
Linia 305: | Linia 281: | ||
a) '''liniowo''', gdy dodatkowo | a) '''liniowo''', gdy dodatkowo | ||
lim<math>_{k\rightarrow\infty}\frac{||x^{(k+1)}-x^o||}{||x^{(k)}-x^o||} = \rho > 0</math>, | '''lim'''<math>\boldsymbol{_{k\rightarrow\infty}\frac{||x^{(k+1)}-x^o||}{||x^{(k)}-x^o||} = \rho > 0}</math>, | ||
b) '''superliniowo''', gdy dodatkowo | b) '''superliniowo''', gdy dodatkowo | ||
lim<math>_{k\rightarrow\infty}\frac{||x^{(k+1)}-x^o||}{||x^{(k)}-x^o||} = 0</math>, | '''lim'''<math>\boldsymbol{_{k\rightarrow\infty}\frac{||x^{(k+1)}-x^o||}{||x^{(k)}-x^o||} = 0}</math>, | ||
c) '''kwadratowo''', gdy dodatkowo | c) '''kwadratowo''', gdy dodatkowo | ||
lim<math>_{k\rightarrow\infty}\frac{||x^{(k+1)}-x^o||}{||x^{(k)}-x^o||^2}\ = \rho \geq 0</math>. | '''lim'''<math>\boldsymbol{_{k\rightarrow\infty}\frac{||x^{(k+1)}-x^o||}{||x^{(k)}-x^o||^2}\ = \rho \geq 0}</math>. | ||
Definicje szybkości związane są z szybkością zbiegania do zera: | Definicje szybkości związane są z szybkością zbiegania do zera: | ||
Linia 335: | Linia 311: | ||
|width="500px" valign="top"|[[Grafika:MO_M5_Slajd38.png|thumb|500px]] | |width="500px" valign="top"|[[Grafika:MO_M5_Slajd38.png|thumb|500px]] | ||
|valign="top"|Na rysunku przedstawiono w skali logarytmicznej siedem pierwszych wyrazów wymienionych wyżej ciągów. | |valign="top"|Na rysunku przedstawiono w skali logarytmicznej siedem pierwszych wyrazów wymienionych wyżej ciągów. | ||
Widać że '''zbieżność liniowa jest najwolniejsza''', a '''kwadratowa - najszybsza'''. Różne eksperymenty pokazały, że w zastosowaniach praktycznych '''szybkość liniowa''' jest '''do zaakceptowania gdy granica <math>\rho </math>''' jest dostatecznie mała, '''nie większa niż <math>\frac{1}{4}</math>'''. | Widać że '''zbieżność liniowa jest najwolniejsza''', a '''kwadratowa - najszybsza'''. Różne eksperymenty pokazały, że w zastosowaniach praktycznych '''szybkość liniowa''' jest '''do zaakceptowania gdy granica <math>\rho</math>''' jest dostatecznie mała, '''nie większa niż <math>\boldsymbol{\frac{1}{4}}</math>'''. | ||
|} | |} |
Aktualna wersja na dzień 10:34, 5 wrz 2023
![]() |
![]() |
![]() |
![]() |
![]() |
Algorytm może być:
a następnie przeszukiwać je tak jak poprzednio. |
![]() |
![]() |
Większość algorytmów deterministycznych poszła w zapomnienie, ale do dzisiaj jest używany algorytm wymyślony przez:
|
![]() |
Dla funkcji kwadratowej algorytm Neldera i Meada zachowuje się bardzo ładnie. |
![]() |
Metody oparte na takim rozumowaniu od połowy lat dziewięćdziesiątych XX w nazywa się:
(Trust region methods) |
![]() |
![]() |
![]() |
Tu oczywistym pomysłem jest wykorzystanie rozważań teoretycznych, pokazujących związek kierunku poprawy z gradientem (lemat 4.3).
Algorytm będzie zatem wykorzystywał: |
![]() |
![]() |
![]() |
![]() |
Teraz zauważmy tylko, że test stopu powinien zawierać dwa warunki: jeden badający “optymalność” kolejnego punktu, a drugi określający maksymalną liczbę iteracji. |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |