Metody Optymalizacji Laboratorium Nr 3 Iteracyjne metody
Transkrypt
Metody Optymalizacji Laboratorium Nr 3 Iteracyjne metody
Laboratorium Metod Optymalizacji 2016 Metody Optymalizacji Laboratorium Nr 3 Iteracyjne metody minimalizacji funkcji jednej zmiennej 1. Zamodelować w Simulinku układ regulacji z regulatorem typu I (o wzmocnieniu 𝑘𝐼 ) i obiektem inercyjnym drugiego rzędu o parametrach k = 0,1 oraz T1 = 10s, T2 = (10+numer_grupy)s. Za wymuszenie przyjąć skok jednostkowy. Używając bloku ToWorkspace, wyprowadzić do przestrzeni roboczej sygnał całki z kwadratu uchybu regulacji. Napisać funkcję w postaci: function J = symulacja(kI) przeprowadzającą symulację zamodelowanego układu regulacji z horyzontem Tsim = 100s, zwracającą do parametru J wartość wyprowadzonego wskaźnika jakości regulacji. Przyjąć następujący zakres wartości kI: 𝑘𝐼 ∈ [0.1, 2] Narysować wykres F = J(kI) zależności zmiany wartości całki z kwadratu uchybu względem wzmocnienia regulatora kI. Dobrać wartość wzmocnienia kI minimalizując wyprowadzony wskaźnik regulacji. Obliczenia przeprowadzić metodą: a) dychotomii dla 𝜀 = 0,05; 𝛿 = 0,01 (dla grupy 1, 3, 5, 6, 8), b) złotego podziału dla 𝜀 = 0,05 (dla grupy 1, 2, 4, 5, 7, 8), c) Fibonacciego dla 𝜀 = 0,05 (dla grupy 2, 3, 4, 6, 7). Porównać wyniki uzyskane metodami iteracyjnymi z funkcją fminsearch. 2. Napisać funkcję w postaci: function [x, y, i] = bisekcja(sys, a, b, dokladnosc), wyznaczającą ekstremum funkcji na zadanym przedziale. Funkcja bisekcja przyjmuje cztery parametry: sys – funkcja f(x), gdzie: 1 2 a) 𝑓1 (𝑥) = ( ) − sin(0,1𝑥) 𝑑𝑙𝑎 𝑥 𝑥 ∈< −6, −1,5 > (dla grupy 1, 3, 5, 6, 8), 𝑥 ∈< −30, −5 > (dla grupy 1, 2, 4, 5, 7, 8), 𝑥 ∈< 11, 20 > (dla grupy 2, 3, 4, 6, 7), Opracował: Łukasz Kuczkowski, Krzysztof Jaroś Strona 1 Laboratorium Metod Optymalizacji 2016 b) 𝑓2 (𝑥) = sin(𝑒 𝑥 ) 𝑑𝑙𝑎 𝑥 ∈< −1, 1 > (dla grupy 1, 3, 5, 6, 8), 𝑥 ∈< 1, 2 > (dla grupy 1, 2, 4, 5, 7, 8), 𝑥 ∈< −1,6, 2,3 > (dla grupy 2, 3, 4, 6, 7), c) 𝑓3 (𝑥) = 𝑥𝑠𝑖𝑛(𝑥)cos(𝑥) − 40 𝑑𝑙𝑎 𝑥 ∈< 0,1, 2 > (dla grupy 1, 3, 5, 6, 8), 𝑥 ∈< 1,5, 3,5 > (dla grupy 1, 2, 4, 5, 7, 8), 𝑥 ∈< 3, 5,3 > (dla grupy 2, 3, 4, 6, 7), a – dolna granica przedziału, b – górna granica przedziału, dokladnosc – dokładność przy jakiej algorytm kończy pracę. Funkcja bisekcja zwraca rozwiązanie osiągnięte metodą bisekcji x, y = f(x) oraz liczbę iteracji i. Stworzyć analogiczne funkcje o tych samych parametrach dla metody siecznych i Newtona-Raphsona. Porównać działanie metod dla tych samych wartości wejściowych. Narysować wykres zależności dokładności od liczby iteracji. Porównać otrzymane wyniki z funkcją fzero. 3. Zmodyfikować funkcję z zadania 2 tak, aby dodatkowym parametrem wejściowym była liczba iteracji: function [x, y, dokladnosc] = bisekcja(sys, a, b, i) Porównać otrzymane wyniki dla kilku dowolnie wybranych liczb iteracji. Sprawozdanie powinno zawierać: Zadanie 1: Model w Simulinku z widocznymi parametrami poszczególnych elementów. Treść m-pliku ze zdefiniowaną funkcją celu J = symulacja(ki). Wykres funkcji F = J(kI) w podanym przedziale. Treść m-pliku minimalizującego funkcję J podaną metodą. Porównanie wyników uzyskanych za pomocą metody iteracyjnej i funkcji fminsearch. Wnioski i spostrzeżenia. Zadanie 2: Treść m-plików dla każdej z metod. Wykresy zależności liczby iteracji od dokładności. Porównanie metod. Wnioski i spostrzeżenia. Zadanie 3: Treść m-plików dla każdej z metod. Wykresy zależności dokładności od liczby iteracji. Porównanie metod. Opracował: Łukasz Kuczkowski, Krzysztof Jaroś Strona 2 Laboratorium Metod Optymalizacji 2016 Wnioski i spostrzeżenia. Pomoc: Zadanie 1: W parametrach okna To Workspace ustawić wartość Save format na Array. Zmienić parametry symulacji modelu. Otworzyć: Simulation/Model Configuration Parameters. Zmienić Solver options: Type na Fixed-step, Solver na ode5 oraz Fixed-step size na 1. Do zmiany parametrów bloku I można wykorzystać polecenie set_param. Funkcja num2str pozawala na zmianę liczby na ciąg znaków. Do przeprowadzenia symulacji z poziomu m-pliku wykorzystać polecenie sim z parametrami ‘StopTime’, ‘100’. Po przeprowadzeniu symulacji przy użyciu polecenia sim wartości zwrócone przez blok To Workspace zostaną zapisane do obiektu klasy SimulationOutput. Aby wydobyć wektor zwróconych wartości należy użyć operatora get na otrzymanym obiekcie np. simulation_output.get(‘simout’) gdzie: simulation_output – zmienna do której został zwrócony wynik symulacji; simout – nazwa zmiennej wpisanej w pole Variable name bloku To Workspace. Iteracyjne metody minimalizacji funkcji jednej zmiennej. Idea działania: Działanie iteracyjnych metod minimalizacji funkcji jednej zmiennej oparte jest na wyznaczaniu wartości funkcji celu w dwóch różnych punktach xL i xP takich, że xL < xP należących do przedziału poszukiwań [a,b]. Zakłada się, że funkcja w podanym przedziale jest unimodalna. Na podstawie tych wartości określa się położenie minimum: jeżeli f(xL) > f(xP) to minimum znajduje się w przedziale (xL,b), jeżeli f(xL) < f(xP) to minimum znajduje się w przedziale (a,xP), jeżeli f(xL) = f(xP) to minimum znajduje się w przedziale (xL, xP). Zasadnicza różnica w działaniu poszczególnych metod wynika ze sposobu wyboru punktów xL i xP. Metoda dychotomii: Wyznacza punkty xL i xP równo oddalone od środka przedziału: 𝑥𝐿 = (𝑎 + 𝑏) 𝛿 − 2 2 𝑥𝑃 = (𝑎 + 𝑏) 𝛿 + 2 2 następnie zawęża przedział zgodnie z regułami: jeżeli: 𝑓(𝑥𝐿 ) ≥ 𝑓 (𝑥𝑃 ) ⇒ 𝑎 = 𝑥𝐿 Opracował: Łukasz Kuczkowski, Krzysztof Jaroś Strona 3 Laboratorium Metod Optymalizacji 2016 jeżeli: 𝑓(𝑥𝐿 ) ≤ 𝑓 (𝑥𝑃 ) ⇒ 𝑏 = 𝑥𝑃 w analogiczny sposób funkcja kontynuuje działanie w nowym przedziale (a,b) do czasu, kiedy: (𝑏 − 𝑎) ≤ 𝜀 Metoda złotego podziału: Do wyznaczania punktów xL i xP wykorzystywana jest metoda złotego podziału odcinka. Punkty te w kolejnych iteracjach dobierane są tak, aby wykorzystywać obliczoną w poprzednim kroku wartość funkcji jednej z dwóch próbek f(xL) lub f(xP). W wyniku złotego podziału otrzymywane są dwa odcinki takie, że stosunek długości dłuższego z nich do krótszego jest taki sam jak całego odcinka do części dłuższej. Patrz również: http://pl.wikipedia.org/wiki/Z%C5%82oty_podzia%C5%82 http://pl.wikipedia.org/wiki/Metoda_z%C5%82otego_podzia%C5%82u W metodzie wyznacza się punkty xL i xP dzielące przedział w złotej proporcji takie, że: 𝑥𝐿 = 𝑏 − 𝑘 (𝑏 − 𝑎) 𝑥𝑃 = 𝑎 + 𝑘(𝑏 − 𝑎) Przedział zawęża się zgodnie z następującymi regułami: jeżeli: 𝑓 (𝑥𝐿 ) < 𝑓(𝑥𝑃 ) to: 𝑏 = 𝑥𝑃 𝑥𝑃 = 𝑥𝐿 𝑥𝐿 = 𝑏 − 𝑘(𝑏 − 𝑎) jeżeli: 𝑓 (𝑥𝐿 ) > 𝑓(𝑥𝑃 ) to: 𝑎 = 𝑥𝐿 𝑥𝐿 = 𝑥𝑃 𝑥𝑃 = 𝑎 + 𝑘(𝑏 − 𝑎) gdzie: 𝑘= √5 − 1 ≈ 0,61803398 2 Funkcja kontynuuje działanie w nowym przedziale (a,b) do czasu, kiedy: (𝑏 − 𝑎) ≤ 𝜀 Opracował: Łukasz Kuczkowski, Krzysztof Jaroś Strona 4 Laboratorium Metod Optymalizacji 2016 Metoda Fibonacciego: W metodzie liczb Fibonacciego proporcja zmniejszania się przedziału z iteracji na iterację zmienia się zależnie od stosunku kolejnych wartości ciągu Fibonacciego. Ciąg Fibonacciego jest to ciąg liczb naturalnych określony rekurencyjnie w następujący sposób: 0 { 𝐹𝑛 = 1 𝐹𝑛−1 + 𝐹𝑛−2 𝑑𝑙𝑎 𝑛 = 0; 𝑑𝑙𝑎 𝑛 = 1; 𝑑𝑙𝑎 𝑛 > 1. Wyrazy ciągu Fibonacciego można przedstawić jawnie w postaci: 𝑛 1 𝑛 1 + √5 1 − √5 (( 𝐹𝑛 = ) −( ) ) 2 2 √5 Patrz również: http://pl.wikipedia.org/wiki/Ci%C4%85g_Fibonacciego W pierwszym etapie działania algorytmu należy znaleźć takie n, dla którego spełniony jest warunek: 𝐹𝑛 ≥ (𝑏 − 𝑎) 𝜀 następnie wyznaczyć wartości xL i xP takie, że: jeżeli: 𝑥𝑃 = 𝑏 − 𝐹𝑛−1 (𝑏 − 𝑎) 𝐹𝑛 𝑥𝐿 = 𝑎 + 𝐹𝑛−1 (𝑏 − 𝑎) 𝐹𝑛 𝑓(𝑥𝑃 ) < 𝑓(𝑥𝐿 ) to: jeżeli: 𝑏 = 𝑥𝐿 𝑥𝐿 = 𝑥𝑃 𝑛=𝑛−1 𝐹𝑛−1 𝑥𝑃 = 𝑏 − (𝑏 − 𝑎) 𝐹𝑛 𝑓(𝑥𝑃 ) > 𝑓(𝑥𝐿 ) to: 𝑎 = 𝑥𝑃 𝑥𝑃 = 𝑥𝐿 𝑛=𝑛−1 𝐹𝑛−1 𝑥𝐿 = 𝑎 + (𝑏 − 𝑎) 𝐹𝑛 Funkcja kontynuuje działanie w nowym przedziale do czasu, kiedy: (𝑥𝐿 − 𝑥𝑃 ) > 𝜀 ∧ 𝑛 ≥ 2 Opracował: Łukasz Kuczkowski, Krzysztof Jaroś Strona 5 Laboratorium Metod Optymalizacji 2016 Zadanie 2 i 3: Do obliczenia pochodnych w Matlab można wykorzystać operacje symboliczne. Wymagają one definicji tzw. zmiennych symbolicznych np.: syms x Tak zdefiniowana zmienna jest abstrakcyjna i nie posiada wartości, pozwala jednak na definiowanie wyrażeń postaci: f = x^2 – 10*x + 5 Zdefiniowane równanie kwadratowe może zostać rozwiązane za pomocą funkcji solve: x0 = solve(f) Wynik: x0 = 2*5^(1/2) + 5 5 - 2*5^(1/2) Do przekształcenia wyrażeń symbolicznych w funkcje służy polecenie matlabFunction np.: f1 = matlabFunction(f) Wynik: f1 = @(x)x.*-1.0e1+x.^2+5.0 Tak przekształcone wyrażenie można wywołać z parametrem jak każdą funkcję Matlab np.: wartosc = f1(5) Wynik: wartosc = -20 Patrz również: http://www.igf.fuw.edu.pl/ZOI/Matlab/Lessons/MatlabII/Dzialy/D12M2.htm http://www.cs.utah.edu/~germain/PPS/Topics/Matlab/symbolic_math.html Dla funkcji z zadania 2 i 3 zdefiniować zmienną symboliczną x oraz utworzyć 3 funkcje symboliczne f1, f2, f3. Za pomocą polecenia diff obliczyć pochodne funkcji. Przekształcić pochodne w funkcje Opracował: Łukasz Kuczkowski, Krzysztof Jaroś Strona 6 Laboratorium Metod Optymalizacji 2016 Matlaba za pomocą polecenia matlabFunction. Uzyskane równania wykorzystać do napisania funkcji function [x, y, i] = bisekcja(sys, a, b, i). Metoda Bisekcji: Metoda służy do wyznaczania w sposób iteracyjny pierwiastka funkcji na przedziale < 𝑎, 𝑏 >. Metodę bisekcji można zastosować, jeśli funkcja jest ciągła i na krańcach przedziału posiada różne znaki. W takim przypadku na podstawie twierdzenia o wartości średniej: jeśli 𝑓(𝑥𝑎 ) < 0 < 𝑓(𝑥𝑏 ) lub 𝑓(𝑥𝑎 ) > 0 > 𝑓(𝑥𝑏 ), to istnieje taki punkt 𝑥0 , 𝑥𝑎 < 𝑥0 < 𝑥𝑏 , że 𝑓 (𝑥0 ) = 0. Twierdzenie to gwarantuje istnienie przynajmniej jednego pierwiastka w danym przedziale. Metoda bisekcji (połowienia, równego podziału) polega na dzieleniu przedziału argumentów na dwie równe części przez znalezienie punkt środkowego jako średniej arytmetycznej jego krańców. Algorytm działania: 1. Sprawdzenie, czy pierwiastkiem równania jest punkt 𝑥1 = 𝑎+𝑏 2 czyli czy 𝑓 (𝑥1 ) = 0. Jeżeli tak algorytm kończy działanie, a punkt 𝑥1 jest szukanym miejscem zerowym. 2. W przeciwnym razie, dopóki |𝑎 − 𝑏| > 𝜀 (gdzie: 𝜀 – żądana dokładność): a) Zgodnie ze wzorem z punktu pierwszego ponownie wyznaczane jest 𝑥1 , dzieląc przedział < 𝑎, 𝑏 > na dwa przedziały: < 𝑎, 𝑥1 >, < 𝑥1 , 𝑏 >. b) Wybierany jest przedział o znaku przeciwnym niż 𝑥1 i odpowiednio górny albo dolny kraniec przedziału (b albo a) przyjmuje wartość 𝑥1 , tj. 1. Jeżeli 𝑓(𝑥1 )𝑓 (𝑎) < 0 𝑡𝑜 𝑏 = 𝑥1 , 2. Jeżeli 𝑓(𝑥1 )𝑓 (𝑏) < 0 𝑡𝑜 𝑎 = 𝑥1 , 3. Po osiągnięciu żądanej dokładności algorytm kończy działanie, a szukany pierwiastek 𝑎+𝑏 równania wynosi 𝑥1 = . 2 Metoda Newtona-Raphsona (stycznych) Patrz: https://pl.wikipedia.org/wiki/Metoda_Newtona oraz wykład z Metod Optymalizacji Metoda Siecznych Patrz: https://pl.wikipedia.org/wiki/Metoda_siecznych oraz wykład z Metod Optymalizacji Dodatkowe materiały pomocnicze: Wykłady z Podstaw Optymalizacji i Wspomagania Decyzji oraz z Metod Optymalizacji. Opracował: Łukasz Kuczkowski, Krzysztof Jaroś Strona 7