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